diff --git a/DEPS b/DEPS index d0aa46e..23ce4fcc 100644 --- a/DEPS +++ b/DEPS
@@ -282,15 +282,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': '5f7e572995b1be230ef49d6c082e27d9a6b55592', + 'skia_revision': '7736fbaf84f06057637538449a2a62f442fff378', # 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': 'f28d354da1d29c02d3e1bbdd25bc6a0bd7a9b430', + 'v8_revision': 'fd29d37630914966ff447d57b897f32e5ebea8c6', # 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': '1a847d4a6e6afcfd77f02325b1071c0f6b2c6f60', + 'angle_revision': '9c376a02deade716a29d2a2c85393c28ed0ac578', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -333,7 +333,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': '9127c68f593d9509bc289518bf907c311425e694', + 'freetype_revision': '8fe50c2adca74a4eca1501c831251283b4cc6d9b', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling freetype # and whatever else without interference from each other. @@ -353,7 +353,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': '86fe6c71d698699d600b945e4fd00533fc557474', + 'catapult_revision': '3611b9c58ddd42ca418e057eb3ea4f44e7941b47', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling CrossBench # and whatever else without interference from each other. @@ -369,7 +369,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': 'cb217e0534b47df3dae269d522763acda882a493', + 'devtools_frontend_revision': 'b2bb3df6c93f8102cccb1eb86f5823c435c4d15a', # 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. @@ -409,7 +409,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': 'f494fd72057e685ef06687d4a1d8b0f8776753c4', + 'dawn_revision': 'a3a0b3299b6c0c6c54c2e3637fc80791f1fb379a', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -769,7 +769,7 @@ 'src/clank': { 'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' + - '7ed549f1204c166608faf327f145bffaddb2f682', + 'dbdb19ed5e143ef6a2831b3fb50404253ad9a3f1', 'condition': 'checkout_android and checkout_src_internal', }, @@ -868,7 +868,7 @@ 'packages': [ { 'package': 'chromium/rts/model/linux-amd64', - 'version': 'pK_Dv-oRMQY_driQ838EdYME-nua7rkDGBIiuVK3ANoC', + 'version': 'Ig2CwUlwBkICPY7DwtdWBMAibAVoWN9VzwMgn9wk9m8C', }, ], 'dep_type': 'cipd', @@ -879,7 +879,7 @@ 'packages': [ { 'package': 'chromium/rts/model/mac-amd64', - 'version': 'qlIqnaF50wmO_NDGzs4QOnpDKK-i0dzXe5BSSQnAigIC', + 'version': 'K9ZAgnmyEE30USYe2SK2xnBIvSuJvRPlMw7O_wiHiHgC', }, ], 'dep_type': 'cipd', @@ -890,7 +890,7 @@ 'packages': [ { 'package': 'chromium/rts/model/windows-amd64', - 'version': 'CxVQJy6cSGKToMBrSGgAX0aiP9uwukz-ZFLWXRHQRMoC', + 'version': 'x36-iYLaXE4ONPSClrrwGk7wNaDDl0ldymeNbblC7SkC', }, ], 'dep_type': 'cipd', @@ -958,7 +958,7 @@ 'packages': [ { 'package': 'chromium/third_party/androidx', - 'version': 'c8XCgnDa6lP6C1IcJKADz2cE9moc4Ohv4JGKUaWotKYC', + 'version': 'XXY63ZMXsEh9Q723ZYgW4JxYtzVhxNIoUxUwwjMSeBAC', }, ], 'condition': 'checkout_android', @@ -1161,7 +1161,7 @@ # Tools used when building Chrome for Chrome OS. This affects both the Simple # Chrome workflow, as well as the chromeos-chrome ebuild. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '99047eed72ba284c25761dbe376ef95284c5cb6a', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '2c7eceb1ede89381dc1a3957888d5b7c7a25d4c2', 'condition': 'checkout_chromeos', }, @@ -1199,7 +1199,7 @@ Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), 'src/third_party/devtools-frontend-internal': { - 'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + '638c52b317508afa51b144d177d5f737c871b0a2', + 'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + 'ceda81a139d3c0f7e768e2c393575c99f03df20f', 'condition': 'checkout_src_internal', }, @@ -1703,7 +1703,7 @@ 'packages': [ { 'package': 'chromium/third_party/r8', - 'version': '_FuL1VmaJnETpwNIaiuiSLxVNzzt0qXGmsfAck4CPCkC', + 'version': 'l_fNXfqk0MnMDwxEr_PymvAgsB3cvsXGv80UVJYawgMC', }, ], 'condition': 'checkout_android', @@ -1848,7 +1848,7 @@ Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '0d1ecc682f0ad9fbee323bbff72c0d2249728fe6', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '9dfb531f382d61f7e647b82373818034e3e79ad8', + Var('webrtc_git') + '/src.git' + '@' + 'edb9cf3de081106e3327a65c32fd0b3bb3c04998', # 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. @@ -1938,7 +1938,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': Var('chrome_git') + '/chrome/src-internal.git@896e5d4a368ade8355bda18be82ab8dff4b5b9c0', + 'url': Var('chrome_git') + '/chrome/src-internal.git@97d0780bd20fabcc1fea568fcdab9bfbea2c1301', 'condition': 'checkout_src_internal', }, @@ -1968,7 +1968,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/help_app/app', - 'version': 'yRGDYcuSNcPK4Namo1SN0RvgfJf0ETDE7KxTqGN6xxYC', + 'version': '7dysgYmbs7PhMBV6qzOHQ4YdiEgpCsJ1xRAdVoQfxWwC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -2001,7 +2001,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/projector_app/app', - 'version': 'F4LQWOHvrkLWzBrUu73BiRUx7ex4H3ScwfwTW-92hbEC', + 'version': 'MjbAzRlQTJ6Yr-yngqeW7xFRUO80Gvas4hKho1ojnj4C', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -2837,7 +2837,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/com_google_auto_value_auto_value_annotations', - 'version': 'version:2@1.9.cr1', + 'version': 'version:2@1.10.1.cr1', }, ], 'condition': 'checkout_android', @@ -2925,7 +2925,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations', - 'version': 'version:2@2.14.0.cr1', + 'version': 'version:2@2.18.0.cr1', }, ], 'condition': 'checkout_android', @@ -3134,7 +3134,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/com_google_guava_guava', - 'version': 'version:2@31.0.1-jre.cr1', + 'version': 'version:2@31.1-jre.cr1', }, ], 'condition': 'checkout_android', @@ -3405,11 +3405,11 @@ 'dep_type': 'cipd', }, - 'src/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on': { + 'src/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk18on': { 'packages': [ { - 'package': 'chromium/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on', - 'version': 'version:2@1.68.cr1', + 'package': 'chromium/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk18on', + 'version': 'version:2@1.72.cr1', }, ], 'condition': 'checkout_android', @@ -3640,7 +3640,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_ow2_asm_asm', - 'version': 'version:2@9.2.cr1', + 'version': 'version:2@9.5.cr1', }, ], 'condition': 'checkout_android', @@ -3651,7 +3651,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_ow2_asm_asm_analysis', - 'version': 'version:2@9.2.cr1', + 'version': 'version:2@9.5.cr1', }, ], 'condition': 'checkout_android', @@ -3662,7 +3662,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_ow2_asm_asm_commons', - 'version': 'version:2@9.2.cr1', + 'version': 'version:2@9.5.cr1', }, ], 'condition': 'checkout_android', @@ -3673,7 +3673,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_ow2_asm_asm_tree', - 'version': 'version:2@9.2.cr1', + 'version': 'version:2@9.5.cr1', }, ], 'condition': 'checkout_android', @@ -3684,7 +3684,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_ow2_asm_asm_util', - 'version': 'version:2@9.2.cr1', + 'version': 'version:2@9.5.cr1', }, ], 'condition': 'checkout_android', @@ -3706,7 +3706,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_robolectric_annotations', - 'version': 'version:2@4.8.1.cr1', + 'version': 'version:2@4.10.2.cr1', }, ], 'condition': 'checkout_android', @@ -3717,7 +3717,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_robolectric_junit', - 'version': 'version:2@4.8.1.cr1', + 'version': 'version:2@4.10.2.cr1', }, ], 'condition': 'checkout_android', @@ -3728,7 +3728,18 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_robolectric_nativeruntime', - 'version': 'version:2@4.8.1.cr1', + 'version': 'version:2@4.10.2.cr1', + }, + ], + 'condition': 'checkout_android', + 'dep_type': 'cipd', + }, + + 'src/third_party/android_deps/libs/org_robolectric_nativeruntime_dist_compat': { + 'packages': [ + { + 'package': 'chromium/third_party/android_deps/libs/org_robolectric_nativeruntime_dist_compat', + 'version': 'version:2@1.0.1.cr1', }, ], 'condition': 'checkout_android', @@ -3739,7 +3750,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_robolectric_pluginapi', - 'version': 'version:2@4.8.1.cr1', + 'version': 'version:2@4.10.2.cr1', }, ], 'condition': 'checkout_android', @@ -3750,7 +3761,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_robolectric_plugins_maven_dependency_resolver', - 'version': 'version:2@4.8.1.cr1', + 'version': 'version:2@4.10.2.cr1', }, ], 'condition': 'checkout_android', @@ -3761,7 +3772,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_robolectric_resources', - 'version': 'version:2@4.8.1.cr1', + 'version': 'version:2@4.10.2.cr1', }, ], 'condition': 'checkout_android', @@ -3772,7 +3783,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_robolectric_robolectric', - 'version': 'version:2@4.8.1.cr1', + 'version': 'version:2@4.10.2.cr1', }, ], 'condition': 'checkout_android', @@ -3783,7 +3794,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_robolectric_sandbox', - 'version': 'version:2@4.8.1.cr1', + 'version': 'version:2@4.10.2.cr1', }, ], 'condition': 'checkout_android', @@ -3794,7 +3805,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_robolectric_shadowapi', - 'version': 'version:2@4.8.1.cr1', + 'version': 'version:2@4.10.2.cr1', }, ], 'condition': 'checkout_android', @@ -3805,7 +3816,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_robolectric_shadows_framework', - 'version': 'version:2@4.8.1.cr1', + 'version': 'version:2@4.10.2.cr1', }, ], 'condition': 'checkout_android', @@ -3816,7 +3827,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_robolectric_shadows_playservices', - 'version': 'version:2@4.8.1.cr1', + 'version': 'version:2@4.10.2.cr1', }, ], 'condition': 'checkout_android', @@ -3827,7 +3838,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_robolectric_utils', - 'version': 'version:2@4.8.1.cr1', + 'version': 'version:2@4.10.2.cr1', }, ], 'condition': 'checkout_android', @@ -3838,7 +3849,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_robolectric_utils_reflector', - 'version': 'version:2@4.8.1.cr1', + 'version': 'version:2@4.10.2.cr1', }, ], 'condition': 'checkout_android',
diff --git a/android_webview/browser/enterprise_authentication_app_link_policy_handler.cc b/android_webview/browser/enterprise_authentication_app_link_policy_handler.cc index 9a1061d..dd5bf6b 100644 --- a/android_webview/browser/enterprise_authentication_app_link_policy_handler.cc +++ b/android_webview/browser/enterprise_authentication_app_link_policy_handler.cc
@@ -43,7 +43,7 @@ std::vector<std::string> invalid_policies; for (const auto& entry : value->GetList()) { - const std::string* url = entry.FindStringKey("url"); + const std::string* url = entry.GetDict().FindString("url"); if (!url) { invalid_policies.push_back( "Invalid policy: Required key 'url' does not exists"); @@ -70,7 +70,7 @@ base::Value::List filtered_values; for (const auto& entry : value->GetList()) { - const std::string* url = entry.FindStringKey("url"); + const std::string* url = entry.GetDict().FindString("url"); if (ValidatePolicyEntry(url)) filtered_values.Append(*url); }
diff --git a/android_webview/browser/metrics/aw_metrics_service_client.cc b/android_webview/browser/metrics/aw_metrics_service_client.cc index f3ce60e4..ab1473a 100644 --- a/android_webview/browser/metrics/aw_metrics_service_client.cc +++ b/android_webview/browser/metrics/aw_metrics_service_client.cc
@@ -176,8 +176,8 @@ PrefService* local_state = pref_service(); DCHECK(local_state); - local_state->Set(prefs::kMetricsAppPackageNameLoggingRule, - record.value().ToDictionary()); + local_state->SetDict(prefs::kMetricsAppPackageNameLoggingRule, + record.value().ToDictionary()); cached_package_name_record_ = record; package_name_record_status_ = AppPackageNameLoggingRuleStatus::kNewVersionLoaded; @@ -196,7 +196,7 @@ PrefService* local_state = pref_service(); DCHECK(local_state); cached_package_name_record_ = AppPackageNameLoggingRule::FromDictionary( - local_state->GetValue(prefs::kMetricsAppPackageNameLoggingRule)); + local_state->GetDict(prefs::kMetricsAppPackageNameLoggingRule)); if (cached_package_name_record_.has_value()) { package_name_record_status_ = AppPackageNameLoggingRuleStatus::kNotLoadedUseCache;
diff --git a/android_webview/browser/metrics/aw_metrics_service_client_unittest.cc b/android_webview/browser/metrics/aw_metrics_service_client_unittest.cc index 9b8ce34..0a309ba 100644 --- a/android_webview/browser/metrics/aw_metrics_service_client_unittest.cc +++ b/android_webview/browser/metrics/aw_metrics_service_client_unittest.cc
@@ -123,8 +123,8 @@ base::TimeDelta expiry_time = base::Days(1); AppPackageNameLoggingRule expected_record( base::Version(kTestAllowlistVersion), base::Time::Now() + expiry_time); - prefs->Set(prefs::kMetricsAppPackageNameLoggingRule, - expected_record.ToDictionary()); + prefs->SetDict(prefs::kMetricsAppPackageNameLoggingRule, + expected_record.ToDictionary()); absl::optional<AppPackageNameLoggingRule> cached_record = client->GetCachedAppPackageNameLoggingRule(); @@ -278,7 +278,8 @@ base::TimeDelta expiry_time = base::Days(1); AppPackageNameLoggingRule record(base::Version(kTestAllowlistVersion), base::Time::Now() + expiry_time); - prefs->Set(prefs::kMetricsAppPackageNameLoggingRule, record.ToDictionary()); + prefs->SetDict(prefs::kMetricsAppPackageNameLoggingRule, + record.ToDictionary()); client->SetAppPackageNameLoggingRule(record); EXPECT_TRUE(client->ShouldRecordPackageName());
diff --git a/android_webview/common/metrics/app_package_name_logging_rule.cc b/android_webview/common/metrics/app_package_name_logging_rule.cc index 448d72c26..c4f2c1b1 100644 --- a/android_webview/common/metrics/app_package_name_logging_rule.cc +++ b/android_webview/common/metrics/app_package_name_logging_rule.cc
@@ -48,8 +48,8 @@ // static absl::optional<AppPackageNameLoggingRule> -AppPackageNameLoggingRule::FromDictionary(const base::Value& dict) { - const std::string* version_string = dict.FindStringKey(kVersionKey); +AppPackageNameLoggingRule::FromDictionary(const base::Value::Dict& dict) { + const std::string* version_string = dict.FindString(kVersionKey); if (!version_string) { return absl::optional<AppPackageNameLoggingRule>(); } @@ -58,7 +58,7 @@ return absl::optional<AppPackageNameLoggingRule>(); } - const base::Value* expiry_date_value = dict.GetDict().Find(kExpiryDateKey); + const base::Value* expiry_date_value = dict.Find(kExpiryDateKey); if (!expiry_date_value) { return AppPackageNameLoggingRule(version, base::Time::Min()); } @@ -71,12 +71,12 @@ return AppPackageNameLoggingRule(version, expiry_date.value()); } -base::Value AppPackageNameLoggingRule::ToDictionary() { - base::Value dict(base::Value::Type::DICT); +base::Value::Dict AppPackageNameLoggingRule::ToDictionary() { + base::Value::Dict dict; - dict.SetStringKey(kVersionKey, version_.GetString()); + dict.Set(kVersionKey, version_.GetString()); if (!expiry_date_.is_min()) { - dict.SetKey(kExpiryDateKey, base::TimeToValue(expiry_date_)); + dict.Set(kExpiryDateKey, base::TimeToValue(expiry_date_)); } return dict; }
diff --git a/android_webview/common/metrics/app_package_name_logging_rule.h b/android_webview/common/metrics/app_package_name_logging_rule.h index ed4f097..900e7fe 100644 --- a/android_webview/common/metrics/app_package_name_logging_rule.h +++ b/android_webview/common/metrics/app_package_name_logging_rule.h
@@ -37,12 +37,12 @@ // If it has the same version and expiry_date as `record`. bool IsSameAs(const AppPackageNameLoggingRule& record) const; - base::Value ToDictionary(); + base::Value::Dict ToDictionary(); // Creates a valid AppPackageNameLoggingRule from a dictionary, or null if // the dictionary have invalid values. static absl::optional<AppPackageNameLoggingRule> FromDictionary( - const base::Value& dict); + const base::Value::Dict& dict); private: base::Version version_;
diff --git a/android_webview/common/metrics/app_package_name_logging_rule_unittests.cc b/android_webview/common/metrics/app_package_name_logging_rule_unittests.cc index e8d7bbe0..7886dbf 100644 --- a/android_webview/common/metrics/app_package_name_logging_rule_unittests.cc +++ b/android_webview/common/metrics/app_package_name_logging_rule_unittests.cc
@@ -50,8 +50,7 @@ { absl::optional<AppPackageNameLoggingRule> record = - AppPackageNameLoggingRule::FromDictionary( - base::Value(base::Value::Type::DICT)); + AppPackageNameLoggingRule::FromDictionary(base::Value::Dict()); EXPECT_FALSE(record.has_value()); } }
diff --git a/android_webview/java/src/org/chromium/android_webview/AwFeatureList.java b/android_webview/java/src/org/chromium/android_webview/AwFeatureList.java index 1ab663aa..331f725 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwFeatureList.java +++ b/android_webview/java/src/org/chromium/android_webview/AwFeatureList.java
@@ -8,13 +8,11 @@ import org.chromium.base.PackageUtils; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; /** * Java accessor for base/feature_list.h state. */ @JNINamespace("android_webview") -@MainDex public final class AwFeatureList { // Do not instantiate this class. private AwFeatureList() {}
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index 87576b0..75e70ad 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -291,6 +291,10 @@ "autotest_private_api_utils.cc", "bluetooth_devices_observer.cc", "bluetooth_devices_observer.h", + "booting/booting_animation_controller.cc", + "booting/booting_animation_controller.h", + "booting/booting_animation_view.cc", + "booting/booting_animation_view.h", "bubble/bubble_constants.h", "bubble/bubble_utils.cc", "bubble/bubble_utils.h", @@ -3606,6 +3610,7 @@ "//chromeos/ash/components/login/auth", "//chromeos/ash/components/login/auth:test_support", "//chromeos/ash/components/login/login_state", + "//chromeos/ash/components/login/login_state:test_support", "//chromeos/ash/components/network:test_support", "//chromeos/ash/components/phonehub:test_support", "//chromeos/ash/components/settings",
diff --git a/ash/accelerators/accelerator_commands.cc b/ash/accelerators/accelerator_commands.cc index b348620ba..e94da33 100644 --- a/ash/accelerators/accelerator_commands.cc +++ b/ash/accelerators/accelerator_commands.cc
@@ -509,7 +509,8 @@ } bool CanScreenshot(bool take_screenshot) { - // |TAKE_SCREENSHOT| is allowed when user session is blocked. + // |AcceleratorAction::kTakeScreenshot| is allowed when user session is + // blocked. return take_screenshot || !Shell::Get()->session_controller()->IsUserSessionBlocked(); } @@ -629,9 +630,9 @@ } void ActivateDeskAtIndex(AcceleratorAction action) { - DCHECK_GE(action, DESKS_ACTIVATE_0); - DCHECK_LE(action, DESKS_ACTIVATE_7); - const size_t target_index = action - DESKS_ACTIVATE_0; + DCHECK_GE(action, AcceleratorAction::kDesksActivate0); + DCHECK_LE(action, AcceleratorAction::kDesksActivate7); + const size_t target_index = action - AcceleratorAction::kDesksActivate0; auto* desks_controller = DesksController::Get(); // Only 1 desk animation can occur at a time so ignore this action if there's // an ongoing desk animation. @@ -1635,7 +1636,7 @@ Shell* shell = Shell::Get(); const bool in_tablet = shell->tablet_mode_controller()->InTabletMode(); const bool in_overview = shell->overview_controller()->InOverviewSession(); - if (action == WINDOW_CYCLE_SNAP_LEFT) { + if (action == AcceleratorAction::kWindowCycleSnapLeft) { if (in_tablet) { RecordWindowSnapAcceleratorAction( WindowSnapAcceleratorAction::kCycleLeftSnapInTablet); @@ -1659,8 +1660,9 @@ } } const WindowSnapWMEvent event( - action == WINDOW_CYCLE_SNAP_LEFT ? WM_EVENT_CYCLE_SNAP_PRIMARY - : WM_EVENT_CYCLE_SNAP_SECONDARY, + action == AcceleratorAction::kWindowCycleSnapLeft + ? WM_EVENT_CYCLE_SNAP_PRIMARY + : WM_EVENT_CYCLE_SNAP_SECONDARY, WindowSnapActionSource::kKeyboardShortcutToSnap); aura::Window* window = GetTargetWindow(); DCHECK(window);
diff --git a/ash/accelerators/accelerator_controller_impl.cc b/ash/accelerators/accelerator_controller_impl.cc index 8870c80..1d218b2 100644 --- a/ash/accelerators/accelerator_controller_impl.cc +++ b/ash/accelerators/accelerator_controller_impl.cc
@@ -52,13 +52,20 @@ using ::chromeos::WindowStateType; using input_method::InputMethodManager; -static_assert(DESKS_ACTIVATE_0 == DESKS_ACTIVATE_1 - 1 && - DESKS_ACTIVATE_1 == DESKS_ACTIVATE_2 - 1 && - DESKS_ACTIVATE_2 == DESKS_ACTIVATE_3 - 1 && - DESKS_ACTIVATE_3 == DESKS_ACTIVATE_4 - 1 && - DESKS_ACTIVATE_4 == DESKS_ACTIVATE_5 - 1 && - DESKS_ACTIVATE_5 == DESKS_ACTIVATE_6 - 1 && - DESKS_ACTIVATE_6 == DESKS_ACTIVATE_7 - 1, +static_assert(AcceleratorAction::kDesksActivate0 == + AcceleratorAction::kDesksActivate1 - 1 && + AcceleratorAction::kDesksActivate1 == + AcceleratorAction::kDesksActivate2 - 1 && + AcceleratorAction::kDesksActivate2 == + AcceleratorAction::kDesksActivate3 - 1 && + AcceleratorAction::kDesksActivate3 == + AcceleratorAction::kDesksActivate4 - 1 && + AcceleratorAction::kDesksActivate4 == + AcceleratorAction::kDesksActivate5 - 1 && + AcceleratorAction::kDesksActivate5 == + AcceleratorAction::kDesksActivate6 - 1 && + AcceleratorAction::kDesksActivate6 == + AcceleratorAction::kDesksActivate7 - 1, "DESKS_ACTIVATE* actions must be consecutive"); ui::Accelerator CreateAccelerator(ui::KeyboardCode keycode, @@ -596,208 +603,209 @@ // false should be returned to give the web contents a chance at handling the // accelerator. switch (action) { - case CYCLE_BACKWARD_MRU: - case CYCLE_FORWARD_MRU: + case AcceleratorAction::kCycleBackwardMru: + case AcceleratorAction::kCycleForwardMru: return accelerators::CanCycleMru(); - case CYCLE_SAME_APP_WINDOWS_BACKWARD: - case CYCLE_SAME_APP_WINDOWS_FORWARD: + case AcceleratorAction::kCycleSameAppWindowsBackward: + case AcceleratorAction::kCycleSameAppWindowsForward: return accelerators::CanCycleSameAppWindows(); - case DESKS_ACTIVATE_DESK_LEFT: - case DESKS_ACTIVATE_DESK_RIGHT: - case DESKS_MOVE_ACTIVE_ITEM_LEFT: - case DESKS_MOVE_ACTIVE_ITEM_RIGHT: - case DESKS_NEW_DESK: - case DESKS_REMOVE_CURRENT_DESK: - case DESKS_ACTIVATE_0: - case DESKS_ACTIVATE_1: - case DESKS_ACTIVATE_2: - case DESKS_ACTIVATE_3: - case DESKS_ACTIVATE_4: - case DESKS_ACTIVATE_5: - case DESKS_ACTIVATE_6: - case DESKS_ACTIVATE_7: - case DESKS_TOGGLE_ASSIGN_TO_ALL_DESKS: + case AcceleratorAction::kDesksActivateDeskLeft: + case AcceleratorAction::kDesksActivateDeskRight: + case AcceleratorAction::kDesksMoveActiveItemLeft: + case AcceleratorAction::kDesksMoveActiveItemRight: + case AcceleratorAction::kDesksNewDesk: + case AcceleratorAction::kDesksRemoveCurrentDesk: + case AcceleratorAction::kDesksActivate0: + case AcceleratorAction::kDesksActivate1: + case AcceleratorAction::kDesksActivate2: + case AcceleratorAction::kDesksActivate3: + case AcceleratorAction::kDesksActivate4: + case AcceleratorAction::kDesksActivate5: + case AcceleratorAction::kDesksActivate6: + case AcceleratorAction::kDesksActivate7: + case AcceleratorAction::kDesksToggleAssignToAllDesks: return true; - case DEBUG_KEYBOARD_BACKLIGHT_TOGGLE: - case DEBUG_MICROPHONE_MUTE_TOGGLE: - case DEBUG_PRINT_LAYER_HIERARCHY: - case DEBUG_PRINT_VIEW_HIERARCHY: - case DEBUG_PRINT_WINDOW_HIERARCHY: - case DEBUG_SHOW_TOAST: - case DEBUG_SYSTEM_UI_STYLE_VIEWER: - case DEBUG_TOGGLE_DARK_MODE: - case DEBUG_TOGGLE_DYNAMIC_COLOR: - case DEBUG_TOGGLE_GLANCEABLES: - case DEBUG_TOGGLE_POWER_BUTTON_MENU: - case DEBUG_TOGGLE_SHOW_DEBUG_BORDERS: - case DEBUG_TOGGLE_SHOW_FPS_COUNTER: - case DEBUG_TOGGLE_SHOW_PAINT_RECTS: - case DEBUG_TOGGLE_TOUCH_PAD: - case DEBUG_TOGGLE_TOUCH_SCREEN: - case DEBUG_TOGGLE_TABLET_MODE: - case DEBUG_TOGGLE_WALLPAPER_MODE: - case DEBUG_TRIGGER_CRASH: - case DEBUG_TOGGLE_HUD_DISPLAY: + case AcceleratorAction::kDebugKeyboardBacklightToggle: + case AcceleratorAction::kDebugMicrophoneMuteToggle: + case AcceleratorAction::kDebugPrintLayerHierarchy: + case AcceleratorAction::kDebugPrintViewHierarchy: + case AcceleratorAction::kDebugPrintWindowHierarchy: + case AcceleratorAction::kDebugShowToast: + case AcceleratorAction::kDebugSystemUiStyleViewer: + case AcceleratorAction::kDebugToggleDarkMode: + case AcceleratorAction::kDebugToggleDynamicColor: + case AcceleratorAction::kDebugToggleGlanceables: + case AcceleratorAction::kDebugTogglePowerButtonMenu: + case AcceleratorAction::kDebugToggleShowDebugBorders: + case AcceleratorAction::kDebugToggleShowFpsCounter: + case AcceleratorAction::kDebugToggleShowPaintRects: + case AcceleratorAction::kDebugToggleTouchPad: + case AcceleratorAction::kDebugToggleTouchScreen: + case AcceleratorAction::kDebugToggleTabletMode: + case AcceleratorAction::kDebugToggleWallpaperMode: + case AcceleratorAction::kDebugTriggerCrash: + case AcceleratorAction::kDebugToggleHudDisplay: return debug::DebugAcceleratorsEnabled(); - case DEV_ADD_REMOVE_DISPLAY: - case DEV_TOGGLE_APP_LIST: - case DEV_TOGGLE_UNIFIED_DESKTOP: + case AcceleratorAction::kDevAddRemoveDisplay: + case AcceleratorAction::kDevToggleAppList: + case AcceleratorAction::kDevToggleUnifiedDesktop: return debug::DeveloperAcceleratorsEnabled(); - case DISABLE_CAPS_LOCK: + case AcceleratorAction::kDisableCapsLock: return CanHandleDisableCapsLock(previous_accelerator); - case LOCK_SCREEN: + case AcceleratorAction::kLockScreen: return accelerators::CanLock(); - case MAGNIFIER_ZOOM_IN: - case MAGNIFIER_ZOOM_OUT: + case AcceleratorAction::kMagnifierZoomIn: + case AcceleratorAction::kMagnifierZoomOut: return accelerators::CanPerformMagnifierZoom(); - case MICROPHONE_MUTE_TOGGLE: + case AcceleratorAction::kMicrophoneMuteToggle: return true; - case MOVE_ACTIVE_WINDOW_BETWEEN_DISPLAYS: + case AcceleratorAction::kMoveActiveWindowBetweenDisplays: return accelerators::CanMoveActiveWindowBetweenDisplays(); - case NEW_INCOGNITO_WINDOW: + case AcceleratorAction::kNewIncognitoWindow: return accelerators::CanCreateNewIncognitoWindow(); - case PASTE_CLIPBOARD_HISTORY_PLAIN_TEXT: + case AcceleratorAction::kPasteClipboardHistoryPlainText: return true; - case PRIVACY_SCREEN_TOGGLE: + case AcceleratorAction::kPrivacyScreenToggle: return accelerators::CanTogglePrivacyScreen(); - case ROTATE_SCREEN: + case AcceleratorAction::kRotateScreen: return true; - case SCALE_UI_DOWN: - case SCALE_UI_RESET: - case SCALE_UI_UP: + case AcceleratorAction::kScaleUiDown: + case AcceleratorAction::kScaleUiReset: + case AcceleratorAction::kScaleUiUp: return true; - case SHOW_STYLUS_TOOLS: + case AcceleratorAction::kShowStylusTools: return accelerators::CanShowStylusTools(); - case START_ASSISTANT: + case AcceleratorAction::kStartAssistant: return true; - case SWAP_PRIMARY_DISPLAY: + case AcceleratorAction::kSwapPrimaryDisplay: return accelerators::CanSwapPrimaryDisplay(); - case SWITCH_IME: + case AcceleratorAction::kSwitchIme: return CanHandleSwitchIme(accelerator); - case SWITCH_TO_NEXT_IME: + case AcceleratorAction::kSwitchToNextIme: return accelerators::CanCycleInputMethod(); - case SWITCH_TO_LAST_USED_IME: + case AcceleratorAction::kSwitchToLastUsedIme: return accelerators::CanCycleInputMethod(); - case SWITCH_TO_PREVIOUS_USER: - case SWITCH_TO_NEXT_USER: + case AcceleratorAction::kSwitchToPreviousUser: + case AcceleratorAction::kSwitchToNextUser: return accelerators::CanCycleUser(); - case TOGGLE_APP_LIST: + case AcceleratorAction::kToggleAppList: return CanHandleToggleAppList( accelerator, previous_accelerator, accelerator_history_->currently_pressed_keys()); - case TOGGLE_CALENDAR: + case AcceleratorAction::kToggleCalendar: return true; - case TOGGLE_CAPS_LOCK: + case AcceleratorAction::kToggleCapsLock: return CanHandleToggleCapsLock( accelerator, previous_accelerator, accelerator_history_->currently_pressed_keys()); - case TOGGLE_CLIPBOARD_HISTORY: + case AcceleratorAction::kToggleClipboardHistory: return true; - case TOGGLE_DICTATION: + case AcceleratorAction::kToggleDictation: return accelerators::CanToggleDictation(); - case TOGGLE_DOCKED_MAGNIFIER: + case AcceleratorAction::kToggleDockedMagnifier: return true; - case TOGGLE_FLOATING: + case AcceleratorAction::kToggleFloating: return accelerators::CanToggleFloatingWindow(); - case TOGGLE_FULLSCREEN_MAGNIFIER: + case AcceleratorAction::kToggleFullscreenMagnifier: return true; - case TOGGLE_GAME_DASHBOARD: + case AcceleratorAction::kToggleGameDashboard: return accelerators::CanToggleGameDashboard(); - case TOGGLE_MESSAGE_CENTER_BUBBLE: + case AcceleratorAction::kToggleMessageCenterBubble: return true; - case TOGGLE_MIRROR_MODE: + case AcceleratorAction::kToggleMirrorMode: return true; - case TOGGLE_OVERVIEW: + case AcceleratorAction::kToggleOverview: return accelerators::CanToggleOverview(); - case TOGGLE_SNAP_GROUP_WINDOWS_MINIMIZE_AND_RESTORE: + case AcceleratorAction::kToggleSnapGroupWindowsMinimizeAndRestore: return accelerators::CanMinimizeSnapGroupWindows(); - case TOGGLE_MULTITASK_MENU: + case AcceleratorAction::kToggleMultitaskMenu: return accelerators::CanToggleMultitaskMenu(); - case TOUCH_HUD_CLEAR: - case TOUCH_HUD_MODE_CHANGE: + case AcceleratorAction::kTouchHudClear: + case AcceleratorAction::kTouchHudModeChange: return accelerators::CanActivateTouchHud(); - case UNPIN: + case AcceleratorAction::kUnpin: return accelerators::CanUnpinWindow(); - case WINDOW_CYCLE_SNAP_LEFT: - case WINDOW_CYCLE_SNAP_RIGHT: + case AcceleratorAction::kWindowCycleSnapLeft: + case AcceleratorAction::kWindowCycleSnapRight: return accelerators::CanWindowSnap(); - case FOCUS_PIP: + case AcceleratorAction::kFocusPip: return accelerators::CanFindPipWidget(); - case FOCUS_CAMERA_PREVIEW: + case AcceleratorAction::kFocusCameraPreview: return accelerators::CanFocusCameraPreview(); - case MINIMIZE_TOP_WINDOW_ON_BACK: + case AcceleratorAction::kMinimizeTopWindowOnBack: return accelerators::CanMinimizeTopWindowOnBack(); - case TAKE_PARTIAL_SCREENSHOT: - case TAKE_SCREENSHOT: - case TAKE_WINDOW_SCREENSHOT: - return accelerators::CanScreenshot(action == TAKE_SCREENSHOT); - case TOGGLE_PROJECTOR_MARKER: + case AcceleratorAction::kTakePartialScreenshot: + case AcceleratorAction::kTakeScreenshot: + case AcceleratorAction::kTakeWindowScreenshot: + return accelerators::CanScreenshot(action == + AcceleratorAction::kTakeScreenshot); + case AcceleratorAction::kToggleProjectorMarker: return accelerators::CanToggleProjectorMarker(); - case TOGGLE_RESIZE_LOCK_MENU: + case AcceleratorAction::kToggleResizeLockMenu: return accelerators::CanToggleResizeLockMenu(); - case DEBUG_TUCK_FLOATED_WINDOW_LEFT: - case DEBUG_TUCK_FLOATED_WINDOW_RIGHT: + case AcceleratorAction::kDebugTuckFloatedWindowLeft: + case AcceleratorAction::kDebugTuckFloatedWindowRight: return debug::CanTuckFloatedWindow(); - case DEBUG_TOGGLE_VIDEO_CONFERENCE_CAMERA_TRAY_ICON: + case AcceleratorAction::kDebugToggleVideoConferenceCameraTrayIcon: return true; // The following are always enabled. - case BRIGHTNESS_DOWN: - case BRIGHTNESS_UP: - case EXIT: - case FOCUS_NEXT_PANE: - case FOCUS_PREVIOUS_PANE: - case FOCUS_SHELF: - case KEYBOARD_BACKLIGHT_TOGGLE: - case KEYBOARD_BRIGHTNESS_DOWN: - case KEYBOARD_BRIGHTNESS_UP: - case LAUNCH_APP_0: - case LAUNCH_APP_1: - case LAUNCH_APP_2: - case LAUNCH_APP_3: - case LAUNCH_APP_4: - case LAUNCH_APP_5: - case LAUNCH_APP_6: - case LAUNCH_APP_7: - case LAUNCH_LAST_APP: - case LOCK_PRESSED: - case LOCK_RELEASED: - case MEDIA_FAST_FORWARD: - case MEDIA_NEXT_TRACK: - case MEDIA_PAUSE: - case MEDIA_PLAY: - case MEDIA_PLAY_PAUSE: - case MEDIA_PREV_TRACK: - case MEDIA_REWIND: - case MEDIA_STOP: - case NEW_TAB: - case NEW_WINDOW: - case OPEN_CALCULATOR: - case OPEN_CROSH: - case OPEN_DIAGNOSTICS: - case OPEN_FEEDBACK_PAGE: - case OPEN_FILE_MANAGER: - case OPEN_GET_HELP: - case POWER_PRESSED: - case POWER_RELEASED: - case PRINT_UI_HIERARCHIES: - case RESTORE_TAB: - case ROTATE_WINDOW: - case SHOW_EMOJI_PICKER: - case TOGGLE_IME_MENU_BUBBLE: - case SHOW_SHORTCUT_VIEWER: - case SHOW_TASK_MANAGER: - case SUSPEND: - case TOGGLE_FULLSCREEN: - case TOGGLE_HIGH_CONTRAST: - case TOGGLE_MAXIMIZED: - case TOGGLE_SPOKEN_FEEDBACK: - case TOGGLE_SYSTEM_TRAY_BUBBLE: - case TOGGLE_WIFI: - case VOLUME_DOWN: - case VOLUME_MUTE: - case VOLUME_UP: - case WINDOW_MINIMIZE: + case AcceleratorAction::kBrightnessDown: + case AcceleratorAction::kBrightnessUp: + case AcceleratorAction::kExit: + case AcceleratorAction::kFocusNextPane: + case AcceleratorAction::kFocusPreviousPane: + case AcceleratorAction::kFocusShelf: + case AcceleratorAction::kKeyboardBacklightToggle: + case AcceleratorAction::kKeyboardBrightnessDown: + case AcceleratorAction::kKeyboardBrightnessUp: + case AcceleratorAction::kLaunchApp0: + case AcceleratorAction::kLaunchApp1: + case AcceleratorAction::kLaunchApp2: + case AcceleratorAction::kLaunchApp3: + case AcceleratorAction::kLaunchApp4: + case AcceleratorAction::kLaunchApp5: + case AcceleratorAction::kLaunchApp6: + case AcceleratorAction::kLaunchApp7: + case AcceleratorAction::kLaunchLastApp: + case AcceleratorAction::kLockPressed: + case AcceleratorAction::kLockReleased: + case AcceleratorAction::kMediaFastForward: + case AcceleratorAction::kMediaNextTrack: + case AcceleratorAction::kMediaPause: + case AcceleratorAction::kMediaPlay: + case AcceleratorAction::kMediaPlayPause: + case AcceleratorAction::kMediaPrevTrack: + case AcceleratorAction::kMediaRewind: + case AcceleratorAction::kMediaStop: + case AcceleratorAction::kNewTab: + case AcceleratorAction::kNewWindow: + case AcceleratorAction::kOpenCalculator: + case AcceleratorAction::kOpenCrosh: + case AcceleratorAction::kOpenDiagnostics: + case AcceleratorAction::kOpenFeedbackPage: + case AcceleratorAction::kOpenFileManager: + case AcceleratorAction::kOpenGetHelp: + case AcceleratorAction::kPowerPressed: + case AcceleratorAction::kPowerReleased: + case AcceleratorAction::kPrintUiHierarchies: + case AcceleratorAction::kRestoreTab: + case AcceleratorAction::kRotateWindow: + case AcceleratorAction::kShowEmojiPicker: + case AcceleratorAction::kToggleImeMenuBubble: + case AcceleratorAction::kShowShortcutViewer: + case AcceleratorAction::kShowTaskManager: + case AcceleratorAction::kSuspend: + case AcceleratorAction::kToggleFullscreen: + case AcceleratorAction::kToggleHighContrast: + case AcceleratorAction::kToggleMaximized: + case AcceleratorAction::kToggleSpokenFeedback: + case AcceleratorAction::kToggleSystemTrayBubble: + case AcceleratorAction::kToggleWifi: + case AcceleratorAction::kVolumeDown: + case AcceleratorAction::kVolumeMute: + case AcceleratorAction::kVolumeUp: + case AcceleratorAction::kWindowMinimize: return true; } } @@ -810,535 +818,538 @@ if (restriction != RESTRICTION_NONE) return; - if ((action == VOLUME_DOWN || action == VOLUME_UP) && + if ((action == AcceleratorAction::kVolumeDown || + action == AcceleratorAction::kVolumeUp) && Shell::Get()->tablet_mode_controller()->InTabletMode()) { if (tablet_volume_controller_.ShouldSwapSideVolumeButtons( accelerator.source_device_id())) - action = action == VOLUME_DOWN ? VOLUME_UP : VOLUME_DOWN; + action = action == AcceleratorAction::kVolumeDown + ? AcceleratorAction::kVolumeUp + : AcceleratorAction::kVolumeDown; - tablet_volume_controller_.StartTabletModeVolumeAdjustTimer(action == - VOLUME_UP); + tablet_volume_controller_.StartTabletModeVolumeAdjustTimer( + action == AcceleratorAction::kVolumeUp); } // If your accelerator invokes more than one line of code, please either // implement it in your module's controller code or pull it into a HandleFoo() // function above. switch (action) { - case BRIGHTNESS_DOWN: { + case AcceleratorAction::kBrightnessDown: { base::RecordAction(UserMetricsAction("Accel_BrightnessDown_F6")); accelerators::BrightnessDown(); break; } - case BRIGHTNESS_UP: { + case AcceleratorAction::kBrightnessUp: { base::RecordAction(UserMetricsAction("Accel_BrightnessUp_F7")); accelerators::BrightnessUp(); break; } - case CYCLE_BACKWARD_MRU: + case AcceleratorAction::kCycleBackwardMru: RecordCycleBackwardMru(accelerator); accelerators::CycleBackwardMru(/*same_app_only=*/false); break; - case CYCLE_FORWARD_MRU: + case AcceleratorAction::kCycleForwardMru: RecordCycleForwardMru(accelerator); accelerators::CycleForwardMru(/*same_app_only=*/false); break; - case CYCLE_SAME_APP_WINDOWS_BACKWARD: + case AcceleratorAction::kCycleSameAppWindowsBackward: // TODO(b/250699271): Add metrics accelerators::CycleBackwardMru(/*same_app_only=*/true); break; - case CYCLE_SAME_APP_WINDOWS_FORWARD: + case AcceleratorAction::kCycleSameAppWindowsForward: // TODO(b/250699271): Add metrics accelerators::CycleForwardMru(/*same_app_only=*/true); break; - case DESKS_ACTIVATE_DESK_LEFT: + case AcceleratorAction::kDesksActivateDeskLeft: // UMA metrics are recorded in the function. accelerators::ActivateDesk(/*activate_left=*/true); break; - case DESKS_ACTIVATE_DESK_RIGHT: + case AcceleratorAction::kDesksActivateDeskRight: // UMA metrics are recorded in the function. accelerators::ActivateDesk(/*activate_left=*/false); break; - case DESKS_MOVE_ACTIVE_ITEM_LEFT: + case AcceleratorAction::kDesksMoveActiveItemLeft: // UMA metrics are recorded in the function. accelerators::MoveActiveItem(/*going_left=*/true); break; - case DESKS_MOVE_ACTIVE_ITEM_RIGHT: + case AcceleratorAction::kDesksMoveActiveItemRight: // UMA metrics are recorded in the function. accelerators::MoveActiveItem(/*going_left=*/false); break; - case DESKS_NEW_DESK: + case AcceleratorAction::kDesksNewDesk: // UMA metrics are recorded in the function. accelerators::NewDesk(); break; - case DESKS_REMOVE_CURRENT_DESK: + case AcceleratorAction::kDesksRemoveCurrentDesk: // UMA metrics are recorded in the function. accelerators::RemoveCurrentDesk(); break; - case DESKS_ACTIVATE_0: - case DESKS_ACTIVATE_1: - case DESKS_ACTIVATE_2: - case DESKS_ACTIVATE_3: - case DESKS_ACTIVATE_4: - case DESKS_ACTIVATE_5: - case DESKS_ACTIVATE_6: - case DESKS_ACTIVATE_7: + case AcceleratorAction::kDesksActivate0: + case AcceleratorAction::kDesksActivate1: + case AcceleratorAction::kDesksActivate2: + case AcceleratorAction::kDesksActivate3: + case AcceleratorAction::kDesksActivate4: + case AcceleratorAction::kDesksActivate5: + case AcceleratorAction::kDesksActivate6: + case AcceleratorAction::kDesksActivate7: accelerators::ActivateDeskAtIndex(action); break; - case DESKS_TOGGLE_ASSIGN_TO_ALL_DESKS: + case AcceleratorAction::kDesksToggleAssignToAllDesks: accelerators::ToggleAssignToAllDesk(); break; - case DEBUG_KEYBOARD_BACKLIGHT_TOGGLE: - case DEBUG_MICROPHONE_MUTE_TOGGLE: - case DEBUG_PRINT_LAYER_HIERARCHY: - case DEBUG_PRINT_VIEW_HIERARCHY: - case DEBUG_PRINT_WINDOW_HIERARCHY: - case DEBUG_SHOW_TOAST: - case DEBUG_TOGGLE_DARK_MODE: - case DEBUG_TOGGLE_DYNAMIC_COLOR: - case DEBUG_TOGGLE_GLANCEABLES: - case DEBUG_TOGGLE_POWER_BUTTON_MENU: - case DEBUG_TOGGLE_VIDEO_CONFERENCE_CAMERA_TRAY_ICON: - case DEBUG_SYSTEM_UI_STYLE_VIEWER: + case AcceleratorAction::kDebugKeyboardBacklightToggle: + case AcceleratorAction::kDebugMicrophoneMuteToggle: + case AcceleratorAction::kDebugPrintLayerHierarchy: + case AcceleratorAction::kDebugPrintViewHierarchy: + case AcceleratorAction::kDebugPrintWindowHierarchy: + case AcceleratorAction::kDebugShowToast: + case AcceleratorAction::kDebugToggleDarkMode: + case AcceleratorAction::kDebugToggleDynamicColor: + case AcceleratorAction::kDebugToggleGlanceables: + case AcceleratorAction::kDebugTogglePowerButtonMenu: + case AcceleratorAction::kDebugToggleVideoConferenceCameraTrayIcon: + case AcceleratorAction::kDebugSystemUiStyleViewer: debug::PerformDebugActionIfEnabled(action); break; - case DEBUG_TOGGLE_SHOW_DEBUG_BORDERS: + case AcceleratorAction::kDebugToggleShowDebugBorders: debug::ToggleShowDebugBorders(); break; - case DEBUG_TOGGLE_SHOW_FPS_COUNTER: + case AcceleratorAction::kDebugToggleShowFpsCounter: debug::ToggleShowFpsCounter(); break; - case DEBUG_TOGGLE_SHOW_PAINT_RECTS: + case AcceleratorAction::kDebugToggleShowPaintRects: debug::ToggleShowPaintRects(); break; - case DEBUG_TOGGLE_TOUCH_PAD: - case DEBUG_TOGGLE_TOUCH_SCREEN: - case DEBUG_TOGGLE_TABLET_MODE: - case DEBUG_TOGGLE_WALLPAPER_MODE: - case DEBUG_TRIGGER_CRASH: - case DEBUG_TOGGLE_HUD_DISPLAY: + case AcceleratorAction::kDebugToggleTouchPad: + case AcceleratorAction::kDebugToggleTouchScreen: + case AcceleratorAction::kDebugToggleTabletMode: + case AcceleratorAction::kDebugToggleWallpaperMode: + case AcceleratorAction::kDebugTriggerCrash: + case AcceleratorAction::kDebugToggleHudDisplay: debug::PerformDebugActionIfEnabled(action); break; - case DEV_ADD_REMOVE_DISPLAY: + case AcceleratorAction::kDevAddRemoveDisplay: Shell::Get()->display_manager()->AddRemoveDisplay(); break; - case DEV_TOGGLE_APP_LIST: + case AcceleratorAction::kDevToggleAppList: RecordToggleAppList(accelerator); accelerators::ToggleAppList(AppListShowSource::kSearchKey, base::TimeTicks()); break; - case DEV_TOGGLE_UNIFIED_DESKTOP: + case AcceleratorAction::kDevToggleUnifiedDesktop: accelerators::ToggleUnifiedDesktop(); break; - case DISABLE_CAPS_LOCK: + case AcceleratorAction::kDisableCapsLock: base::RecordAction(base::UserMetricsAction("Accel_Disable_Caps_Lock")); accelerators::DisableCapsLock(); break; - case EXIT: + case AcceleratorAction::kExit: // UMA metrics are recorded in the handler. exit_warning_handler_.HandleAccelerator(); break; - case FOCUS_NEXT_PANE: + case AcceleratorAction::kFocusNextPane: base::RecordAction(UserMetricsAction("Accel_Focus_Next_Pane")); accelerators::RotatePaneFocus(FocusCycler::FORWARD); break; - case FOCUS_PREVIOUS_PANE: + case AcceleratorAction::kFocusPreviousPane: base::RecordAction(UserMetricsAction("Accel_Focus_Previous_Pane")); accelerators::RotatePaneFocus(FocusCycler::BACKWARD); break; - case FOCUS_SHELF: + case AcceleratorAction::kFocusShelf: base::RecordAction(UserMetricsAction("Accel_Focus_Shelf")); accelerators::FocusShelf(); break; - case FOCUS_CAMERA_PREVIEW: + case AcceleratorAction::kFocusCameraPreview: accelerators::FocusCameraPreview(); break; - case FOCUS_PIP: + case AcceleratorAction::kFocusPip: base::RecordAction(base::UserMetricsAction("Accel_Focus_Pip")); accelerators::FocusPip(); break; - case KEYBOARD_BACKLIGHT_TOGGLE: + case AcceleratorAction::kKeyboardBacklightToggle: if (ash::features::IsKeyboardBacklightToggleEnabled()) { base::RecordAction(base::UserMetricsAction("Accel_Keyboard_Backlight")); accelerators::ToggleKeyboardBacklight(); } break; - case KEYBOARD_BRIGHTNESS_DOWN: { + case AcceleratorAction::kKeyboardBrightnessDown: { base::RecordAction(UserMetricsAction("Accel_KeyboardBrightnessDown_F6")); accelerators::KeyboardBrightnessDown(); break; } - case KEYBOARD_BRIGHTNESS_UP: { + case AcceleratorAction::kKeyboardBrightnessUp: { base::RecordAction(UserMetricsAction("Accel_KeyboardBrightnessUp_F7")); accelerators::KeyboardBrightnessUp(); break; } - case LAUNCH_APP_0: + case AcceleratorAction::kLaunchApp0: base::RecordAction(base::UserMetricsAction("Accel_Launch_App")); accelerators::LaunchAppN(0); break; - case LAUNCH_APP_1: + case AcceleratorAction::kLaunchApp1: base::RecordAction(base::UserMetricsAction("Accel_Launch_App")); accelerators::LaunchAppN(1); break; - case LAUNCH_APP_2: + case AcceleratorAction::kLaunchApp2: base::RecordAction(base::UserMetricsAction("Accel_Launch_App")); accelerators::LaunchAppN(2); break; - case LAUNCH_APP_3: + case AcceleratorAction::kLaunchApp3: base::RecordAction(base::UserMetricsAction("Accel_Launch_App")); accelerators::LaunchAppN(3); break; - case LAUNCH_APP_4: + case AcceleratorAction::kLaunchApp4: base::RecordAction(base::UserMetricsAction("Accel_Launch_App")); accelerators::LaunchAppN(4); break; - case LAUNCH_APP_5: + case AcceleratorAction::kLaunchApp5: base::RecordAction(base::UserMetricsAction("Accel_Launch_App")); accelerators::LaunchAppN(5); break; - case LAUNCH_APP_6: + case AcceleratorAction::kLaunchApp6: base::RecordAction(base::UserMetricsAction("Accel_Launch_App")); accelerators::LaunchAppN(6); break; - case LAUNCH_APP_7: + case AcceleratorAction::kLaunchApp7: base::RecordAction(base::UserMetricsAction("Accel_Launch_App")); accelerators::LaunchAppN(7); break; - case LAUNCH_LAST_APP: + case AcceleratorAction::kLaunchLastApp: base::RecordAction(base::UserMetricsAction("Accel_Launch_Last_App")); accelerators::LaunchLastApp(); break; - case LOCK_PRESSED: - case LOCK_RELEASED: - accelerators::LockPressed(action == LOCK_PRESSED); + case AcceleratorAction::kLockPressed: + case AcceleratorAction::kLockReleased: + accelerators::LockPressed(action == AcceleratorAction::kLockPressed); break; - case LOCK_SCREEN: + case AcceleratorAction::kLockScreen: base::RecordAction(base::UserMetricsAction("Accel_LockScreen_L")); accelerators::LockScreen(); break; - case MAGNIFIER_ZOOM_IN: + case AcceleratorAction::kMagnifierZoomIn: accelerators::ActiveMagnifierZoom(1); break; - case MAGNIFIER_ZOOM_OUT: + case AcceleratorAction::kMagnifierZoomOut: accelerators::ActiveMagnifierZoom(-1); break; - case MEDIA_FAST_FORWARD: + case AcceleratorAction::kMediaFastForward: base::RecordAction(base::UserMetricsAction("Accel_Media_Fast_Forward")); accelerators::MediaFastForward(); break; - case MEDIA_NEXT_TRACK: + case AcceleratorAction::kMediaNextTrack: base::RecordAction(base::UserMetricsAction("Accel_Media_Next_Track")); accelerators::MediaNextTrack(); break; - case MEDIA_PAUSE: + case AcceleratorAction::kMediaPause: base::RecordAction(base::UserMetricsAction("Accel_Media_Pause")); accelerators::MediaPause(); break; - case MEDIA_PLAY: + case AcceleratorAction::kMediaPlay: base::RecordAction(base::UserMetricsAction("Accel_Media_Play")); accelerators::MediaPlay(); break; - case MEDIA_PLAY_PAUSE: + case AcceleratorAction::kMediaPlayPause: base::RecordAction(base::UserMetricsAction("Accel_Media_PlayPause")); accelerators::MediaPlayPause(); break; - case MEDIA_PREV_TRACK: + case AcceleratorAction::kMediaPrevTrack: base::RecordAction(base::UserMetricsAction("Accel_Media_Prev_Track")); accelerators::MediaPrevTrack(); break; - case MEDIA_REWIND: + case AcceleratorAction::kMediaRewind: base::RecordAction(base::UserMetricsAction("Accel_Media_Rewind")); accelerators::MediaRewind(); break; - case MEDIA_STOP: + case AcceleratorAction::kMediaStop: base::RecordAction(base::UserMetricsAction("Accel_Media_Stop")); accelerators::MediaStop(); break; - case MICROPHONE_MUTE_TOGGLE: + case AcceleratorAction::kMicrophoneMuteToggle: base::RecordAction(base::UserMetricsAction("Accel_Microphone_Mute")); accelerators::MicrophoneMuteToggle(); break; - case MOVE_ACTIVE_WINDOW_BETWEEN_DISPLAYS: + case AcceleratorAction::kMoveActiveWindowBetweenDisplays: accelerators::MoveActiveWindowBetweenDisplays(); break; - case NEW_INCOGNITO_WINDOW: + case AcceleratorAction::kNewIncognitoWindow: base::RecordAction(base::UserMetricsAction("Accel_New_Incognito_Window")); accelerators::NewIncognitoWindow(); break; - case NEW_TAB: + case AcceleratorAction::kNewTab: RecordNewTab(accelerator); accelerators::NewTab(); break; - case NEW_WINDOW: + case AcceleratorAction::kNewWindow: base::RecordAction(base::UserMetricsAction("Accel_New_Window")); accelerators::NewWindow(); break; - case OPEN_CALCULATOR: + case AcceleratorAction::kOpenCalculator: base::RecordAction(base::UserMetricsAction("Accel_Open_Calculator")); accelerators::OpenCalculator(); break; - case OPEN_CROSH: + case AcceleratorAction::kOpenCrosh: base::RecordAction(base::UserMetricsAction("Accel_Open_Crosh")); accelerators::OpenCrosh(); break; - case OPEN_DIAGNOSTICS: + case AcceleratorAction::kOpenDiagnostics: base::RecordAction(base::UserMetricsAction("Accel_Open_Diagnostics")); accelerators::OpenDiagnostics(); break; - case OPEN_FEEDBACK_PAGE: + case AcceleratorAction::kOpenFeedbackPage: base::RecordAction(base::UserMetricsAction("Accel_Open_Feedback_Page")); accelerators::OpenFeedbackPage(); break; - case OPEN_FILE_MANAGER: + case AcceleratorAction::kOpenFileManager: base::RecordAction(base::UserMetricsAction("Accel_Open_File_Manager")); accelerators::OpenFileManager(); break; - case OPEN_GET_HELP: + case AcceleratorAction::kOpenGetHelp: accelerators::OpenHelp(); break; - case PASTE_CLIPBOARD_HISTORY_PLAIN_TEXT: + case AcceleratorAction::kPasteClipboardHistoryPlainText: accelerators::ToggleClipboardHistory(/*is_plain_text_paste=*/true); break; - case POWER_PRESSED: - case POWER_RELEASED: + case AcceleratorAction::kPowerPressed: + case AcceleratorAction::kPowerReleased: if (!base::SysInfo::IsRunningOnChromeOS()) { // There is no powerd, the Chrome OS power manager, in linux desktop, // so call the PowerButtonController here. - accelerators::PowerPressed(action == POWER_PRESSED); + accelerators::PowerPressed(action == AcceleratorAction::kPowerPressed); } // We don't do anything with these at present on the device, // (power button events are reported to us from powerm via // D-BUS), but we consume them to prevent them from getting // passed to apps -- see http://crbug.com/146609. break; - case PRINT_UI_HIERARCHIES: + case AcceleratorAction::kPrintUiHierarchies: debug::PrintUIHierarchies(); break; - case PRIVACY_SCREEN_TOGGLE: + case AcceleratorAction::kPrivacyScreenToggle: base::RecordAction(UserMetricsAction("Accel_Toggle_Privacy_Screen")); accelerators::TogglePrivacyScreen(); break; - case ROTATE_SCREEN: + case AcceleratorAction::kRotateScreen: accelerators::RotateScreen(); break; - case RESTORE_TAB: + case AcceleratorAction::kRestoreTab: base::RecordAction(base::UserMetricsAction("Accel_Restore_Tab")); accelerators::RestoreTab(); break; - case ROTATE_WINDOW: + case AcceleratorAction::kRotateWindow: base::RecordAction(UserMetricsAction("Accel_Rotate_Active_Window")); accelerators::RotateActiveWindow(); break; - case SCALE_UI_DOWN: + case AcceleratorAction::kScaleUiDown: accelerators::ZoomDisplay(false /* down */); break; - case SCALE_UI_RESET: + case AcceleratorAction::kScaleUiReset: accelerators::ResetDisplayZoom(); break; - case SCALE_UI_UP: + case AcceleratorAction::kScaleUiUp: accelerators::ZoomDisplay(true /* up */); break; - case SHOW_EMOJI_PICKER: + case AcceleratorAction::kShowEmojiPicker: base::RecordAction(UserMetricsAction("Accel_Show_Emoji_Picker")); accelerators::ShowEmojiPicker(); break; - case TOGGLE_IME_MENU_BUBBLE: + case AcceleratorAction::kToggleImeMenuBubble: base::RecordAction(UserMetricsAction("Accel_Show_Ime_Menu_Bubble")); accelerators::ToggleImeMenuBubble(); break; - case TOGGLE_PROJECTOR_MARKER: + case AcceleratorAction::kToggleProjectorMarker: accelerators::ToggleProjectorMarker(); break; - case SHOW_SHORTCUT_VIEWER: + case AcceleratorAction::kShowShortcutViewer: if (features::ShouldOnlyShowNewShortcutApp()) { accelerators::ShowShortcutCustomizationApp(); } else { accelerators::ShowKeyboardShortcutViewer(); } break; - case SHOW_STYLUS_TOOLS: + case AcceleratorAction::kShowStylusTools: base::RecordAction(UserMetricsAction("Accel_Show_Stylus_Tools")); accelerators::ShowStylusTools(); break; - case SHOW_TASK_MANAGER: + case AcceleratorAction::kShowTaskManager: base::RecordAction(UserMetricsAction("Accel_Show_Task_Manager")); accelerators::ShowTaskManager(); break; - case START_ASSISTANT: + case AcceleratorAction::kStartAssistant: // TODO(longbowei): Move this to CanToggleAssistant(). if (ShouldToggleAssistant(accelerator)) { RecordToggleAssistant(accelerator); accelerators::ToggleAssistant(); } break; - case SUSPEND: + case AcceleratorAction::kSuspend: base::RecordAction(UserMetricsAction("Accel_Suspend")); accelerators::Suspend(); break; - case SWAP_PRIMARY_DISPLAY: + case AcceleratorAction::kSwapPrimaryDisplay: base::RecordAction(UserMetricsAction("Accel_Swap_Primary_Display")); accelerators::ShiftPrimaryDisplay(); break; - case SWITCH_IME: + case AcceleratorAction::kSwitchIme: HandleSwitchIme(accelerator); break; - case SWITCH_TO_LAST_USED_IME: + case AcceleratorAction::kSwitchToLastUsedIme: HandleSwitchToLastUsedIme(accelerator); break; - case SWITCH_TO_NEXT_IME: + case AcceleratorAction::kSwitchToNextIme: RecordSwitchToNextIme(accelerator); accelerators::SwitchToNextIme(); break; - case SWITCH_TO_NEXT_USER: + case AcceleratorAction::kSwitchToNextUser: MultiProfileUMA::RecordSwitchActiveUser( MultiProfileUMA::SWITCH_ACTIVE_USER_BY_ACCELERATOR); base::RecordAction(UserMetricsAction("Accel_Switch_To_Next_User")); accelerators::CycleUser(CycleUserDirection::NEXT); break; - case SWITCH_TO_PREVIOUS_USER: + case AcceleratorAction::kSwitchToPreviousUser: MultiProfileUMA::RecordSwitchActiveUser( MultiProfileUMA::SWITCH_ACTIVE_USER_BY_ACCELERATOR); base::RecordAction(UserMetricsAction("Accel_Switch_To_Previous_User")); accelerators::CycleUser(CycleUserDirection::PREVIOUS); break; - case TAKE_PARTIAL_SCREENSHOT: + case AcceleratorAction::kTakePartialScreenshot: // UMA metrics are recorded in the function. accelerators::MaybeTakePartialScreenshot(); break; - case TAKE_SCREENSHOT: + case AcceleratorAction::kTakeScreenshot: base::RecordAction(UserMetricsAction("Accel_Take_Screenshot")); accelerators::TakeScreenshot(accelerator.key_code() == ui::VKEY_SNAPSHOT); break; - case TAKE_WINDOW_SCREENSHOT: + case AcceleratorAction::kTakeWindowScreenshot: // UMA metrics are recorded in the function. accelerators::MaybeTakeWindowScreenshot(); break; - case TOGGLE_APP_LIST: { + case AcceleratorAction::kToggleAppList: { RecordToggleAppList(accelerator); accelerators::ToggleAppList(AppListShowSource::kSearchKey, base::TimeTicks()); break; } - case TOGGLE_CALENDAR: + case AcceleratorAction::kToggleCalendar: accelerators::ToggleCalendar(); break; - case TOGGLE_CAPS_LOCK: + case AcceleratorAction::kToggleCapsLock: base::RecordAction(UserMetricsAction("Accel_Toggle_Caps_Lock")); accelerators::ToggleCapsLock(); break; - case TOGGLE_CLIPBOARD_HISTORY: + case AcceleratorAction::kToggleClipboardHistory: accelerators::ToggleClipboardHistory(/*is_plain_text_paste=*/false); break; - case TOGGLE_DICTATION: + case AcceleratorAction::kToggleDictation: base::RecordAction(UserMetricsAction("Accel_Toggle_Dictation")); accelerators::ToggleDictation(); break; - case TOGGLE_DOCKED_MAGNIFIER: + case AcceleratorAction::kToggleDockedMagnifier: base::RecordAction(UserMetricsAction("Accel_Toggle_Docked_Magnifier")); accelerators::ToggleDockedMagnifier(); break; - case DEBUG_TUCK_FLOATED_WINDOW_LEFT: - case DEBUG_TUCK_FLOATED_WINDOW_RIGHT: + case AcceleratorAction::kDebugTuckFloatedWindowLeft: + case AcceleratorAction::kDebugTuckFloatedWindowRight: debug::PerformDebugActionIfEnabled(action); break; - case TOGGLE_FLOATING: + case AcceleratorAction::kToggleFloating: // UMA metrics are recorded in the function. accelerators::ToggleFloating(); break; - case TOGGLE_FULLSCREEN: + case AcceleratorAction::kToggleFullscreen: RecordToggleFullscreen(accelerator); accelerators::ToggleFullscreen(); break; - case TOGGLE_FULLSCREEN_MAGNIFIER: + case AcceleratorAction::kToggleFullscreenMagnifier: base::RecordAction( UserMetricsAction("Accel_Toggle_Fullscreen_Magnifier")); accelerators::ToggleFullscreenMagnifier(); break; - case TOGGLE_GAME_DASHBOARD: + case AcceleratorAction::kToggleGameDashboard: accelerators::ToggleGameDashboard(); break; - case TOGGLE_HIGH_CONTRAST: + case AcceleratorAction::kToggleHighContrast: base::RecordAction(UserMetricsAction("Accel_Toggle_High_Contrast")); accelerators::ToggleHighContrast(); break; - case TOGGLE_MAXIMIZED: + case AcceleratorAction::kToggleMaximized: accelerators::ToggleMaximized(); break; - case TOGGLE_MESSAGE_CENTER_BUBBLE: + case AcceleratorAction::kToggleMessageCenterBubble: base::RecordAction( UserMetricsAction("Accel_Toggle_Message_Center_Bubble")); accelerators::ToggleMessageCenterBubble(); break; - case TOGGLE_MIRROR_MODE: + case AcceleratorAction::kToggleMirrorMode: base::RecordAction(UserMetricsAction("Accel_Toggle_Mirror_Mode")); accelerators::ToggleMirrorMode(); break; - case TOGGLE_MULTITASK_MENU: + case AcceleratorAction::kToggleMultitaskMenu: accelerators::ToggleMultitaskMenu(); return; - case TOGGLE_OVERVIEW: + case AcceleratorAction::kToggleOverview: base::RecordAction(base::UserMetricsAction("Accel_Overview_F5")); accelerators::ToggleOverview(); break; - case TOGGLE_SNAP_GROUP_WINDOWS_MINIMIZE_AND_RESTORE: + case AcceleratorAction::kToggleSnapGroupWindowsMinimizeAndRestore: base::RecordAction(base::UserMetricsAction( "Accel_Toggle_Snap_Group_Windows_Minimize_Restore")); accelerators::MinimizeWindowsInSnapGroup(); break; - case TOGGLE_RESIZE_LOCK_MENU: + case AcceleratorAction::kToggleResizeLockMenu: base::RecordAction( base::UserMetricsAction("Accel_Toggle_Resize_Lock_Menu")); accelerators::ToggleResizeLockMenu(); break; - case TOGGLE_SPOKEN_FEEDBACK: + case AcceleratorAction::kToggleSpokenFeedback: base::RecordAction(UserMetricsAction("Accel_Toggle_Spoken_Feedback")); accelerators::ToggleSpokenFeedback(); break; - case TOGGLE_SYSTEM_TRAY_BUBBLE: + case AcceleratorAction::kToggleSystemTrayBubble: base::RecordAction(UserMetricsAction("Accel_Toggle_System_Tray_Bubble")); accelerators::ToggleSystemTrayBubble(); break; - case TOGGLE_WIFI: + case AcceleratorAction::kToggleWifi: accelerators::ToggleWifi(); break; - case TOUCH_HUD_CLEAR: + case AcceleratorAction::kTouchHudClear: accelerators::TouchHudClear(); break; - case TOUCH_HUD_MODE_CHANGE: + case AcceleratorAction::kTouchHudModeChange: accelerators::TouchHudModeChange(); break; - case UNPIN: + case AcceleratorAction::kUnpin: accelerators::UnpinWindow(); break; - case VOLUME_DOWN: + case AcceleratorAction::kVolumeDown: base::RecordAction(UserMetricsAction("Accel_VolumeDown_F9")); output_volume_metric_delay_timer_.Reset(); accelerators::VolumeDown(); break; - case VOLUME_MUTE: + case AcceleratorAction::kVolumeMute: if (accelerator.key_code() == ui::VKEY_VOLUME_MUTE) base::RecordAction(UserMetricsAction("Accel_VolumeMute_F8")); accelerators::VolumeMute(); break; - case VOLUME_UP: + case AcceleratorAction::kVolumeUp: base::RecordAction(UserMetricsAction("Accel_VolumeUp_F10")); output_volume_metric_delay_timer_.Reset(); accelerators::VolumeUp(); break; - case WINDOW_CYCLE_SNAP_LEFT: + case AcceleratorAction::kWindowCycleSnapLeft: base::RecordAction(UserMetricsAction("Accel_Window_Snap_Left")); - accelerators::WindowSnap(AcceleratorAction::WINDOW_CYCLE_SNAP_LEFT); + accelerators::WindowSnap(AcceleratorAction::kWindowCycleSnapLeft); break; - case WINDOW_CYCLE_SNAP_RIGHT: + case AcceleratorAction::kWindowCycleSnapRight: base::RecordAction(UserMetricsAction("Accel_Window_Snap_Right")); - accelerators::WindowSnap(AcceleratorAction::WINDOW_CYCLE_SNAP_RIGHT); + accelerators::WindowSnap(AcceleratorAction::kWindowCycleSnapRight); break; - case WINDOW_MINIMIZE: + case AcceleratorAction::kWindowMinimize: base::RecordAction( base::UserMetricsAction("Accel_Toggle_Minimized_Minus")); accelerators::WindowMinimize(); break; - case MINIMIZE_TOP_WINDOW_ON_BACK: + case AcceleratorAction::kMinimizeTopWindowOnBack: base::RecordAction( base::UserMetricsAction("Accel_Minimize_Top_Window_On_Back")); accelerators::TopWindowMinimizeOnBack();
diff --git a/ash/accelerators/accelerator_controller_unittest.cc b/ash/accelerators/accelerator_controller_unittest.cc index f326f5c..035e249a 100644 --- a/ash/accelerators/accelerator_controller_unittest.cc +++ b/ash/accelerators/accelerator_controller_unittest.cc
@@ -601,13 +601,15 @@ window_state->Activate(); { - controller_->PerformActionIfEnabled(WINDOW_CYCLE_SNAP_LEFT, {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kWindowCycleSnapLeft, + {}); gfx::Rect expected_bounds = GetDefaultSnappedWindowBoundsInParent( window.get(), SnapViewType::kPrimary); EXPECT_EQ(expected_bounds.ToString(), window->bounds().ToString()); } { - controller_->PerformActionIfEnabled(WINDOW_CYCLE_SNAP_RIGHT, {}); + controller_->PerformActionIfEnabled( + AcceleratorAction::kWindowCycleSnapRight, {}); gfx::Rect expected_bounds = GetDefaultSnappedWindowBoundsInParent( window.get(), SnapViewType::kSecondary); EXPECT_EQ(expected_bounds.ToString(), window->bounds().ToString()); @@ -615,11 +617,13 @@ { gfx::Rect normal_bounds = window_state->GetRestoreBoundsInParent(); - controller_->PerformActionIfEnabled(TOGGLE_MAXIMIZED, {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kToggleMaximized, + {}); EXPECT_TRUE(window_state->IsMaximized()); EXPECT_NE(normal_bounds.ToString(), window->bounds().ToString()); - controller_->PerformActionIfEnabled(TOGGLE_MAXIMIZED, {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kToggleMaximized, + {}); EXPECT_FALSE(window_state->IsMaximized()); // Window gets restored to its right snapped window bounds and its window @@ -629,43 +633,54 @@ EXPECT_EQ(expected_bounds.ToString(), window->bounds().ToString()); EXPECT_EQ(window_state->GetStateType(), WindowStateType::kSecondarySnapped); - controller_->PerformActionIfEnabled(TOGGLE_MAXIMIZED, {}); - controller_->PerformActionIfEnabled(WINDOW_CYCLE_SNAP_LEFT, {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kToggleMaximized, + {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kWindowCycleSnapLeft, + {}); EXPECT_FALSE(window_state->IsMaximized()); - controller_->PerformActionIfEnabled(TOGGLE_MAXIMIZED, {}); - controller_->PerformActionIfEnabled(WINDOW_CYCLE_SNAP_RIGHT, {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kToggleMaximized, + {}); + controller_->PerformActionIfEnabled( + AcceleratorAction::kWindowCycleSnapRight, {}); EXPECT_FALSE(window_state->IsMaximized()); - controller_->PerformActionIfEnabled(TOGGLE_MAXIMIZED, {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kToggleMaximized, + {}); EXPECT_TRUE(window_state->IsMaximized()); - controller_->PerformActionIfEnabled(WINDOW_MINIMIZE, {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kWindowMinimize, {}); EXPECT_FALSE(window_state->IsMaximized()); EXPECT_TRUE(window_state->IsMinimized()); window_state->Restore(); window_state->Activate(); - controller_->PerformActionIfEnabled(TOGGLE_FULLSCREEN, {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kToggleFullscreen, + {}); EXPECT_TRUE(window_state->IsFullscreen()); - controller_->PerformActionIfEnabled(WINDOW_CYCLE_SNAP_LEFT, {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kWindowCycleSnapLeft, + {}); EXPECT_TRUE(window_state->IsSnapped()); EXPECT_FALSE(window_state->IsFullscreen()); - controller_->PerformActionIfEnabled(TOGGLE_FULLSCREEN, {}); - controller_->PerformActionIfEnabled(WINDOW_CYCLE_SNAP_RIGHT, {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kToggleFullscreen, + {}); + controller_->PerformActionIfEnabled( + AcceleratorAction::kWindowCycleSnapRight, {}); EXPECT_TRUE(window_state->IsSnapped()); EXPECT_FALSE(window_state->IsFullscreen()); } { // Tests that window snap doesn't work while the window is minimized. - controller_->PerformActionIfEnabled(WINDOW_MINIMIZE, {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kWindowMinimize, {}); EXPECT_TRUE(window_state->IsMinimized()); - controller_->PerformActionIfEnabled(WINDOW_CYCLE_SNAP_LEFT, {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kWindowCycleSnapLeft, + {}); EXPECT_TRUE(window_state->IsMinimized()); // Unminimize the window. Now window snap should work. - controller_->PerformActionIfEnabled(WINDOW_MINIMIZE, {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kWindowMinimize, {}); EXPECT_FALSE(window_state->IsMinimized()); - controller_->PerformActionIfEnabled(WINDOW_CYCLE_SNAP_LEFT, {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kWindowCycleSnapLeft, + {}); EXPECT_TRUE(window_state->IsSnapped()); } } @@ -679,27 +694,32 @@ window_state->Activate(); // Snap right. - controller_->PerformActionIfEnabled(WINDOW_CYCLE_SNAP_RIGHT, {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kWindowCycleSnapRight, + {}); gfx::Rect normal_bounds = window_state->GetRestoreBoundsInParent(); gfx::Rect expected_bounds = GetDefaultSnappedWindowBoundsInParent( window.get(), SnapViewType::kSecondary); EXPECT_EQ(expected_bounds.ToString(), window->bounds().ToString()); EXPECT_TRUE(window_state->IsSnapped()); // Snap right again ->> becomes normal. - controller_->PerformActionIfEnabled(WINDOW_CYCLE_SNAP_RIGHT, {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kWindowCycleSnapRight, + {}); EXPECT_TRUE(window_state->IsNormalStateType()); EXPECT_EQ(normal_bounds.ToString(), window->bounds().ToString()); // Snap right. - controller_->PerformActionIfEnabled(WINDOW_CYCLE_SNAP_RIGHT, {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kWindowCycleSnapRight, + {}); EXPECT_TRUE(window_state->IsSnapped()); // Snap left. - controller_->PerformActionIfEnabled(WINDOW_CYCLE_SNAP_LEFT, {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kWindowCycleSnapLeft, + {}); EXPECT_TRUE(window_state->IsSnapped()); expected_bounds = GetDefaultSnappedWindowBoundsInParent( window.get(), SnapViewType::kPrimary); EXPECT_EQ(expected_bounds.ToString(), window->bounds().ToString()); // Snap left again ->> becomes normal. - controller_->PerformActionIfEnabled(WINDOW_CYCLE_SNAP_LEFT, {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kWindowCycleSnapLeft, + {}); EXPECT_TRUE(window_state->IsNormalStateType()); EXPECT_EQ(normal_bounds.ToString(), window->bounds().ToString()); } @@ -792,67 +812,73 @@ // Alt+[, clamshell, no overview wm::ActivateWindow(window1.get()); left_clamshell_no_overview = 1; - test("Snap left, clamshell, no overview", WINDOW_CYCLE_SNAP_LEFT, + test("Snap left, clamshell, no overview", + AcceleratorAction::kWindowCycleSnapLeft, WindowStateType::kPrimarySnapped); left_clamshell_no_overview = 2; - test("Unsnap left, clamshell, no overview", WINDOW_CYCLE_SNAP_LEFT, - WindowStateType::kNormal); + test("Unsnap left, clamshell, no overview", + AcceleratorAction::kWindowCycleSnapLeft, WindowStateType::kNormal); // Alt+[, clamshell, overview EnterOverviewAndDragToSnapRight(window1.get()); left_clamshell_overview = 1; - test("Snap left, clamshell, overview", WINDOW_CYCLE_SNAP_LEFT, + test("Snap left, clamshell, overview", + AcceleratorAction::kWindowCycleSnapLeft, WindowStateType::kPrimarySnapped); left_clamshell_overview = 2; - test("Unsnap left, clamshell, overview", WINDOW_CYCLE_SNAP_LEFT, - WindowStateType::kNormal); + test("Unsnap left, clamshell, overview", + AcceleratorAction::kWindowCycleSnapLeft, WindowStateType::kNormal); // Alt+], clamshell, no overview right_clamshell_no_overview = 1; - test("Snap right, clamshell, no overview", WINDOW_CYCLE_SNAP_RIGHT, + test("Snap right, clamshell, no overview", + AcceleratorAction::kWindowCycleSnapRight, WindowStateType::kSecondarySnapped); right_clamshell_no_overview = 2; - test("Unsnap right, clamshell, no overview", WINDOW_CYCLE_SNAP_RIGHT, - WindowStateType::kNormal); + test("Unsnap right, clamshell, no overview", + AcceleratorAction::kWindowCycleSnapRight, WindowStateType::kNormal); // Alt+], clamshell, overview EnterOverviewAndDragToSnapLeft(window1.get()); right_clamshell_overview = 1; - test("Snap right, clamshell, overview", WINDOW_CYCLE_SNAP_RIGHT, + test("Snap right, clamshell, overview", + AcceleratorAction::kWindowCycleSnapRight, WindowStateType::kSecondarySnapped); right_clamshell_overview = 2; - test("Unsnap right, clamshell, overview", WINDOW_CYCLE_SNAP_RIGHT, - WindowStateType::kNormal); + test("Unsnap right, clamshell, overview", + AcceleratorAction::kWindowCycleSnapRight, WindowStateType::kNormal); // Alt+[, tablet, no overview ShellTestApi().SetTabletModeEnabledForTest(true); left_tablet = 1; - test("Snap left, tablet, no overview", WINDOW_CYCLE_SNAP_LEFT, + test("Snap left, tablet, no overview", + AcceleratorAction::kWindowCycleSnapLeft, WindowStateType::kPrimarySnapped); ToggleOverview(); left_tablet = 2; - test("Unsnap left, tablet, no overview", WINDOW_CYCLE_SNAP_LEFT, - WindowStateType::kMaximized); + test("Unsnap left, tablet, no overview", + AcceleratorAction::kWindowCycleSnapLeft, WindowStateType::kMaximized); // Alt+[, tablet, overview EnterOverviewAndDragToSnapRight(window1.get()); left_tablet = 3; - test("Snap left, tablet, overview", WINDOW_CYCLE_SNAP_LEFT, + test("Snap left, tablet, overview", AcceleratorAction::kWindowCycleSnapLeft, WindowStateType::kPrimarySnapped); left_tablet = 4; - test("Unsnap left, tablet, overview", WINDOW_CYCLE_SNAP_LEFT, + test("Unsnap left, tablet, overview", AcceleratorAction::kWindowCycleSnapLeft, WindowStateType::kMaximized); // Alt+], tablet, no overview right_tablet = 1; - test("Snap right, tablet, no overview", WINDOW_CYCLE_SNAP_RIGHT, + test("Snap right, tablet, no overview", + AcceleratorAction::kWindowCycleSnapRight, WindowStateType::kSecondarySnapped); ToggleOverview(); right_tablet = 2; - test("Unsnap right, tablet, no overview", WINDOW_CYCLE_SNAP_RIGHT, - WindowStateType::kMaximized); + test("Unsnap right, tablet, no overview", + AcceleratorAction::kWindowCycleSnapRight, WindowStateType::kMaximized); // Alt+], tablet, overview EnterOverviewAndDragToSnapLeft(window1.get()); right_tablet = 3; - test("Snap right, tablet, overview", WINDOW_CYCLE_SNAP_RIGHT, + test("Snap right, tablet, overview", AcceleratorAction::kWindowCycleSnapRight, WindowStateType::kSecondarySnapped); right_tablet = 4; - test("Unsnap right, tablet, overview", WINDOW_CYCLE_SNAP_RIGHT, - WindowStateType::kMaximized); + test("Unsnap right, tablet, overview", + AcceleratorAction::kWindowCycleSnapRight, WindowStateType::kMaximized); } TEST_F(AcceleratorControllerTestWithClamshellSplitView, @@ -872,7 +898,8 @@ SplitViewMetricsController::DeviceOrientation::kLandscape, 0); window_state->Activate(); - controller_->PerformActionIfEnabled(WINDOW_CYCLE_SNAP_LEFT, {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kWindowCycleSnapLeft, + {}); gfx::Rect expected_bounds = GetDefaultSnappedWindowBoundsInParent( window.get(), SnapViewType::kPrimary); EXPECT_EQ(expected_bounds.ToString(), window->bounds().ToString()); @@ -883,7 +910,8 @@ kSnapWindowDeviceOrientationHistogram, SplitViewMetricsController::DeviceOrientation::kPortrait, 0); - controller_->PerformActionIfEnabled(WINDOW_CYCLE_SNAP_RIGHT, {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kWindowCycleSnapRight, + {}); histogram_tester.ExpectBucketCount( kSnapWindowDeviceOrientationHistogram, SplitViewMetricsController::DeviceOrientation::kLandscape, 2); @@ -894,7 +922,8 @@ window_state2->Activate(); UpdateDisplay("800x600/l"); - controller_->PerformActionIfEnabled(WINDOW_CYCLE_SNAP_LEFT, {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kWindowCycleSnapLeft, + {}); histogram_tester.ExpectBucketCount( kSnapWindowDeviceOrientationHistogram, SplitViewMetricsController::DeviceOrientation::kPortrait, 1); @@ -1144,8 +1173,8 @@ TEST_F(AcceleratorControllerTest, DontRepeatToggleFullscreen) { const AcceleratorData accelerators[] = { - {true, ui::VKEY_J, ui::EF_ALT_DOWN, TOGGLE_FULLSCREEN}, - {true, ui::VKEY_K, ui::EF_ALT_DOWN, TOGGLE_FULLSCREEN}, + {true, ui::VKEY_J, ui::EF_ALT_DOWN, AcceleratorAction::kToggleFullscreen}, + {true, ui::VKEY_K, ui::EF_ALT_DOWN, AcceleratorAction::kToggleFullscreen}, }; test_api_->RegisterAccelerators(accelerators); @@ -1813,7 +1842,7 @@ std::make_pair<std::string, std::string>(kVolumeButtonRegionScreen, kVolumeButtonSideBottom)})); -// Tests the TOGGLE_CAPS_LOCK accelerator. +// Tests the AcceleratorAction::kToggleCapsLock accelerator. TEST_F(AcceleratorControllerTest, ToggleCapsLockAccelerators) { ImeControllerImpl* controller = Shell::Get()->ime_controller(); @@ -2180,7 +2209,7 @@ for (const auto& iter : accelerators_needing_window) { window.reset(CreateTestWindowInShellWithBounds(gfx::Rect(5, 5, 20, 20))); wm::ActivateWindow(window.get()); - controller_->PerformActionIfEnabled(WINDOW_MINIMIZE, {}); + controller_->PerformActionIfEnabled(AcceleratorAction::kWindowMinimize, {}); accessibility_controller->TriggerAccessibilityAlert( AccessibilityAlert::NONE); controller_->PerformActionIfEnabled(iter.first, iter.second); @@ -2267,8 +2296,9 @@ EXPECT_CALL(*new_window_delegate_, OpenCalculator) .WillOnce(testing::Return()); EXPECT_CALL(*observer, OnActionPerformed) - .WillOnce( - [](AcceleratorAction action) { EXPECT_EQ(OPEN_CALCULATOR, action); }); + .WillOnce([](AcceleratorAction action) { + EXPECT_EQ(AcceleratorAction::kOpenCalculator, action); + }); EXPECT_TRUE(ProcessInController(accelerator)); accelerator_controller->RemoveObserver(observer.get()); } @@ -2361,17 +2391,18 @@ ui::VKEY_OEM_1, ui::DomCode::BRACKET_LEFT, ui::EF_ALT_DOWN); // With positional shortcuts disabled, the accelerator should not match - // WINDOW_CYCLE_SNAP_LEFT. + // AcceleratorAction::kWindowCycleSnapLeft. input_method_manager_->use_positional_shortcuts_ = false; input_method_manager_->NotifyInputMethodChanged(); - EXPECT_FALSE(controller_->DoesAcceleratorMatchAction(accelerator, - WINDOW_CYCLE_SNAP_LEFT)); + EXPECT_FALSE(controller_->DoesAcceleratorMatchAction( + accelerator, AcceleratorAction::kWindowCycleSnapLeft)); - // When enabled, accelerator should match WINDOW_CYCLE_SNAP_LEFT. + // When enabled, accelerator should match + // AcceleratorAction::kWindowCycleSnapLeft. input_method_manager_->use_positional_shortcuts_ = true; input_method_manager_->NotifyInputMethodChanged(); - EXPECT_TRUE(controller_->DoesAcceleratorMatchAction(accelerator, - WINDOW_CYCLE_SNAP_LEFT)); + EXPECT_TRUE(controller_->DoesAcceleratorMatchAction( + accelerator, AcceleratorAction::kWindowCycleSnapLeft)); } class AcceleratorControllerInputMethodTest : public AcceleratorControllerTest { @@ -2517,8 +2548,9 @@ ContainsDeprecatedAcceleratorNotification(data->uma_histogram_name)); RemoveAllNotifications(); - // If the action is LOCK_SCREEN, we must reset the state by unlocking the - // screen before we proceed testing the rest of accelerators. + // If the action is AcceleratorAction::kLockScreen, we must reset the state + // by unlocking the screen before we proceed testing the rest of + // accelerators. ResetStateIfNeeded(); } } @@ -2526,17 +2558,19 @@ TEST_F(DeprecatedAcceleratorTester, TestNewAccelerators) { // Add below the new accelerators that replaced the deprecated ones (if any). const AcceleratorData kNewAccelerators[] = { - {true, ui::VKEY_L, ui::EF_COMMAND_DOWN, LOCK_SCREEN}, + {true, ui::VKEY_L, ui::EF_COMMAND_DOWN, AcceleratorAction::kLockScreen}, {true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, - SWITCH_TO_NEXT_IME}, - {true, ui::VKEY_ESCAPE, ui::EF_COMMAND_DOWN, SHOW_TASK_MANAGER}, + AcceleratorAction::kSwitchToNextIme}, + {true, ui::VKEY_ESCAPE, ui::EF_COMMAND_DOWN, + AcceleratorAction::kShowTaskManager}, {true, ui::VKEY_K, ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN, - TOGGLE_IME_MENU_BUBBLE}, + AcceleratorAction::kToggleImeMenuBubble}, {true, ui::VKEY_H, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, - TOGGLE_HIGH_CONTRAST}, + AcceleratorAction::kToggleHighContrast}, }; - // The SWITCH_TO_NEXT_IME accelerator requires multiple IMEs to be available. + // The AcceleratorAction::kSwitchToNextIme accelerator requires multiple IMEs + // to be available. AddTestImes(); EXPECT_TRUE(IsMessageCenterEmpty()); @@ -2545,14 +2579,15 @@ EXPECT_TRUE(ProcessInController(CreateAccelerator(data))); // Expect no notifications from the new accelerators. - if (data.action != TOGGLE_HIGH_CONTRAST) { + if (data.action != AcceleratorAction::kToggleHighContrast) { // The toggle high contrast accelerator displays a notification specific // to the high contrast mode. EXPECT_TRUE(IsMessageCenterEmpty()); } - // If the action is LOCK_SCREEN, we must reset the state by unlocking the - // screen before we proceed testing the rest of accelerators. + // If the action is AcceleratorAction::kLockScreen, we must reset the state + // by unlocking the screen before we proceed testing the rest of + // accelerators. ResetStateIfNeeded(); } @@ -2566,7 +2601,7 @@ // New incognito window is disabled. EXPECT_FALSE(Shell::Get()->accelerator_controller()->PerformActionIfEnabled( - NEW_INCOGNITO_WINDOW, {})); + AcceleratorAction::kNewIncognitoWindow, {})); } constexpr char kUserEmail[] = "user@magnifier";
diff --git a/ash/accelerators/accelerator_table.cc b/ash/accelerators/accelerator_table.cc index 1500d8ae..cea5e51 100644 --- a/ash/accelerators/accelerator_table.cc +++ b/ash/accelerators/accelerator_table.cc
@@ -34,14 +34,16 @@ // 5- Don't forget to update the keyboard_shortcut_viewer_metadata.cc and // shortcut_viewer_strings.grdp. const AcceleratorData kDeprecatedAccelerators[] = { - {true, ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN, SHOW_TASK_MANAGER}}; + {true, ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN, + AcceleratorAction::kShowTaskManager}}; const size_t kDeprecatedAcceleratorsLength = std::size(kDeprecatedAccelerators); const DeprecatedAcceleratorData kDeprecatedAcceleratorsData[] = { // The action for the old shortcut was stopped in M92. Delete // completely in M94. - {SHOW_TASK_MANAGER, "Ash.Accelerators.Deprecated.ShowTaskManager", + {AcceleratorAction::kShowTaskManager, + "Ash.Accelerators.Deprecated.ShowTaskManager", IDS_DEPRECATED_SHOW_TASK_MANAGER_MSG, IDS_SHORTCUT_TASK_MANAGER_OLD, IDS_SHORTCUT_TASK_MANAGER_NEW, false}}; @@ -53,67 +55,88 @@ "Deprecated accelerator tables must be kept in sync"); const AcceleratorData kDebugAcceleratorData[] = { - {true, ui::VKEY_N, kDebugModifier, TOGGLE_WIFI}, - {true, ui::VKEY_X, kDebugModifier, DEBUG_KEYBOARD_BACKLIGHT_TOGGLE}, - {true, ui::VKEY_M, kDebugModifier, DEBUG_MICROPHONE_MUTE_TOGGLE}, - {true, ui::VKEY_O, kDebugModifier, DEBUG_SHOW_TOAST}, - {true, ui::VKEY_Z, kDebugModifier, DEBUG_SYSTEM_UI_STYLE_VIEWER}, + {true, ui::VKEY_N, kDebugModifier, AcceleratorAction::kToggleWifi}, + {true, ui::VKEY_X, kDebugModifier, + AcceleratorAction::kDebugKeyboardBacklightToggle}, + {true, ui::VKEY_M, kDebugModifier, + AcceleratorAction::kDebugMicrophoneMuteToggle}, + {true, ui::VKEY_O, kDebugModifier, AcceleratorAction::kDebugShowToast}, + {true, ui::VKEY_Z, kDebugModifier, + AcceleratorAction::kDebugSystemUiStyleViewer}, {true, ui::VKEY_P, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, - DEBUG_TOGGLE_TOUCH_PAD}, + AcceleratorAction::kDebugToggleTouchPad}, {true, ui::VKEY_T, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, - DEBUG_TOGGLE_TOUCH_SCREEN}, - {true, ui::VKEY_T, kDebugModifier, DEBUG_TOGGLE_TABLET_MODE}, + AcceleratorAction::kDebugToggleTouchScreen}, + {true, ui::VKEY_T, kDebugModifier, + AcceleratorAction::kDebugToggleTabletMode}, {true, ui::VKEY_A, kDebugModifier, - DEBUG_TOGGLE_VIDEO_CONFERENCE_CAMERA_TRAY_ICON}, + AcceleratorAction::kDebugToggleVideoConferenceCameraTrayIcon}, {true, ui::VKEY_B, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, - DEBUG_TOGGLE_WALLPAPER_MODE}, - {true, ui::VKEY_L, kDebugModifier, DEBUG_PRINT_LAYER_HIERARCHY}, - {true, ui::VKEY_V, kDebugModifier, DEBUG_PRINT_VIEW_HIERARCHY}, - {true, ui::VKEY_W, kDebugModifier, DEBUG_PRINT_WINDOW_HIERARCHY}, - {true, ui::VKEY_9, kDebugModifier, DEBUG_TOGGLE_GLANCEABLES}, - {true, ui::VKEY_B, kDebugModifier, DEBUG_TOGGLE_SHOW_DEBUG_BORDERS}, - {true, ui::VKEY_F, kDebugModifier, DEBUG_TOGGLE_SHOW_FPS_COUNTER}, - {true, ui::VKEY_P, kDebugModifier, DEBUG_TOGGLE_SHOW_PAINT_RECTS}, - {true, ui::VKEY_K, kDebugModifier, DEBUG_TRIGGER_CRASH}, - {true, ui::VKEY_G, kDebugModifier, DEBUG_TOGGLE_HUD_DISPLAY}, - {true, ui::VKEY_D, kDebugModifier, DEBUG_TOGGLE_DARK_MODE}, - {true, ui::VKEY_OEM_4, kDebugModifier, DEBUG_TUCK_FLOATED_WINDOW_LEFT}, - {true, ui::VKEY_OEM_6, kDebugModifier, DEBUG_TUCK_FLOATED_WINDOW_RIGHT}, - {true, ui::VKEY_Y, kDebugModifier, DEBUG_TOGGLE_DYNAMIC_COLOR}, - {true, ui::VKEY_E, kDebugModifier, DEBUG_TOGGLE_POWER_BUTTON_MENU}, + AcceleratorAction::kDebugToggleWallpaperMode}, + {true, ui::VKEY_L, kDebugModifier, + AcceleratorAction::kDebugPrintLayerHierarchy}, + {true, ui::VKEY_V, kDebugModifier, + AcceleratorAction::kDebugPrintViewHierarchy}, + {true, ui::VKEY_W, kDebugModifier, + AcceleratorAction::kDebugPrintWindowHierarchy}, + {true, ui::VKEY_9, kDebugModifier, + AcceleratorAction::kDebugToggleGlanceables}, + {true, ui::VKEY_B, kDebugModifier, + AcceleratorAction::kDebugToggleShowDebugBorders}, + {true, ui::VKEY_F, kDebugModifier, + AcceleratorAction::kDebugToggleShowFpsCounter}, + {true, ui::VKEY_P, kDebugModifier, + AcceleratorAction::kDebugToggleShowPaintRects}, + {true, ui::VKEY_K, kDebugModifier, AcceleratorAction::kDebugTriggerCrash}, + {true, ui::VKEY_G, kDebugModifier, + AcceleratorAction::kDebugToggleHudDisplay}, + {true, ui::VKEY_D, kDebugModifier, AcceleratorAction::kDebugToggleDarkMode}, + {true, ui::VKEY_OEM_4, kDebugModifier, + AcceleratorAction::kDebugTuckFloatedWindowLeft}, + {true, ui::VKEY_OEM_6, kDebugModifier, + AcceleratorAction::kDebugTuckFloatedWindowRight}, + {true, ui::VKEY_Y, kDebugModifier, + AcceleratorAction::kDebugToggleDynamicColor}, + {true, ui::VKEY_E, kDebugModifier, + AcceleratorAction::kDebugTogglePowerButtonMenu}, }; const size_t kDebugAcceleratorDataLength = std::size(kDebugAcceleratorData); const AcceleratorData kDeveloperAcceleratorData[] = { // Extra shortcut for debug build to control magnifier on Linux desktop. - {true, ui::VKEY_BRIGHTNESS_DOWN, ui::EF_CONTROL_DOWN, MAGNIFIER_ZOOM_OUT}, - {true, ui::VKEY_BRIGHTNESS_UP, ui::EF_CONTROL_DOWN, MAGNIFIER_ZOOM_IN}, + {true, ui::VKEY_BRIGHTNESS_DOWN, ui::EF_CONTROL_DOWN, + AcceleratorAction::kMagnifierZoomOut}, + {true, ui::VKEY_BRIGHTNESS_UP, ui::EF_CONTROL_DOWN, + AcceleratorAction::kMagnifierZoomIn}, // Extra shortcuts to lock the screen on Linux desktop. - {true, ui::VKEY_L, ui::EF_ALT_DOWN, LOCK_PRESSED}, - {false, ui::VKEY_L, ui::EF_ALT_DOWN, LOCK_RELEASED}, - {true, ui::VKEY_P, ui::EF_ALT_DOWN, POWER_PRESSED}, - {false, ui::VKEY_P, ui::EF_ALT_DOWN, POWER_RELEASED}, - {true, ui::VKEY_POWER, ui::EF_SHIFT_DOWN, LOCK_PRESSED}, - {false, ui::VKEY_POWER, ui::EF_SHIFT_DOWN, LOCK_RELEASED}, + {true, ui::VKEY_L, ui::EF_ALT_DOWN, AcceleratorAction::kLockPressed}, + {false, ui::VKEY_L, ui::EF_ALT_DOWN, AcceleratorAction::kLockReleased}, + {true, ui::VKEY_P, ui::EF_ALT_DOWN, AcceleratorAction::kPowerPressed}, + {false, ui::VKEY_P, ui::EF_ALT_DOWN, AcceleratorAction::kPowerReleased}, + {true, ui::VKEY_POWER, ui::EF_SHIFT_DOWN, AcceleratorAction::kLockPressed}, + {false, ui::VKEY_POWER, ui::EF_SHIFT_DOWN, + AcceleratorAction::kLockReleased}, {true, ui::VKEY_D, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, - DEV_ADD_REMOVE_DISPLAY}, + AcceleratorAction::kDevAddRemoveDisplay}, {true, ui::VKEY_U, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, - DEV_TOGGLE_UNIFIED_DESKTOP}, + AcceleratorAction::kDevToggleUnifiedDesktop}, {true, ui::VKEY_M, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, - TOGGLE_MIRROR_MODE}, - {true, ui::VKEY_W, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, TOGGLE_WIFI}, + AcceleratorAction::kToggleMirrorMode}, + {true, ui::VKEY_W, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kToggleWifi}, // Extra shortcut for display swapping as Alt-F4 is taken on Linux desktop. - {true, ui::VKEY_S, kDebugModifier, SWAP_PRIMARY_DISPLAY}, + {true, ui::VKEY_S, kDebugModifier, AcceleratorAction::kSwapPrimaryDisplay}, // Extra shortcut to rotate/scale up/down the screen on Linux desktop. - {true, ui::VKEY_R, kDebugModifier, ROTATE_SCREEN}, + {true, ui::VKEY_R, kDebugModifier, AcceleratorAction::kRotateScreen}, // For testing on systems where Alt-Tab is already mapped. - {true, ui::VKEY_W, ui::EF_ALT_DOWN, CYCLE_FORWARD_MRU}, - {true, ui::VKEY_W, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + {true, ui::VKEY_W, ui::EF_ALT_DOWN, AcceleratorAction::kCycleForwardMru}, + {true, ui::VKEY_W, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, {true, ui::VKEY_F, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, - TOGGLE_FULLSCREEN}, + AcceleratorAction::kToggleFullscreen}, // For testing on Linux desktop where it's hard to rebind the caps lock key. - {true, ui::VKEY_A, ui::EF_ALT_DOWN, DEV_TOGGLE_APP_LIST}, + {true, ui::VKEY_A, ui::EF_ALT_DOWN, AcceleratorAction::kDevToggleAppList}, }; const size_t kDeveloperAcceleratorDataLength = @@ -121,73 +144,75 @@ const AcceleratorAction kPreferredActions[] = { // Window cycling accelerators. - CYCLE_BACKWARD_MRU, // Shift+Alt+Tab - CYCLE_FORWARD_MRU, // Alt+Tab - CYCLE_SAME_APP_WINDOWS_BACKWARD, // Shift+Alt+Backtick - CYCLE_SAME_APP_WINDOWS_FORWARD, // Alt+Backtick + AcceleratorAction::kCycleBackwardMru, // Shift+Alt+Tab + AcceleratorAction::kCycleForwardMru, // Alt+Tab + AcceleratorAction::kCycleSameAppWindowsBackward, // Shift+Alt+Backtick + AcceleratorAction::kCycleSameAppWindowsForward, // Alt+Backtick }; const size_t kPreferredActionsLength = std::size(kPreferredActions); const AcceleratorAction kReservedActions[] = { - POWER_PRESSED, POWER_RELEASED, LOCK_PRESSED, LOCK_RELEASED, SUSPEND, + AcceleratorAction::kPowerPressed, AcceleratorAction::kPowerReleased, + AcceleratorAction::kLockPressed, AcceleratorAction::kLockReleased, + AcceleratorAction::kSuspend, }; const size_t kReservedActionsLength = std::size(kReservedActions); const AcceleratorAction kActionsAllowedAtLoginOrLockScreen[] = { - BRIGHTNESS_DOWN, - BRIGHTNESS_UP, - DEBUG_PRINT_LAYER_HIERARCHY, - DEBUG_PRINT_VIEW_HIERARCHY, - DEBUG_PRINT_WINDOW_HIERARCHY, - DEBUG_TOGGLE_HUD_DISPLAY, - DEBUG_TOGGLE_TOUCH_PAD, - DEBUG_TOGGLE_TOUCH_SCREEN, - DEBUG_TOGGLE_TABLET_MODE, - DEV_ADD_REMOVE_DISPLAY, - DISABLE_CAPS_LOCK, - KEYBOARD_BACKLIGHT_TOGGLE, - KEYBOARD_BRIGHTNESS_DOWN, - KEYBOARD_BRIGHTNESS_UP, - MAGNIFIER_ZOOM_IN, // Control+F7 - MAGNIFIER_ZOOM_OUT, // Control+F6 - MEDIA_FAST_FORWARD, - MEDIA_NEXT_TRACK, - MEDIA_PAUSE, - MEDIA_PLAY, - MEDIA_PLAY_PAUSE, - MEDIA_PREV_TRACK, - MEDIA_REWIND, - MEDIA_STOP, - MICROPHONE_MUTE_TOGGLE, - PRIVACY_SCREEN_TOGGLE, - PRINT_UI_HIERARCHIES, - ROTATE_SCREEN, - SCALE_UI_DOWN, - SCALE_UI_RESET, - SCALE_UI_UP, - TOGGLE_IME_MENU_BUBBLE, - SWITCH_TO_LAST_USED_IME, - SWITCH_TO_NEXT_IME, - TAKE_SCREENSHOT, - TOGGLE_CALENDAR, - TOGGLE_CAPS_LOCK, - TOGGLE_DICTATION, - TOGGLE_DOCKED_MAGNIFIER, - TOGGLE_FULLSCREEN_MAGNIFIER, - TOGGLE_HIGH_CONTRAST, - TOGGLE_MIRROR_MODE, - TOGGLE_SPOKEN_FEEDBACK, - TOGGLE_SYSTEM_TRAY_BUBBLE, - TOGGLE_WIFI, - TOUCH_HUD_CLEAR, - VOLUME_DOWN, - VOLUME_MUTE, - VOLUME_UP, + AcceleratorAction::kBrightnessDown, + AcceleratorAction::kBrightnessUp, + AcceleratorAction::kDebugPrintLayerHierarchy, + AcceleratorAction::kDebugPrintViewHierarchy, + AcceleratorAction::kDebugPrintWindowHierarchy, + AcceleratorAction::kDebugToggleHudDisplay, + AcceleratorAction::kDebugToggleTouchPad, + AcceleratorAction::kDebugToggleTouchScreen, + AcceleratorAction::kDebugToggleTabletMode, + AcceleratorAction::kDevAddRemoveDisplay, + AcceleratorAction::kDisableCapsLock, + AcceleratorAction::kKeyboardBacklightToggle, + AcceleratorAction::kKeyboardBrightnessDown, + AcceleratorAction::kKeyboardBrightnessUp, + AcceleratorAction::kMagnifierZoomIn, // Control+F7 + AcceleratorAction::kMagnifierZoomOut, // Control+F6 + AcceleratorAction::kMediaFastForward, + AcceleratorAction::kMediaNextTrack, + AcceleratorAction::kMediaPause, + AcceleratorAction::kMediaPlay, + AcceleratorAction::kMediaPlayPause, + AcceleratorAction::kMediaPrevTrack, + AcceleratorAction::kMediaRewind, + AcceleratorAction::kMediaStop, + AcceleratorAction::kMicrophoneMuteToggle, + AcceleratorAction::kPrivacyScreenToggle, + AcceleratorAction::kPrintUiHierarchies, + AcceleratorAction::kRotateScreen, + AcceleratorAction::kScaleUiDown, + AcceleratorAction::kScaleUiReset, + AcceleratorAction::kScaleUiUp, + AcceleratorAction::kToggleImeMenuBubble, + AcceleratorAction::kSwitchToLastUsedIme, + AcceleratorAction::kSwitchToNextIme, + AcceleratorAction::kTakeScreenshot, + AcceleratorAction::kToggleCalendar, + AcceleratorAction::kToggleCapsLock, + AcceleratorAction::kToggleDictation, + AcceleratorAction::kToggleDockedMagnifier, + AcceleratorAction::kToggleFullscreenMagnifier, + AcceleratorAction::kToggleHighContrast, + AcceleratorAction::kToggleMirrorMode, + AcceleratorAction::kToggleSpokenFeedback, + AcceleratorAction::kToggleSystemTrayBubble, + AcceleratorAction::kToggleWifi, + AcceleratorAction::kTouchHudClear, + AcceleratorAction::kVolumeDown, + AcceleratorAction::kVolumeMute, + AcceleratorAction::kVolumeUp, #if !defined(NDEBUG) - POWER_PRESSED, - POWER_RELEASED, + AcceleratorAction::kPowerPressed, + AcceleratorAction::kPowerReleased, #endif // !defined(NDEBUG) }; @@ -195,169 +220,171 @@ std::size(kActionsAllowedAtLoginOrLockScreen); const AcceleratorAction kActionsAllowedAtLockScreen[] = { - EXIT, - SUSPEND, + AcceleratorAction::kExit, + AcceleratorAction::kSuspend, }; const size_t kActionsAllowedAtLockScreenLength = std::size(kActionsAllowedAtLockScreen); const AcceleratorAction kActionsAllowedAtPowerMenu[] = { - BRIGHTNESS_DOWN, BRIGHTNESS_UP, VOLUME_DOWN, VOLUME_UP, VOLUME_MUTE, + AcceleratorAction::kBrightnessDown, AcceleratorAction::kBrightnessUp, + AcceleratorAction::kVolumeDown, AcceleratorAction::kVolumeUp, + AcceleratorAction::kVolumeMute, }; const size_t kActionsAllowedAtPowerMenuLength = std::size(kActionsAllowedAtPowerMenu); const AcceleratorAction kActionsAllowedAtModalWindow[] = { - BRIGHTNESS_DOWN, - BRIGHTNESS_UP, - DEBUG_KEYBOARD_BACKLIGHT_TOGGLE, - DEBUG_MICROPHONE_MUTE_TOGGLE, - DEBUG_TOGGLE_TOUCH_PAD, - DEBUG_TOGGLE_TOUCH_SCREEN, - DEV_ADD_REMOVE_DISPLAY, - DISABLE_CAPS_LOCK, - EXIT, - KEYBOARD_BACKLIGHT_TOGGLE, - KEYBOARD_BRIGHTNESS_DOWN, - KEYBOARD_BRIGHTNESS_UP, - LOCK_SCREEN, - MAGNIFIER_ZOOM_IN, - MAGNIFIER_ZOOM_OUT, - MEDIA_FAST_FORWARD, - MEDIA_NEXT_TRACK, - MEDIA_PAUSE, - MEDIA_PLAY, - MEDIA_PLAY_PAUSE, - MEDIA_PREV_TRACK, - MEDIA_REWIND, - MEDIA_STOP, - MICROPHONE_MUTE_TOGGLE, - OPEN_FEEDBACK_PAGE, - POWER_PRESSED, - POWER_RELEASED, - PRINT_UI_HIERARCHIES, - PRIVACY_SCREEN_TOGGLE, - ROTATE_SCREEN, - SCALE_UI_DOWN, - SCALE_UI_RESET, - SCALE_UI_UP, - TOGGLE_IME_MENU_BUBBLE, - SHOW_SHORTCUT_VIEWER, - SUSPEND, - SWAP_PRIMARY_DISPLAY, - SWITCH_TO_LAST_USED_IME, - SWITCH_TO_NEXT_IME, - TAKE_PARTIAL_SCREENSHOT, - TAKE_SCREENSHOT, - TAKE_WINDOW_SCREENSHOT, - TOGGLE_CAPS_LOCK, - TOGGLE_DICTATION, - TOGGLE_DOCKED_MAGNIFIER, - TOGGLE_FULLSCREEN_MAGNIFIER, - TOGGLE_HIGH_CONTRAST, - TOGGLE_MIRROR_MODE, - TOGGLE_SPOKEN_FEEDBACK, - TOGGLE_WIFI, - VOLUME_DOWN, - VOLUME_MUTE, - VOLUME_UP, + AcceleratorAction::kBrightnessDown, + AcceleratorAction::kBrightnessUp, + AcceleratorAction::kDebugKeyboardBacklightToggle, + AcceleratorAction::kDebugMicrophoneMuteToggle, + AcceleratorAction::kDebugToggleTouchPad, + AcceleratorAction::kDebugToggleTouchScreen, + AcceleratorAction::kDevAddRemoveDisplay, + AcceleratorAction::kDisableCapsLock, + AcceleratorAction::kExit, + AcceleratorAction::kKeyboardBacklightToggle, + AcceleratorAction::kKeyboardBrightnessDown, + AcceleratorAction::kKeyboardBrightnessUp, + AcceleratorAction::kLockScreen, + AcceleratorAction::kMagnifierZoomIn, + AcceleratorAction::kMagnifierZoomOut, + AcceleratorAction::kMediaFastForward, + AcceleratorAction::kMediaNextTrack, + AcceleratorAction::kMediaPause, + AcceleratorAction::kMediaPlay, + AcceleratorAction::kMediaPlayPause, + AcceleratorAction::kMediaPrevTrack, + AcceleratorAction::kMediaRewind, + AcceleratorAction::kMediaStop, + AcceleratorAction::kMicrophoneMuteToggle, + AcceleratorAction::kOpenFeedbackPage, + AcceleratorAction::kPowerPressed, + AcceleratorAction::kPowerReleased, + AcceleratorAction::kPrintUiHierarchies, + AcceleratorAction::kPrivacyScreenToggle, + AcceleratorAction::kRotateScreen, + AcceleratorAction::kScaleUiDown, + AcceleratorAction::kScaleUiReset, + AcceleratorAction::kScaleUiUp, + AcceleratorAction::kToggleImeMenuBubble, + AcceleratorAction::kShowShortcutViewer, + AcceleratorAction::kSuspend, + AcceleratorAction::kSwapPrimaryDisplay, + AcceleratorAction::kSwitchToLastUsedIme, + AcceleratorAction::kSwitchToNextIme, + AcceleratorAction::kTakePartialScreenshot, + AcceleratorAction::kTakeScreenshot, + AcceleratorAction::kTakeWindowScreenshot, + AcceleratorAction::kToggleCapsLock, + AcceleratorAction::kToggleDictation, + AcceleratorAction::kToggleDockedMagnifier, + AcceleratorAction::kToggleFullscreenMagnifier, + AcceleratorAction::kToggleHighContrast, + AcceleratorAction::kToggleMirrorMode, + AcceleratorAction::kToggleSpokenFeedback, + AcceleratorAction::kToggleWifi, + AcceleratorAction::kVolumeDown, + AcceleratorAction::kVolumeMute, + AcceleratorAction::kVolumeUp, }; const size_t kActionsAllowedAtModalWindowLength = std::size(kActionsAllowedAtModalWindow); const AcceleratorAction kRepeatableActions[] = { - BRIGHTNESS_DOWN, - BRIGHTNESS_UP, - FOCUS_NEXT_PANE, - FOCUS_PREVIOUS_PANE, - KEYBOARD_BRIGHTNESS_DOWN, - KEYBOARD_BRIGHTNESS_UP, - MAGNIFIER_ZOOM_IN, - MAGNIFIER_ZOOM_OUT, - MEDIA_FAST_FORWARD, - MEDIA_NEXT_TRACK, - MEDIA_PREV_TRACK, - MEDIA_REWIND, - RESTORE_TAB, - VOLUME_DOWN, - VOLUME_UP, + AcceleratorAction::kBrightnessDown, + AcceleratorAction::kBrightnessUp, + AcceleratorAction::kFocusNextPane, + AcceleratorAction::kFocusPreviousPane, + AcceleratorAction::kKeyboardBrightnessDown, + AcceleratorAction::kKeyboardBrightnessUp, + AcceleratorAction::kMagnifierZoomIn, + AcceleratorAction::kMagnifierZoomOut, + AcceleratorAction::kMediaFastForward, + AcceleratorAction::kMediaNextTrack, + AcceleratorAction::kMediaPrevTrack, + AcceleratorAction::kMediaRewind, + AcceleratorAction::kRestoreTab, + AcceleratorAction::kVolumeDown, + AcceleratorAction::kVolumeUp, }; const size_t kRepeatableActionsLength = std::size(kRepeatableActions); const AcceleratorAction kActionsAllowedInAppModeOrPinnedMode[] = { - BRIGHTNESS_DOWN, - BRIGHTNESS_UP, - DEBUG_KEYBOARD_BACKLIGHT_TOGGLE, - DEBUG_MICROPHONE_MUTE_TOGGLE, - DEBUG_PRINT_LAYER_HIERARCHY, - DEBUG_PRINT_VIEW_HIERARCHY, - DEBUG_PRINT_WINDOW_HIERARCHY, - DEBUG_TOGGLE_TOUCH_PAD, - DEBUG_TOGGLE_TOUCH_SCREEN, - DEV_ADD_REMOVE_DISPLAY, - DISABLE_CAPS_LOCK, - KEYBOARD_BACKLIGHT_TOGGLE, - KEYBOARD_BRIGHTNESS_DOWN, - KEYBOARD_BRIGHTNESS_UP, - MAGNIFIER_ZOOM_IN, // Control+F7 - MAGNIFIER_ZOOM_OUT, // Control+F6 - MEDIA_FAST_FORWARD, - MEDIA_NEXT_TRACK, - MEDIA_PAUSE, - MEDIA_PLAY, - MEDIA_PLAY_PAUSE, - MEDIA_PREV_TRACK, - MEDIA_REWIND, - MEDIA_STOP, - MICROPHONE_MUTE_TOGGLE, - PASTE_CLIPBOARD_HISTORY_PLAIN_TEXT, - POWER_PRESSED, - POWER_RELEASED, - PRINT_UI_HIERARCHIES, - PRIVACY_SCREEN_TOGGLE, - ROTATE_SCREEN, - SCALE_UI_DOWN, - SCALE_UI_RESET, - SCALE_UI_UP, - SWAP_PRIMARY_DISPLAY, - SWITCH_TO_LAST_USED_IME, - SWITCH_TO_NEXT_IME, - TOGGLE_CAPS_LOCK, - TOGGLE_CLIPBOARD_HISTORY, - TOGGLE_DICTATION, - TOGGLE_DOCKED_MAGNIFIER, - TOGGLE_FULLSCREEN_MAGNIFIER, - TOGGLE_HIGH_CONTRAST, - TOGGLE_MIRROR_MODE, - TOGGLE_SPOKEN_FEEDBACK, - TOGGLE_WIFI, - TOUCH_HUD_CLEAR, - VOLUME_DOWN, - VOLUME_MUTE, - VOLUME_UP, + AcceleratorAction::kBrightnessDown, + AcceleratorAction::kBrightnessUp, + AcceleratorAction::kDebugKeyboardBacklightToggle, + AcceleratorAction::kDebugMicrophoneMuteToggle, + AcceleratorAction::kDebugPrintLayerHierarchy, + AcceleratorAction::kDebugPrintViewHierarchy, + AcceleratorAction::kDebugPrintWindowHierarchy, + AcceleratorAction::kDebugToggleTouchPad, + AcceleratorAction::kDebugToggleTouchScreen, + AcceleratorAction::kDevAddRemoveDisplay, + AcceleratorAction::kDisableCapsLock, + AcceleratorAction::kKeyboardBacklightToggle, + AcceleratorAction::kKeyboardBrightnessDown, + AcceleratorAction::kKeyboardBrightnessUp, + AcceleratorAction::kMagnifierZoomIn, // Control+F7 + AcceleratorAction::kMagnifierZoomOut, // Control+F6 + AcceleratorAction::kMediaFastForward, + AcceleratorAction::kMediaNextTrack, + AcceleratorAction::kMediaPause, + AcceleratorAction::kMediaPlay, + AcceleratorAction::kMediaPlayPause, + AcceleratorAction::kMediaPrevTrack, + AcceleratorAction::kMediaRewind, + AcceleratorAction::kMediaStop, + AcceleratorAction::kMicrophoneMuteToggle, + AcceleratorAction::kPasteClipboardHistoryPlainText, + AcceleratorAction::kPowerPressed, + AcceleratorAction::kPowerReleased, + AcceleratorAction::kPrintUiHierarchies, + AcceleratorAction::kPrivacyScreenToggle, + AcceleratorAction::kRotateScreen, + AcceleratorAction::kScaleUiDown, + AcceleratorAction::kScaleUiReset, + AcceleratorAction::kScaleUiUp, + AcceleratorAction::kSwapPrimaryDisplay, + AcceleratorAction::kSwitchToLastUsedIme, + AcceleratorAction::kSwitchToNextIme, + AcceleratorAction::kToggleCapsLock, + AcceleratorAction::kToggleClipboardHistory, + AcceleratorAction::kToggleDictation, + AcceleratorAction::kToggleDockedMagnifier, + AcceleratorAction::kToggleFullscreenMagnifier, + AcceleratorAction::kToggleHighContrast, + AcceleratorAction::kToggleMirrorMode, + AcceleratorAction::kToggleSpokenFeedback, + AcceleratorAction::kToggleWifi, + AcceleratorAction::kTouchHudClear, + AcceleratorAction::kVolumeDown, + AcceleratorAction::kVolumeMute, + AcceleratorAction::kVolumeUp, }; const size_t kActionsAllowedInAppModeOrPinnedModeLength = std::size(kActionsAllowedInAppModeOrPinnedMode); const AcceleratorAction kActionsAllowedInPinnedMode[] = { - LOCK_SCREEN, - SUSPEND, - TAKE_PARTIAL_SCREENSHOT, - TAKE_SCREENSHOT, - TAKE_WINDOW_SCREENSHOT, - UNPIN, + AcceleratorAction::kLockScreen, + AcceleratorAction::kSuspend, + AcceleratorAction::kTakePartialScreenshot, + AcceleratorAction::kTakeScreenshot, + AcceleratorAction::kTakeWindowScreenshot, + AcceleratorAction::kUnpin, }; const size_t kActionsAllowedInPinnedModeLength = std::size(kActionsAllowedInPinnedMode); const AcceleratorAction kActionsAllowedInAppMode[] = { - FOCUS_SHELF, + AcceleratorAction::kFocusShelf, }; const size_t kActionsAllowedInAppModeLength = @@ -365,86 +392,86 @@ const AcceleratorAction kActionsNeedingWindow[] = { // clang-format off - DESKS_MOVE_ACTIVE_ITEM_LEFT, - DESKS_MOVE_ACTIVE_ITEM_RIGHT, - DESKS_TOGGLE_ASSIGN_TO_ALL_DESKS, - MOVE_ACTIVE_WINDOW_BETWEEN_DISPLAYS, - ROTATE_WINDOW, - TOGGLE_FLOATING, - TOGGLE_FULLSCREEN, - TOGGLE_MAXIMIZED, - TOGGLE_SNAP_GROUP_WINDOWS_MINIMIZE_AND_RESTORE, - WINDOW_CYCLE_SNAP_LEFT, - WINDOW_CYCLE_SNAP_RIGHT, - WINDOW_MINIMIZE, + AcceleratorAction::kDesksMoveActiveItemLeft, + AcceleratorAction::kDesksMoveActiveItemRight, + AcceleratorAction::kDesksToggleAssignToAllDesks, + AcceleratorAction::kMoveActiveWindowBetweenDisplays, + AcceleratorAction::kRotateWindow, + AcceleratorAction::kToggleFloating, + AcceleratorAction::kToggleFullscreen, + AcceleratorAction::kToggleMaximized, + AcceleratorAction::kToggleSnapGroupWindowsMinimizeAndRestore, + AcceleratorAction::kWindowCycleSnapLeft, + AcceleratorAction::kWindowCycleSnapRight, + AcceleratorAction::kWindowMinimize, // clang-format on }; const size_t kActionsNeedingWindowLength = std::size(kActionsNeedingWindow); const AcceleratorAction kActionsKeepingMenuOpen[] = { - BRIGHTNESS_DOWN, - BRIGHTNESS_UP, - DEBUG_KEYBOARD_BACKLIGHT_TOGGLE, - DEBUG_MICROPHONE_MUTE_TOGGLE, - DEBUG_TOGGLE_TOUCH_PAD, - DEBUG_TOGGLE_TOUCH_SCREEN, + AcceleratorAction::kBrightnessDown, + AcceleratorAction::kBrightnessUp, + AcceleratorAction::kDebugKeyboardBacklightToggle, + AcceleratorAction::kDebugMicrophoneMuteToggle, + AcceleratorAction::kDebugToggleTouchPad, + AcceleratorAction::kDebugToggleTouchScreen, // Keep the menu open when switching desks. The desk activation code will // close the menu without animation manually. Otherwise, the menu will fade // out and a trace will be visible while switching desks. - DESKS_ACTIVATE_DESK_LEFT, - DESKS_ACTIVATE_DESK_RIGHT, - DESKS_NEW_DESK, - DESKS_REMOVE_CURRENT_DESK, - DISABLE_CAPS_LOCK, - KEYBOARD_BACKLIGHT_TOGGLE, - KEYBOARD_BRIGHTNESS_DOWN, - KEYBOARD_BRIGHTNESS_UP, - MEDIA_FAST_FORWARD, - MEDIA_NEXT_TRACK, - MEDIA_PAUSE, - MEDIA_PLAY, - MEDIA_PLAY_PAUSE, - MEDIA_PREV_TRACK, - MEDIA_REWIND, - MEDIA_STOP, - MICROPHONE_MUTE_TOGGLE, - PASTE_CLIPBOARD_HISTORY_PLAIN_TEXT, - PRINT_UI_HIERARCHIES, - PRIVACY_SCREEN_TOGGLE, - SWITCH_TO_LAST_USED_IME, - SWITCH_TO_NEXT_IME, - TAKE_PARTIAL_SCREENSHOT, - TAKE_SCREENSHOT, - TAKE_WINDOW_SCREENSHOT, - TOGGLE_APP_LIST, - TOGGLE_CAPS_LOCK, - TOGGLE_CLIPBOARD_HISTORY, - TOGGLE_DICTATION, - TOGGLE_DOCKED_MAGNIFIER, - TOGGLE_FULLSCREEN_MAGNIFIER, - TOGGLE_HIGH_CONTRAST, - TOGGLE_SPOKEN_FEEDBACK, - TOGGLE_WIFI, - VOLUME_DOWN, - VOLUME_MUTE, - VOLUME_UP, + AcceleratorAction::kDesksActivateDeskLeft, + AcceleratorAction::kDesksActivateDeskRight, + AcceleratorAction::kDesksNewDesk, + AcceleratorAction::kDesksRemoveCurrentDesk, + AcceleratorAction::kDisableCapsLock, + AcceleratorAction::kKeyboardBacklightToggle, + AcceleratorAction::kKeyboardBrightnessDown, + AcceleratorAction::kKeyboardBrightnessUp, + AcceleratorAction::kMediaFastForward, + AcceleratorAction::kMediaNextTrack, + AcceleratorAction::kMediaPause, + AcceleratorAction::kMediaPlay, + AcceleratorAction::kMediaPlayPause, + AcceleratorAction::kMediaPrevTrack, + AcceleratorAction::kMediaRewind, + AcceleratorAction::kMediaStop, + AcceleratorAction::kMicrophoneMuteToggle, + AcceleratorAction::kPasteClipboardHistoryPlainText, + AcceleratorAction::kPrintUiHierarchies, + AcceleratorAction::kPrivacyScreenToggle, + AcceleratorAction::kSwitchToLastUsedIme, + AcceleratorAction::kSwitchToNextIme, + AcceleratorAction::kTakePartialScreenshot, + AcceleratorAction::kTakeScreenshot, + AcceleratorAction::kTakeWindowScreenshot, + AcceleratorAction::kToggleAppList, + AcceleratorAction::kToggleCapsLock, + AcceleratorAction::kToggleClipboardHistory, + AcceleratorAction::kToggleDictation, + AcceleratorAction::kToggleDockedMagnifier, + AcceleratorAction::kToggleFullscreenMagnifier, + AcceleratorAction::kToggleHighContrast, + AcceleratorAction::kToggleSpokenFeedback, + AcceleratorAction::kToggleWifi, + AcceleratorAction::kVolumeDown, + AcceleratorAction::kVolumeMute, + AcceleratorAction::kVolumeUp, }; const size_t kActionsKeepingMenuOpenLength = std::size(kActionsKeepingMenuOpen); const AcceleratorAction kActionsDuplicatedWithBrowser[] = { // clang-format off - NEW_WINDOW, - NEW_INCOGNITO_WINDOW, - RESTORE_TAB, - NEW_TAB, + AcceleratorAction::kNewWindow, + AcceleratorAction::kNewIncognitoWindow, + AcceleratorAction::kRestoreTab, + AcceleratorAction::kNewTab, // clang-format on -// OPEN_FEEDBACK_PAGE is guarded by the BRANDING macro on defining Browser's -// shortcuts. To follow it, guard it here, too. +// AcceleratorAction::kOpenFeedbackPage is guarded by the BRANDING macro on +// defining Browser's shortcuts. To follow it, guard it here, too. #if BUILDFLAG(GOOGLE_CHROME_BRANDING) - OPEN_FEEDBACK_PAGE, + AcceleratorAction::kOpenFeedbackPage, #endif }; @@ -452,9 +479,9 @@ std::size(kActionsDuplicatedWithBrowser); const AcceleratorAction kActionsInterceptableByBrowser[] = { - SHOW_TASK_MANAGER, - OPEN_GET_HELP, - MINIMIZE_TOP_WINDOW_ON_BACK, + AcceleratorAction::kShowTaskManager, + AcceleratorAction::kOpenGetHelp, + AcceleratorAction::kMinimizeTopWindowOnBack, }; const size_t kActionsInterceptableByBrowserLength =
diff --git a/ash/accelerators/ash_accelerator_configuration_unittest.cc b/ash/accelerators/ash_accelerator_configuration_unittest.cc index abc2f03..41a02c2 100644 --- a/ash/accelerators/ash_accelerator_configuration_unittest.cc +++ b/ash/accelerators/ash_accelerator_configuration_unittest.cc
@@ -139,13 +139,15 @@ TEST_F(AshAcceleratorConfigurationTest, VerifyAcceleratorMappingPopulated) { const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; config_->Initialize(test_data); @@ -156,38 +158,41 @@ } TEST_F(AshAcceleratorConfigurationTest, DeprecatedAccelerators) { - // Test deprecated accelerators, in this case `SHOW_TASK_MANAGER` has two - // associated accelerators: (deprecated) ESCAPE + SHIFT and - // (active) ESCAPE + COMMAND. + // Test deprecated accelerators, in this case + // `AcceleratorAction::kShowTaskManager` has two associated accelerators: + // (deprecated) ESCAPE + SHIFT and (active) ESCAPE + COMMAND. const AcceleratorData initial_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, {/*trigger_on_press=*/true, ui::VKEY_ESCAPE, ui::EF_COMMAND_DOWN, - SHOW_TASK_MANAGER}, + AcceleratorAction::kShowTaskManager}, }; const AcceleratorData expected_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, {/*trigger_on_press=*/true, ui::VKEY_ESCAPE, ui::EF_COMMAND_DOWN, - SHOW_TASK_MANAGER}, + AcceleratorAction::kShowTaskManager}, {/*trigger_on_press=*/true, ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN, - SHOW_TASK_MANAGER}, + AcceleratorAction::kShowTaskManager}, }; const DeprecatedAcceleratorData deprecated_data[] = { - {SHOW_TASK_MANAGER, /*uma_histogram_name=*/"deprecated.showTaskManager", + {AcceleratorAction::kShowTaskManager, + /*uma_histogram_name=*/"deprecated.showTaskManager", /*notification_message_id=*/1, /*old_shortcut_id=*/1, /*new_shortcut_id=*/2, /*deprecated_enabled=*/true}, }; const AcceleratorData test_deprecated_accelerators[] = { {/*trigger_on_press=*/true, ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN, - SHOW_TASK_MANAGER}, + AcceleratorAction::kShowTaskManager}, }; config_->Initialize(initial_test_data); @@ -216,10 +221,12 @@ ui::EF_SHIFT_DOWN); EXPECT_TRUE(config_->IsDeprecated(deprecated_accelerator)); // Verify fetching a deprecated accelerator works. - EXPECT_EQ(deprecated_data, - config_->GetDeprecatedAcceleratorData(SHOW_TASK_MANAGER)); - // CYCLE_BACKWARD_MRU is not a deprecated action, expect nullptr. - EXPECT_EQ(nullptr, config_->GetDeprecatedAcceleratorData(CYCLE_BACKWARD_MRU)); + EXPECT_EQ(deprecated_data, config_->GetDeprecatedAcceleratorData( + AcceleratorAction::kShowTaskManager)); + // AcceleratorAction::kCycleBackwardMru is not a deprecated action, expect + // nullptr. + EXPECT_EQ(nullptr, config_->GetDeprecatedAcceleratorData( + AcceleratorAction::kCycleBackwardMru)); // Verify that ESCAPE + COMMAND is not deprecated. const ui::Accelerator active_accelerator(ui::VKEY_ESCAPE, @@ -229,38 +236,41 @@ TEST_F(AshAcceleratorConfigurationTest, RemoveAndRestoreDeprecatedAccelerators) { - // Test deprecated accelerators, in this case `SHOW_TASK_MANAGER` has two - // associated accelerators: (deprecated) ESCAPE + SHIFT and - // (active) ESCAPE + COMMAND. + // Test deprecated accelerators, in this case + // `AcceleratorAction::kShowTaskManager` has two associated accelerators: + // (deprecated) ESCAPE + SHIFT and (active) ESCAPE + COMMAND. const AcceleratorData initial_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, {/*trigger_on_press=*/true, ui::VKEY_ESCAPE, ui::EF_COMMAND_DOWN, - SHOW_TASK_MANAGER}, + AcceleratorAction::kShowTaskManager}, }; const AcceleratorData expected_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, {/*trigger_on_press=*/true, ui::VKEY_ESCAPE, ui::EF_COMMAND_DOWN, - SHOW_TASK_MANAGER}, + AcceleratorAction::kShowTaskManager}, {/*trigger_on_press=*/true, ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN, - SHOW_TASK_MANAGER}, + AcceleratorAction::kShowTaskManager}, }; const DeprecatedAcceleratorData deprecated_data[] = { - {SHOW_TASK_MANAGER, /*uma_histogram_name=*/"deprecated.showTaskManager", + {AcceleratorAction::kShowTaskManager, + /*uma_histogram_name=*/"deprecated.showTaskManager", /*notification_message_id=*/1, /*old_shortcut_id=*/1, /*new_shortcut_id=*/2, /*deprecated_enabled=*/true}, }; const AcceleratorData test_deprecated_accelerators[] = { {/*trigger_on_press=*/true, ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN, - SHOW_TASK_MANAGER}, + AcceleratorAction::kShowTaskManager}, }; config_->Initialize(initial_test_data); @@ -273,27 +283,30 @@ // Remove the deprecated accelerator ESCAPE + SHIFT. const AcceleratorData updated_expected_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, {/*trigger_on_press=*/true, ui::VKEY_ESCAPE, ui::EF_COMMAND_DOWN, - SHOW_TASK_MANAGER}, + AcceleratorAction::kShowTaskManager}, }; - AcceleratorConfigResult result = - config_->RemoveAccelerator(SHOW_TASK_MANAGER, deprecated_accelerator); + AcceleratorConfigResult result = config_->RemoveAccelerator( + AcceleratorAction::kShowTaskManager, deprecated_accelerator); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); // Verify that the accelerator is no longer deprecated. EXPECT_FALSE(config_->IsDeprecated(deprecated_accelerator)); - EXPECT_FALSE(config_->GetDeprecatedAcceleratorData(SHOW_TASK_MANAGER)); + EXPECT_FALSE(config_->GetDeprecatedAcceleratorData( + AcceleratorAction::kShowTaskManager)); ExpectAllAcceleratorsEqual(updated_expected_test_data, config_->GetAllAccelerators()); - // Attempt to restore SHOW_TASK_MANAGER, expect deprecated accelerator to NOT - // be re-added. - result = config_->RestoreDefault(SHOW_TASK_MANAGER); + // Attempt to restore AcceleratorAction::kShowTaskManager, expect deprecated + // accelerator to NOT be re-added. + result = config_->RestoreDefault(AcceleratorAction::kShowTaskManager); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); EXPECT_FALSE(config_->IsDeprecated(deprecated_accelerator)); - EXPECT_FALSE(config_->GetDeprecatedAcceleratorData(SHOW_TASK_MANAGER)); + EXPECT_FALSE(config_->GetDeprecatedAcceleratorData( + AcceleratorAction::kShowTaskManager)); ExpectAllAcceleratorsEqual(updated_expected_test_data, config_->GetAllAccelerators()); @@ -302,38 +315,40 @@ result = config_->RestoreAllDefaults(); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); EXPECT_TRUE(config_->IsDeprecated(deprecated_accelerator)); - EXPECT_EQ(deprecated_data, - config_->GetDeprecatedAcceleratorData(SHOW_TASK_MANAGER)); + EXPECT_EQ(deprecated_data, config_->GetDeprecatedAcceleratorData( + AcceleratorAction::kShowTaskManager)); ExpectAllAcceleratorsEqual(expected_test_data, config_->GetAllAccelerators()); } TEST_F(AshAcceleratorConfigurationTest, IsDefaultAccelerator) { const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_ZOOM, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, {/*trigger_on_press=*/true, ui::VKEY_ZOOM, ui::EF_ALT_DOWN, - SWAP_PRIMARY_DISPLAY}, + AcceleratorAction::kSwapPrimaryDisplay}, {/*trigger_on_press=*/true, ui::VKEY_MEDIA_LAUNCH_APP1, - ui::EF_CONTROL_DOWN, TAKE_SCREENSHOT}, + ui::EF_CONTROL_DOWN, AcceleratorAction::kTakeScreenshot}, {/*trigger_on_press=*/true, ui::VKEY_KBD_BRIGHTNESS_UP, ui::EF_NONE, - KEYBOARD_BRIGHTNESS_UP}, + AcceleratorAction::kKeyboardBrightnessUp}, {/*trigger_on_press=*/true, ui::VKEY_BRIGHTNESS_UP, ui::EF_ALT_DOWN, - KEYBOARD_BRIGHTNESS_UP}, + AcceleratorAction::kKeyboardBrightnessUp}, }; // `Initialize()` sets up the default accelerators. config_->Initialize(test_data); ExpectAllAcceleratorsEqual(test_data, config_->GetAllAccelerators()); - // Verify that Control + Zoom is the default for TOGGLE_MIRROR_MODE. + // Verify that Control + Zoom is the default for + // AcceleratorAction::kToggleMirrorMode. ui::Accelerator expected_default = ui::Accelerator(ui::VKEY_ZOOM, ui::EF_CONTROL_DOWN); absl::optional<AcceleratorAction> accelerator_id = config_->GetIdForDefaultAccelerator(expected_default); EXPECT_TRUE(accelerator_id.has_value()); - EXPECT_EQ(TOGGLE_MIRROR_MODE, accelerator_id.value()); + EXPECT_EQ(AcceleratorAction::kToggleMirrorMode, accelerator_id.value()); std::vector<ui::Accelerator> default_accelerators = - config_->GetDefaultAcceleratorsForId(TOGGLE_MIRROR_MODE); + config_->GetDefaultAcceleratorsForId( + AcceleratorAction::kToggleMirrorMode); EXPECT_EQ(1u, default_accelerators.size()); EXPECT_EQ(expected_default, default_accelerators[0]); } @@ -341,15 +356,15 @@ TEST_F(AshAcceleratorConfigurationTest, MultipleDefaultAccelerators) { const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_ZOOM, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, {/*trigger_on_press=*/true, ui::VKEY_ZOOM, ui::EF_ALT_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, {/*trigger_on_press=*/true, ui::VKEY_MEDIA_LAUNCH_APP1, - ui::EF_CONTROL_DOWN, TAKE_SCREENSHOT}, + ui::EF_CONTROL_DOWN, AcceleratorAction::kTakeScreenshot}, {/*trigger_on_press=*/true, ui::VKEY_KBD_BRIGHTNESS_UP, ui::EF_NONE, - KEYBOARD_BRIGHTNESS_UP}, + AcceleratorAction::kKeyboardBrightnessUp}, {/*trigger_on_press=*/true, ui::VKEY_BRIGHTNESS_UP, ui::EF_ALT_DOWN, - KEYBOARD_BRIGHTNESS_UP}, + AcceleratorAction::kKeyboardBrightnessUp}, }; // `Initialize()` sets up the default accelerators. @@ -357,7 +372,7 @@ ExpectAllAcceleratorsEqual(test_data, config_->GetAllAccelerators()); // Verify that Control + Zoom and Alt + Zoom are defaults for - // TOGGLE_MIRROR_MODE. + // AcceleratorAction::kToggleMirrorMode. ui::Accelerator expected_default = ui::Accelerator(ui::VKEY_ZOOM, ui::EF_CONTROL_DOWN); ui::Accelerator expected_default_2 = @@ -366,14 +381,15 @@ absl::optional<AcceleratorAction> accelerator_id = config_->GetIdForDefaultAccelerator(expected_default); EXPECT_TRUE(accelerator_id.has_value()); - EXPECT_EQ(TOGGLE_MIRROR_MODE, accelerator_id.value()); + EXPECT_EQ(AcceleratorAction::kToggleMirrorMode, accelerator_id.value()); accelerator_id = config_->GetIdForDefaultAccelerator(expected_default_2); EXPECT_TRUE(accelerator_id.has_value()); - EXPECT_EQ(TOGGLE_MIRROR_MODE, accelerator_id.value()); + EXPECT_EQ(AcceleratorAction::kToggleMirrorMode, accelerator_id.value()); std::vector<ui::Accelerator> default_accelerators = - config_->GetDefaultAcceleratorsForId(TOGGLE_MIRROR_MODE); + config_->GetDefaultAcceleratorsForId( + AcceleratorAction::kToggleMirrorMode); EXPECT_EQ(2u, default_accelerators.size()); @@ -383,15 +399,15 @@ TEST_F(AshAcceleratorConfigurationTest, DefaultNotFound) { const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_ZOOM, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, {/*trigger_on_press=*/true, ui::VKEY_ZOOM, ui::EF_ALT_DOWN, - SWAP_PRIMARY_DISPLAY}, + AcceleratorAction::kSwapPrimaryDisplay}, {/*trigger_on_press=*/true, ui::VKEY_MEDIA_LAUNCH_APP1, - ui::EF_CONTROL_DOWN, TAKE_SCREENSHOT}, + ui::EF_CONTROL_DOWN, AcceleratorAction::kTakeScreenshot}, {/*trigger_on_press=*/true, ui::VKEY_KBD_BRIGHTNESS_UP, ui::EF_NONE, - KEYBOARD_BRIGHTNESS_UP}, + AcceleratorAction::kKeyboardBrightnessUp}, {/*trigger_on_press=*/true, ui::VKEY_BRIGHTNESS_UP, ui::EF_ALT_DOWN, - KEYBOARD_BRIGHTNESS_UP}, + AcceleratorAction::kKeyboardBrightnessUp}, }; // `Initialize()` sets up the default accelerators. @@ -409,15 +425,15 @@ TEST_F(AshAcceleratorConfigurationTest, GetAcceleratorsFromActionId) { const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_ZOOM, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, {/*trigger_on_press=*/true, ui::VKEY_ZOOM, ui::EF_ALT_DOWN, - SWAP_PRIMARY_DISPLAY}, + AcceleratorAction::kSwapPrimaryDisplay}, {/*trigger_on_press=*/true, ui::VKEY_MEDIA_LAUNCH_APP1, - ui::EF_CONTROL_DOWN, TAKE_SCREENSHOT}, + ui::EF_CONTROL_DOWN, AcceleratorAction::kTakeScreenshot}, {/*trigger_on_press=*/true, ui::VKEY_KBD_BRIGHTNESS_UP, ui::EF_NONE, - KEYBOARD_BRIGHTNESS_UP}, + AcceleratorAction::kKeyboardBrightnessUp}, {/*trigger_on_press=*/true, ui::VKEY_BRIGHTNESS_UP, ui::EF_ALT_DOWN, - KEYBOARD_BRIGHTNESS_UP}, + AcceleratorAction::kKeyboardBrightnessUp}, }; config_->Initialize(test_data); @@ -443,13 +459,15 @@ const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; config_->Initialize(test_data); @@ -461,7 +479,7 @@ // Now update accelerators with a different set of accelerators. const AcceleratorData test_data_updated[] = { {/*trigger_on_press=*/true, ui::VKEY_J, ui::EF_CONTROL_DOWN, - TOGGLE_FULLSCREEN}, + AcceleratorAction::kToggleFullscreen}, }; config_->Initialize(test_data_updated); @@ -475,13 +493,15 @@ EXPECT_EQ(0, observer_.num_times_accelerator_updated_called()); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; config_->Initialize(test_data); @@ -496,14 +516,16 @@ // Remove `SWITCH_TO_LAST_USE_IME`. const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; AcceleratorConfigResult result = config_->RemoveAccelerator( - SWITCH_TO_LAST_USED_IME, + AcceleratorAction::kSwitchToLastUsedIme, ui::Accelerator(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN)); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); @@ -511,18 +533,19 @@ // There should now be an entry in the pref overrides. EXPECT_EQ(1u, updated_overrides.size()); // Expect the pref to have one entry that has the key of - // `SWITCH_TO_LAST_USED_IME`. - const base::Value::List* accelerator_overrides = - updated_overrides.FindList(base::NumberToString(SWITCH_TO_LAST_USED_IME)); - // Removing one accelerator in `SWITCH_TO_LAST_USED_IME` will result in + // `kSwitchToLastUsedIme`. + const base::Value::List* accelerator_overrides = updated_overrides.FindList( + base::NumberToString(AcceleratorAction::kSwitchToLastUsedIme)); + // Removing one accelerator in `kSwitchToLastUsedIme` will result in // the removed accelerator in the override with `kRemove`. EXPECT_EQ(1u, accelerator_overrides->size()); AcceleratorModificationData override_data = ValueToAcceleratorModificationData( accelerator_overrides->front().GetDict()); - CompareAccelerators({/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN, SWITCH_TO_LAST_USED_IME}, - override_data.accelerator); + CompareAccelerators( + {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, + override_data.accelerator); EXPECT_EQ(AcceleratorModificationAction::kRemove, override_data.action); // Compare expected accelerators and that the observer was fired after @@ -532,7 +555,7 @@ // Attempt to remove the accelerator again, expect to return error. AcceleratorConfigResult re_remove_result = config_->RemoveAccelerator( - SWITCH_TO_LAST_USED_IME, + AcceleratorAction::kSwitchToLastUsedIme, ui::Accelerator(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN)); EXPECT_EQ(AcceleratorConfigResult::kNotFound, re_remove_result); @@ -545,7 +568,7 @@ EXPECT_EQ(0, observer_.num_times_accelerator_updated_called()); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, }; config_->Initialize(test_data); @@ -555,7 +578,8 @@ // Attempt to remove an accelerator with an action ID that doesn't exist. AcceleratorConfigResult result = config_->RemoveAccelerator( - CYCLE_BACKWARD_MRU, ui::Accelerator(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN)); + AcceleratorAction::kCycleBackwardMru, + ui::Accelerator(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN)); EXPECT_EQ(AcceleratorConfigResult::kNotFound, result); // Nothing should change. @@ -567,7 +591,7 @@ EXPECT_EQ(0, observer_.num_times_accelerator_updated_called()); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, }; config_->Initialize(test_data); @@ -578,7 +602,7 @@ // Remove an accelerator that doesn't exist, but with an // existing action ID. Expect no change. AcceleratorConfigResult updated_result = config_->RemoveAccelerator( - SWITCH_TO_LAST_USED_IME, + AcceleratorAction::kSwitchToLastUsedIme, ui::Accelerator(ui::VKEY_M, ui::EF_CONTROL_DOWN)); EXPECT_EQ(AcceleratorConfigResult::kNotFound, updated_result); @@ -591,13 +615,15 @@ EXPECT_EQ(0, observer_.num_times_accelerator_updated_called()); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, BRIGHTNESS_DOWN}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kBrightnessDown}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; config_->Initialize(test_data); @@ -608,24 +634,27 @@ // Remove `SWITCH_TO_LAST_USE_IME`. const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; ui::Accelerator removed_accelerator = ui::Accelerator(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN); - AcceleratorConfigResult result = - config_->RemoveAccelerator(SWITCH_TO_LAST_USED_IME, removed_accelerator); + AcceleratorConfigResult result = config_->RemoveAccelerator( + AcceleratorAction::kSwitchToLastUsedIme, removed_accelerator); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); // We removed a default accelerator, it should still be cached as a default. - EXPECT_EQ(SWITCH_TO_LAST_USED_IME, + EXPECT_EQ(AcceleratorAction::kSwitchToLastUsedIme, config_->GetIdForDefaultAccelerator(removed_accelerator)); std::vector<ui::Accelerator> default_accelerators = - config_->GetDefaultAcceleratorsForId(SWITCH_TO_LAST_USED_IME); + config_->GetDefaultAcceleratorsForId( + AcceleratorAction::kSwitchToLastUsedIme); EXPECT_EQ(1u, default_accelerators.size()); EXPECT_EQ(removed_accelerator, default_accelerators[0]); @@ -639,13 +668,15 @@ EXPECT_EQ(0, observer_.num_times_accelerator_updated_called()); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; config_->Initialize(test_data); @@ -656,14 +687,16 @@ // Remove `SWITCH_TO_LAST_USE_IME`. const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; AcceleratorConfigResult result = config_->RemoveAccelerator( - SWITCH_TO_LAST_USED_IME, + AcceleratorAction::kSwitchToLastUsedIme, ui::Accelerator(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN)); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); @@ -686,13 +719,15 @@ EXPECT_EQ(0, observer_.num_times_accelerator_updated_called()); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; config_->Initialize(test_data); @@ -721,13 +756,15 @@ EXPECT_EQ(0, observer_.num_times_accelerator_updated_called()); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; config_->Initialize(test_data); @@ -738,14 +775,16 @@ // Remove `SWITCH_TO_LAST_USE_IME`. const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; AcceleratorConfigResult result = config_->RemoveAccelerator( - SWITCH_TO_LAST_USED_IME, + AcceleratorAction::kSwitchToLastUsedIme, ui::Accelerator(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN)); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); @@ -754,8 +793,8 @@ ExpectAllAcceleratorsEqual(updated_test_data, config_->GetAllAccelerators()); EXPECT_EQ(2, observer_.num_times_accelerator_updated_called()); - // Reset the `SWITCH_TO_LAST_USED_IME` action.. - result = config_->RestoreDefault(SWITCH_TO_LAST_USED_IME); + // Reset the `AcceleratorAction::kSwitchToLastUsedIme` action.. + result = config_->RestoreDefault(AcceleratorAction::kSwitchToLastUsedIme); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); // Expect accelerators to revert back to the default state and observer @@ -764,7 +803,7 @@ EXPECT_EQ(3, observer_.num_times_accelerator_updated_called()); // Reset one more time, no changes should be made. - result = config_->RestoreDefault(SWITCH_TO_LAST_USED_IME); + result = config_->RestoreDefault(AcceleratorAction::kSwitchToLastUsedIme); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); // No changes to be made, but observer should be called. @@ -776,13 +815,15 @@ EXPECT_EQ(0, observer_.num_times_accelerator_updated_called()); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; config_->Initialize(test_data); @@ -793,7 +834,7 @@ // `BRIGHTNESS_DOWN` is not a valid accelerator, so this should return an // error. const AcceleratorConfigResult result = - config_->RestoreDefault(BRIGHTNESS_DOWN); + config_->RestoreDefault(AcceleratorAction::kBrightnessDown); EXPECT_EQ(AcceleratorConfigResult::kNotFound, result); // Expect nothing to change. @@ -806,11 +847,13 @@ EXPECT_EQ(0, observer_.num_times_accelerator_updated_called()); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; config_->Initialize(test_data); @@ -818,21 +861,23 @@ ExpectAllAcceleratorsEqual(test_data, config_->GetAllAccelerators()); EXPECT_EQ(1, observer_.num_times_accelerator_updated_called()); - // Add CTRL + SPACE to SWITCH_TO_LAST_USED_IME. + // Add CTRL + SPACE to AcceleratorAction::kSwitchToLastUsedIme. const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; const ui::Accelerator new_accelerator(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN); - AcceleratorConfigResult result = - config_->AddUserAccelerator(SWITCH_TO_LAST_USED_IME, new_accelerator); + AcceleratorConfigResult result = config_->AddUserAccelerator( + AcceleratorAction::kSwitchToLastUsedIme, new_accelerator); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); // Compare expected accelerators and that the observer was fired after @@ -842,7 +887,7 @@ const AcceleratorAction* found_action = config_->FindAcceleratorAction(new_accelerator); EXPECT_TRUE(found_action); - EXPECT_EQ(SWITCH_TO_LAST_USED_IME, *found_action); + EXPECT_EQ(AcceleratorAction::kSwitchToLastUsedIme, *found_action); } // Add accelerator that conflict with default accelerator. @@ -850,11 +895,13 @@ EXPECT_EQ(0, observer_.num_times_accelerator_updated_called()); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; config_->Initialize(test_data); @@ -862,21 +909,23 @@ ExpectAllAcceleratorsEqual(test_data, config_->GetAllAccelerators()); EXPECT_EQ(1, observer_.num_times_accelerator_updated_called()); - // Add ALT + SHIFT + TAB to SWITCH_TO_LAST_USED_IME, which conflicts with - // CYCLE_BACKWARD_MRU. + // Add ALT + SHIFT + TAB to AcceleratorAction::kSwitchToLastUsedIme, which + // conflicts with AcceleratorAction::kCycleBackwardMru. const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, }; const ui::Accelerator new_accelerator(ui::VKEY_TAB, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); - AcceleratorConfigResult result = - config_->AddUserAccelerator(SWITCH_TO_LAST_USED_IME, new_accelerator); + AcceleratorConfigResult result = config_->AddUserAccelerator( + AcceleratorAction::kSwitchToLastUsedIme, new_accelerator); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); // Compare expected accelerators and that the observer was fired after @@ -886,11 +935,11 @@ const AcceleratorAction* found_action = config_->FindAcceleratorAction(new_accelerator); EXPECT_TRUE(found_action); - EXPECT_EQ(SWITCH_TO_LAST_USED_IME, *found_action); + EXPECT_EQ(AcceleratorAction::kSwitchToLastUsedIme, *found_action); // Confirm that conflicting accelerator was removed. const std::vector<ui::Accelerator>& backward_mru_accelerators = - config_->GetAcceleratorsForAction(CYCLE_BACKWARD_MRU); + config_->GetAcceleratorsForAction(AcceleratorAction::kCycleBackwardMru); EXPECT_TRUE(backward_mru_accelerators.empty()); } @@ -899,33 +948,38 @@ EXPECT_EQ(0, observer_.num_times_accelerator_updated_called()); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; const DeprecatedAcceleratorData deprecated_data[] = { - {SHOW_TASK_MANAGER, /*uma_histogram_name=*/"deprecated.showTaskManager", + {AcceleratorAction::kShowTaskManager, + /*uma_histogram_name=*/"deprecated.showTaskManager", /*notification_message_id=*/1, /*old_shortcut_id=*/1, /*new_shortcut_id=*/2, /*deprecated_enabled=*/true}, }; const AcceleratorData test_deprecated_accelerators[] = { {/*trigger_on_press=*/true, ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN, - SHOW_TASK_MANAGER}, + AcceleratorAction::kShowTaskManager}, }; const AcceleratorData initial_expected_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, {/*trigger_on_press=*/true, ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN, - SHOW_TASK_MANAGER}, + AcceleratorAction::kShowTaskManager}, }; config_->Initialize(test_data); @@ -941,21 +995,23 @@ ui::EF_SHIFT_DOWN); EXPECT_TRUE(config_->IsDeprecated(deprecated_accelerator)); - // Add SHIFT + ESCAPE to SWITCH_TO_LAST_USED_IME, which conflicts with - // a deprecated accelerator. + // Add SHIFT + ESCAPE to AcceleratorAction::kSwitchToLastUsedIme, which + // conflicts with a deprecated accelerator. const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; AcceleratorConfigResult result = config_->AddUserAccelerator( - SWITCH_TO_LAST_USED_IME, deprecated_accelerator); + AcceleratorAction::kSwitchToLastUsedIme, deprecated_accelerator); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); // Compare expected accelerators and that the observer was fired after @@ -965,7 +1021,7 @@ const AcceleratorAction* found_action = config_->FindAcceleratorAction(deprecated_accelerator); EXPECT_TRUE(found_action); - EXPECT_EQ(SWITCH_TO_LAST_USED_IME, *found_action); + EXPECT_EQ(AcceleratorAction::kSwitchToLastUsedIme, *found_action); // Confirm that the deprecated accelerator was removed. EXPECT_FALSE(config_->IsDeprecated(deprecated_accelerator)); @@ -976,11 +1032,13 @@ EXPECT_EQ(0, observer_.num_times_accelerator_updated_called()); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; config_->Initialize(test_data); @@ -988,21 +1046,23 @@ ExpectAllAcceleratorsEqual(test_data, config_->GetAllAccelerators()); EXPECT_EQ(1, observer_.num_times_accelerator_updated_called()); - // Add CTRL + SPACE to SWITCH_TO_LAST_USED_IME. + // Add CTRL + SPACE to AcceleratorAction::kSwitchToLastUsedIme. const AcceleratorData added_updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; const ui::Accelerator new_accelerator(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN); - AcceleratorConfigResult result = - config_->AddUserAccelerator(SWITCH_TO_LAST_USED_IME, new_accelerator); + AcceleratorConfigResult result = config_->AddUserAccelerator( + AcceleratorAction::kSwitchToLastUsedIme, new_accelerator); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); // Compare expected accelerators and that the observer was fired after @@ -1013,20 +1073,23 @@ const AcceleratorAction* found_action = config_->FindAcceleratorAction(new_accelerator); EXPECT_TRUE(found_action); - EXPECT_EQ(SWITCH_TO_LAST_USED_IME, *found_action); + EXPECT_EQ(AcceleratorAction::kSwitchToLastUsedIme, *found_action); - // Remove CTRL + SPACE from SWITCH_TO_LAST_USED_IME. + // Remove CTRL + SPACE from AcceleratorAction::kSwitchToLastUsedIme. const AcceleratorData removed_updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; // Remove the accelerator now. - result = config_->RemoveAccelerator(SWITCH_TO_LAST_USED_IME, new_accelerator); + result = config_->RemoveAccelerator(AcceleratorAction::kSwitchToLastUsedIme, + new_accelerator); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); EXPECT_EQ(3, observer_.num_times_accelerator_updated_called()); ExpectAllAcceleratorsEqual(removed_updated_test_data, @@ -1039,11 +1102,13 @@ EXPECT_EQ(0, observer_.num_times_accelerator_updated_called()); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; config_->Initialize(test_data); @@ -1051,21 +1116,23 @@ ExpectAllAcceleratorsEqual(test_data, config_->GetAllAccelerators()); EXPECT_EQ(1, observer_.num_times_accelerator_updated_called()); - // Add CTRL + SPACE to SWITCH_TO_LAST_USED_IME. + // Add CTRL + SPACE to AcceleratorAction::kSwitchToLastUsedIme. const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; const ui::Accelerator new_accelerator(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN); - AcceleratorConfigResult result = - config_->AddUserAccelerator(SWITCH_TO_LAST_USED_IME, new_accelerator); + AcceleratorConfigResult result = config_->AddUserAccelerator( + AcceleratorAction::kSwitchToLastUsedIme, new_accelerator); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); // Compare expected accelerators and that the observer was fired after @@ -1075,10 +1142,10 @@ const AcceleratorAction* found_action = config_->FindAcceleratorAction(new_accelerator); EXPECT_TRUE(found_action); - EXPECT_EQ(SWITCH_TO_LAST_USED_IME, *found_action); + EXPECT_EQ(AcceleratorAction::kSwitchToLastUsedIme, *found_action); // Restore default, expect to be back to default state. - result = config_->RestoreDefault(SWITCH_TO_LAST_USED_IME); + result = config_->RestoreDefault(AcceleratorAction::kSwitchToLastUsedIme); EXPECT_EQ(3, observer_.num_times_accelerator_updated_called()); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); EXPECT_FALSE(config_->FindAcceleratorAction(new_accelerator)); @@ -1090,11 +1157,13 @@ EXPECT_EQ(0, observer_.num_times_accelerator_updated_called()); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; config_->Initialize(test_data); @@ -1102,21 +1171,23 @@ ExpectAllAcceleratorsEqual(test_data, config_->GetAllAccelerators()); EXPECT_EQ(1, observer_.num_times_accelerator_updated_called()); - // Add CTRL + SPACE to SWITCH_TO_LAST_USED_IME. + // Add CTRL + SPACE to AcceleratorAction::kSwitchToLastUsedIme. const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; const ui::Accelerator new_accelerator(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN); - AcceleratorConfigResult result = - config_->AddUserAccelerator(SWITCH_TO_LAST_USED_IME, new_accelerator); + AcceleratorConfigResult result = config_->AddUserAccelerator( + AcceleratorAction::kSwitchToLastUsedIme, new_accelerator); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); // Compare expected accelerators and that the observer was fired after @@ -1126,34 +1197,38 @@ const AcceleratorAction* found_action = config_->FindAcceleratorAction(new_accelerator); EXPECT_TRUE(found_action); - EXPECT_EQ(SWITCH_TO_LAST_USED_IME, *found_action); + EXPECT_EQ(AcceleratorAction::kSwitchToLastUsedIme, *found_action); - // Add CTRL + SPACE to CYCLE_BACKWARD_MRU. + // Add CTRL + SPACE to AcceleratorAction::kCycleBackwardMru. const AcceleratorData reupdated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - CYCLE_BACKWARD_MRU}, + AcceleratorAction::kCycleBackwardMru}, }; - result = config_->AddUserAccelerator(CYCLE_BACKWARD_MRU, new_accelerator); + result = config_->AddUserAccelerator(AcceleratorAction::kCycleBackwardMru, + new_accelerator); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); ExpectAllAcceleratorsEqual(reupdated_test_data, config_->GetAllAccelerators()); const AcceleratorAction* found_action2 = config_->FindAcceleratorAction(new_accelerator); EXPECT_TRUE(found_action2); - EXPECT_EQ(CYCLE_BACKWARD_MRU, *found_action2); + EXPECT_EQ(AcceleratorAction::kCycleBackwardMru, *found_action2); } TEST_F(AshAcceleratorConfigurationTest, ReplaceAccelerator) { EXPECT_EQ(0, observer_.num_times_accelerator_updated_called()); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, }; config_->Initialize(test_data); @@ -1164,14 +1239,15 @@ // Replace CTRL + ALT + SPACE -> CTRL + VKEY_M. const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_M, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, }; const ui::Accelerator old_accelerator(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN); const ui::Accelerator new_accelerator(ui::VKEY_M, ui::EF_CONTROL_DOWN); - AcceleratorConfigResult result = config_->ReplaceAccelerator( - SWITCH_TO_LAST_USED_IME, old_accelerator, new_accelerator); + AcceleratorConfigResult result = + config_->ReplaceAccelerator(AcceleratorAction::kSwitchToLastUsedIme, + old_accelerator, new_accelerator); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); // Compare expected accelerators and that the observer was fired after @@ -1181,14 +1257,15 @@ const AcceleratorAction* found_action = config_->FindAcceleratorAction(new_accelerator); EXPECT_TRUE(found_action); - EXPECT_EQ(SWITCH_TO_LAST_USED_IME, *found_action); + EXPECT_EQ(AcceleratorAction::kSwitchToLastUsedIme, *found_action); } TEST_F(AshAcceleratorConfigurationTest, ReplaceNonExistentAccelerator) { EXPECT_EQ(0, observer_.num_times_accelerator_updated_called()); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, }; config_->Initialize(test_data); @@ -1199,8 +1276,9 @@ const ui::Accelerator old_accelerator(ui::VKEY_J, ui::EF_CONTROL_DOWN); const ui::Accelerator new_accelerator(ui::VKEY_C, ui::EF_COMMAND_DOWN); - AcceleratorConfigResult result = config_->ReplaceAccelerator( - SWITCH_TO_LAST_USED_IME, old_accelerator, new_accelerator); + AcceleratorConfigResult result = + config_->ReplaceAccelerator(AcceleratorAction::kSwitchToLastUsedIme, + old_accelerator, new_accelerator); EXPECT_EQ(AcceleratorConfigResult::kNotFound, result); // Compare expected accelerators and that the observer was fired after @@ -1212,7 +1290,8 @@ EXPECT_EQ(0, observer_.num_times_accelerator_updated_called()); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, }; config_->Initialize(test_data); @@ -1223,14 +1302,15 @@ // Replace CTRL + ALT + SPACE -> CTRL + VKEY_M. const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_M, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, }; const ui::Accelerator old_accelerator(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN); const ui::Accelerator new_accelerator(ui::VKEY_M, ui::EF_CONTROL_DOWN); - AcceleratorConfigResult result = config_->ReplaceAccelerator( - SWITCH_TO_LAST_USED_IME, old_accelerator, new_accelerator); + AcceleratorConfigResult result = + config_->ReplaceAccelerator(AcceleratorAction::kSwitchToLastUsedIme, + old_accelerator, new_accelerator); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); // Compare expected accelerators and that the observer was fired after @@ -1240,7 +1320,7 @@ const AcceleratorAction* found_action = config_->FindAcceleratorAction(new_accelerator); EXPECT_TRUE(found_action); - EXPECT_EQ(SWITCH_TO_LAST_USED_IME, *found_action); + EXPECT_EQ(AcceleratorAction::kSwitchToLastUsedIme, *found_action); // Restore defaults, expect everything to be back to default state. config_->RestoreAllDefaults(); @@ -1252,13 +1332,15 @@ SimulateNewUserFirstLogin(kFakeUserEmail); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; config_->Initialize(test_data); @@ -1268,7 +1350,7 @@ EXPECT_TRUE(pref_overrides.empty()); AcceleratorConfigResult result = config_->RemoveAccelerator( - SWITCH_TO_LAST_USED_IME, + AcceleratorAction::kSwitchToLastUsedIme, ui::Accelerator(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN)); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); @@ -1276,18 +1358,19 @@ // There should now be an entry in the pref overrides. EXPECT_EQ(1u, updated_overrides.size()); // Expect the pref to have one entry that has the key of - // `SWITCH_TO_LAST_USED_IME`. - const base::Value::List* accelerator_overrides = - updated_overrides.FindList(base::NumberToString(SWITCH_TO_LAST_USED_IME)); - // Removing one accelerator in `SWITCH_TO_LAST_USED_IME` will result in - // one default accelerator remaining. + // `AcceleratorAction::kSwitchToLastUsedIme`. + const base::Value::List* accelerator_overrides = updated_overrides.FindList( + base::NumberToString(AcceleratorAction::kSwitchToLastUsedIme)); + // Removing one accelerator in `AcceleratorAction::kSwitchToLastUsedIme` will + // result in one default accelerator remaining. EXPECT_EQ(1u, accelerator_overrides->size()); AcceleratorModificationData override_data = ValueToAcceleratorModificationData( accelerator_overrides->front().GetDict()); - CompareAccelerators({/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN, SWITCH_TO_LAST_USED_IME}, - override_data.accelerator); + CompareAccelerators( + {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, + override_data.accelerator); EXPECT_EQ(AcceleratorModificationAction::kRemove, override_data.action); // Simulate login on another account, expect the pref to not be present. @@ -1306,11 +1389,13 @@ // Verify pref overrides were applied correctly. const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; ExpectAllAcceleratorsEqual(updated_test_data, config_->GetAllAccelerators()); } @@ -1319,13 +1404,15 @@ SimulateNewUserFirstLogin(kFakeUserEmail); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; config_->Initialize(test_data); @@ -1335,7 +1422,7 @@ EXPECT_TRUE(pref_overrides.empty()); AcceleratorConfigResult result = config_->RemoveAccelerator( - SWITCH_TO_LAST_USED_IME, + AcceleratorAction::kSwitchToLastUsedIme, ui::Accelerator(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN)); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); @@ -1343,18 +1430,19 @@ // There should now be an entry in the pref overrides. EXPECT_EQ(1u, updated_overrides.size()); // Expect the pref to have one entry that has the key of - // `SWITCH_TO_LAST_USED_IME`. - const base::Value::List* accelerator_overrides = - updated_overrides.FindList(base::NumberToString(SWITCH_TO_LAST_USED_IME)); + // `AcceleratorAction::kSwitchToLastUsedIme`. + const base::Value::List* accelerator_overrides = updated_overrides.FindList( + base::NumberToString(AcceleratorAction::kSwitchToLastUsedIme)); EXPECT_EQ(1u, accelerator_overrides->size()); - // Removing one accelerator in `SWITCH_TO_LAST_USED_IME` will result in - // one entry with the `kRemove` tag. + // Removing one accelerator in `AcceleratorAction::kSwitchToLastUsedIme` will + // result in one entry with the `kRemove` tag. AcceleratorModificationData override_data = ValueToAcceleratorModificationData( accelerator_overrides->front().GetDict()); - CompareAccelerators({/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN, SWITCH_TO_LAST_USED_IME}, - override_data.accelerator); + CompareAccelerators( + {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, + override_data.accelerator); EXPECT_EQ(AcceleratorModificationAction::kRemove, override_data.action); // Now re-login to the original profile. @@ -1367,11 +1455,13 @@ // Verify pref overrides were applied correctly. const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; ExpectAllAcceleratorsEqual(updated_test_data, config_->GetAllAccelerators()); @@ -1394,13 +1484,15 @@ SimulateNewUserFirstLogin(kFakeUserEmail); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; config_->Initialize(test_data); @@ -1410,7 +1502,7 @@ EXPECT_TRUE(pref_overrides.empty()); AcceleratorConfigResult result = config_->RemoveAccelerator( - SWITCH_TO_LAST_USED_IME, + AcceleratorAction::kSwitchToLastUsedIme, ui::Accelerator(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN)); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); @@ -1418,18 +1510,19 @@ // There should now be an entry in the pref overrides. EXPECT_EQ(1u, updated_overrides.size()); // Expect the pref to have one entry that has the key of - // `SWITCH_TO_LAST_USED_IME`. - const base::Value::List* accelerator_overrides = - updated_overrides.FindList(base::NumberToString(SWITCH_TO_LAST_USED_IME)); - // Removing one accelerator in `SWITCH_TO_LAST_USED_IME` will result in - // one entry with the `kRemove` tag. + // `AcceleratorAction::kSwitchToLastUsedIme`. + const base::Value::List* accelerator_overrides = updated_overrides.FindList( + base::NumberToString(AcceleratorAction::kSwitchToLastUsedIme)); + // Removing one accelerator in `AcceleratorAction::kSwitchToLastUsedIme` will + // result in one entry with the `kRemove` tag. EXPECT_EQ(1u, accelerator_overrides->size()); AcceleratorModificationData override_data = ValueToAcceleratorModificationData( accelerator_overrides->front().GetDict()); - CompareAccelerators({/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN, SWITCH_TO_LAST_USED_IME}, - override_data.accelerator); + CompareAccelerators( + {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, + override_data.accelerator); EXPECT_EQ(AcceleratorModificationAction::kRemove, override_data.action); // Now re-login to the original profile. @@ -1442,16 +1535,18 @@ // Verify pref overrides were applied correctly. const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, }; ExpectAllAcceleratorsEqual(updated_test_data, config_->GetAllAccelerators()); // Now reset the action to default. - result = config_->RestoreDefault(SWITCH_TO_LAST_USED_IME); + result = config_->RestoreDefault(AcceleratorAction::kSwitchToLastUsedIme); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); // Relogin, expect shortcuts to be back to default. @@ -1468,9 +1563,10 @@ SimulateNewUserFirstLogin(kFakeUserEmail); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, }; config_->Initialize(test_data); @@ -1480,35 +1576,38 @@ EXPECT_TRUE(pref_overrides.empty()); const ui::Accelerator new_accelerator(ui::VKEY_A, ui::EF_COMMAND_DOWN); - AcceleratorConfigResult result = - config_->AddUserAccelerator(SWITCH_TO_LAST_USED_IME, new_accelerator); + AcceleratorConfigResult result = config_->AddUserAccelerator( + AcceleratorAction::kSwitchToLastUsedIme, new_accelerator); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); const base::Value::Dict& updated_overrides = GetOverridePref(); // There should now be an entry in the pref overrides. EXPECT_EQ(1u, updated_overrides.size()); // Expect the pref to have one entry that has the key of - // `SWITCH_TO_LAST_USED_IME`. - const base::Value::List* accelerator_overrides = - updated_overrides.FindList(base::NumberToString(SWITCH_TO_LAST_USED_IME)); - // Expect 1 override accelerator for `SWITCH_TO_LAST_USED_IME`. + // `AcceleratorAction::kSwitchToLastUsedIme`. + const base::Value::List* accelerator_overrides = updated_overrides.FindList( + base::NumberToString(AcceleratorAction::kSwitchToLastUsedIme)); + // Expect 1 override accelerator for + // `AcceleratorAction::kSwitchToLastUsedIme`. EXPECT_EQ(1u, accelerator_overrides->size()); const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_A, ui::EF_COMMAND_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, }; AcceleratorModificationData override_data = ValueToAcceleratorModificationData( accelerator_overrides->front().GetDict()); - CompareAccelerators({/*trigger_on_press=*/true, ui::VKEY_A, - ui::EF_COMMAND_DOWN, SWITCH_TO_LAST_USED_IME}, - override_data.accelerator); + CompareAccelerators( + {/*trigger_on_press=*/true, ui::VKEY_A, ui::EF_COMMAND_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, + override_data.accelerator); EXPECT_EQ(AcceleratorModificationAction::kAdd, override_data.action); ExpectAllAcceleratorsEqual(updated_test_data, config_->GetAllAccelerators()); @@ -1536,9 +1635,9 @@ SimulateNewUserFirstLogin(kFakeUserEmail); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_C, ui::EF_COMMAND_DOWN, - TOGGLE_CALENDAR}, + AcceleratorAction::kToggleCalendar}, }; config_->Initialize(test_data); @@ -1547,40 +1646,44 @@ const base::Value::Dict& pref_overrides = GetOverridePref(); EXPECT_TRUE(pref_overrides.empty()); - // Search + C exists in `TOGGLE_CALENDAR`, so this should result in adding a - // new accelerator to `SWITCH_TO_LAST_USED_IME` and removing an accelerator - // from `TOGGLE_CALENDAR`. + // Search + C exists in `AcceleratorAction::kToggleCalendar`, so this should + // result in adding a new accelerator to + // `AcceleratorAction::kSwitchToLastUsedIme` and removing an accelerator from + // `AcceleratorAction::kToggleCalendar`. const ui::Accelerator new_accelerator(ui::VKEY_C, ui::EF_COMMAND_DOWN); - AcceleratorConfigResult result = - config_->AddUserAccelerator(SWITCH_TO_LAST_USED_IME, new_accelerator); + AcceleratorConfigResult result = config_->AddUserAccelerator( + AcceleratorAction::kSwitchToLastUsedIme, new_accelerator); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); const base::Value::Dict& updated_overrides = GetOverridePref(); // There two entries in the pref overrides. EXPECT_EQ(1u, updated_overrides.size()); // Expect the pref to have one entry that has the key of - // `SWITCH_TO_LAST_USED_IME`. + // `AcceleratorAction::kSwitchToLastUsedIme`. const base::Value::List* switch_to_last_used_ime_overrides = - updated_overrides.FindList(base::NumberToString(SWITCH_TO_LAST_USED_IME)); + updated_overrides.FindList( + base::NumberToString(AcceleratorAction::kSwitchToLastUsedIme)); // Confirm that prefs are stored correctly. EXPECT_EQ(1u, switch_to_last_used_ime_overrides->size()); AcceleratorModificationData switch_ime_override_data = ValueToAcceleratorModificationData( switch_to_last_used_ime_overrides->front().GetDict()); - CompareAccelerators({/*trigger_on_press=*/true, ui::VKEY_C, - ui::EF_COMMAND_DOWN, SWITCH_TO_LAST_USED_IME}, - switch_ime_override_data.accelerator); + CompareAccelerators( + {/*trigger_on_press=*/true, ui::VKEY_C, ui::EF_COMMAND_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, + switch_ime_override_data.accelerator); EXPECT_EQ(AcceleratorModificationAction::kAdd, switch_ime_override_data.action); const AcceleratorData expected_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_C, ui::EF_COMMAND_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, }; - // `switch_to_last_used_ime_data` has all the available accelerators. + // `AcceleratorAction::kSwitchToLastUsedIme_data` has all the available + // accelerators. ExpectAllAcceleratorsEqual(expected_test_data, config_->GetAllAccelerators()); // Lock screen and sign into another user. @@ -1600,10 +1703,11 @@ EXPECT_EQ(1u, relogin_overrides.size()); // Verify pref overrides were applied correctly. - EXPECT_EQ(SWITCH_TO_LAST_USED_IME, + EXPECT_EQ(AcceleratorAction::kSwitchToLastUsedIme, *config_->FindAcceleratorAction(new_accelerator)); - // `switch_to_last_used_ime_data` has all the available accelerators. + // `AcceleratorAction::kSwitchToLastUsedIme_data` has all the available + // accelerators. ExpectAllAcceleratorsEqual(expected_test_data, config_->GetAllAccelerators()); } @@ -1612,11 +1716,11 @@ SimulateNewUserFirstLogin(kFakeUserEmail); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_C, ui::EF_COMMAND_DOWN, - TOGGLE_CALENDAR}, + AcceleratorAction::kToggleCalendar}, {/*trigger_on_press=*/true, ui::VKEY_A, ui::EF_COMMAND_DOWN, - TOGGLE_DICTATION}, + AcceleratorAction::kToggleDictation}, }; config_->Initialize(test_data); @@ -1625,72 +1729,79 @@ const base::Value::Dict& pref_overrides = GetOverridePref(); EXPECT_TRUE(pref_overrides.empty()); - // Search + C exists in `TOGGLE_CALENDAR`, so this should result in adding a - // new accelerator to `SWITCH_TO_LAST_USED_IME` and removing an accelerator - // from `TOGGLE_CALENDAR`. + // Search + C exists in `AcceleratorAction::kToggleCalendar`, so this should + // result in adding a new accelerator to + // `AcceleratorAction::kSwitchToLastUsedIme` and removing an accelerator from + // `AcceleratorAction::kToggleCalendar`. const ui::Accelerator new_accelerator(ui::VKEY_C, ui::EF_COMMAND_DOWN); - AcceleratorConfigResult result = - config_->AddUserAccelerator(SWITCH_TO_LAST_USED_IME, new_accelerator); + AcceleratorConfigResult result = config_->AddUserAccelerator( + AcceleratorAction::kSwitchToLastUsedIme, new_accelerator); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); const base::Value::Dict& updated_overrides = GetOverridePref(); // There is one entry in the pref overrides. EXPECT_EQ(1u, updated_overrides.size()); // Expect the pref to have one entry that has the key of - // `SWITCH_TO_LAST_USED_IME`. + // `AcceleratorAction::kSwitchToLastUsedIme`. const base::Value::List* switch_to_last_used_ime_overrides = - updated_overrides.FindList(base::NumberToString(SWITCH_TO_LAST_USED_IME)); + updated_overrides.FindList( + base::NumberToString(AcceleratorAction::kSwitchToLastUsedIme)); // Confirm that prefs are stored correctly. EXPECT_EQ(1u, switch_to_last_used_ime_overrides->size()); AcceleratorModificationData switch_ime_override_data = ValueToAcceleratorModificationData( switch_to_last_used_ime_overrides->front().GetDict()); - CompareAccelerators({/*trigger_on_press=*/true, ui::VKEY_C, - ui::EF_COMMAND_DOWN, SWITCH_TO_LAST_USED_IME}, - switch_ime_override_data.accelerator); + CompareAccelerators( + {/*trigger_on_press=*/true, ui::VKEY_C, ui::EF_COMMAND_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, + switch_ime_override_data.accelerator); EXPECT_EQ(AcceleratorModificationAction::kAdd, switch_ime_override_data.action); const AcceleratorData expected_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_C, ui::EF_COMMAND_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_A, ui::EF_COMMAND_DOWN, - TOGGLE_DICTATION}, + AcceleratorAction::kToggleDictation}, }; - // `switch_to_last_used_ime_data` has all the available accelerators. + // `AcceleratorAction::kSwitchToLastUsedIme_data` has all the available + // accelerators. ExpectAllAcceleratorsEqual(expected_test_data, config_->GetAllAccelerators()); - // Now have `TOGGLE_DICTATION` add Search + C, removing it from - // `SWITCH_TO_LAST_USED_IME`. - result = config_->AddUserAccelerator(TOGGLE_DICTATION, new_accelerator); + // Now have `AcceleratorAction::kToggleDictation` add Search + C, removing it + // from `AcceleratorAction::kSwitchToLastUsedIme`. + result = config_->AddUserAccelerator(AcceleratorAction::kToggleDictation, + new_accelerator); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); - // Expect just one entry, since `SWITCH_TO_LAST_USED_IME` no longer holds the - // Search + C accelerator. + // Expect just one entry, since `AcceleratorAction::kSwitchToLastUsedIme` no + // longer holds the Search + C accelerator. const base::Value::Dict& updated_overrides_2 = GetOverridePref(); EXPECT_EQ(1u, updated_overrides_2.size()); const base::Value::List* toggle_dictation_overrides = - updated_overrides_2.FindList(base::NumberToString(TOGGLE_DICTATION)); + updated_overrides_2.FindList( + base::NumberToString(AcceleratorAction::kToggleDictation)); // Confirm that prefs are stored correctly. EXPECT_EQ(1u, toggle_dictation_overrides->size()); AcceleratorModificationData toggle_dictation_data = ValueToAcceleratorModificationData( toggle_dictation_overrides->front().GetDict()); - CompareAccelerators({/*trigger_on_press=*/true, ui::VKEY_C, - ui::EF_COMMAND_DOWN, SWITCH_TO_LAST_USED_IME}, - toggle_dictation_data.accelerator); + CompareAccelerators( + {/*trigger_on_press=*/true, ui::VKEY_C, ui::EF_COMMAND_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, + toggle_dictation_data.accelerator); EXPECT_EQ(AcceleratorModificationAction::kAdd, toggle_dictation_data.action); const AcceleratorData expected_test_data_2[] = { {/*trigger_on_press=*/true, ui::VKEY_C, ui::EF_COMMAND_DOWN, - TOGGLE_DICTATION}, + AcceleratorAction::kToggleDictation}, {/*trigger_on_press=*/true, ui::VKEY_A, ui::EF_COMMAND_DOWN, - TOGGLE_DICTATION}, + AcceleratorAction::kToggleDictation}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, }; ExpectAllAcceleratorsEqual(expected_test_data_2, config_->GetAllAccelerators()); @@ -1712,9 +1823,11 @@ EXPECT_EQ(1u, relogin_overrides.size()); // Verify pref overrides were applied correctly. - EXPECT_EQ(TOGGLE_DICTATION, *config_->FindAcceleratorAction(new_accelerator)); + EXPECT_EQ(AcceleratorAction::kToggleDictation, + *config_->FindAcceleratorAction(new_accelerator)); - // `switch_to_last_used_ime_data` has all the available accelerators. + // `AcceleratorAction::kSwitchToLastUsedIme_data` has all the available + // accelerators. ExpectAllAcceleratorsEqual(expected_test_data_2, config_->GetAllAccelerators()); } @@ -1723,11 +1836,12 @@ SimulateNewUserFirstLogin(kFakeUserEmail); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_C, ui::EF_COMMAND_DOWN, - TOGGLE_CALENDAR}, + AcceleratorAction::kToggleCalendar}, }; config_->Initialize(test_data); @@ -1736,47 +1850,51 @@ const base::Value::Dict& pref_overrides = GetOverridePref(); EXPECT_TRUE(pref_overrides.empty()); - // Remove Ctrl + space from `SWITCH_TO_LAST_USED_IME`. + // Remove Ctrl + space from `AcceleratorAction::kSwitchToLastUsedIme`. ui::Accelerator new_accelerator(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN); - AcceleratorConfigResult result = - config_->RemoveAccelerator(SWITCH_TO_LAST_USED_IME, new_accelerator); + AcceleratorConfigResult result = config_->RemoveAccelerator( + AcceleratorAction::kSwitchToLastUsedIme, new_accelerator); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); - // Now add Ctrl + Space to `TOGGLE_CALENDAR`. - result = config_->AddUserAccelerator(TOGGLE_CALENDAR, new_accelerator); + // Now add Ctrl + Space to `AcceleratorAction::kToggleCalendar`. + result = config_->AddUserAccelerator(AcceleratorAction::kToggleCalendar, + new_accelerator); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); const base::Value::Dict& remove_add_overrides = GetOverridePref(); EXPECT_EQ(2u, remove_add_overrides.size()); // Verify prefs are populated correctly. const base::Value::Dict& updated_overrides = GetOverridePref(); - const base::Value::List* last_used_ime_overrides = - updated_overrides.FindList(base::NumberToString(SWITCH_TO_LAST_USED_IME)); + const base::Value::List* last_used_ime_overrides = updated_overrides.FindList( + base::NumberToString(AcceleratorAction::kSwitchToLastUsedIme)); AcceleratorModificationData override_data = ValueToAcceleratorModificationData( last_used_ime_overrides->front().GetDict()); - CompareAccelerators({/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN, SWITCH_TO_LAST_USED_IME}, - override_data.accelerator); + CompareAccelerators( + {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, + override_data.accelerator); EXPECT_EQ(AcceleratorModificationAction::kRemove, override_data.action); // Now verify add pref is present. const base::Value::List* toggle_calendar_overrides = - updated_overrides.FindList(base::NumberToString(TOGGLE_CALENDAR)); + updated_overrides.FindList( + base::NumberToString(AcceleratorAction::kToggleCalendar)); override_data = ValueToAcceleratorModificationData( toggle_calendar_overrides->front().GetDict()); CompareAccelerators({/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN, TOGGLE_CALENDAR}, + ui::EF_CONTROL_DOWN, AcceleratorAction::kToggleCalendar}, override_data.accelerator); EXPECT_EQ(AcceleratorModificationAction::kAdd, override_data.action); const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_C, ui::EF_COMMAND_DOWN, - TOGGLE_CALENDAR}, + AcceleratorAction::kToggleCalendar}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_CALENDAR}, + AcceleratorAction::kToggleCalendar}, }; ExpectAllAcceleratorsEqual(updated_test_data, config_->GetAllAccelerators()); @@ -1803,11 +1921,12 @@ SimulateNewUserFirstLogin(kFakeUserEmail); const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_C, ui::EF_COMMAND_DOWN, - TOGGLE_CALENDAR}, + AcceleratorAction::kToggleCalendar}, }; config_->Initialize(test_data); @@ -1816,41 +1935,46 @@ const base::Value::Dict& pref_overrides = GetOverridePref(); EXPECT_TRUE(pref_overrides.empty()); - // Replace Ctrl + Space with Meta + A in `SWITCH_TO_LAST_USED_IME`. + // Replace Ctrl + Space with Meta + A in + // `AcceleratorAction::kSwitchToLastUsedIme`. ui::Accelerator old_accelerator(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN); ui::Accelerator new_accelerator(ui::VKEY_A, ui::EF_COMMAND_DOWN); - AcceleratorConfigResult result = config_->ReplaceAccelerator( - SWITCH_TO_LAST_USED_IME, old_accelerator, new_accelerator); + AcceleratorConfigResult result = + config_->ReplaceAccelerator(AcceleratorAction::kSwitchToLastUsedIme, + old_accelerator, new_accelerator); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result); // Verify prefs are populated correctly. const base::Value::Dict& updated_overrides = GetOverridePref(); - const base::Value::List* last_used_ime_overrides = - updated_overrides.FindList(base::NumberToString(SWITCH_TO_LAST_USED_IME)); + const base::Value::List* last_used_ime_overrides = updated_overrides.FindList( + base::NumberToString(AcceleratorAction::kSwitchToLastUsedIme)); AcceleratorModificationData remove_override_data = ValueToAcceleratorModificationData( last_used_ime_overrides->front().GetDict()); - CompareAccelerators({/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN, SWITCH_TO_LAST_USED_IME}, - remove_override_data.accelerator); + CompareAccelerators( + {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, + remove_override_data.accelerator); EXPECT_EQ(AcceleratorModificationAction::kRemove, remove_override_data.action); AcceleratorModificationData add_override_data = ValueToAcceleratorModificationData( last_used_ime_overrides->back().GetDict()); - CompareAccelerators({/*trigger_on_press=*/true, ui::VKEY_A, - ui::EF_COMMAND_DOWN, SWITCH_TO_LAST_USED_IME}, - add_override_data.accelerator); + CompareAccelerators( + {/*trigger_on_press=*/true, ui::VKEY_A, ui::EF_COMMAND_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, + add_override_data.accelerator); EXPECT_EQ(AcceleratorModificationAction::kAdd, add_override_data.action); const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_A, ui::EF_COMMAND_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, - ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, SWITCH_TO_LAST_USED_IME}, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_C, ui::EF_COMMAND_DOWN, - TOGGLE_CALENDAR}, + AcceleratorAction::kToggleCalendar}, }; ExpectAllAcceleratorsEqual(updated_test_data, config_->GetAllAccelerators());
diff --git a/ash/accelerators/debug_commands.cc b/ash/accelerators/debug_commands.cc index e2de2f43..fcf5507e 100644 --- a/ash/accelerators/debug_commands.cc +++ b/ash/accelerators/debug_commands.cc
@@ -232,7 +232,7 @@ DCHECK(floated_window); const float velocity_x = - action == DEBUG_TUCK_FLOATED_WINDOW_LEFT ? -500.f : 500.f; + action == AcceleratorAction::kDebugTuckFloatedWindowLeft ? -500.f : 500.f; Shell::Get()->float_controller()->OnFlingOrSwipeForTablet(floated_window, velocity_x, /*velocity_y=*/0.f); @@ -297,62 +297,62 @@ return; switch (action) { - case DEBUG_KEYBOARD_BACKLIGHT_TOGGLE: + case AcceleratorAction::kDebugKeyboardBacklightToggle: HandleToggleKeyboardBacklight(); break; - case DEBUG_MICROPHONE_MUTE_TOGGLE: + case AcceleratorAction::kDebugMicrophoneMuteToggle: HandleToggleMicrophoneMute(); break; - case DEBUG_PRINT_LAYER_HIERARCHY: + case AcceleratorAction::kDebugPrintLayerHierarchy: HandlePrintLayerHierarchy(); break; - case DEBUG_PRINT_VIEW_HIERARCHY: + case AcceleratorAction::kDebugPrintViewHierarchy: HandlePrintViewHierarchy(); break; - case DEBUG_PRINT_WINDOW_HIERARCHY: + case AcceleratorAction::kDebugPrintWindowHierarchy: HandlePrintWindowHierarchy(); break; - case DEBUG_SHOW_TOAST: + case AcceleratorAction::kDebugShowToast: HandleShowToast(); break; - case DEBUG_SYSTEM_UI_STYLE_VIEWER: + case AcceleratorAction::kDebugSystemUiStyleViewer: SystemUIComponentsStyleViewerView::CreateAndShowWidget(); break; - case DEBUG_TOGGLE_DARK_MODE: + case AcceleratorAction::kDebugToggleDarkMode: HandleToggleDarkMode(); break; - case DEBUG_TOGGLE_DYNAMIC_COLOR: + case AcceleratorAction::kDebugToggleDynamicColor: HandleToggleDynamicColor(); break; - case DEBUG_TOGGLE_GLANCEABLES: + case AcceleratorAction::kDebugToggleGlanceables: HandleToggleGlanceables(); break; - case DEBUG_TOGGLE_POWER_BUTTON_MENU: + case AcceleratorAction::kDebugTogglePowerButtonMenu: HandleTogglePowerButtonMenu(); break; - case DEBUG_TOGGLE_TOUCH_PAD: + case AcceleratorAction::kDebugToggleTouchPad: HandleToggleTouchpad(); break; - case DEBUG_TOGGLE_TOUCH_SCREEN: + case AcceleratorAction::kDebugToggleTouchScreen: HandleToggleTouchscreen(); break; - case DEBUG_TOGGLE_TABLET_MODE: + case AcceleratorAction::kDebugToggleTabletMode: HandleToggleTabletMode(); break; - case DEBUG_TOGGLE_WALLPAPER_MODE: + case AcceleratorAction::kDebugToggleWallpaperMode: HandleToggleWallpaperMode(); break; - case DEBUG_TRIGGER_CRASH: + case AcceleratorAction::kDebugTriggerCrash: HandleTriggerCrash(); break; - case DEBUG_TOGGLE_HUD_DISPLAY: + case AcceleratorAction::kDebugToggleHudDisplay: HandleTriggerHUDDisplay(); break; - case DEBUG_TUCK_FLOATED_WINDOW_LEFT: - case DEBUG_TUCK_FLOATED_WINDOW_RIGHT: + case AcceleratorAction::kDebugTuckFloatedWindowLeft: + case AcceleratorAction::kDebugTuckFloatedWindowRight: HandleTuckFloatedWindow(action); break; - case DEBUG_TOGGLE_VIDEO_CONFERENCE_CAMERA_TRAY_ICON: + case AcceleratorAction::kDebugToggleVideoConferenceCameraTrayIcon: HandleToggleVideoConferenceCameraTrayIcon(); break; default:
diff --git a/ash/ambient/DEPS b/ash/ambient/DEPS index 833722a..910a7450 100644 --- a/ash/ambient/DEPS +++ b/ash/ambient/DEPS
@@ -11,6 +11,9 @@ "ambient_controller.*": [ "+chromeos/ash/components/assistant/buildflags.h", ], + "screensaver_images_policy_handler.*" : [ + "+chromeos/ash/components/login", + ], ".*test.cc": [ "+cc/test", ],
diff --git a/ash/ambient/managed/screensaver_image_downloader.cc b/ash/ambient/managed/screensaver_image_downloader.cc index 87cbcf72..fa7c1f4 100644 --- a/ash/ambient/managed/screensaver_image_downloader.cc +++ b/ash/ambient/managed/screensaver_image_downloader.cc
@@ -163,6 +163,10 @@ download_directory_)); } +base::FilePath ScreensaverImageDownloader::GetDowloadDirForTesting() { + return download_directory_; +} + void ScreensaverImageDownloader::StartDownloadJob( std::unique_ptr<Job> download_job) { queue_state_ = QueueState::kDownloading;
diff --git a/ash/ambient/managed/screensaver_image_downloader.h b/ash/ambient/managed/screensaver_image_downloader.h index 8d17f86..a8f7258e 100644 --- a/ash/ambient/managed/screensaver_image_downloader.h +++ b/ash/ambient/managed/screensaver_image_downloader.h
@@ -97,6 +97,8 @@ // Clears out the download folder. void DeleteDownloadedImages(); + base::FilePath GetDowloadDirForTesting(); + private: friend class ScreensaverImageDownloaderTest;
diff --git a/ash/ambient/managed/screensaver_images_policy_handler.cc b/ash/ambient/managed/screensaver_images_policy_handler.cc index 44237bf..7476808 100644 --- a/ash/ambient/managed/screensaver_images_policy_handler.cc +++ b/ash/ambient/managed/screensaver_images_policy_handler.cc
@@ -13,6 +13,7 @@ #include "base/files/file_path.h" #include "base/functional/callback.h" #include "base/path_service.h" +#include "chromeos/ash/components/login/login_state/login_state.h" #include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_service.h" #include "services/network/public/cpp/shared_url_loader_factory.h" @@ -22,12 +23,19 @@ namespace { constexpr char kCacheDirectoryName[] = "managed_screensaver"; +constexpr char kManagedGuestsCacheDirectoryPath[] = + "/var/cache/managed_screensaver/guest"; // This limit is specified in the policy definition for the policies // ScreensaverLockScreenImages and DeviceScreensaverLoginScreenImages. constexpr size_t kMaxUrlsToProcessFromPolicy = 25u; base::FilePath GetDownloaderRootPath() { + if (LoginState::IsInitialized() && LoginState::Get()->IsPublicSessionUser()) { + return base::FilePath(kManagedGuestsCacheDirectoryPath); + } + // TODO(b/271093537): Support the folder location for sign-in screensaver. + base::FilePath home_dir; CHECK(base::PathService::Get(base::DIR_HOME, &home_dir)); return home_dir.Append(FILE_PATH_LITERAL(kCacheDirectoryName));
diff --git a/ash/ambient/managed/screensaver_images_policy_handler_unittest.cc b/ash/ambient/managed/screensaver_images_policy_handler_unittest.cc index 769d98e..7250b621 100644 --- a/ash/ambient/managed/screensaver_images_policy_handler_unittest.cc +++ b/ash/ambient/managed/screensaver_images_policy_handler_unittest.cc
@@ -23,6 +23,7 @@ #include "base/strings/string_number_conversions.h" #include "base/test/repeating_test_future.h" #include "base/test/scoped_path_override.h" +#include "chromeos/ash/components/login/login_state/scoped_test_public_session_login_state.h" #include "components/prefs/testing_pref_service.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h" @@ -38,6 +39,8 @@ constexpr char kFakeFilePath2[] = "/path/to/file2"; constexpr char kCacheDirectoryName[] = "managed_screensaver"; +constexpr char kManagedGuestsCacheDirectoryPath[] = + "/var/cache/managed_screensaver/guest"; constexpr char kCacheFileExt[] = ".cache"; constexpr char kImageUrl1[] = "https://example.com/1.jpg"; @@ -81,7 +84,20 @@ policy_handler_->OnDownloadJobCompleted(result, path); } - void CreateHandlerInstanceWithUserProfile() { + ScreensaverImageDownloader* GetPrivateImageDownloader( + const ScreensaverImagesPolicyHandler& policy_handler) { + return policy_handler.image_downloader_.get(); + } + + void VerifyPrivateImageDownloaderDownloadFolder( + const ScreensaverImagesPolicyHandler& policy_handler, + const base::FilePath& expected_path) { + ASSERT_TRUE(policy_handler.image_downloader_.get()); + EXPECT_EQ(expected_path, + policy_handler.image_downloader_->GetDowloadDirForTesting()); + } + + void RegisterUserWithUserPrefs(const AccountId& account_id) { // Create a fake user prefs map. auto user_prefs = std::make_unique<TestingPrefServiceSimple>(); RegisterUserProfilePrefs(user_prefs->registry(), /*for_test=*/true); @@ -93,15 +109,24 @@ GetSessionControllerClient()->AddUserSession( kUserEmail, user_manager::USER_TYPE_REGULAR, /*provide_pref_service=*/false); - GetSessionControllerClient()->SetUserPrefService( - AccountId::FromUserEmail(kUserEmail), std::move(user_prefs)); - GetSessionControllerClient()->SwitchActiveUser( - AccountId::FromUserEmail(kUserEmail)); + GetSessionControllerClient()->SetUserPrefService(account_id, + std::move(user_prefs)); + GetSessionControllerClient()->SwitchActiveUser(account_id); GetSessionControllerClient()->SetSessionState( session_manager::SessionState::ACTIVE); + } + + void CreateHandlerInstanceWithUserProfile() { + RegisterUserWithUserPrefs(AccountId::FromUserEmail(kUserEmail)); policy_handler_ = std::make_unique<ScreensaverImagesPolicyHandler>(user_prefs_); + + // Verify that the policy handler detected the new user and created a new + // image downloader instance. + ASSERT_TRUE(GetPrivateImageDownloader(*policy_handler_)); + VerifyPrivateImageDownloaderDownloadFolder( + *policy_handler_, temp_dir_.GetPath().AppendASCII(kCacheDirectoryName)); } base::FilePath GetExpectedFilePath(const std::string url) { @@ -141,6 +166,22 @@ std::unique_ptr<ScreensaverImagesPolicyHandler> policy_handler_; }; +TEST_F(ScreensaverImagesPolicyHandlerTest, + SharedDirectoryForManagedGuestSessions) { + ash::ScopedTestPublicSessionLoginState test_scoped_mgs_session; + + // Register the user profile with its own pref service. + RegisterUserWithUserPrefs(AccountId::FromUserEmail(kUserEmail)); + + ScreensaverImagesPolicyHandler policy_handler(user_prefs()); + + // Verify that the policy handler detected the new user and created a new + // image downloader instance. + ASSERT_TRUE(GetPrivateImageDownloader(policy_handler)); + VerifyPrivateImageDownloaderDownloadFolder( + policy_handler, base::FilePath(kManagedGuestsCacheDirectoryPath)); +} + TEST_F(ScreensaverImagesPolicyHandlerTest, ShouldRunCallbackIfImagesUpdated) { CreateHandlerInstanceWithUserProfile(); base::test::RepeatingTestFuture<std::vector<base::FilePath>> test_future;
diff --git a/ash/ambient/ui/ambient_video_view.cc b/ash/ambient/ui/ambient_video_view.cc index bb1385c..b1277251 100644 --- a/ash/ambient/ui/ambient_video_view.cc +++ b/ash/ambient/ui/ambient_video_view.cc
@@ -47,8 +47,12 @@ DCHECK(!html_path.empty()); DCHECK(AshWebViewFactory::Get()); SetUseDefaultFillLayout(true); + AshWebView::InitParams web_view_params; + // Disables wake locks so the video doesn't stop the device from going to + // sleep. + web_view_params.enable_wake_locks = false; AshWebView* ash_web_view = - AddChildView(AshWebViewFactory::Get()->Create(AshWebView::InitParams())); + AddChildView(AshWebViewFactory::Get()->Create(web_view_params)); ash_web_view->SetID(kAmbientVideoWebView); ash_web_view->SetUseDefaultFillLayout(true); GURL ambient_video_url = net::AppendQueryParameter(
diff --git a/ash/ambient/ui/ambient_video_view_unittest.cc b/ash/ambient/ui/ambient_video_view_unittest.cc index c0328649..7726e2f 100644 --- a/ash/ambient/ui/ambient_video_view_unittest.cc +++ b/ash/ambient/ui/ambient_video_view_unittest.cc
@@ -31,6 +31,7 @@ const TestAshWebView* web_view = static_cast<const TestAshWebView*>( view.GetViewByID(kAmbientVideoWebView)); ASSERT_THAT(web_view, NotNull()); + EXPECT_FALSE(web_view->init_params_for_testing().enable_wake_locks); EXPECT_TRUE(web_view->current_url().SchemeIsFile()); EXPECT_THAT(web_view->current_url().path(), Eq("/path/to/html")); std::string video_path_requested;
diff --git a/ash/app_list/app_list_test_api.cc b/ash/app_list/app_list_test_api.cc index 3dd718a1..ce2f6755 100644 --- a/ash/app_list/app_list_test_api.cc +++ b/ash/app_list/app_list_test_api.cc
@@ -3,7 +3,6 @@ // found in the LICENSE file. #include "ash/public/cpp/test/app_list_test_api.h" -#include "base/memory/raw_ptr.h" #include <string> #include <utility> @@ -38,6 +37,7 @@ #include "ash/public/cpp/accelerators.h" #include "ash/shell.h" #include "base/functional/callback.h" +#include "base/memory/raw_ptr.h" #include "base/run_loop.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/aura/window_observer.h" @@ -304,7 +304,7 @@ void AppListTestApi::ShowBubbleAppListAndWait() { ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); WaitForBubbleWindow( /*wait_for_opening_animation=*/true); }
diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd index 4b9f2cd..b9e2956 100644 --- a/ash/ash_strings.grd +++ b/ash/ash_strings.grd
@@ -3109,6 +3109,9 @@ <message name="IDS_ASH_STATUS_TRAY_INHIBITED_CELLULAR_DISABLING_PROFILE" desc="Tooltip message for disabled add cellular button, indicating cellular network profile is being disabled."> Disabling profile. Wait a few minutes. </message> + <message name="IDS_ASH_STATUS_TRAY_INHIBITED_CELLULAR_REQUESTING_AVAILABLE_PROFILES" desc="Tooltip message for disabled add cellular button, indicating cellular device is requesting profiles available to install."> + Requesting available profiles. Wait a few minutes. + </message> <message name="IDS_ASH_STATUS_TRAY_INITIALIZING_CELLULAR" desc="Message for the status area when initializing the cellular device."> Initializing... </message>
diff --git a/ash/ash_strings_grd/IDS_ASH_STATUS_TRAY_INHIBITED_CELLULAR_REQUESTING_AVAILABLE_PROFILES.png.sha1 b/ash/ash_strings_grd/IDS_ASH_STATUS_TRAY_INHIBITED_CELLULAR_REQUESTING_AVAILABLE_PROFILES.png.sha1 new file mode 100644 index 0000000..8419e16 --- /dev/null +++ b/ash/ash_strings_grd/IDS_ASH_STATUS_TRAY_INHIBITED_CELLULAR_REQUESTING_AVAILABLE_PROFILES.png.sha1
@@ -0,0 +1 @@ +e08824203009078607bbb979c88d581302fe1b9d \ No newline at end of file
diff --git a/ash/booting/booting_animation_controller.cc b/ash/booting/booting_animation_controller.cc new file mode 100644 index 0000000..b3e46ae --- /dev/null +++ b/ash/booting/booting_animation_controller.cc
@@ -0,0 +1,101 @@ +// 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. + +#include "ash/booting/booting_animation_controller.h" + +#include <memory> + +#include "ash/booting/booting_animation_view.h" +#include "ash/public/cpp/shell_window_ids.h" +#include "ash/shell.h" +#include "base/files/file_util.h" +#include "base/task/task_traits.h" +#include "base/task/thread_pool.h" +#include "ui/views/widget/widget.h" +#include "ui/views/widget/widget_delegate.h" + +namespace ash { + +namespace { + +constexpr base::FilePath::CharType kAnimationPath[] = FILE_PATH_LITERAL( + "/usr/share/chromeos-assets/animated_splash_screen/splash_animation.json"); + +std::string ReadFileToString(const base::FilePath& path) { + std::string result; + if (!base::ReadFileToString(path, &result)) { + LOG(WARNING) << "Failed reading file"; + result.clear(); + } + + return result; +} + +} // namespace + +BootingAnimationController::BootingAnimationController() { + base::ThreadPool::PostTaskAndReplyWithResult( + FROM_HERE, + {base::MayBlock(), base::TaskPriority::USER_VISIBLE, + base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, + base::BindOnce(&ReadFileToString, base::FilePath(kAnimationPath)), + base::BindOnce(&BootingAnimationController::OnAnimationDataFetched, + weak_factory_.GetWeakPtr())); +} + +BootingAnimationController::~BootingAnimationController() = default; + +void BootingAnimationController::Show() { + widget_ = std::make_unique<views::Widget>(); + views::Widget::InitParams params; + params.delegate = new views::WidgetDelegate; // Takes ownership. + params.delegate->SetOwnedByWidget(true); + // Allow maximize so the booting container's FillLayoutManager can + // fill the screen with the widget. This is required even for + // fullscreen widgets. + params.delegate->SetCanMaximize(true); + params.type = views::Widget::InitParams::TYPE_WINDOW_FRAMELESS; + params.name = "BootingAnimationWidget"; + params.show_state = ui::SHOW_STATE_FULLSCREEN; + // Create the Booting Animation widget on the primary display. + auto* animation_window = Shell::GetContainer( + Shell::GetPrimaryRootWindow(), kShellWindowId_BootingAnimationContainer); + params.parent = animation_window; + params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; + params.opacity = views::Widget::InitParams::WindowOpacity::kOpaque; + widget_->Init(std::move(params)); + + if (animation_data_.empty()) { + start_once_ready_ = true; + return; + } + StartAnimation(); +} + +void BootingAnimationController::Finish() { + widget_.reset(); +} + +void BootingAnimationController::OnAnimationDataFetched(std::string data) { + if (data.empty()) { + LOG(ERROR) << "No booting animation file available."; + return; + } + + animation_data_ = std::move(data); + + if (start_once_ready_) { + StartAnimation(); + } +} + +void BootingAnimationController::StartAnimation() { + start_once_ready_ = false; + BootingAnimationView* view = widget_->SetContentsView( + std::make_unique<BootingAnimationView>(animation_data_)); + widget_->Show(); + view->Play(); +} + +} // namespace ash
diff --git a/ash/booting/booting_animation_controller.h b/ash/booting/booting_animation_controller.h new file mode 100644 index 0000000..3addc45 --- /dev/null +++ b/ash/booting/booting_animation_controller.h
@@ -0,0 +1,42 @@ +// 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 ASH_BOOTING_BOOTING_ANIMATION_CONTROLLER_H_ +#define ASH_BOOTING_BOOTING_ANIMATION_CONTROLLER_H_ + +#include "ash/ash_export.h" +#include "base/memory/raw_ptr.h" +#include "base/memory/weak_ptr.h" +#include "ui/views/widget/unique_widget_ptr.h" + +namespace ash { + +class ASH_EXPORT BootingAnimationController { + public: + BootingAnimationController(); + BootingAnimationController(const BootingAnimationController&) = delete; + BootingAnimationController& operator=(const BootingAnimationController&) = + delete; + ~BootingAnimationController(); + + // Shows the widget and starts to play a booting animation. + void Show(); + + // Cleans up the animation, resets the widget and the view. + void Finish(); + + private: + void OnAnimationDataFetched(std::string data); + void StartAnimation(); + + std::string animation_data_; + views::UniqueWidgetPtr widget_; + bool start_once_ready_ = false; + + base::WeakPtrFactory<BootingAnimationController> weak_factory_{this}; +}; + +} // namespace ash + +#endif // ASH_BOOTING_BOOTING_ANIMATION_CONTROLLER_H_
diff --git a/ash/booting/booting_animation_view.cc b/ash/booting/booting_animation_view.cc new file mode 100644 index 0000000..0ee7767 --- /dev/null +++ b/ash/booting/booting_animation_view.cc
@@ -0,0 +1,98 @@ +// 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. + +#include "ash/booting/booting_animation_view.h" + +#include <string> + +#include "ash/public/cpp/image_util.h" +#include "cc/paint/skottie_wrapper.h" +#include "ui/base/resource/resource_bundle.h" +#include "ui/lottie/animation.h" +#include "ui/views/background.h" +#include "ui/views/controls/animated_image_view.h" +#include "ui/views/layout/fill_layout.h" + +namespace ash { + +namespace { + +void Resize(views::AnimatedImageView& animated_image_view) { + DCHECK(animated_image_view.animated_image()); + gfx::Size animation_size = + animated_image_view.animated_image()->GetOriginalSize(); + DCHECK(!animation_size.IsEmpty()); + gfx::Rect destination_bounds = animated_image_view.GetContentsBounds(); + DCHECK(!destination_bounds.IsEmpty()); + gfx::Size animation_resized; + const float width_scale_factor = + static_cast<float>(destination_bounds.width()) / animation_size.width(); + const float height_scale_factor = + static_cast<float>(destination_bounds.height()) / animation_size.height(); + + const bool scale_to_width = width_scale_factor > height_scale_factor; + if (scale_to_width) { + animation_resized.set_width(destination_bounds.width()); + animation_resized.set_height( + base::ClampRound(animation_size.height() * width_scale_factor)); + } else { + animation_resized.set_height(destination_bounds.height()); + animation_resized.set_width( + base::ClampRound(animation_size.width() * height_scale_factor)); + } + animated_image_view.SetVerticalAlignment( + views::ImageViewBase::Alignment::kCenter); + animated_image_view.SetHorizontalAlignment( + views::ImageViewBase::Alignment::kCenter); + // The animation's new scaled size has been computed above. + // AnimatedImageView::SetImageSize() takes care of both a) applying the + // scaled size and b) cropping by translating the canvas before painting such + // that the rescaled animation's origin resides outside the boundaries of the + // view. The portions of the rescaled animation that reside outside of the + // view's boundaries ultimately get cropped. + animated_image_view.SetImageSize(animation_resized); +} + +} // namespace + +BootingAnimationView::BootingAnimationView(const std::string& animation_data) { + SetLayoutManager(std::make_unique<views::FillLayout>()); + auto skottie = cc::SkottieWrapper::CreateSerializable( + std::vector<uint8_t>(animation_data.begin(), animation_data.end())); + AddChildView( + views::Builder<views::AnimatedImageView>() + .CopyAddressTo(&animation_) + .SetAnimatedImage(std::make_unique<lottie::Animation>(skottie)) + .Build()); + animation_->SetBackground(views::CreateSolidBackground(SK_ColorBLACK)); + animated_image_view_observer_.Observe(animation_); +} + +BootingAnimationView::~BootingAnimationView() = default; + +void BootingAnimationView::Play() { + animation_->Play(lottie::Animation::PlaybackConfig::CreateWithStyle( + lottie::Animation::Style::kLinear, *animation_->animated_image())); +} + +void BootingAnimationView::OnViewBoundsChanged(View* observed_view) { + gfx::Rect content_bounds = observed_view->GetContentsBounds(); + if (content_bounds.IsEmpty()) { + return; + } + + // By default, the |animated_image_view_| will render the animation with the + // fixed dimensions specified in the Lottie file. To render the animation + // at the view's full bounds, wait for the view's initial layout to happen + // so that its proper bounds become available (they are 0x0 initially) before + // starting the animation playback. + gfx::Rect previous_animation_bounds = animation_->GetImageBounds(); + Resize(*animation_); + VLOG(1) << "View bounds available. Resized animation with native size " + << animation_->animated_image()->GetOriginalSize().ToString() + << " from " << previous_animation_bounds.ToString() << " to " + << animation_->GetImageBounds().ToString(); +} + +} // namespace ash
diff --git a/ash/booting/booting_animation_view.h b/ash/booting/booting_animation_view.h new file mode 100644 index 0000000..724a2d1 --- /dev/null +++ b/ash/booting/booting_animation_view.h
@@ -0,0 +1,43 @@ +// 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 ASH_BOOTING_BOOTING_ANIMATION_VIEW_H_ +#define ASH_BOOTING_BOOTING_ANIMATION_VIEW_H_ + +#include "ash/ash_export.h" +#include "base/scoped_observation.h" +#include "ui/lottie/animation.h" +#include "ui/views/controls/animated_image_view.h" +#include "ui/views/view.h" +#include "ui/views/view_observer.h" + +namespace views { +class AnimatedImageView; +} // namespace views + +namespace ash { + +class ASH_EXPORT BootingAnimationView : public views::View, + public views::ViewObserver { + public: + explicit BootingAnimationView(const std::string& animation_data); + BootingAnimationView(const BootingAnimationView&) = delete; + BootingAnimationView& operator=(const BootingAnimationView&) = delete; + ~BootingAnimationView() override; + + void Play(); + + private: + // views::ViewObserver: + void OnViewBoundsChanged(View* observed_view) override; + + base::raw_ptr<views::AnimatedImageView, ExperimentalAsh> animation_ = nullptr; + + base::ScopedObservation<View, ViewObserver> animated_image_view_observer_{ + this}; +}; + +} // namespace ash + +#endif // ASH_BOOTING_BOOTING_ANIMATION_VIEW_H_
diff --git a/ash/capture_mode/capture_mode_controller.cc b/ash/capture_mode/capture_mode_controller.cc index 3a13703..51a2a18 100644 --- a/ash/capture_mode/capture_mode_controller.cc +++ b/ash/capture_mode/capture_mode_controller.cc
@@ -456,7 +456,7 @@ return size_in_bytes / 1024; } -constexpr char kShareToYouTubeURL[] = "https://studio.youtube.com"; +constexpr char kShareToYouTubeURL[] = "https://youtube.com/upload"; } // namespace
diff --git a/ash/constants/ash_features.cc b/ash/constants/ash_features.cc index 22006b9..fcd25b28 100644 --- a/ash/constants/ash_features.cc +++ b/ash/constants/ash_features.cc
@@ -1599,7 +1599,7 @@ // This tool under development will be rolled out via Finch. // Enabling this flag will use the new feedback tool instead of the current // tool on CrOS. -BASE_FEATURE(kOsFeedback, "OsFeedback", base::FEATURE_DISABLED_BY_DEFAULT); +BASE_FEATURE(kOsFeedback, "OsFeedback", base::FEATURE_ENABLED_BY_DEFAULT); // If enabled, a new App Notifications subpage will appear in CrOS Apps section. BASE_FEATURE(kOsSettingsAppNotificationsPage, @@ -2016,6 +2016,12 @@ "ShowPlayInDemoMode", base::FEATURE_ENABLED_BY_DEFAULT); +// Enables custom Demo Mode behavior on features-aware devices, as controlled by +// the feature management module +BASE_FEATURE(kFeatureManagementFeaturesAwareDeviceDemoMode, + "FeatureManagementFeaturedDemoMode", + base::FEATURE_DISABLED_BY_DEFAULT); + // Enables the shutdown confirmation bubble from the login shelf view. BASE_FEATURE(kShutdownConfirmationBubble, "ShutdownConfirmationBubble", @@ -3091,7 +3097,7 @@ bool IsOobeDrivePinningEnabled() { return base::FeatureList::IsEnabled(kOobeDrivePinning) && - IsOobeChoobeEnabled(); + IsOobeChoobeEnabled() && IsDriveFsBulkPinningEnabled(); } bool IsOobeQuickStartEnabled() { @@ -3481,6 +3487,11 @@ return base::FeatureList::IsEnabled(kShowPlayInDemoMode); } +bool IsFeaturesAwareDeviceDemoModeEnabled() { + return base::FeatureList::IsEnabled( + kFeatureManagementFeaturesAwareDeviceDemoMode); +} + bool ShouldUseV1DeviceSync() { return !ShouldUseV2DeviceSync() || !base::FeatureList::IsEnabled(kDisableCryptAuthV1DeviceSync);
diff --git a/ash/constants/ash_features.h b/ash/constants/ash_features.h index 31875c5a..5c97225 100644 --- a/ash/constants/ash_features.h +++ b/ash/constants/ash_features.h
@@ -583,6 +583,8 @@ BASE_DECLARE_FEATURE(kShowBluetoothDebugLogToggle); COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kShowPlayInDemoMode); COMPONENT_EXPORT(ASH_CONSTANTS) +BASE_DECLARE_FEATURE(kFeatureManagementFeaturesAwareDeviceDemoMode); +COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kShutdownConfirmationBubble); COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kSideAlignedToasts); COMPONENT_EXPORT(ASH_CONSTANTS) @@ -957,6 +959,8 @@ COMPONENT_EXPORT(ASH_CONSTANTS) bool ShouldOnlyShowNewShortcutApp(); COMPONENT_EXPORT(ASH_CONSTANTS) bool IsSearchInShortcutsAppEnabled(); +COMPONENT_EXPORT(ASH_CONSTANTS) +bool IsFeaturesAwareDeviceDemoModeEnabled(); // TODO(michaelpg): Remove after M71 branch to re-enable Play Store by default. COMPONENT_EXPORT(ASH_CONSTANTS) bool ShouldShowPlayStoreInDemoMode(); COMPONENT_EXPORT(ASH_CONSTANTS) bool ShouldUseV1DeviceSync();
diff --git a/ash/constants/notifier_catalogs.h b/ash/constants/notifier_catalogs.h index cb29d9f..a45e755 100644 --- a/ash/constants/notifier_catalogs.h +++ b/ash/constants/notifier_catalogs.h
@@ -259,6 +259,12 @@ kMaxValue = kVideoConferenceTrayUseWhileDisabled, }; +// A living catalog that registers anchored nudges. +// Current values should not be renumbered or removed. +// TODO(b/280309972): Add metrics for AnchoredNudge catalog. +// To deprecate comment out the entry. +enum class AnchoredNudgeCatalogName { kTest = 0, kMaxValue = kTest }; + } // namespace ash #endif // ASH_CONSTANTS_NOTIFIER_CATALOGS_H_
diff --git a/ash/display/display_move_window_util_unittest.cc b/ash/display/display_move_window_util_unittest.cc index 1217f6f..4f1750b 100644 --- a/ash/display/display_move_window_util_unittest.cc +++ b/ash/display/display_move_window_util_unittest.cc
@@ -61,7 +61,7 @@ void PerformMoveWindowAccel() { Shell::Get()->accelerator_controller()->PerformActionIfEnabled( - MOVE_ACTIVE_WINDOW_BETWEEN_DISPLAYS, {}); + AcceleratorAction::kMoveActiveWindowBetweenDisplays, {}); } } // namespace
diff --git a/ash/public/cpp/BUILD.gn b/ash/public/cpp/BUILD.gn index 297df3cf..2f10451 100644 --- a/ash/public/cpp/BUILD.gn +++ b/ash/public/cpp/BUILD.gn
@@ -10,6 +10,7 @@ # C++ headers and sources that can be used outside ash. component("cpp") { sources = [ + "accelerator_actions.h", "accelerator_configuration.cc", "accelerator_configuration.h", "accelerator_keycode_lookup_cache.cc", @@ -328,6 +329,8 @@ "style/dark_light_mode_controller.h", "stylus_utils.cc", "stylus_utils.h", + "system/anchored_nudge_data.cc", + "system/anchored_nudge_data.h", "system/power/power_button_controller_base.cc", "system/power/power_button_controller_base.h", "system/toast_data.cc",
diff --git a/ash/public/cpp/accelerator_actions.h b/ash/public/cpp/accelerator_actions.h new file mode 100644 index 0000000..99e187736 --- /dev/null +++ b/ash/public/cpp/accelerator_actions.h
@@ -0,0 +1,172 @@ +// 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 ASH_PUBLIC_CPP_ACCELERATOR_ACTIONS_H_ +#define ASH_PUBLIC_CPP_ACCELERATOR_ACTIONS_H_ + +namespace ash { + +enum AcceleratorAction { + kBrightnessDown, + kBrightnessUp, + kCycleBackwardMru, + kCycleForwardMru, + kCycleSameAppWindowsBackward, + kCycleSameAppWindowsForward, + kDesksActivateDeskLeft, + kDesksActivateDeskRight, + kDesksMoveActiveItemLeft, + kDesksMoveActiveItemRight, + kDesksNewDesk, + kDesksRemoveCurrentDesk, + kDesksActivate0, + kDesksActivate1, + kDesksActivate2, + kDesksActivate3, + kDesksActivate4, + kDesksActivate5, + kDesksActivate6, + kDesksActivate7, + kDesksToggleAssignToAllDesks, + kDisableCapsLock, + kExit, + kFocusCameraPreview, + kFocusNextPane, + kFocusPreviousPane, + kFocusShelf, + kFocusPip, + kKeyboardBacklightToggle, + kKeyboardBrightnessDown, + kKeyboardBrightnessUp, + kLaunchApp0, + kLaunchApp1, + kLaunchApp2, + kLaunchApp3, + kLaunchApp4, + kLaunchApp5, + kLaunchApp6, + kLaunchApp7, + kLaunchLastApp, + kLockPressed, + kLockReleased, + kLockScreen, + kMagnifierZoomIn, + kMagnifierZoomOut, + kMediaFastForward, + kMediaNextTrack, + kMediaPause, + kMediaPlay, + kMediaPlayPause, + kMediaPrevTrack, + kMediaRewind, + kMediaStop, + kMicrophoneMuteToggle, + kMoveActiveWindowBetweenDisplays, + kNewIncognitoWindow, + kNewTab, + kNewWindow, + kOpenCalculator, + kOpenCrosh, + kOpenDiagnostics, + kOpenFeedbackPage, + kOpenFileManager, + kOpenGetHelp, + // Similar to kToggleClipboardHistory but is used to paste plain text only + // when clipboard history menu is already open. + kPasteClipboardHistoryPlainText, + kPowerPressed, + kPowerReleased, + kPrintUiHierarchies, + kPrivacyScreenToggle, + kRestoreTab, + kRotateScreen, + kRotateWindow, + kScaleUiDown, + kScaleUiReset, + kScaleUiUp, + kShowEmojiPicker, + kToggleImeMenuBubble, + kShowShortcutViewer, + kShowStylusTools, + kShowTaskManager, + kStartAssistant, + kSuspend, + kSwapPrimaryDisplay, + kSwitchIme, // Switch to another IME depending on the accelerator. + kSwitchToLastUsedIme, + kSwitchToNextIme, + kSwitchToNextUser, + kSwitchToPreviousUser, + kTakePartialScreenshot, + kTakeScreenshot, + kTakeWindowScreenshot, + kToggleAppList, + kToggleCalendar, + kToggleCapsLock, + kToggleClipboardHistory, + kToggleDictation, + kToggleDockedMagnifier, + kToggleFloating, + kToggleFullscreen, + kToggleFullscreenMagnifier, + kToggleGameDashboard, + kToggleHighContrast, + kToggleMaximized, + kToggleMessageCenterBubble, + kToggleMirrorMode, + kToggleMultitaskMenu, + kToggleOverview, + kToggleProjectorMarker, + kToggleResizeLockMenu, + kToggleSpokenFeedback, + kToggleSystemTrayBubble, + kToggleWifi, + kToggleSnapGroupWindowsMinimizeAndRestore, + kTouchHudClear, + kTouchHudModeChange, + kUnpin, + kVolumeDown, + kVolumeMute, + kVolumeUp, + kWindowCycleSnapLeft, + kWindowCycleSnapRight, + kWindowMinimize, + kMinimizeTopWindowOnBack, + + // Debug accelerators are intentionally at the end, so that if you remove one + // you don't need to update tests which check hashes of the ids. + kDebugKeyboardBacklightToggle, + kDebugMicrophoneMuteToggle, + kDebugPrintLayerHierarchy, + kDebugPrintViewHierarchy, + kDebugPrintWindowHierarchy, + kDebugShowToast, + kDebugSystemUiStyleViewer, + // TODO(crbug.com/1336836): Remove fling accelerators after float is released. + kDebugTuckFloatedWindowLeft, + kDebugTuckFloatedWindowRight, + kDebugToggleDarkMode, + kDebugToggleDynamicColor, + kDebugToggleGlanceables, + kDebugTogglePowerButtonMenu, + kDebugToggleShowDebugBorders, + kDebugToggleShowFpsCounter, + kDebugToggleShowPaintRects, + kDebugToggleTouchPad, + kDebugToggleTouchScreen, + kDebugToggleTabletMode, + kDebugToggleVideoConferenceCameraTrayIcon, + kDebugToggleWallpaperMode, + kDebugTriggerCrash, // Intentionally crash the ash process. + kDebugToggleHudDisplay, + kDevAddRemoveDisplay, + // Different than kToggleAppList to ignore search-as-modifier-key rules for + // enabling the accelerator. + kDevToggleAppList, + kDevToggleUnifiedDesktop, +}; + +} // namespace ash + +#endif // ASH_PUBLIC_CPP_ACCELERATOR_ACTIONS_H_
diff --git a/ash/public/cpp/accelerators.cc b/ash/public/cpp/accelerators.cc index db1e906..de25adf 100644 --- a/ash/public/cpp/accelerators.cc +++ b/ash/public/cpp/accelerators.cc
@@ -24,228 +24,282 @@ // Shortcuts app, please follow the instructions at: // `ash/webui/shortcut_customization_ui/backend/accelerator_layout_table.h`. const AcceleratorData kAcceleratorData[] = { - {true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, SWITCH_TO_LAST_USED_IME}, - {false, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, SWITCH_TO_LAST_USED_IME}, - {true, ui::VKEY_TAB, ui::EF_ALT_DOWN, CYCLE_FORWARD_MRU}, + {true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, + {false, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, + AcceleratorAction::kSwitchToLastUsedIme}, + {true, ui::VKEY_TAB, ui::EF_ALT_DOWN, AcceleratorAction::kCycleForwardMru}, {true, ui::VKEY_TAB, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, - CYCLE_BACKWARD_MRU}, - {true, ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_NONE, TOGGLE_OVERVIEW}, + AcceleratorAction::kCycleBackwardMru}, + {true, ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_NONE, + AcceleratorAction::kToggleOverview}, // Historically, the browser search key with and without the shift key can // toggle the app list into different open states. Now the two combinations // are used to toggle the app list in the same way to keep the behavior // consistent. - {true, ui::VKEY_BROWSER_SEARCH, ui::EF_NONE, TOGGLE_APP_LIST}, - {true, ui::VKEY_BROWSER_SEARCH, ui::EF_SHIFT_DOWN, TOGGLE_APP_LIST}, - {true, ui::VKEY_ALL_APPLICATIONS, ui::EF_NONE, TOGGLE_APP_LIST}, - {true, ui::VKEY_WLAN, ui::EF_NONE, TOGGLE_WIFI}, - {true, ui::VKEY_PRIVACY_SCREEN_TOGGLE, ui::EF_NONE, PRIVACY_SCREEN_TOGGLE}, + {true, ui::VKEY_BROWSER_SEARCH, ui::EF_NONE, + AcceleratorAction::kToggleAppList}, + {true, ui::VKEY_BROWSER_SEARCH, ui::EF_SHIFT_DOWN, + AcceleratorAction::kToggleAppList}, + {true, ui::VKEY_ALL_APPLICATIONS, ui::EF_NONE, + AcceleratorAction::kToggleAppList}, + {true, ui::VKEY_WLAN, ui::EF_NONE, AcceleratorAction::kToggleWifi}, + {true, ui::VKEY_PRIVACY_SCREEN_TOGGLE, ui::EF_NONE, + AcceleratorAction::kPrivacyScreenToggle}, {true, ui::VKEY_MICROPHONE_MUTE_TOGGLE, ui::EF_NONE, - MICROPHONE_MUTE_TOGGLE}, + AcceleratorAction::kMicrophoneMuteToggle}, {true, ui::VKEY_KBD_BACKLIGHT_TOGGLE, ui::EF_NONE, - KEYBOARD_BACKLIGHT_TOGGLE}, - {true, ui::VKEY_KBD_BRIGHTNESS_DOWN, ui::EF_NONE, KEYBOARD_BRIGHTNESS_DOWN}, - {true, ui::VKEY_KBD_BRIGHTNESS_UP, ui::EF_NONE, KEYBOARD_BRIGHTNESS_UP}, + AcceleratorAction::kKeyboardBacklightToggle}, + {true, ui::VKEY_KBD_BRIGHTNESS_DOWN, ui::EF_NONE, + AcceleratorAction::kKeyboardBrightnessDown}, + {true, ui::VKEY_KBD_BRIGHTNESS_UP, ui::EF_NONE, + AcceleratorAction::kKeyboardBrightnessUp}, // Maximize button. - {true, ui::VKEY_ZOOM, ui::EF_CONTROL_DOWN, TOGGLE_MIRROR_MODE}, - {true, ui::VKEY_ZOOM, ui::EF_ALT_DOWN, SWAP_PRIMARY_DISPLAY}, + {true, ui::VKEY_ZOOM, ui::EF_CONTROL_DOWN, + AcceleratorAction::kToggleMirrorMode}, + {true, ui::VKEY_ZOOM, ui::EF_ALT_DOWN, + AcceleratorAction::kSwapPrimaryDisplay}, // Cycle windows button. - {true, ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN, TAKE_SCREENSHOT}, + {true, ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN, + AcceleratorAction::kTakeScreenshot}, {true, ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, - TAKE_PARTIAL_SCREENSHOT}, + AcceleratorAction::kTakePartialScreenshot}, {true, ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, - TAKE_WINDOW_SCREENSHOT}, - {true, ui::VKEY_BRIGHTNESS_DOWN, ui::EF_NONE, BRIGHTNESS_DOWN}, - {true, ui::VKEY_BRIGHTNESS_DOWN, ui::EF_ALT_DOWN, KEYBOARD_BRIGHTNESS_DOWN}, - {true, ui::VKEY_BRIGHTNESS_UP, ui::EF_NONE, BRIGHTNESS_UP}, - {true, ui::VKEY_BRIGHTNESS_UP, ui::EF_ALT_DOWN, KEYBOARD_BRIGHTNESS_UP}, + AcceleratorAction::kTakeWindowScreenshot}, + {true, ui::VKEY_BRIGHTNESS_DOWN, ui::EF_NONE, + AcceleratorAction::kBrightnessDown}, + {true, ui::VKEY_BRIGHTNESS_DOWN, ui::EF_ALT_DOWN, + AcceleratorAction::kKeyboardBrightnessDown}, + {true, ui::VKEY_BRIGHTNESS_UP, ui::EF_NONE, + AcceleratorAction::kBrightnessUp}, + {true, ui::VKEY_BRIGHTNESS_UP, ui::EF_ALT_DOWN, + AcceleratorAction::kKeyboardBrightnessUp}, {true, ui::VKEY_BRIGHTNESS_DOWN, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, - MAGNIFIER_ZOOM_OUT}, + AcceleratorAction::kMagnifierZoomOut}, {true, ui::VKEY_BRIGHTNESS_UP, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, - MAGNIFIER_ZOOM_IN}, - {true, ui::VKEY_L, ui::EF_COMMAND_DOWN, LOCK_SCREEN}, - {true, ui::VKEY_L, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, SUSPEND}, + AcceleratorAction::kMagnifierZoomIn}, + {true, ui::VKEY_L, ui::EF_COMMAND_DOWN, AcceleratorAction::kLockScreen}, + {true, ui::VKEY_L, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, + AcceleratorAction::kSuspend}, // The lock key on Chrome OS keyboards produces F13 scancodes. - {true, ui::VKEY_F13, ui::EF_NONE, LOCK_PRESSED}, - {false, ui::VKEY_F13, ui::EF_NONE, LOCK_RELEASED}, + {true, ui::VKEY_F13, ui::EF_NONE, AcceleratorAction::kLockPressed}, + {false, ui::VKEY_F13, ui::EF_NONE, AcceleratorAction::kLockReleased}, // Generic keyboards can use VKEY_SLEEP to mimic ChromeOS keyboard's lock // key. - {true, ui::VKEY_SLEEP, ui::EF_NONE, LOCK_PRESSED}, - {false, ui::VKEY_SLEEP, ui::EF_NONE, LOCK_RELEASED}, - {true, ui::VKEY_POWER, ui::EF_NONE, POWER_PRESSED}, - {false, ui::VKEY_POWER, ui::EF_NONE, POWER_RELEASED}, - {true, ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_NONE, OPEN_CALCULATOR}, + {true, ui::VKEY_SLEEP, ui::EF_NONE, AcceleratorAction::kLockPressed}, + {false, ui::VKEY_SLEEP, ui::EF_NONE, AcceleratorAction::kLockReleased}, + {true, ui::VKEY_POWER, ui::EF_NONE, AcceleratorAction::kPowerPressed}, + {false, ui::VKEY_POWER, ui::EF_NONE, AcceleratorAction::kPowerReleased}, + {true, ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_NONE, + AcceleratorAction::kOpenCalculator}, {true, ui::VKEY_ESCAPE, ui::EF_CONTROL_DOWN | ui::EF_COMMAND_DOWN, - OPEN_DIAGNOSTICS}, - {true, ui::VKEY_M, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, OPEN_FILE_MANAGER}, - {true, ui::VKEY_OEM_2, ui::EF_CONTROL_DOWN, OPEN_GET_HELP}, + AcceleratorAction::kOpenDiagnostics}, + {true, ui::VKEY_M, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kOpenFileManager}, + {true, ui::VKEY_OEM_2, ui::EF_CONTROL_DOWN, + AcceleratorAction::kOpenGetHelp}, {true, ui::VKEY_OEM_2, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, - OPEN_GET_HELP}, - {true, ui::VKEY_T, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, OPEN_CROSH}, + AcceleratorAction::kOpenGetHelp}, + {true, ui::VKEY_T, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kOpenCrosh}, {true, ui::VKEY_I, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, - TOUCH_HUD_MODE_CHANGE}, + AcceleratorAction::kTouchHudModeChange}, {true, ui::VKEY_I, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN, - TOUCH_HUD_CLEAR}, + AcceleratorAction::kTouchHudClear}, {true, ui::VKEY_H, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, - TOGGLE_HIGH_CONTRAST}, + AcceleratorAction::kToggleHighContrast}, {true, ui::VKEY_Z, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, - TOGGLE_SPOKEN_FEEDBACK}, - {true, ui::VKEY_D, ui::EF_COMMAND_DOWN, TOGGLE_DICTATION}, - {true, ui::VKEY_DICTATE, ui::EF_NONE, TOGGLE_DICTATION}, + AcceleratorAction::kToggleSpokenFeedback}, + {true, ui::VKEY_D, ui::EF_COMMAND_DOWN, + AcceleratorAction::kToggleDictation}, + {true, ui::VKEY_DICTATE, ui::EF_NONE, AcceleratorAction::kToggleDictation}, {true, ui::VKEY_OEM_COMMA, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, - SWITCH_TO_PREVIOUS_USER}, + AcceleratorAction::kSwitchToPreviousUser}, {true, ui::VKEY_OEM_PERIOD, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, - SWITCH_TO_NEXT_USER}, + AcceleratorAction::kSwitchToNextUser}, // Single shift release turns off caps lock. - {false, ui::VKEY_LSHIFT, ui::EF_NONE, DISABLE_CAPS_LOCK}, - {false, ui::VKEY_SHIFT, ui::EF_NONE, DISABLE_CAPS_LOCK}, - {false, ui::VKEY_RSHIFT, ui::EF_NONE, DISABLE_CAPS_LOCK}, - {true, ui::VKEY_C, ui::EF_COMMAND_DOWN, TOGGLE_CALENDAR}, + {false, ui::VKEY_LSHIFT, ui::EF_NONE, AcceleratorAction::kDisableCapsLock}, + {false, ui::VKEY_SHIFT, ui::EF_NONE, AcceleratorAction::kDisableCapsLock}, + {false, ui::VKEY_RSHIFT, ui::EF_NONE, AcceleratorAction::kDisableCapsLock}, + {true, ui::VKEY_C, ui::EF_COMMAND_DOWN, AcceleratorAction::kToggleCalendar}, // Accelerators to toggle Caps Lock. // The following is triggered when Search is released while Alt is still // down. The key_code here is LWIN (for search) and Alt is a modifier. - {false, ui::VKEY_LWIN, ui::EF_ALT_DOWN, TOGGLE_CAPS_LOCK}, + {false, ui::VKEY_LWIN, ui::EF_ALT_DOWN, AcceleratorAction::kToggleCapsLock}, // The following is triggered when Alt is released while search is still // down. The key_code here is MENU (for Alt) and Search is a modifier // (EF_COMMAND_DOWN is used for Search as a modifier). - {false, ui::VKEY_MENU, ui::EF_COMMAND_DOWN, TOGGLE_CAPS_LOCK}, - {true, ui::VKEY_V, ui::EF_COMMAND_DOWN, TOGGLE_CLIPBOARD_HISTORY}, + {false, ui::VKEY_MENU, ui::EF_COMMAND_DOWN, + AcceleratorAction::kToggleCapsLock}, + {true, ui::VKEY_V, ui::EF_COMMAND_DOWN, + AcceleratorAction::kToggleClipboardHistory}, {true, ui::VKEY_V, ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN, - PASTE_CLIPBOARD_HISTORY_PLAIN_TEXT}, - {true, ui::VKEY_VOLUME_MUTE, ui::EF_NONE, VOLUME_MUTE}, - {true, ui::VKEY_VOLUME_DOWN, ui::EF_NONE, VOLUME_DOWN}, - {true, ui::VKEY_VOLUME_UP, ui::EF_NONE, VOLUME_UP}, - {true, ui::VKEY_ESCAPE, ui::EF_COMMAND_DOWN, SHOW_TASK_MANAGER}, + AcceleratorAction::kPasteClipboardHistoryPlainText}, + {true, ui::VKEY_VOLUME_MUTE, ui::EF_NONE, AcceleratorAction::kVolumeMute}, + {true, ui::VKEY_VOLUME_DOWN, ui::EF_NONE, AcceleratorAction::kVolumeDown}, + {true, ui::VKEY_VOLUME_UP, ui::EF_NONE, AcceleratorAction::kVolumeUp}, + {true, ui::VKEY_ESCAPE, ui::EF_COMMAND_DOWN, + AcceleratorAction::kShowTaskManager}, {true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, - SWITCH_TO_NEXT_IME}, - {true, ui::VKEY_I, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, OPEN_FEEDBACK_PAGE}, - {true, ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, EXIT}, + AcceleratorAction::kSwitchToNextIme}, + {true, ui::VKEY_I, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kOpenFeedbackPage}, + {true, ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, + AcceleratorAction::kExit}, {true, ui::VKEY_N, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, - NEW_INCOGNITO_WINDOW}, - {true, ui::VKEY_N, ui::EF_CONTROL_DOWN, NEW_WINDOW}, - {true, ui::VKEY_T, ui::EF_CONTROL_DOWN, NEW_TAB}, - {true, ui::VKEY_NEW, ui::EF_NONE, NEW_TAB}, + AcceleratorAction::kNewIncognitoWindow}, + {true, ui::VKEY_N, ui::EF_CONTROL_DOWN, AcceleratorAction::kNewWindow}, + {true, ui::VKEY_T, ui::EF_CONTROL_DOWN, AcceleratorAction::kNewTab}, + {true, ui::VKEY_NEW, ui::EF_NONE, AcceleratorAction::kNewTab}, {true, ui::VKEY_OEM_MINUS, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, - SCALE_UI_UP}, + AcceleratorAction::kScaleUiUp}, {true, ui::VKEY_OEM_PLUS, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, - SCALE_UI_DOWN}, - {true, ui::VKEY_0, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, SCALE_UI_RESET}, + AcceleratorAction::kScaleUiDown}, + {true, ui::VKEY_0, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, + AcceleratorAction::kScaleUiReset}, {true, ui::VKEY_BROWSER_REFRESH, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, - ROTATE_SCREEN}, + AcceleratorAction::kRotateScreen}, {true, ui::VKEY_BROWSER_REFRESH, - ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ROTATE_WINDOW}, - {true, ui::VKEY_T, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, RESTORE_TAB}, + ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kRotateWindow}, + {true, ui::VKEY_T, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, + AcceleratorAction::kRestoreTab}, // This corresponds to the "Print Screen" key. - {true, ui::VKEY_SNAPSHOT, ui::EF_NONE, TAKE_SCREENSHOT}, - {true, ui::VKEY_SNAPSHOT, ui::EF_ALT_DOWN, TAKE_PARTIAL_SCREENSHOT}, + {true, ui::VKEY_SNAPSHOT, ui::EF_NONE, AcceleratorAction::kTakeScreenshot}, + {true, ui::VKEY_SNAPSHOT, ui::EF_ALT_DOWN, + AcceleratorAction::kTakePartialScreenshot}, // On Chrome OS, Search key is mapped to LWIN. The Search key binding should // act on release instead of press when using Search as a modifier key for // extended keyboard shortcuts. - {false, ui::VKEY_LWIN, ui::EF_NONE, TOGGLE_APP_LIST}, - {false, ui::VKEY_LWIN, ui::EF_SHIFT_DOWN, TOGGLE_APP_LIST}, - {true, ui::VKEY_ZOOM, ui::EF_NONE, TOGGLE_FULLSCREEN}, - {true, ui::VKEY_ZOOM, ui::EF_SHIFT_DOWN, TOGGLE_FULLSCREEN}, - {true, ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN, UNPIN}, + {false, ui::VKEY_LWIN, ui::EF_NONE, AcceleratorAction::kToggleAppList}, + {false, ui::VKEY_LWIN, ui::EF_SHIFT_DOWN, + AcceleratorAction::kToggleAppList}, + {true, ui::VKEY_ZOOM, ui::EF_NONE, AcceleratorAction::kToggleFullscreen}, + {true, ui::VKEY_ZOOM, ui::EF_SHIFT_DOWN, + AcceleratorAction::kToggleFullscreen}, + {true, ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN, + AcceleratorAction::kUnpin}, {true, ui::VKEY_S, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, - FOCUS_CAMERA_PREVIEW}, - {true, ui::VKEY_L, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, FOCUS_SHELF}, - {true, ui::VKEY_V, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, FOCUS_PIP}, - {true, ui::VKEY_HELP, ui::EF_NONE, SHOW_SHORTCUT_VIEWER}, + AcceleratorAction::kFocusCameraPreview}, + {true, ui::VKEY_L, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kFocusShelf}, + {true, ui::VKEY_V, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kFocusPip}, + {true, ui::VKEY_HELP, ui::EF_NONE, AcceleratorAction::kShowShortcutViewer}, {true, ui::VKEY_OEM_2, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, - SHOW_SHORTCUT_VIEWER}, + AcceleratorAction::kShowShortcutViewer}, {true, ui::VKEY_OEM_2, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, - SHOW_SHORTCUT_VIEWER}, - {true, ui::VKEY_F14, ui::EF_NONE, SHOW_SHORTCUT_VIEWER}, + AcceleratorAction::kShowShortcutViewer}, + {true, ui::VKEY_F14, ui::EF_NONE, AcceleratorAction::kShowShortcutViewer}, {true, ui::VKEY_N, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, - TOGGLE_MESSAGE_CENTER_BUBBLE}, - {true, ui::VKEY_P, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, SHOW_STYLUS_TOOLS}, + AcceleratorAction::kToggleMessageCenterBubble}, + {true, ui::VKEY_P, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kShowStylusTools}, {true, ui::VKEY_S, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, - TOGGLE_SYSTEM_TRAY_BUBBLE}, + AcceleratorAction::kToggleSystemTrayBubble}, // Until we have unified settings and notifications the "hamburger" // key opens quick settings. - {true, ui::VKEY_SETTINGS, ui::EF_NONE, TOGGLE_SYSTEM_TRAY_BUBBLE}, + {true, ui::VKEY_SETTINGS, ui::EF_NONE, + AcceleratorAction::kToggleSystemTrayBubble}, {true, ui::VKEY_K, ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN, - TOGGLE_IME_MENU_BUBBLE}, - {true, ui::VKEY_1, ui::EF_ALT_DOWN, LAUNCH_APP_0}, - {true, ui::VKEY_2, ui::EF_ALT_DOWN, LAUNCH_APP_1}, - {true, ui::VKEY_3, ui::EF_ALT_DOWN, LAUNCH_APP_2}, - {true, ui::VKEY_4, ui::EF_ALT_DOWN, LAUNCH_APP_3}, - {true, ui::VKEY_5, ui::EF_ALT_DOWN, LAUNCH_APP_4}, - {true, ui::VKEY_6, ui::EF_ALT_DOWN, LAUNCH_APP_5}, - {true, ui::VKEY_7, ui::EF_ALT_DOWN, LAUNCH_APP_6}, - {true, ui::VKEY_8, ui::EF_ALT_DOWN, LAUNCH_APP_7}, - {true, ui::VKEY_9, ui::EF_ALT_DOWN, LAUNCH_LAST_APP}, + AcceleratorAction::kToggleImeMenuBubble}, + {true, ui::VKEY_1, ui::EF_ALT_DOWN, AcceleratorAction::kLaunchApp0}, + {true, ui::VKEY_2, ui::EF_ALT_DOWN, AcceleratorAction::kLaunchApp1}, + {true, ui::VKEY_3, ui::EF_ALT_DOWN, AcceleratorAction::kLaunchApp2}, + {true, ui::VKEY_4, ui::EF_ALT_DOWN, AcceleratorAction::kLaunchApp3}, + {true, ui::VKEY_5, ui::EF_ALT_DOWN, AcceleratorAction::kLaunchApp4}, + {true, ui::VKEY_6, ui::EF_ALT_DOWN, AcceleratorAction::kLaunchApp5}, + {true, ui::VKEY_7, ui::EF_ALT_DOWN, AcceleratorAction::kLaunchApp6}, + {true, ui::VKEY_8, ui::EF_ALT_DOWN, AcceleratorAction::kLaunchApp7}, + {true, ui::VKEY_9, ui::EF_ALT_DOWN, AcceleratorAction::kLaunchLastApp}, // Window management shortcuts. - {true, ui::VKEY_OEM_4, ui::EF_ALT_DOWN, WINDOW_CYCLE_SNAP_LEFT}, - {true, ui::VKEY_OEM_6, ui::EF_ALT_DOWN, WINDOW_CYCLE_SNAP_RIGHT}, - {true, ui::VKEY_OEM_MINUS, ui::EF_ALT_DOWN, WINDOW_MINIMIZE}, - {true, ui::VKEY_F, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, TOGGLE_FLOATING}, - {true, ui::VKEY_OEM_PLUS, ui::EF_ALT_DOWN, TOGGLE_MAXIMIZED}, - {true, ui::VKEY_BROWSER_FORWARD, ui::EF_CONTROL_DOWN, FOCUS_NEXT_PANE}, - {true, ui::VKEY_BROWSER_BACK, ui::EF_CONTROL_DOWN, FOCUS_PREVIOUS_PANE}, + {true, ui::VKEY_OEM_4, ui::EF_ALT_DOWN, + AcceleratorAction::kWindowCycleSnapLeft}, + {true, ui::VKEY_OEM_6, ui::EF_ALT_DOWN, + AcceleratorAction::kWindowCycleSnapRight}, + {true, ui::VKEY_OEM_MINUS, ui::EF_ALT_DOWN, + AcceleratorAction::kWindowMinimize}, + {true, ui::VKEY_F, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, + AcceleratorAction::kToggleFloating}, + {true, ui::VKEY_OEM_PLUS, ui::EF_ALT_DOWN, + AcceleratorAction::kToggleMaximized}, + {true, ui::VKEY_BROWSER_FORWARD, ui::EF_CONTROL_DOWN, + AcceleratorAction::kFocusNextPane}, + {true, ui::VKEY_BROWSER_BACK, ui::EF_CONTROL_DOWN, + AcceleratorAction::kFocusPreviousPane}, {true, ui::VKEY_BROWSER_BACK, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, - FOCUS_NEXT_PANE}, - {true, ui::VKEY_BROWSER_BACK, ui::EF_NONE, MINIMIZE_TOP_WINDOW_ON_BACK}, + AcceleratorAction::kFocusNextPane}, + {true, ui::VKEY_BROWSER_BACK, ui::EF_NONE, + AcceleratorAction::kMinimizeTopWindowOnBack}, {true, ui::VKEY_D, ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN, - TOGGLE_SNAP_GROUP_WINDOWS_MINIMIZE_AND_RESTORE}, + AcceleratorAction::kToggleSnapGroupWindowsMinimizeAndRestore}, // Moving active window between displays shortcut. {true, ui::VKEY_M, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, - MOVE_ACTIVE_WINDOW_BETWEEN_DISPLAYS}, + AcceleratorAction::kMoveActiveWindowBetweenDisplays}, // Magnifiers shortcuts. {true, ui::VKEY_D, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, - TOGGLE_DOCKED_MAGNIFIER}, + AcceleratorAction::kToggleDockedMagnifier}, {true, ui::VKEY_M, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, - TOGGLE_FULLSCREEN_MAGNIFIER}, + AcceleratorAction::kToggleFullscreenMagnifier}, // Media Player shortcuts. - {true, ui::VKEY_MEDIA_NEXT_TRACK, ui::EF_NONE, MEDIA_NEXT_TRACK}, - {true, ui::VKEY_MEDIA_PAUSE, ui::EF_NONE, MEDIA_PAUSE}, - {true, ui::VKEY_MEDIA_PLAY, ui::EF_NONE, MEDIA_PLAY}, - {true, ui::VKEY_MEDIA_PLAY_PAUSE, ui::EF_NONE, MEDIA_PLAY_PAUSE}, - {true, ui::VKEY_MEDIA_PREV_TRACK, ui::EF_NONE, MEDIA_PREV_TRACK}, - {true, ui::VKEY_MEDIA_STOP, ui::EF_NONE, MEDIA_STOP}, - {true, ui::VKEY_OEM_103, ui::EF_NONE, MEDIA_REWIND}, - {true, ui::VKEY_OEM_104, ui::EF_NONE, MEDIA_FAST_FORWARD}, + {true, ui::VKEY_MEDIA_NEXT_TRACK, ui::EF_NONE, + AcceleratorAction::kMediaNextTrack}, + {true, ui::VKEY_MEDIA_PAUSE, ui::EF_NONE, AcceleratorAction::kMediaPause}, + {true, ui::VKEY_MEDIA_PLAY, ui::EF_NONE, AcceleratorAction::kMediaPlay}, + {true, ui::VKEY_MEDIA_PLAY_PAUSE, ui::EF_NONE, + AcceleratorAction::kMediaPlayPause}, + {true, ui::VKEY_MEDIA_PREV_TRACK, ui::EF_NONE, + AcceleratorAction::kMediaPrevTrack}, + {true, ui::VKEY_MEDIA_STOP, ui::EF_NONE, AcceleratorAction::kMediaStop}, + {true, ui::VKEY_OEM_103, ui::EF_NONE, AcceleratorAction::kMediaRewind}, + {true, ui::VKEY_OEM_104, ui::EF_NONE, AcceleratorAction::kMediaFastForward}, // Assistant shortcuts. - {true, ui::VKEY_A, ui::EF_COMMAND_DOWN, START_ASSISTANT}, - {true, ui::VKEY_ASSISTANT, ui::EF_NONE, START_ASSISTANT}, + {true, ui::VKEY_A, ui::EF_COMMAND_DOWN, AcceleratorAction::kStartAssistant}, + {true, ui::VKEY_ASSISTANT, ui::EF_NONE, AcceleratorAction::kStartAssistant}, // IME mode change key. - {true, ui::VKEY_MODECHANGE, ui::EF_NONE, SWITCH_TO_NEXT_IME}, + {true, ui::VKEY_MODECHANGE, ui::EF_NONE, + AcceleratorAction::kSwitchToNextIme}, // Emoji picker shortcut. {true, ui::VKEY_SPACE, ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN, - SHOW_EMOJI_PICKER}, - {true, ui::VKEY_EMOJI_PICKER, ui::EF_NONE, SHOW_EMOJI_PICKER}, + AcceleratorAction::kShowEmojiPicker}, + {true, ui::VKEY_EMOJI_PICKER, ui::EF_NONE, + AcceleratorAction::kShowEmojiPicker}, // Debugging shortcuts that need to be available to end-users in // release builds. - {true, ui::VKEY_U, kDebugModifier, PRINT_UI_HIERARCHIES}, + {true, ui::VKEY_U, kDebugModifier, AcceleratorAction::kPrintUiHierarchies}, // Virtual Desks shortcuts. // Desk activation: - {true, ui::VKEY_OEM_4, ui::EF_COMMAND_DOWN, DESKS_ACTIVATE_DESK_LEFT}, - {true, ui::VKEY_OEM_6, ui::EF_COMMAND_DOWN, DESKS_ACTIVATE_DESK_RIGHT}, + {true, ui::VKEY_OEM_4, ui::EF_COMMAND_DOWN, + AcceleratorAction::kDesksActivateDeskLeft}, + {true, ui::VKEY_OEM_6, ui::EF_COMMAND_DOWN, + AcceleratorAction::kDesksActivateDeskRight}, // Moving windows to desks: {true, ui::VKEY_OEM_4, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, - DESKS_MOVE_ACTIVE_ITEM_LEFT}, + AcceleratorAction::kDesksMoveActiveItemLeft}, {true, ui::VKEY_OEM_6, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, - DESKS_MOVE_ACTIVE_ITEM_RIGHT}, + AcceleratorAction::kDesksMoveActiveItemRight}, // TODO(afakhry): Implement moving windows to a desk by its index directly. // TODO(yusukes): Handle VKEY_MEDIA_STOP, and VKEY_MEDIA_LAUNCH_MAIL. // ARC-specific shortcut. {true, ui::VKEY_C, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, - TOGGLE_RESIZE_LOCK_MENU}, + AcceleratorAction::kToggleResizeLockMenu}, // Projector shortcuts. - {true, ui::VKEY_OEM_3, ui::EF_COMMAND_DOWN, TOGGLE_PROJECTOR_MARKER}, + {true, ui::VKEY_OEM_3, ui::EF_COMMAND_DOWN, + AcceleratorAction::kToggleProjectorMarker}, }; const size_t kAcceleratorDataLength = std::size(kAcceleratorData); @@ -259,8 +313,9 @@ // consumed by apps and pages (since they're not search-based). // TODO(afakhry): Change the following to Search+Shift+"+"/"-" once // https://crbug.com/976487 is fixed. - {true, ui::VKEY_F12, ui::EF_SHIFT_DOWN, DESKS_NEW_DESK}, - {true, ui::VKEY_F11, ui::EF_SHIFT_DOWN, DESKS_REMOVE_CURRENT_DESK}, + {true, ui::VKEY_F12, ui::EF_SHIFT_DOWN, AcceleratorAction::kDesksNewDesk}, + {true, ui::VKEY_F11, ui::EF_SHIFT_DOWN, + AcceleratorAction::kDesksRemoveCurrentDesk}, }; const size_t kDisableWithNewMappingAcceleratorDataLength = @@ -269,44 +324,44 @@ const AcceleratorData kEnableWithNewMappingAcceleratorData[] = { // Desk creation and removal: {true, ui::VKEY_OEM_PLUS, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, - DESKS_NEW_DESK}, + AcceleratorAction::kDesksNewDesk}, {true, ui::VKEY_OEM_MINUS, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, - DESKS_REMOVE_CURRENT_DESK}, + AcceleratorAction::kDesksRemoveCurrentDesk}, // Desk activation: {true, ui::VKEY_LEFT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, - DESKS_ACTIVATE_DESK_LEFT}, + AcceleratorAction::kDesksActivateDeskLeft}, {true, ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, - DESKS_ACTIVATE_DESK_RIGHT}, + AcceleratorAction::kDesksActivateDeskRight}, // Moving windows to desks: {true, ui::VKEY_LEFT, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, - DESKS_MOVE_ACTIVE_ITEM_LEFT}, + AcceleratorAction::kDesksMoveActiveItemLeft}, {true, ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, - DESKS_MOVE_ACTIVE_ITEM_RIGHT}, + AcceleratorAction::kDesksMoveActiveItemRight}, // Snap {true, ui::VKEY_OEM_COMMA, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, - WINDOW_CYCLE_SNAP_LEFT}, + AcceleratorAction::kWindowCycleSnapLeft}, {true, ui::VKEY_OEM_PERIOD, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, - WINDOW_CYCLE_SNAP_RIGHT}, + AcceleratorAction::kWindowCycleSnapRight}, // Zoom {true, ui::VKEY_UP, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, - SCALE_UI_UP}, + AcceleratorAction::kScaleUiUp}, {true, ui::VKEY_DOWN, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, - SCALE_UI_DOWN}, + AcceleratorAction::kScaleUiDown}, {true, ui::VKEY_BACK, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, - SCALE_UI_RESET}, + AcceleratorAction::kScaleUiReset}, // Shortcut Viewer {true, ui::VKEY_OEM_2, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, - SHOW_SHORTCUT_VIEWER}, + AcceleratorAction::kShowShortcutViewer}, }; const size_t kEnableWithNewMappingAcceleratorDataLength = @@ -321,9 +376,9 @@ // TODO(crbug.com/1179893): Merge these to the main table once // IsImprovedKeyboardShortcutsEnabled() is permanently enabled. {true, ui::VKEY_OEM_PLUS, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, - DESKS_NEW_DESK}, + AcceleratorAction::kDesksNewDesk}, {true, ui::VKEY_OEM_MINUS, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, - DESKS_REMOVE_CURRENT_DESK}, + AcceleratorAction::kDesksRemoveCurrentDesk}, }; const size_t kEnableWithPositionalAcceleratorsDataLength = @@ -333,47 +388,50 @@ kEnabledWithImprovedDesksKeyboardShortcutsAcceleratorData[] = { // Indexed-desk activation: {true, ui::VKEY_1, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, - DESKS_ACTIVATE_0}, + AcceleratorAction::kDesksActivate0}, {true, ui::VKEY_2, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, - DESKS_ACTIVATE_1}, + AcceleratorAction::kDesksActivate1}, {true, ui::VKEY_3, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, - DESKS_ACTIVATE_2}, + AcceleratorAction::kDesksActivate2}, {true, ui::VKEY_4, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, - DESKS_ACTIVATE_3}, + AcceleratorAction::kDesksActivate3}, {true, ui::VKEY_5, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, - DESKS_ACTIVATE_4}, + AcceleratorAction::kDesksActivate4}, {true, ui::VKEY_6, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, - DESKS_ACTIVATE_5}, + AcceleratorAction::kDesksActivate5}, {true, ui::VKEY_7, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, - DESKS_ACTIVATE_6}, + AcceleratorAction::kDesksActivate6}, {true, ui::VKEY_8, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, - DESKS_ACTIVATE_7}, + AcceleratorAction::kDesksActivate7}, // Toggle assign to all desks: {true, ui::VKEY_A, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, - DESKS_TOGGLE_ASSIGN_TO_ALL_DESKS}, + AcceleratorAction::kDesksToggleAssignToAllDesks}, }; const size_t kEnabledWithImprovedDesksKeyboardShortcutsAcceleratorDataLength = std::size(kEnabledWithImprovedDesksKeyboardShortcutsAcceleratorData); const AcceleratorData kEnableWithSameAppWindowCycleAcceleratorData[] = { - {true, ui::VKEY_OEM_3, ui::EF_ALT_DOWN, CYCLE_SAME_APP_WINDOWS_FORWARD}, + {true, ui::VKEY_OEM_3, ui::EF_ALT_DOWN, + AcceleratorAction::kCycleSameAppWindowsForward}, {true, ui::VKEY_OEM_3, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, - CYCLE_SAME_APP_WINDOWS_BACKWARD}, + AcceleratorAction::kCycleSameAppWindowsBackward}, }; const size_t kEnableWithSameAppWindowCycleAcceleratorDataLength = std::size(kEnableWithSameAppWindowCycleAcceleratorData); const AcceleratorData kEnableWithFloatWindowAcceleratorData[] = { - {true, ui::VKEY_Z, ui::EF_COMMAND_DOWN, TOGGLE_MULTITASK_MENU}, + {true, ui::VKEY_Z, ui::EF_COMMAND_DOWN, + AcceleratorAction::kToggleMultitaskMenu}, }; const size_t kEnableWithFloatWindowAcceleratorDataLength = std::size(kEnableWithFloatWindowAcceleratorData); const AcceleratorData kToggleGameDashboardAcceleratorData[] = { - {true, ui::VKEY_G, ui::EF_COMMAND_DOWN, TOGGLE_GAME_DASHBOARD}, + {true, ui::VKEY_G, ui::EF_COMMAND_DOWN, + AcceleratorAction::kToggleGameDashboard}, }; const size_t kToggleGameDashboardAcceleratorDataLength =
diff --git a/ash/public/cpp/accelerators.h b/ash/public/cpp/accelerators.h index 116e2ee..ba0ffce 100644 --- a/ash/public/cpp/accelerators.h +++ b/ash/public/cpp/accelerators.h
@@ -7,6 +7,7 @@ #include <stddef.h> +#include "ash/public/cpp/accelerator_actions.h" #include "ash/public/cpp/ash_public_export.h" #include "base/functional/callback_forward.h" #include "base/observer_list.h" @@ -22,166 +23,6 @@ // See documentation in ash/accelerators/accelerator_table.h. -enum AcceleratorAction { - BRIGHTNESS_DOWN, - BRIGHTNESS_UP, - CYCLE_BACKWARD_MRU, - CYCLE_FORWARD_MRU, - CYCLE_SAME_APP_WINDOWS_BACKWARD, - CYCLE_SAME_APP_WINDOWS_FORWARD, - DESKS_ACTIVATE_DESK_LEFT, - DESKS_ACTIVATE_DESK_RIGHT, - DESKS_MOVE_ACTIVE_ITEM_LEFT, - DESKS_MOVE_ACTIVE_ITEM_RIGHT, - DESKS_NEW_DESK, - DESKS_REMOVE_CURRENT_DESK, - DESKS_ACTIVATE_0, - DESKS_ACTIVATE_1, - DESKS_ACTIVATE_2, - DESKS_ACTIVATE_3, - DESKS_ACTIVATE_4, - DESKS_ACTIVATE_5, - DESKS_ACTIVATE_6, - DESKS_ACTIVATE_7, - DESKS_TOGGLE_ASSIGN_TO_ALL_DESKS, - DISABLE_CAPS_LOCK, - EXIT, - FOCUS_CAMERA_PREVIEW, - FOCUS_NEXT_PANE, - FOCUS_PREVIOUS_PANE, - FOCUS_SHELF, - FOCUS_PIP, - KEYBOARD_BACKLIGHT_TOGGLE, - KEYBOARD_BRIGHTNESS_DOWN, - KEYBOARD_BRIGHTNESS_UP, - LAUNCH_APP_0, - LAUNCH_APP_1, - LAUNCH_APP_2, - LAUNCH_APP_3, - LAUNCH_APP_4, - LAUNCH_APP_5, - LAUNCH_APP_6, - LAUNCH_APP_7, - LAUNCH_LAST_APP, - LOCK_PRESSED, - LOCK_RELEASED, - LOCK_SCREEN, - MAGNIFIER_ZOOM_IN, - MAGNIFIER_ZOOM_OUT, - MEDIA_FAST_FORWARD, - MEDIA_NEXT_TRACK, - MEDIA_PAUSE, - MEDIA_PLAY, - MEDIA_PLAY_PAUSE, - MEDIA_PREV_TRACK, - MEDIA_REWIND, - MEDIA_STOP, - MICROPHONE_MUTE_TOGGLE, - MOVE_ACTIVE_WINDOW_BETWEEN_DISPLAYS, - NEW_INCOGNITO_WINDOW, - NEW_TAB, - NEW_WINDOW, - OPEN_CALCULATOR, - OPEN_CROSH, - OPEN_DIAGNOSTICS, - OPEN_FEEDBACK_PAGE, - OPEN_FILE_MANAGER, - OPEN_GET_HELP, - // Similar to TOGGLE_CLIPBOARD_HISTORY but is used to paste plain text only - // when clipboard history menu is already open. - PASTE_CLIPBOARD_HISTORY_PLAIN_TEXT, - POWER_PRESSED, - POWER_RELEASED, - PRINT_UI_HIERARCHIES, - PRIVACY_SCREEN_TOGGLE, - RESTORE_TAB, - ROTATE_SCREEN, - ROTATE_WINDOW, - SCALE_UI_DOWN, - SCALE_UI_RESET, - SCALE_UI_UP, - SHOW_EMOJI_PICKER, - TOGGLE_IME_MENU_BUBBLE, - SHOW_SHORTCUT_VIEWER, - SHOW_STYLUS_TOOLS, - SHOW_TASK_MANAGER, - START_ASSISTANT, - SUSPEND, - SWAP_PRIMARY_DISPLAY, - SWITCH_IME, // Switch to another IME depending on the accelerator. - SWITCH_TO_LAST_USED_IME, - SWITCH_TO_NEXT_IME, - SWITCH_TO_NEXT_USER, - SWITCH_TO_PREVIOUS_USER, - TAKE_PARTIAL_SCREENSHOT, - TAKE_SCREENSHOT, - TAKE_WINDOW_SCREENSHOT, - TOGGLE_APP_LIST, - TOGGLE_CALENDAR, - TOGGLE_CAPS_LOCK, - TOGGLE_CLIPBOARD_HISTORY, - TOGGLE_DICTATION, - TOGGLE_DOCKED_MAGNIFIER, - TOGGLE_FLOATING, - TOGGLE_FULLSCREEN, - TOGGLE_FULLSCREEN_MAGNIFIER, - TOGGLE_GAME_DASHBOARD, - TOGGLE_HIGH_CONTRAST, - TOGGLE_MAXIMIZED, - TOGGLE_MESSAGE_CENTER_BUBBLE, - TOGGLE_MIRROR_MODE, - TOGGLE_MULTITASK_MENU, - TOGGLE_OVERVIEW, - TOGGLE_PROJECTOR_MARKER, - TOGGLE_RESIZE_LOCK_MENU, - TOGGLE_SPOKEN_FEEDBACK, - TOGGLE_SYSTEM_TRAY_BUBBLE, - TOGGLE_WIFI, - TOGGLE_SNAP_GROUP_WINDOWS_MINIMIZE_AND_RESTORE, - TOUCH_HUD_CLEAR, - TOUCH_HUD_MODE_CHANGE, - UNPIN, - VOLUME_DOWN, - VOLUME_MUTE, - VOLUME_UP, - WINDOW_CYCLE_SNAP_LEFT, - WINDOW_CYCLE_SNAP_RIGHT, - WINDOW_MINIMIZE, - MINIMIZE_TOP_WINDOW_ON_BACK, - - // Debug accelerators are intentionally at the end, so that if you remove one - // you don't need to update tests which check hashes of the ids. - DEBUG_KEYBOARD_BACKLIGHT_TOGGLE, - DEBUG_MICROPHONE_MUTE_TOGGLE, - DEBUG_PRINT_LAYER_HIERARCHY, - DEBUG_PRINT_VIEW_HIERARCHY, - DEBUG_PRINT_WINDOW_HIERARCHY, - DEBUG_SHOW_TOAST, - DEBUG_SYSTEM_UI_STYLE_VIEWER, - // TODO(crbug.com/1336836): Remove fling accelerators after float is released. - DEBUG_TUCK_FLOATED_WINDOW_LEFT, - DEBUG_TUCK_FLOATED_WINDOW_RIGHT, - DEBUG_TOGGLE_DARK_MODE, - DEBUG_TOGGLE_DYNAMIC_COLOR, - DEBUG_TOGGLE_GLANCEABLES, - DEBUG_TOGGLE_POWER_BUTTON_MENU, - DEBUG_TOGGLE_SHOW_DEBUG_BORDERS, - DEBUG_TOGGLE_SHOW_FPS_COUNTER, - DEBUG_TOGGLE_SHOW_PAINT_RECTS, - DEBUG_TOGGLE_TOUCH_PAD, - DEBUG_TOGGLE_TOUCH_SCREEN, - DEBUG_TOGGLE_TABLET_MODE, - DEBUG_TOGGLE_VIDEO_CONFERENCE_CAMERA_TRAY_ICON, - DEBUG_TOGGLE_WALLPAPER_MODE, - DEBUG_TRIGGER_CRASH, // Intentionally crash the ash process. - DEBUG_TOGGLE_HUD_DISPLAY, - DEV_ADD_REMOVE_DISPLAY, - // Different than TOGGLE_APP_LIST to ignore search-as-modifier-key rules for - // enabling the accelerator. - DEV_TOGGLE_APP_LIST, - DEV_TOGGLE_UNIFIED_DESKTOP, -}; - struct AcceleratorData { bool trigger_on_press; ui::KeyboardCode keycode;
diff --git a/ash/public/cpp/ash_web_view.h b/ash/public/cpp/ash_web_view.h index 86a7ec4..ad6a91f 100644 --- a/ash/public/cpp/ash_web_view.h +++ b/ash/public/cpp/ash_web_view.h
@@ -51,6 +51,10 @@ // If enabled, AshWebView fixes its zoom level to 1 (100%) for this // AshWebView. This uses zoom level 1 regardless of default zoom level. bool fix_zoom_level_to_one = false; + + // Enables AshWebView to hold wake locks, for example, to keep the screen on + // while playing video. Passed as an param to init WebContents. + bool enable_wake_locks = true; }; // An observer which receives AshWebView events.
diff --git a/ash/public/cpp/shell_window_ids.h b/ash/public/cpp/shell_window_ids.h index 5292f0b5..dd480a5 100644 --- a/ash/public/cpp/shell_window_ids.h +++ b/ash/public/cpp/shell_window_ids.h
@@ -23,6 +23,9 @@ // screenshots will screenshot previous screenshots. kShellWindowId_ScreenAnimationContainer = 0, + // The container that displays booting animations. + kShellWindowId_BootingAnimationContainer, + // The magnified container which contains everything that would be magnified // when docked magnifier is enabled. kShellWindowId_MagnifiedContainer,
diff --git a/ash/public/cpp/system/anchored_nudge_data.cc b/ash/public/cpp/system/anchored_nudge_data.cc new file mode 100644 index 0000000..805c877 --- /dev/null +++ b/ash/public/cpp/system/anchored_nudge_data.cc
@@ -0,0 +1,57 @@ +// 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. + +#include "ash/public/cpp/system/anchored_nudge_data.h" + +#include <utility> + +#include "ash/strings/grit/ash_strings.h" +#include "base/time/time.h" +#include "ui/base/l10n/l10n_util.h" +#include "ui/views/view.h" + +namespace ash { + +namespace { + +// TODO(b/280499122): Simplify by using ActionButtonParams struct. +std::u16string GetDismissText(const std::u16string& custom_dismiss_text, + bool has_dismiss_button) { + if (!has_dismiss_button) { + return {}; + } + + return !custom_dismiss_text.empty() + ? custom_dismiss_text + : l10n_util::GetStringUTF16(IDS_ASH_TOAST_DISMISS_BUTTON); +} + +} // namespace + +AnchoredNudgeData::AnchoredNudgeData(const std::string& id, + AnchoredNudgeCatalogName catalog_name, + const std::u16string& text, + views::View* anchor, + // TODO(b/280499122): Condense "dismiss" + // vars into ActionButtonParams struct. + bool has_dismiss_button, + const std::u16string& custom_dismiss_text, + base::RepeatingClosure dismiss_callback, + const gfx::VectorIcon& leading_icon) + : id(std::move(id)), + catalog_name(catalog_name), + text(text), + anchor(anchor), + dismiss_text(GetDismissText(custom_dismiss_text, has_dismiss_button)), + dismiss_callback(std::move(dismiss_callback)), + leading_icon(&leading_icon) {} + +AnchoredNudgeData::AnchoredNudgeData(AnchoredNudgeData&& other) = default; + +AnchoredNudgeData& AnchoredNudgeData::operator=(AnchoredNudgeData&& other) = + default; + +AnchoredNudgeData::~AnchoredNudgeData() = default; + +} // namespace ash
diff --git a/ash/public/cpp/system/anchored_nudge_data.h b/ash/public/cpp/system/anchored_nudge_data.h new file mode 100644 index 0000000..e9d2810 --- /dev/null +++ b/ash/public/cpp/system/anchored_nudge_data.h
@@ -0,0 +1,69 @@ +// 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 ASH_PUBLIC_CPP_SYSTEM_ANCHORED_NUDGE_DATA_H_ +#define ASH_PUBLIC_CPP_SYSTEM_ANCHORED_NUDGE_DATA_H_ + +#include <string> + +#include "ash/constants/notifier_catalogs.h" +#include "ash/public/cpp/ash_public_export.h" +#include "base/functional/callback.h" +#include "base/time/time.h" +#include "ui/gfx/paint_vector_icon.h" +#include "ui/views/bubble/bubble_border.h" + +namespace views { +class View; +} + +namespace ash { + +// Describes the contents of an AnchoredNudge, which is a notifier that anchors +// to an `anchor` view and informs users about something that might enhance +// their experience immediately. See the "Educational Nudges" section in +// go/notifier-framework for example usages. +struct ASH_PUBLIC_EXPORT AnchoredNudgeData { + AnchoredNudgeData( + const std::string& id, + AnchoredNudgeCatalogName catalog_name, + const std::u16string& text, + views::View* anchor, + bool has_dismiss_button = false, + const std::u16string& custom_dismiss_text = std::u16string(), + base::RepeatingClosure dismiss_callback = base::RepeatingClosure(), + const gfx::VectorIcon& leading_icon = gfx::kNoneIcon); + AnchoredNudgeData(AnchoredNudgeData&& other); + AnchoredNudgeData& operator=(AnchoredNudgeData&& other); + ~AnchoredNudgeData(); + + std::string id; + AnchoredNudgeCatalogName catalog_name; + std::u16string text; + + // Unowned. Must outlive the `AnchoredNudge` created with this by observing + // its `OnViewIsDeleting()` in `AnchoredNudgeManagerImpl`. + raw_ptr<views::View> anchor; + + views::BubbleBorder::Arrow arrow = views::BubbleBorder::BOTTOM_CENTER; + + // If `has_dismiss_button` is true, it will use the default dismiss text + // unless a non-empty `custom_dismiss_text` is given. + std::u16string dismiss_text; + + // To disable dismiss via timer, set `has_infinite_duration_` to true. + // A nudge with infinite duration will be displayed until the dismiss button + // on the nudge is clicked, or when it is destroyed due to other reasons (e.g. + // anchor view is deleted, user locks session, etc.) + bool has_infinite_duration = false; + + // TODO(b/259100049): We should turn this into a `OnceClosure`. + base::RepeatingClosure dismiss_callback; + const gfx::VectorIcon* leading_icon; + base::OnceClosure expired_callback; +}; + +} // namespace ash + +#endif // ASH_PUBLIC_CPP_SYSTEM_ANCHORED_NUDGE_DATA_H_
diff --git a/ash/quick_pair/repository/fast_pair/device_image_store_unittest.cc b/ash/quick_pair/repository/fast_pair/device_image_store_unittest.cc index 5a7594e7..67431ff 100644 --- a/ash/quick_pair/repository/fast_pair/device_image_store_unittest.cc +++ b/ash/quick_pair/repository/fast_pair/device_image_store_unittest.cc
@@ -199,9 +199,10 @@ PrefService* local_state = Shell::Get()->local_state(); const base::Value::Dict& device_image_store_dict = local_state->GetDict(DeviceImageStore::kDeviceImageStorePref); - const base::Value* images_dict = device_image_store_dict.Find(kTestModelId); + const base::Value::Dict* images_dict = + device_image_store_dict.FindDict(kTestModelId); EXPECT_TRUE(images_dict); - const std::string* persisted_image = images_dict->FindStringKey("Default"); + const std::string* persisted_image = images_dict->FindString("Default"); std::string expected_encoded_image = webui::GetBitmapDataUrl(test_image_.AsBitmap()); EXPECT_EQ(*persisted_image, expected_encoded_image);
diff --git a/ash/root_window_controller.cc b/ash/root_window_controller.cc index 9c11234..71d2fad 100644 --- a/ash/root_window_controller.cc +++ b/ash/root_window_controller.cc
@@ -103,6 +103,7 @@ #include "ui/events/event_utils.h" #include "ui/views/controls/menu/menu_model_adapter.h" #include "ui/views/controls/menu/menu_runner.h" +#include "ui/views/layout/fill_layout.h" #include "ui/views/view_model.h" #include "ui/views/view_model_utils.h" #include "ui/views/widget/widget.h" @@ -1374,6 +1375,16 @@ CreateContainer(kShellWindowId_PowerButtonAnimationContainer, "PowerButtonAnimationContainer", magnified_container); + + // Make sure booting animation container is always on top of all other + // siblings under the `magnified_container`. + if (ash::features::IsOobeSimonEnabled()) { + aura::Window* booting_animation_container = + CreateContainer(kShellWindowId_BootingAnimationContainer, + "BootingAnimationContainer", magnified_container); + booting_animation_container->SetLayoutManager( + std::make_unique<FillLayoutManager>(booting_animation_container)); + } } aura::Window* RootWindowController::CreateContainer(int window_id,
diff --git a/ash/shelf/shelf_layout_manager_unittest.cc b/ash/shelf/shelf_layout_manager_unittest.cc index 6ecd367..899fb826 100644 --- a/ash/shelf/shelf_layout_manager_unittest.cc +++ b/ash/shelf/shelf_layout_manager_unittest.cc
@@ -618,8 +618,8 @@ GetShelfWidget()->GetBackgroundType()); } -// Verifies that the hidden shelf shows after triggering the FOCUS_SHELF -// accelerator (https://crbug.com/1111426). +// Verifies that the hidden shelf shows after triggering the +// AcceleratorAction::kFocusShelf accelerator (https://crbug.com/1111426). TEST_F(ShelfLayoutManagerTest, ShowHiddenShelfByFocusShelfAccelerator) { // Open a window so that the shelf will auto-hide. std::unique_ptr<aura::Window> window(CreateTestWindow()); @@ -630,8 +630,8 @@ EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->GetAutoHideState()); // Focus on the shelf by accelerator. - Shell::Get()->accelerator_controller()->PerformActionIfEnabled(FOCUS_SHELF, - {}); + Shell::Get()->accelerator_controller()->PerformActionIfEnabled( + AcceleratorAction::kFocusShelf, {}); // Shelf should be visible. EXPECT_EQ(SHELF_AUTO_HIDE, shelf->GetVisibilityState()); @@ -1979,7 +1979,7 @@ // Show the status menu. That should make the shelf visible again. Shell::Get()->accelerator_controller()->PerformActionIfEnabled( - TOGGLE_SYSTEM_TRAY_BUBBLE, {}); + AcceleratorAction::kToggleSystemTrayBubble, {}); GetAppListTestHelper()->WaitUntilIdle(); EXPECT_EQ(SHELF_AUTO_HIDE, shelf->GetVisibilityState()); EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->GetAutoHideState()); @@ -4188,7 +4188,7 @@ // Show the system tray on the secondary display. Shell::Get()->accelerator_controller()->PerformActionIfEnabled( - TOGGLE_SYSTEM_TRAY_BUBBLE, {}); + AcceleratorAction::kToggleSystemTrayBubble, {}); Shelf* secondary_shelf = RootWindowController::ForWindow(secondary_root_window)->shelf(); ASSERT_TRUE(secondary_shelf->status_area_widget()->IsMessageBubbleShown());
diff --git a/ash/shell.cc b/ash/shell.cc index ed1437e..af714cb4 100644 --- a/ash/shell.cc +++ b/ash/shell.cc
@@ -30,6 +30,7 @@ #include "ash/app_list/app_list_controller_impl.h" #include "ash/app_list/app_list_feature_usage_metrics.h" #include "ash/assistant/assistant_controller_impl.h" +#include "ash/booting/booting_animation_controller.h" #include "ash/calendar/calendar_controller.h" #include "ash/capture_mode/capture_mode_controller.h" #include "ash/child_accounts/parent_access_controller_impl.h" @@ -1571,6 +1572,11 @@ window_tree_host_manager_->InitHosts(); + if (ash::features::IsOobeSimonEnabled()) { + booting_animation_controller_ = + std::make_unique<BootingAnimationController>(); + } + // Create virtual keyboard after WindowTreeHostManager::InitHosts() since // it may enable the virtual keyboard immediately, which requires a // WindowTreeHostManager to host the keyboard window.
diff --git a/ash/shell.h b/ash/shell.h index 3328058..e056762 100644 --- a/ash/shell.h +++ b/ash/shell.h
@@ -116,6 +116,7 @@ class BluetoothDeviceStatusUiHandler; class BluetoothNotificationController; class BluetoothStateCache; +class BootingAnimationController; class BrightnessControlDelegate; class CalendarController; class CameraEffectsController; @@ -430,6 +431,9 @@ BluetoothStateCache* bluetooth_state_cache() { return bluetooth_state_cache_.get(); } + BootingAnimationController* booting_animation_controller() { + return booting_animation_controller_.get(); + } BrightnessControlDelegate* brightness_control_delegate() { return brightness_control_delegate_.get(); } @@ -953,6 +957,7 @@ std::unique_ptr<FloatController> float_controller_; std::unique_ptr<GameDashboardController> game_dashboard_controller_; std::unique_ptr<GeolocationController> geolocation_controller_; + std::unique_ptr<BootingAnimationController> booting_animation_controller_; std::unique_ptr<GlanceablesController> glanceables_controller_; std::unique_ptr<GlanceablesV2Controller> glanceables_v2_controller_; std::unique_ptr<HoldingSpaceController> holding_space_controller_;
diff --git a/ash/system/accessibility/dictation_button_tray_unittest.cc b/ash/system/accessibility/dictation_button_tray_unittest.cc index 811a6a8..bfa5ff2 100644 --- a/ash/system/accessibility/dictation_button_tray_unittest.cc +++ b/ash/system/accessibility/dictation_button_tray_unittest.cc
@@ -195,12 +195,12 @@ EXPECT_TRUE(GetTray()->GetEnabled()); Shell::Get()->accelerator_controller()->PerformActionIfEnabled( - AcceleratorAction::TOGGLE_DICTATION, {}); + AcceleratorAction::kToggleDictation, {}); EXPECT_TRUE(controller->dictation_active()); EXPECT_TRUE(GetTray()->is_active()); Shell::Get()->accelerator_controller()->PerformActionIfEnabled( - AcceleratorAction::TOGGLE_DICTATION, {}); + AcceleratorAction::kToggleDictation, {}); EXPECT_FALSE(controller->dictation_active()); EXPECT_FALSE(GetTray()->is_active()); } @@ -222,7 +222,7 @@ *off_icon.bitmap())); Shell::Get()->accelerator_controller()->PerformActionIfEnabled( - AcceleratorAction::TOGGLE_DICTATION, {}); + AcceleratorAction::kToggleDictation, {}); EXPECT_TRUE(gfx::test::AreBitmapsEqual(*view->GetImage().bitmap(), *on_icon.bitmap())); @@ -239,7 +239,7 @@ // Action doesn't work because disabled. Shell::Get()->accelerator_controller()->PerformActionIfEnabled( - AcceleratorAction::TOGGLE_DICTATION, {}); + AcceleratorAction::kToggleDictation, {}); EXPECT_FALSE(controller->dictation_active()); EXPECT_FALSE(tray->GetEnabled());
diff --git a/ash/system/accessibility/floating_accessibility_controller_unittest.cc b/ash/system/accessibility/floating_accessibility_controller_unittest.cc index d61f74a..0149dde 100644 --- a/ash/system/accessibility/floating_accessibility_controller_unittest.cc +++ b/ash/system/accessibility/floating_accessibility_controller_unittest.cc
@@ -620,7 +620,7 @@ views::FocusManager* focus_manager = widget()->GetFocusManager(); Shell::Get()->accelerator_controller()->PerformActionIfEnabled( - AcceleratorAction::FOCUS_SHELF, {}); + AcceleratorAction::kFocusShelf, {}); // If nothing else is enabled, it should focus on the detailed view button. EXPECT_EQ(focus_manager->GetFocusedView(), GetMenuButton(FloatingAccessibilityView::ButtonId::kSettingsList)); @@ -631,7 +631,7 @@ GetMenuButton(FloatingAccessibilityView::ButtonId::kSettingsList)); Shell::Get()->accelerator_controller()->PerformActionIfEnabled( - AcceleratorAction::FOCUS_SHELF, {}); + AcceleratorAction::kFocusShelf, {}); // It should get back to the settings list button. EXPECT_EQ(focus_manager->GetFocusedView(), GetMenuButton(FloatingAccessibilityView::ButtonId::kSettingsList)); @@ -643,7 +643,7 @@ // We should be focused on the first button in the menu. // Order: select to speak, virtual keyboard, settings menu, position. Shell::Get()->accelerator_controller()->PerformActionIfEnabled( - AcceleratorAction::FOCUS_SHELF, {}); + AcceleratorAction::kFocusShelf, {}); EXPECT_EQ(focus_manager->GetFocusedView(), GetMenuButton(FloatingAccessibilityView::ButtonId::kSelectToSpeak)); }
diff --git a/ash/system/eche/eche_tray.cc b/ash/system/eche/eche_tray.cc index 763ecb5..637673b 100644 --- a/ash/system/eche/eche_tray.cc +++ b/ash/system/eche/eche_tray.cc
@@ -130,33 +130,33 @@ // AcceleratorsActions which should be handled by the AcceleratorController, not // the eche tray. constexpr AcceleratorAction kLocallyProcessedAcceleratorActions[] = { - AcceleratorAction::OPEN_FEEDBACK_PAGE, // Shift + Alt + I - AcceleratorAction::EXIT, // Shift + Ctrl + Q - AcceleratorAction::SHOW_SHORTCUT_VIEWER, // Ctrl + Alt + / - AcceleratorAction::TOGGLE_CAPS_LOCK, // Alt + Search - AcceleratorAction::NEW_WINDOW, // Ctrl + N - AcceleratorAction::NEW_INCOGNITO_WINDOW, // Shift + Ctrl + N - AcceleratorAction::NEW_TAB, // Ctrl + T - AcceleratorAction::OPEN_FILE_MANAGER, // Shift + Alt + M - AcceleratorAction::LAUNCH_APP_0, // Alt + 1 - AcceleratorAction::LAUNCH_APP_1, // Alt + 2 - AcceleratorAction::LAUNCH_APP_2, // Alt + 3 - AcceleratorAction::LAUNCH_APP_3, // Alt + 4 - AcceleratorAction::LAUNCH_APP_4, // Alt + 5 - AcceleratorAction::LAUNCH_APP_5, // Alt + 6 - AcceleratorAction::LAUNCH_APP_6, // Alt + 7 - AcceleratorAction::LAUNCH_APP_7, // Alt + 8 - AcceleratorAction::LAUNCH_LAST_APP, // Alt + 9 - AcceleratorAction::TOGGLE_MESSAGE_CENTER_BUBBLE, // Shift + Alt + N - AcceleratorAction::SCALE_UI_UP, // Shift + Ctrl + "+" - AcceleratorAction::SCALE_UI_DOWN, // Shift + Ctrl + "-" - AcceleratorAction::SCALE_UI_RESET, // Shift + Ctrl + 0 - AcceleratorAction::ROTATE_SCREEN, // Shift + Ctrl + Refresh - AcceleratorAction::TOGGLE_SPOKEN_FEEDBACK, // Ctrl + Alt + Z - AcceleratorAction::FOCUS_SHELF, // Shift + Alt + L - AcceleratorAction::FOCUS_NEXT_PANE, // Ctrl + Back - AcceleratorAction::FOCUS_PREVIOUS_PANE, // Ctrl + Forward - AcceleratorAction::TOGGLE_APP_LIST // Launcher(Search) + AcceleratorAction::kOpenFeedbackPage, // Shift + Alt + I + AcceleratorAction::kExit, // Shift + Ctrl + Q + AcceleratorAction::kShowShortcutViewer, // Ctrl + Alt + / + AcceleratorAction::kToggleCapsLock, // Alt + Search + AcceleratorAction::kNewWindow, // Ctrl + N + AcceleratorAction::kNewIncognitoWindow, // Shift + Ctrl + N + AcceleratorAction::kNewTab, // Ctrl + T + AcceleratorAction::kOpenFileManager, // Shift + Alt + M + AcceleratorAction::kLaunchApp0, // Alt + 1 + AcceleratorAction::kLaunchApp1, // Alt + 2 + AcceleratorAction::kLaunchApp2, // Alt + 3 + AcceleratorAction::kLaunchApp3, // Alt + 4 + AcceleratorAction::kLaunchApp4, // Alt + 5 + AcceleratorAction::kLaunchApp5, // Alt + 6 + AcceleratorAction::kLaunchApp6, // Alt + 7 + AcceleratorAction::kLaunchApp7, // Alt + 8 + AcceleratorAction::kLaunchLastApp, // Alt + 9 + AcceleratorAction::kToggleMessageCenterBubble, // Shift + Alt + N + AcceleratorAction::kScaleUiUp, // Shift + Ctrl + "+" + AcceleratorAction::kScaleUiDown, // Shift + Ctrl + "-" + AcceleratorAction::kScaleUiReset, // Shift + Ctrl + 0 + AcceleratorAction::kRotateScreen, // Shift + Ctrl + Refresh + AcceleratorAction::kToggleSpokenFeedback, // Ctrl + Alt + Z + AcceleratorAction::kFocusShelf, // Shift + Alt + L + AcceleratorAction::kFocusNextPane, // Ctrl + Back + AcceleratorAction::kFocusPreviousPane, // Ctrl + Forward + AcceleratorAction::kToggleAppList // Launcher(Search) }; // Creates a button with the given callback, icon, and tooltip text. @@ -917,7 +917,7 @@ // upper in the chain and perform the minimize by reacting to // ToggleMinimized(). if (accelerator_controller->DoesAcceleratorMatchAction( - accelerator, AcceleratorAction::WINDOW_MINIMIZE)) { + accelerator, AcceleratorAction::kWindowMinimize)) { CloseBubble(); return true; } @@ -960,7 +960,7 @@ if (!is_only_control_down) return false; // Please note that ctrl+w does not have a global accelerator action - // similar to AcceleratorAction::WINDOW_MINIMIZE that was used above. + // similar to AcceleratorAction::kWindowMinimize that was used above. // // TODO(https://crbug/1338650): See if we can just leave this to be // handled upper in the chain.
diff --git a/ash/system/ime_menu/ime_menu_tray_unittest.cc b/ash/system/ime_menu/ime_menu_tray_unittest.cc index b04dadc9..e9c1c1c 100644 --- a/ash/system/ime_menu/ime_menu_tray_unittest.cc +++ b/ash/system/ime_menu/ime_menu_tray_unittest.cc
@@ -351,7 +351,7 @@ ASSERT_FALSE(IsTrayBackgroundActive()); Shell::Get()->accelerator_controller()->PerformActionIfEnabled( - TOGGLE_IME_MENU_BUBBLE, {}); + AcceleratorAction::kToggleImeMenuBubble, {}); EXPECT_TRUE(IsTrayBackgroundActive()); EXPECT_TRUE(IsBubbleShown());
diff --git a/ash/system/network/network_list_mobile_header_view_impl.cc b/ash/system/network/network_list_mobile_header_view_impl.cc index 390c7ef..ecc55ed 100644 --- a/ash/system/network/network_list_mobile_header_view_impl.cc +++ b/ash/system/network/network_list_mobile_header_view_impl.cc
@@ -58,6 +58,9 @@ return IDS_ASH_STATUS_TRAY_INHIBITED_CELLULAR_RESETTING_ESIM; case chromeos::network_config::mojom::InhibitReason::kDisablingProfile: return IDS_ASH_STATUS_TRAY_INHIBITED_CELLULAR_DISABLING_PROFILE; + case chromeos::network_config::mojom::InhibitReason:: + kRequestingAvailableProfiles: + return IDS_ASH_STATUS_TRAY_INHIBITED_CELLULAR_REQUESTING_AVAILABLE_PROFILES; } }
diff --git a/ash/system/network/network_list_mobile_header_view_unittest.cc b/ash/system/network/network_list_mobile_header_view_unittest.cc index 925b1217..59022e1 100644 --- a/ash/system/network/network_list_mobile_header_view_unittest.cc +++ b/ash/system/network/network_list_mobile_header_view_unittest.cc
@@ -198,6 +198,8 @@ IDS_ASH_STATUS_TRAY_INHIBITED_CELLULAR_RESETTING_ESIM}, {CellularInhibitor::InhibitReason::kDisablingProfile, IDS_ASH_STATUS_TRAY_INHIBITED_CELLULAR_DISABLING_PROFILE}, + {CellularInhibitor::InhibitReason::kRequestingAvailableProfiles, + IDS_ASH_STATUS_TRAY_INHIBITED_CELLULAR_REQUESTING_AVAILABLE_PROFILES}, }; for (auto cases : kTestCases) {
diff --git a/ash/system/power/power_button_screenshot_controller.cc b/ash/system/power/power_button_screenshot_controller.cc index 6638435..3b95346 100644 --- a/ash/system/power/power_button_screenshot_controller.cc +++ b/ash/system/power/power_button_screenshot_controller.cc
@@ -169,7 +169,7 @@ now <= volume_up_key_pressed_time_ + kScreenshotChordDelay; if (consume_volume_down_ || consume_volume_up_) { Shell::Get()->accelerator_controller()->PerformActionIfEnabled( - TAKE_SCREENSHOT, {}); + AcceleratorAction::kTakeScreenshot, {}); base::RecordAction(base::UserMetricsAction("Accel_PowerButton_Screenshot")); } @@ -180,7 +180,8 @@ const ui::Accelerator& accelerator, bool down) { Shell::Get()->accelerator_controller()->PerformActionIfEnabled( - down ? VOLUME_DOWN : VOLUME_UP, accelerator); + down ? AcceleratorAction::kVolumeDown : AcceleratorAction::kVolumeUp, + accelerator); } } // namespace ash
diff --git a/ash/system/toast/anchored_nudge.cc b/ash/system/toast/anchored_nudge.cc index 3e38905..675d373 100644 --- a/ash/system/toast/anchored_nudge.cc +++ b/ash/system/toast/anchored_nudge.cc
@@ -30,26 +30,16 @@ } // namespace -AnchoredNudge::AnchoredNudge(views::View* anchor) - : views::BubbleDialogDelegateView(anchor, - views::BubbleBorder::BOTTOM_CENTER, +AnchoredNudge::AnchoredNudge(AnchoredNudgeData nudge_data) + : views::BubbleDialogDelegateView(nudge_data.anchor, + nudge_data.arrow, views::BubbleBorder::NO_SHADOW) { SetButtons(ui::DIALOG_BUTTON_NONE); set_color(SK_ColorTRANSPARENT); set_margins(gfx::Insets()); SetLayoutManager(std::make_unique<views::FlexLayout>()); - - // Temporary placeholder texts. - // TODO(b/279653685): Pass this data through `AnchoredNudgeData` parameter. - std::u16string multiline_text = - u"Meet wants to use the camera. Turn on your device's physical camera " - u"switch."; - std::u16string text = u"Meet wants to use the camera."; - std::u16string empty_dismiss_text = std::u16string(); - std::u16string dismiss_text = u"Learn more"; - toast_contents_view_ = AddChildView(std::make_unique<SystemToastStyle>( - /*dismiss_callback=*/base::DoNothing(), text, empty_dismiss_text)); + nudge_data.dismiss_callback, nudge_data.text, nudge_data.dismiss_text)); } AnchoredNudge::~AnchoredNudge() = default;
diff --git a/ash/system/toast/anchored_nudge.h b/ash/system/toast/anchored_nudge.h index cd1d736..9c5c8fa 100644 --- a/ash/system/toast/anchored_nudge.h +++ b/ash/system/toast/anchored_nudge.h
@@ -7,11 +7,11 @@ #include "ash/ash_export.h" #include "ash/public/cpp/shelf_types.h" +#include "ash/public/cpp/system/anchored_nudge_data.h" #include "ui/base/metadata/metadata_header_macros.h" #include "ui/views/bubble/bubble_dialog_delegate_view.h" namespace views { -class View; class Widget; } // namespace views @@ -26,7 +26,7 @@ public: METADATA_HEADER(AnchoredNudge); - explicit AnchoredNudge(views::View* anchor); + explicit AnchoredNudge(AnchoredNudgeData nudge_data); AnchoredNudge(const AnchoredNudge&) = delete; AnchoredNudge& operator=(const AnchoredNudge&) = delete; ~AnchoredNudge() override;
diff --git a/ash/system/unified/unified_system_tray.cc b/ash/system/unified/unified_system_tray.cc index 9f8f374..cbe98d2 100644 --- a/ash/system/unified/unified_system_tray.cc +++ b/ash/system/unified/unified_system_tray.cc
@@ -504,7 +504,7 @@ absl::optional<AcceleratorAction> UnifiedSystemTray::GetAcceleratorAction() const { - return absl::make_optional(TOGGLE_SYSTEM_TRAY_BUBBLE); + return absl::make_optional(AcceleratorAction::kToggleSystemTrayBubble); } void UnifiedSystemTray::OnAnyBubbleVisibilityChanged(
diff --git a/ash/touch/touch_devices_controller_unittest.cc b/ash/touch/touch_devices_controller_unittest.cc index 728c042..570a423 100644 --- a/ash/touch/touch_devices_controller_unittest.cc +++ b/ash/touch/touch_devices_controller_unittest.cc
@@ -115,7 +115,7 @@ // Tests that touchpad enabled user pref works properly under debug accelerator. TEST_F(TouchDevicesControllerSigninTest, ToggleTouchpad) { ASSERT_TRUE(GetUserPrefTouchpadEnabled()); - debug::PerformDebugActionIfEnabled(DEBUG_TOGGLE_TOUCH_PAD); + debug::PerformDebugActionIfEnabled(AcceleratorAction::kDebugToggleTouchPad); EXPECT_FALSE(GetUserPrefTouchpadEnabled()); // Switch to user 2 and switch back. @@ -124,7 +124,7 @@ SwitchActiveUser(kUser1Email); EXPECT_FALSE(GetUserPrefTouchpadEnabled()); - debug::PerformDebugActionIfEnabled(DEBUG_TOGGLE_TOUCH_PAD); + debug::PerformDebugActionIfEnabled(AcceleratorAction::kDebugToggleTouchPad); EXPECT_TRUE(GetUserPrefTouchpadEnabled()); } @@ -154,7 +154,8 @@ ASSERT_TRUE(GetGlobalTouchscreenEnabled()); ASSERT_TRUE(GetUserPrefTouchscreenEnabled()); - debug::PerformDebugActionIfEnabled(DEBUG_TOGGLE_TOUCH_SCREEN); + debug::PerformDebugActionIfEnabled( + AcceleratorAction::kDebugToggleTouchScreen); EXPECT_TRUE(GetGlobalTouchscreenEnabled()); EXPECT_FALSE(GetUserPrefTouchscreenEnabled()); @@ -165,7 +166,8 @@ EXPECT_TRUE(GetGlobalTouchscreenEnabled()); EXPECT_FALSE(GetUserPrefTouchscreenEnabled()); - debug::PerformDebugActionIfEnabled(DEBUG_TOGGLE_TOUCH_SCREEN); + debug::PerformDebugActionIfEnabled( + AcceleratorAction::kDebugToggleTouchScreen); EXPECT_TRUE(GetUserPrefTouchscreenEnabled()); EXPECT_TRUE(GetGlobalTouchscreenEnabled());
diff --git a/ash/webui/common/resources/network/apn_list.js b/ash/webui/common/resources/network/apn_list.js index 4f246f2..f597e78 100644 --- a/ash/webui/common/resources/network/apn_list.js +++ b/ash/webui/common/resources/network/apn_list.js
@@ -110,6 +110,13 @@ * @private */ shouldShowErrorMessage_() { + // In some instances, there can be an |errorState| and also a connected APN. + // Don't show the error message as the network is actually connected. + if (this.managedCellularProperties && + this.managedCellularProperties.connectedApn) { + return false; + } + return this.errorState === SHILL_INVALID_APN_ERROR; }
diff --git a/ash/webui/os_feedback_ui/resources/confirmation_page.html b/ash/webui/os_feedback_ui/resources/confirmation_page.html index a69a167..ab4ea5c6 100644 --- a/ash/webui/os_feedback_ui/resources/confirmation_page.html +++ b/ash/webui/os_feedback_ui/resources/confirmation_page.html
@@ -5,6 +5,14 @@ --iron-icon-height: 40px; } + :host-context(body.jelly-enabled) .label { + font: var(--cros-button-1-font); + } + + :host-context(body.jelly-enabled) .sub-label { + font: var(--cros-button-2-font); + } + :host-context(body.jelly-enabled) cr-link-row { background-color: var(--cros-sys-app_base); border: none;
diff --git a/ash/webui/os_feedback_ui/resources/feedback_flow.js b/ash/webui/os_feedback_ui/resources/feedback_flow.js index 47d1931..ca009bf 100644 --- a/ash/webui/os_feedback_ui/resources/feedback_flow.js +++ b/ash/webui/os_feedback_ui/resources/feedback_flow.js
@@ -271,8 +271,13 @@ if (loadTimeData.getBoolean('isJellyEnabledForOsFeedback')) { // TODO(b/276493287): After the Jelly experiment is launched, replace // `cros_styles.css` with `theme/colors.css` directly in `index.html`. + // Also add `theme/typography.css` to `index.html`. document.querySelector('link[href*=\'cros_styles.css\']') ?.setAttribute('href', 'chrome://theme/colors.css?sets=legacy,sys'); + const typographyLink = document.createElement('link'); + typographyLink.href = 'chrome://theme/typography.css'; + typographyLink.rel = 'stylesheet'; + document.head.appendChild(typographyLink); document.body.classList.add('jelly-enabled'); startColorChangeUpdater(); }
diff --git a/ash/webui/os_feedback_ui/resources/file_attachment.html b/ash/webui/os_feedback_ui/resources/file_attachment.html index b32192d..9af59c5 100644 --- a/ash/webui/os_feedback_ui/resources/file_attachment.html +++ b/ash/webui/os_feedback_ui/resources/file_attachment.html
@@ -1,12 +1,19 @@ <style include="os-feedback-shared"> :host-context(body.jelly-enabled) .file-input { color: var(--cros-sys-on_surface); + font: var(--cros-body-2-font); } :host-context(body.jelly-enabled) #addFileIcon { --cr-icon-button-fill-color: var(--cros-sys-on_surface); } + :host-context(body.jelly-enabled) #addFileLabel, + :host-context(body.jelly-enabled) #selectedFileName, + :host-context(body.jelly-enabled) #replaceFileButton { + font: var(--cros-button-2-font); + } + /* Special attribute to hide elements. */ [hidden] { display: none !important;
diff --git a/ash/webui/os_feedback_ui/resources/help_content.html b/ash/webui/os_feedback_ui/resources/help_content.html index 039384a3..09ac9cb4 100644 --- a/ash/webui/os_feedback_ui/resources/help_content.html +++ b/ash/webui/os_feedback_ui/resources/help_content.html
@@ -1,4 +1,16 @@ <style> + :host-context(body.jelly-enabled) .help-content-label { + font: var(--cros-headline-1-font); + } + + :host-context(body.jelly-enabled) .help-item a { + font: var(--cros-body-1-font); + } + + :host-context(body.jelly-enabled) paper-tooltip::part(tooltip) { + font: var(--cros-annotation-2-font); + } + [class~='help-item']:last-of-type { padding-bottom: 3px; }
diff --git a/ash/webui/os_feedback_ui/resources/os_feedback_shared_css.html b/ash/webui/os_feedback_ui/resources/os_feedback_shared_css.html index 282e22a..73dc1e0 100644 --- a/ash/webui/os_feedback_ui/resources/os_feedback_shared_css.html +++ b/ash/webui/os_feedback_ui/resources/os_feedback_shared_css.html
@@ -11,20 +11,51 @@ --feedback-medium-font-weight: 500; } + :host-context(body.jelly-enabled) { + --feedback-roboto-font-family: var(--cros-body-0-font); + --feedback-google-sans-font-family: var(--cros-body-0-font); + font: var(--cros-body-2-font); + } + :host-context([dir='rtl']) .dialog-back-arrow { transform: rotate(180deg); } + :host-context(body.jelly-enabled) .dialog-toolbar { + font: var(--cros-headline-1-font); + } + :host-context(body.jelly-enabled) .md-select { --md-select-bg-color: var(--cros-sys-app_base); } + :host-context(body.jelly-enabled) .page-title { + font: var(--cros-display-6-font); + } + + :host-context(body:not(jelly-enabled)) cr-button { + font: var(--cros-button-2-font); + } + + :host-context(body:not(jelly-enabled)) cr-button.action-button { + font: var(--cros-body-1-font); + } + :host-context(body:not(jelly-enabled)) cr-checkbox { --cr-checkbox-unchecked-box-color: var(--cros-icon-color-primary); } :host-context(body.jelly-enabled) cr-dialog::part(dialog) { border-radius: 20px; + font: var(--cros-body-2-font); + } + + :host-context(body.jelly-enabled) paper-tooltip::part(tooltip) { + font: var(--cros-annotation-2-font); + } + + :host-context(body.jelly-enabled) h2 { + font: var(--cros-headline-1-font); } a {
diff --git a/ash/webui/os_feedback_ui/resources/search_page.html b/ash/webui/os_feedback_ui/resources/search_page.html index 9bd94f6..f995dc79 100644 --- a/ash/webui/os_feedback_ui/resources/search_page.html +++ b/ash/webui/os_feedback_ui/resources/search_page.html
@@ -1,6 +1,15 @@ <style include="os-feedback-shared"> + :host-context(body.jelly-enabled) #descriptionEmptyError { + font: var(--cros-annotation-2-font); + } + :host-context(body.jelly-enabled) #descriptionText { background-color: var(--cros-sys-input_field_on_shaded); + font: var(--cros-body-2-font); + } + + :host-context(body.jelly-enabled) #descriptionText::placeholder { + font: var(--cros-body-2-font); } :host-context(body.jelly-enabled) #descriptionText.has-error { @@ -8,6 +17,10 @@ outline: 2px solid var(--cros-sys-error); } + :host-context(body.jelly-enabled) #feedbackWritingGuidance { + font: var(--cros-body-2-font); + } + :host-context(body.jelly-enabled) #emptyErrorIcon { --iron-icon-fill-color: var(--cros-sys-error); }
diff --git a/ash/webui/os_feedback_ui/resources/share_data_page.html b/ash/webui/os_feedback_ui/resources/share_data_page.html index df39857..fab7e21 100644 --- a/ash/webui/os_feedback_ui/resources/share_data_page.html +++ b/ash/webui/os_feedback_ui/resources/share_data_page.html
@@ -1,4 +1,20 @@ <style include="os-feedback-shared"> + :host-context(body.jelly-enabled) #privacyNote { + font: var(--cros-body-2-font); + } + + :host-context(body.jelly-enabled) #screenshotCheckLabel { + font: var(--cros-button-2-font); + } + + :host-context(body.jelly-enabled) .checkbox-label { + font: var(--cros-body-2-font); + } + + :host-context(body.jelly-enabled) cr-dialog [slot=body] { + font: var(--cros-body-1-font); + } + ::-webkit-scrollbar { background-color: transparent; border-radius: 4px; @@ -24,7 +40,6 @@ border-radius: 0 12px 12px 0; } - #privacyNote { color: var(--cros-color-secondary); font-size: 13px;
diff --git a/ash/webui/os_feedback_ui/untrusted_resources/untrusted_index.js b/ash/webui/os_feedback_ui/untrusted_resources/untrusted_index.js index 4d1073b7..aa672a4 100644 --- a/ash/webui/os_feedback_ui/untrusted_resources/untrusted_index.js +++ b/ash/webui/os_feedback_ui/untrusted_resources/untrusted_index.js
@@ -40,8 +40,14 @@ if (loadTimeData.getBoolean('isJellyEnabledForOsFeedback')) { // TODO(b/276493287): After the Jelly experiment is launched, replace // `cros_styles.css` with `theme/colors.css` directly in `index.html`. + // Also add `theme/typography.css` to `index.html`. document.querySelector('link[href*=\'cros_styles.css\']') ?.setAttribute('href', '//theme/colors.css?sets=legacy,sys'); + const typographyLink = document.createElement('link'); + typographyLink.href = '//theme/typography.css'; + typographyLink.rel = 'stylesheet'; + document.head.appendChild(typographyLink); + document.body.classList.add('jelly-enabled'); startColorChangeUpdater(); // Post a message to parent to make testing `startColorChangeUpdater()` // called from untrusted ui easier.
diff --git a/ash/webui/personalization_app/resources/js/wallpaper/wallpaper_selected_element.html b/ash/webui/personalization_app/resources/js/wallpaper/wallpaper_selected_element.html index a93163a..7ed06f84 100644 --- a/ash/webui/personalization_app/resources/js/wallpaper/wallpaper_selected_element.html +++ b/ash/webui/personalization_app/resources/js/wallpaper/wallpaper_selected_element.html
@@ -70,10 +70,31 @@ white-space: pre-wrap; } + #descriptionDialog h3[slot='title'] { + color: var(--cros-sys-on_secondary_container); + font: var(--cros-title-1-font); + padding-top: 24px; + } + + #descriptionDialog p[slot='body'] { + color: var(--cros-sys-secondary); + font: var(--cros-body-1-font); + } + + #descriptionDialog div[slot='button-container'] { + height: 36px; + padding: 8px 20px 20px 20px; + } + + #descriptionDialog div[slot='button-container'] cr-button { + border-radius: 18px; + font: var(--cros-button-2-font); + height: 100%; + } + info-svg::part(path) { fill: var(--text-color); } - </style> <header id="container" class$="[[getContainerClass_(isLoading_, showImage_)]]"> <template is="dom-if" if="[[showPlaceholders_(isLoading_, showImage_)]]">
diff --git a/ash/webui/print_management/resources/print_management_shared.css b/ash/webui/print_management/resources/print_management_shared.css index d5a0b007..d21b8a78 100644 --- a/ash/webui/print_management/resources/print_management_shared.css +++ b/ash/webui/print_management/resources/print_management_shared.css
@@ -139,7 +139,7 @@ @media (min-width: 600px) and (max-width: 767px) { :host-context(body.jelly-enabled) #headerContainer { - margin: 0 20px; + margin-inline: 20px; } :host-context(body.jelly-enabled) .data-container { @@ -159,7 +159,7 @@ } :host-context(body:not(.jelly-enabled)) .margin-border { - margin: 0px 40px 0px 40px; + margin-inline: 40px; } .padded-left { @@ -177,13 +177,13 @@ #activeStatusContainer:hover { border-radius: 16px; margin-inline-start: 16px; - padding-left: 16px; + padding-inline-start: 16px; } } @media (min-width: 768px) and (max-width: 959px) { :host-context(body.jelly-enabled) #headerContainer { - margin: 0 20px; + margin-inline: 20px; } :host-context(body.jelly-enabled) .data-container { @@ -203,7 +203,7 @@ } :host-context(body:not(.jelly-enabled)) .margin-border { - margin: 0px 40px 0px 40px; + margin-inline: 40px; } .padded-left { @@ -221,13 +221,13 @@ #activeStatusContainer:hover { border-radius: 16px; margin-inline-start: 16px; - padding-left: 16px; + padding-inline-start: 16px; } } @media (min-width: 960px) and (max-width: 1279px) { :host-context(body.jelly-enabled) #headerContainer { - margin: 0 32px; + margin-inline: 32px; } :host-context(body.jelly-enabled) .data-container { @@ -247,7 +247,7 @@ } .margin-border { - margin: 0px 64px 0px 64px; + margin-inline: 64px; } .padded-left { @@ -265,13 +265,13 @@ #activeStatusContainer:hover { border-radius: 16px; margin-inline-start: 16px; - padding-left: 16px; + padding-inline-start: 16px; } } @media (min-width: 1280px) { :host-context(body.jelly-enabled) #headerContainer { - margin: 0 72px; + margin-inline: 72px; } :host-context(body.jelly-enabled) .data-container { @@ -291,7 +291,7 @@ } :host-context(body:not(.jelly-enabled)) .margin-border { - margin: 0px 144px 0px 144px; + margin-inline: 144px; } .padded-left { @@ -309,6 +309,6 @@ #activeStatusContainer:hover { border-radius: 16px; margin-inline-start: 16px; - padding-left: 16px; + padding-inline-start: 16px; } }
diff --git a/ash/webui/scanning/resources/action_toolbar.html b/ash/webui/scanning/resources/action_toolbar.html index c0585ef..5308ff8 100644 --- a/ash/webui/scanning/resources/action_toolbar.html +++ b/ash/webui/scanning/resources/action_toolbar.html
@@ -3,6 +3,10 @@ background-color: var(--cros-sys-secondary_container); } + :host-context(body.jelly-enabled) #pageNumbers { + font: var(--cros-button-2-font); + } + :host-context(body:not(.jelly-enabled)) cr-icon-button { --cr-icon-button-fill-color: var(--google-grey-200); --cr-icon-button-hover-background-color:
diff --git a/ash/webui/scanning/resources/loading_page.html b/ash/webui/scanning/resources/loading_page.html index 26b6eeb..8d5d9a7 100644 --- a/ash/webui/scanning/resources/loading_page.html +++ b/ash/webui/scanning/resources/loading_page.html
@@ -1,4 +1,12 @@ <style include="scanning-fonts scanning-shared"> + :host-context(body.jelly-enabled) #noScannersSubtext { + font: var(--cros-body-1-font); + } + + :host-context(body.jelly-enabled) h1 { + font: var(--cros-display-6-font); + } + #loadingContainer { align-items: center; display: flex;
diff --git a/ash/webui/scanning/resources/multi_page_checkbox.html b/ash/webui/scanning/resources/multi_page_checkbox.html index 642b0d3..c3b6c6a7 100644 --- a/ash/webui/scanning/resources/multi_page_checkbox.html +++ b/ash/webui/scanning/resources/multi_page_checkbox.html
@@ -1,4 +1,8 @@ <style include="scanning-shared"> + :host-context(body.jelly-enabled) #checkboxDiv { + font: var(--cros-annotation-1-font); + } + scan-settings-section { --scan-setting-section-height: 40px; }
diff --git a/ash/webui/scanning/resources/multi_page_scan.html b/ash/webui/scanning/resources/multi_page_scan.html index 87961cc..d7a0afc 100644 --- a/ash/webui/scanning/resources/multi_page_scan.html +++ b/ash/webui/scanning/resources/multi_page_scan.html
@@ -1,4 +1,8 @@ <style include="scanning-fonts cros-color-overrides"> + :host-context(body.jelly-enabled) .container { + font: var(--cros-body-2-font); + } + .label, #buttonContainer { width: 272px;
diff --git a/ash/webui/scanning/resources/scan_done_section.html b/ash/webui/scanning/resources/scan_done_section.html index 9140e15e..3db0c048 100644 --- a/ash/webui/scanning/resources/scan_done_section.html +++ b/ash/webui/scanning/resources/scan_done_section.html
@@ -1,4 +1,8 @@ <style include="scanning-fonts cros-color-overrides"> + :host-context(body.jelly-enabled) .container { + font: var(--cros-body-2-font); + } + .container, #doneButtonContainer { width: 272px;
diff --git a/ash/webui/scanning/resources/scan_preview.html b/ash/webui/scanning/resources/scan_preview.html index 24cf65ce..5bdfb81 100644 --- a/ash/webui/scanning/resources/scan_preview.html +++ b/ash/webui/scanning/resources/scan_preview.html
@@ -14,6 +14,15 @@ 0 8px 12px 1px var(--cros-shadow-color-ambient); } + :host-context(body.jelly-enabled) #cancelingText, + :host-context(body.jelly-enabled) #progressText { + font: var(--cros-body-0-font); + } + + :host-context(body.jelly-enabled) #helperText { + font: var(--cros-body-2-font); + } + :host-context(body.jelly-enabled) #helpOrProgress { background-color: var(--cros-sys-app_base); }
diff --git a/ash/webui/scanning/resources/scan_settings_section.html b/ash/webui/scanning/resources/scan_settings_section.html index 773f90c..616e6d7 100644 --- a/ash/webui/scanning/resources/scan_settings_section.html +++ b/ash/webui/scanning/resources/scan_settings_section.html
@@ -1,4 +1,8 @@ <style include="scanning-shared scanning-fonts"> + :host-context(body.jelly-enabled) ::slotted([slot=label]) { + font: var(--cros-body-2-font); + } + #selectDiv { align-items: center; display: flex;
diff --git a/ash/webui/scanning/resources/scanning_app.html b/ash/webui/scanning/resources/scanning_app.html index 4243a012..d1cc3a00f 100644 --- a/ash/webui/scanning/resources/scanning_app.html +++ b/ash/webui/scanning/resources/scanning_app.html
@@ -1,4 +1,12 @@ <style include="cr-shared-style scanning-shared scanning-fonts"> + :host-context(body.jelly-enabled) #appTitle { + font: var(--cros-display-6-font); + } + + :host-context(body.jelly-enabled) #moreSettingsButton { + font: var(--cros-annotation-1-font); + } + #appTitle { color: var(--scanning-app-title-text-color); font-family: var(--scanning-app-title-font-family);
diff --git a/ash/webui/scanning/resources/scanning_app.js b/ash/webui/scanning/resources/scanning_app.js index 50cac09..568c984 100644 --- a/ash/webui/scanning/resources/scanning_app.js +++ b/ash/webui/scanning/resources/scanning_app.js
@@ -406,8 +406,13 @@ if (loadTimeData.getBoolean('isJellyEnabledForScanningApp')) { // TODO(b/276493795): After the Jelly experiment is launched, replace // `cros_styles.css` with `theme/colors.css` directly in `index.html`. + // Also add `theme/typography.css` to `index.html`. document.querySelector('link[href*=\'cros_styles.css\']') ?.setAttribute('href', 'chrome://theme/colors.css?sets=legacy,sys'); + const typographyLink = document.createElement('link'); + typographyLink.href = 'chrome://theme/typography.css'; + typographyLink.rel = 'stylesheet'; + document.head.appendChild(typographyLink); document.body.classList.add('jelly-enabled'); startColorChangeUpdater(); }
diff --git a/ash/webui/scanning/resources/scanning_fonts_css.html b/ash/webui/scanning/resources/scanning_fonts_css.html index 4ba5ed3..f4ca3c2 100644 --- a/ash/webui/scanning/resources/scanning_fonts_css.html +++ b/ash/webui/scanning/resources/scanning_fonts_css.html
@@ -50,7 +50,55 @@ } :host-context(body.jelly-enabled) { + --scanning-action-toolbar-font-family: var(--cros-body-0-font-family); + --scanning-app-title-font-family: var(--cros-body-0-font-family); + --scanning-done-section-option-font-family: var(--cros-body-0-font-family); + --scanning-helper-text-font-family: var(--cros-body-0-font-family); + --scanning-more-settings-font-family: var(--cros-body-0-font-family); + --scanning-multi-page-checkbox-font-family: var(--cros-body-0-font-family); + --scanning-no-scanners-subtext-font-family: var(--cros-body-0-font-family); + --scanning-progress-text-font-family: var(--cros-body-0-font-family); + --scanning-scan-setting-font-family: var(--cros-body-0-font-family); + --scanning-scanners-loading-font-family: var(--cros-body-0-font-family); + + --scanning-action-toolbar-font-size: var(--cros-body-2-font-size); + --scanning-app-title-font-size: var(--cros-display-6-font-size); + --scanning-done-section-option-font-size: var(--cros-body-2-font-size); + --scanning-helper-text-font-size: var(--cros-body-2-font-size); + --scanning-more-settings-font-size: var(--cros-annotation-1-font-size); + --scanning-multi-page-checkbox-font-size: var(--cros-annotation-1-font-size); + --scanning-no-scanners-subtext-font-size: var(--cros-body-1-font-size); + --scanning-progress-text-font-size: var(--cros-body-0-font-size); + --scanning-scan-setting-font-size: var(--cros-body-2-font-size); + --scanning-scanners-loading-font-size: var(--cros-display-6-font-size); + + --scanning-action-toolbar-line-height: var(--cros-body-2-font-line-height); + --scanning-app-title-line-height: var(--cros-display-6-font-line-height); + --scanning-done-section-option-line-height: var(--cros-body-2-font-line-height); + --scanning-helper-text-line-height: var(--cros-body-2-font-line-height); + --scanning-more-settings-line-height: var(--cros-display-7-font-line-height); + --scanning-multi-page-checkbox-line-height: var(--cros-display-7-font-line-height); + --scanning-no-scanners-subtext-line-height: var(--cros-body-2-font-line-height); + --scanning-progress-text-line-height: var(--cros-title-1-font-line-height); + --scanning-scan-setting-line-height: var(--cros-body-2-font-line-height); + --scanning-scanners-loading-line-height: var(--cros-display-6-font-line-height); + + --scanning-regular-font-weight: var(--cros-body-2-font-weight); + --scanning-medium-font-weight: var(--cros-display-6-font-font-weight); + --scanning-action-toolbar-text-color: var(--cros-sys-on_disabled_container); } + + :host-context(body.jelly-enabled) cr-button { + font: var(--cros-button-2-font); + } + + :host-context(body.jelly-enabled) cr-button.action-button { + font: var(--cros-button-1-font); + } + + :host-context(body.jelly-enabled) cr-toast { + font: var(--cros-body-2-font); + } </style> </template>
diff --git a/ash/webui/scanning/resources/scanning_shared_css.html b/ash/webui/scanning/resources/scanning_shared_css.html index edd465b..3d3651f 100644 --- a/ash/webui/scanning/resources/scanning_shared_css.html +++ b/ash/webui/scanning/resources/scanning_shared_css.html
@@ -22,6 +22,15 @@ --md-select-bg-color: var(--cros-sys-app_base_shaded); --md-select-focus-shadow-color: var(--cros-sys-focus_ring); --md-select-option-bg-color: var(--cros-sys-app_base_shaded); + font: var(--cros-button-2-font); + } + + :host-context(body.jelly-enabled) cr-dialog::part(dialog) { + font: var(--cros-body-1-font); + } + + :host-context(body.jelly-enabled) cr-dialog [slot=title] { + font: var(--cros-display-7-font); } paper-progress {
diff --git a/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.cc b/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.cc index db80cff..099d0fb 100644 --- a/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.cc +++ b/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.cc
@@ -57,26 +57,26 @@ // accelerators and hide them from display. const HiddenAcceleratorMap& GetHiddenAcceleratorMap() { static auto hiddenAcceleratorMap = base::NoDestructor<HiddenAcceleratorMap>( - {{TOGGLE_APP_LIST, + {{AcceleratorAction::kToggleAppList, {ui::Accelerator(ui::VKEY_BROWSER_SEARCH, ui::EF_SHIFT_DOWN, ui::Accelerator::KeyState::PRESSED), ui::Accelerator(ui::VKEY_LWIN, ui::EF_SHIFT_DOWN, ui::Accelerator::KeyState::RELEASED)}}, - {SHOW_SHORTCUT_VIEWER, + {AcceleratorAction::kShowShortcutViewer, {ui::Accelerator(ui::VKEY_F14, ui::EF_NONE, ui::Accelerator::KeyState::PRESSED), ui::Accelerator( ui::VKEY_OEM_2, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::Accelerator::KeyState::PRESSED)}}, - {OPEN_GET_HELP, + {AcceleratorAction::kOpenGetHelp, {ui::Accelerator(ui::VKEY_OEM_2, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, ui::Accelerator::KeyState::PRESSED)}}, - {TOGGLE_FULLSCREEN, + {AcceleratorAction::kToggleFullscreen, {ui::Accelerator(ui::VKEY_ZOOM, ui::EF_SHIFT_DOWN, ui::Accelerator::KeyState::PRESSED)}}, - {SWITCH_TO_LAST_USED_IME, + {AcceleratorAction::kSwitchToLastUsedIme, {ui::Accelerator(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, ui::Accelerator::KeyState::RELEASED)}}}); return *hiddenAcceleratorMap;
diff --git a/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider_unittest.cc b/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider_unittest.cc index 03ed23c..18c19add 100644 --- a/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider_unittest.cc +++ b/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider_unittest.cc
@@ -480,11 +480,12 @@ const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, {/*trigger_on_press=*/true, ui::VKEY_ESCAPE, ui::EF_COMMAND_DOWN, - SHOW_TASK_MANAGER}, + AcceleratorAction::kShowTaskManager}, }; Shell::Get()->ash_accelerator_configuration()->Initialize(test_data); base::RunLoop().RunUntilIdle(); @@ -498,11 +499,11 @@ // Initialize with a new set of accelerators. const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_ZOOM, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, {/*trigger_on_press=*/true, ui::VKEY_ZOOM, ui::EF_ALT_DOWN, - SWAP_PRIMARY_DISPLAY}, + AcceleratorAction::kSwapPrimaryDisplay}, {/*trigger_on_press=*/true, ui::VKEY_MEDIA_LAUNCH_APP1, - ui::EF_CONTROL_DOWN, TAKE_SCREENSHOT}, + ui::EF_CONTROL_DOWN, AcceleratorAction::kTakeScreenshot}, }; Shell::Get()->ash_accelerator_configuration()->Initialize(updated_test_data); base::RunLoop().RunUntilIdle(); @@ -568,25 +569,26 @@ const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_ESCAPE, ui::EF_COMMAND_DOWN, - SHOW_TASK_MANAGER}, + AcceleratorAction::kShowTaskManager}, // Accelerators that should be hidden from display. {/*trigger_on_press=*/true, ui::VKEY_BROWSER_SEARCH, ui::EF_SHIFT_DOWN, - TOGGLE_APP_LIST}, + AcceleratorAction::kToggleAppList}, {/*trigger_on_press=*/false, ui::VKEY_LWIN, ui::EF_SHIFT_DOWN, - TOGGLE_APP_LIST}, + AcceleratorAction::kToggleAppList}, {/*trigger_on_press=*/true, ui::VKEY_F14, ui::EF_NONE, - SHOW_SHORTCUT_VIEWER}, + AcceleratorAction::kShowShortcutViewer}, {/*trigger_on_press=*/true, ui::VKEY_OEM_2, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, - SHOW_SHORTCUT_VIEWER}, + AcceleratorAction::kShowShortcutViewer}, {/*trigger_on_press=*/true, ui::VKEY_OEM_2, - ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, OPEN_GET_HELP}, + ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, + AcceleratorAction::kOpenGetHelp}, {/*trigger_on_press=*/false, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_LAST_USED_IME}, + AcceleratorAction::kSwitchToLastUsedIme}, {/*trigger_on_press=*/true, ui::VKEY_ZOOM, ui::EF_SHIFT_DOWN, - TOGGLE_FULLSCREEN}, + AcceleratorAction::kToggleFullscreen}, }; // Initialize with a set of accelerators that include hidden accelerators. @@ -595,9 +597,9 @@ const AcceleratorData expected_test_data[]{ {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_ESCAPE, ui::EF_COMMAND_DOWN, - SHOW_TASK_MANAGER}, + AcceleratorAction::kShowTaskManager}, }; EXPECT_EQ(1, observer_.num_times_notified()); @@ -635,24 +637,26 @@ const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, {/*trigger_on_press=*/true, ui::VKEY_ESCAPE, ui::EF_COMMAND_DOWN, - SHOW_TASK_MANAGER}, + AcceleratorAction::kShowTaskManager}, {/*trigger_on_press=*/true, ui::VKEY_ZOOM, ui::EF_SHIFT_DOWN, - TOGGLE_FULLSCREEN}, + AcceleratorAction::kToggleFullscreen}, {/*trigger_on_press=*/true, ui::VKEY_ZOOM, ui::EF_NONE, - TOGGLE_FULLSCREEN}, + AcceleratorAction::kToggleFullscreen}, {/*trigger_on_press=*/true, ui::VKEY_BRIGHTNESS_UP, ui::EF_NONE, - BRIGHTNESS_UP}, + AcceleratorAction::kBrightnessUp}, {/*trigger_on_press=*/true, ui::VKEY_BRIGHTNESS_UP, ui::EF_ALT_DOWN, - KEYBOARD_BRIGHTNESS_UP}, + AcceleratorAction::kKeyboardBrightnessUp}, // Fake accelerator data - [search] is part of the original accelerator. {/*trigger_on_press=*/true, ui::VKEY_BRIGHTNESS_UP, - ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, KEYBOARD_BRIGHTNESS_UP}, + ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, + AcceleratorAction::kKeyboardBrightnessUp}, {/*trigger_on_press=*/true, ui::VKEY_ZOOM, ui::EF_COMMAND_DOWN, - TOGGLE_FULLSCREEN}, + AcceleratorAction::kToggleFullscreen}, }; Shell::Get()->ash_accelerator_configuration()->Initialize(test_data); @@ -692,25 +696,28 @@ const AcceleratorData expected_test_data[] = { // alt + tab -> alt + tab {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, // alt + shift + tab -> alt + shift + tab {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleBackwardMru}, // search + esc -> search + esc {/*trigger_on_press=*/true, ui::VKEY_ESCAPE, ui::EF_COMMAND_DOWN, - SHOW_TASK_MANAGER}, + AcceleratorAction::kShowTaskManager}, // shift + zoom -> shift + search + VKEY_ZOOM {/*trigger_on_press=*/true, ui::VKEY_ZOOM, - ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN, TOGGLE_FULLSCREEN}, + ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN, + AcceleratorAction::kToggleFullscreen}, // zoom -> search + VKEY_ZOOM {/*trigger_on_press=*/true, ui::VKEY_ZOOM, ui::EF_COMMAND_DOWN, - TOGGLE_FULLSCREEN}, + AcceleratorAction::kToggleFullscreen}, // brightness_up -> search + VKEY_BRIGHTNESS_UP {/*trigger_on_press=*/true, ui::VKEY_BRIGHTNESS_UP, ui::EF_COMMAND_DOWN, - BRIGHTNESS_UP}, + AcceleratorAction::kBrightnessUp}, // alt + brightness_up -> alt + search + VKEY_BRIGHTNESS_UP {/*trigger_on_press=*/true, ui::VKEY_BRIGHTNESS_UP, - ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, KEYBOARD_BRIGHTNESS_UP}, + ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, + AcceleratorAction::kKeyboardBrightnessUp}, }; EXPECT_EQ(3, mojo_observer.num_times_notified()); @@ -729,81 +736,94 @@ const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, // Below are fake shortcuts, only used for testing. {/*trigger_on_press=*/true, ui::VKEY_DELETE, ui::EF_NONE, - CYCLE_BACKWARD_MRU}, + AcceleratorAction::kCycleBackwardMru}, {/*trigger_on_press=*/true, ui::VKEY_HOME, ui::EF_NONE, - TAKE_WINDOW_SCREENSHOT}, + AcceleratorAction::kTakeWindowScreenshot}, {/*trigger_on_press=*/true, ui::VKEY_HOME, ui::EF_ALT_DOWN, - KEYBOARD_BRIGHTNESS_UP}, + AcceleratorAction::kKeyboardBrightnessUp}, {/*trigger_on_press=*/true, ui::VKEY_END, ui::EF_SHIFT_DOWN, - DISABLE_CAPS_LOCK}, - {/*trigger_on_press=*/true, ui::VKEY_NEXT, ui::EF_ALT_DOWN, NEW_TAB}, - {/*trigger_on_press=*/true, ui::VKEY_INSERT, ui::EF_NONE, NEW_TAB}, - {/*trigger_on_press=*/true, ui::VKEY_INSERT, ui::EF_ALT_DOWN, NEW_TAB}, + AcceleratorAction::kDisableCapsLock}, + {/*trigger_on_press=*/true, ui::VKEY_NEXT, ui::EF_ALT_DOWN, + AcceleratorAction::kNewTab}, + {/*trigger_on_press=*/true, ui::VKEY_INSERT, ui::EF_NONE, + AcceleratorAction::kNewTab}, + {/*trigger_on_press=*/true, ui::VKEY_INSERT, ui::EF_ALT_DOWN, + AcceleratorAction::kNewTab}, // When [search] is part of the original accelerator. {/*trigger_on_press=*/true, ui::VKEY_HOME, - ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, KEYBOARD_BRIGHTNESS_UP}, + ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, + AcceleratorAction::kKeyboardBrightnessUp}, {/*trigger_on_press=*/true, ui::VKEY_END, - ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN, DISABLE_CAPS_LOCK}, + ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN, + AcceleratorAction::kDisableCapsLock}, // Edge case: [Shift] + [Delete]. {/*trigger_on_press=*/true, ui::VKEY_DELETE, ui::EF_SHIFT_DOWN, - DESKS_NEW_DESK}, + AcceleratorAction::kDesksNewDesk}, }; const AcceleratorData expected_data[] = { {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, // Below are fake shortcuts, only used for testing. {/*trigger_on_press=*/true, ui::VKEY_DELETE, ui::EF_NONE, - CYCLE_BACKWARD_MRU}, + AcceleratorAction::kCycleBackwardMru}, {/*trigger_on_press=*/true, ui::VKEY_HOME, ui::EF_NONE, - TAKE_WINDOW_SCREENSHOT}, + AcceleratorAction::kTakeWindowScreenshot}, {/*trigger_on_press=*/true, ui::VKEY_HOME, ui::EF_ALT_DOWN, - KEYBOARD_BRIGHTNESS_UP}, + AcceleratorAction::kKeyboardBrightnessUp}, {/*trigger_on_press=*/true, ui::VKEY_END, ui::EF_SHIFT_DOWN, - DISABLE_CAPS_LOCK}, - {/*trigger_on_press=*/true, ui::VKEY_NEXT, ui::EF_ALT_DOWN, NEW_TAB}, - {/*trigger_on_press=*/true, ui::VKEY_INSERT, ui::EF_NONE, NEW_TAB}, - {/*trigger_on_press=*/true, ui::VKEY_INSERT, ui::EF_ALT_DOWN, NEW_TAB}, + AcceleratorAction::kDisableCapsLock}, + {/*trigger_on_press=*/true, ui::VKEY_NEXT, ui::EF_ALT_DOWN, + AcceleratorAction::kNewTab}, + {/*trigger_on_press=*/true, ui::VKEY_INSERT, ui::EF_NONE, + AcceleratorAction::kNewTab}, + {/*trigger_on_press=*/true, ui::VKEY_INSERT, ui::EF_ALT_DOWN, + AcceleratorAction::kNewTab}, // When [search] is part of the original accelerator. No remapping is // done. Search+Alt+Home -> Search+Alt+Home. {/*trigger_on_press=*/true, ui::VKEY_HOME, - ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, KEYBOARD_BRIGHTNESS_UP}, + ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, + AcceleratorAction::kKeyboardBrightnessUp}, // Search+Shift+End -> Search+Shift+End. {/*trigger_on_press=*/true, ui::VKEY_END, - ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN, DISABLE_CAPS_LOCK}, + ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN, + AcceleratorAction::kDisableCapsLock}, // Edge case: [Shift] + [Delete]. It should not remapped to // [Shift]+[Search]+[Back](aka, Insert). // Shift+Delete -> Shift+Delete {/*trigger_on_press=*/true, ui::VKEY_DELETE, ui::EF_SHIFT_DOWN, - DESKS_NEW_DESK}, + AcceleratorAction::kDesksNewDesk}, // Additional six-pack remapped accelerators. // Delete -> Search+Backspace {/*trigger_on_press=*/true, ui::VKEY_BACK, ui::EF_COMMAND_DOWN, - CYCLE_BACKWARD_MRU}, + AcceleratorAction::kCycleBackwardMru}, // Home -> Search+Left {/*trigger_on_press=*/true, ui::VKEY_LEFT, ui::EF_COMMAND_DOWN, - TAKE_WINDOW_SCREENSHOT}, + AcceleratorAction::kTakeWindowScreenshot}, // Alt+Home -> Search+Alt+Left {/*trigger_on_press=*/true, ui::VKEY_LEFT, - ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, KEYBOARD_BRIGHTNESS_UP}, + ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, + AcceleratorAction::kKeyboardBrightnessUp}, // Shift+End -> Search+Shift+Right {/*trigger_on_press=*/true, ui::VKEY_RIGHT, - ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN, DISABLE_CAPS_LOCK}, + ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN, + AcceleratorAction::kDisableCapsLock}, // Alt+Next -> Search+Alt+Down {/*trigger_on_press=*/true, ui::VKEY_DOWN, - ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, NEW_TAB}, + ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, AcceleratorAction::kNewTab}, // Insert -> Search+Shift+Backspace {/*trigger_on_press=*/true, ui::VKEY_BACK, - ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, NEW_TAB}, + ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, AcceleratorAction::kNewTab}, // Alt+Insert -> Search+Shift+Alt+Backspace {/*trigger_on_press=*/true, ui::VKEY_BACK, - ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, NEW_TAB}, + ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, + AcceleratorAction::kNewTab}, }; Shell::Get()->ash_accelerator_configuration()->Initialize(test_data); @@ -827,89 +847,105 @@ const AcceleratorData test_data[] = { // Below are fake shortcuts, only used for testing. {/*trigger_on_press=*/true, ui::VKEY_LEFT, ui::EF_ALT_DOWN, - CYCLE_BACKWARD_MRU}, - {/*trigger_on_press=*/true, ui::VKEY_LEFT, ui::EF_COMMAND_DOWN, NEW_TAB}, + AcceleratorAction::kCycleBackwardMru}, + {/*trigger_on_press=*/true, ui::VKEY_LEFT, ui::EF_COMMAND_DOWN, + AcceleratorAction::kNewTab}, {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, DISABLE_CAPS_LOCK}, + ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kDisableCapsLock}, {/*trigger_on_press=*/true, ui::VKEY_LEFT, - ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, KEYBOARD_BRIGHTNESS_UP}, + ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kKeyboardBrightnessUp}, {/*trigger_on_press=*/true, ui::VKEY_LEFT, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN, - TAKE_WINDOW_SCREENSHOT}, + AcceleratorAction::kTakeWindowScreenshot}, {/*trigger_on_press=*/true, ui::VKEY_UP, - ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, DESKS_NEW_DESK}, + ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, AcceleratorAction::kDesksNewDesk}, {/*trigger_on_press=*/true, ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN, - TOGGLE_FULLSCREEN}, + AcceleratorAction::kToggleFullscreen}, {/*trigger_on_press=*/true, ui::VKEY_DOWN, - ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, KEYBOARD_BRIGHTNESS_DOWN}, + ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kKeyboardBrightnessDown}, {/*trigger_on_press=*/true, ui::VKEY_BACK, - ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, CYCLE_FORWARD_MRU}, + ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_BACK, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, - SHOW_TASK_MANAGER}, + AcceleratorAction::kShowTaskManager}, {/*trigger_on_press=*/true, ui::VKEY_BACK, - ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, BRIGHTNESS_UP}, + ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, + AcceleratorAction::kBrightnessUp}, }; const AcceleratorData expected_data[] = { // When [Search] is not part of original accelerator, no remapping is // done. [Left]+[Alt]>[Left]+[Alt]. {/*trigger_on_press=*/true, ui::VKEY_LEFT, ui::EF_ALT_DOWN, - CYCLE_BACKWARD_MRU}, + AcceleratorAction::kCycleBackwardMru}, // When [Search] is the only modifier, [Left]+[Search]->[Home]. - {/*trigger_on_press=*/true, ui::VKEY_LEFT, ui::EF_COMMAND_DOWN, NEW_TAB}, - {/*trigger_on_press=*/true, ui::VKEY_HOME, ui::EF_NONE, NEW_TAB}, + {/*trigger_on_press=*/true, ui::VKEY_LEFT, ui::EF_COMMAND_DOWN, + AcceleratorAction::kNewTab}, + {/*trigger_on_press=*/true, ui::VKEY_HOME, ui::EF_NONE, + AcceleratorAction::kNewTab}, // When key code is not reversed six pack key, no remapping is done. // [Tab]+[Search]+[Alt]->[Tab]+[Search]+[Alt]. {/*trigger_on_press=*/true, ui::VKEY_TAB, - ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, DISABLE_CAPS_LOCK}, + ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kDisableCapsLock}, // [Left]+[Search]+[Alt]->[Home]+[Alt]. {/*trigger_on_press=*/true, ui::VKEY_LEFT, - ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, KEYBOARD_BRIGHTNESS_UP}, + ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kKeyboardBrightnessUp}, {/*trigger_on_press=*/true, ui::VKEY_HOME, ui::EF_ALT_DOWN, - KEYBOARD_BRIGHTNESS_UP}, + AcceleratorAction::kKeyboardBrightnessUp}, // [Left]+[Search]+[Shift]+[Alt]->[Home]+[Shift]+[Alt]. {/*trigger_on_press=*/true, ui::VKEY_LEFT, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, - TAKE_WINDOW_SCREENSHOT}, + AcceleratorAction::kTakeWindowScreenshot}, {/*trigger_on_press=*/true, ui::VKEY_HOME, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, TAKE_WINDOW_SCREENSHOT}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kTakeWindowScreenshot}, // [Up]+[Search]+[Alt]->[Prior]+[Alt]. {/*trigger_on_press=*/true, ui::VKEY_UP, - ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, DESKS_NEW_DESK}, + ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, AcceleratorAction::kDesksNewDesk}, {/*trigger_on_press=*/true, ui::VKEY_PRIOR, ui::EF_ALT_DOWN, - DESKS_NEW_DESK}, + AcceleratorAction::kDesksNewDesk}, // [Right]+[Search]+[Shift]+[Alt]->[End]+[Shift]+[Alt]. {/*trigger_on_press=*/true, ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, - TOGGLE_FULLSCREEN}, + AcceleratorAction::kToggleFullscreen}, {/*trigger_on_press=*/true, ui::VKEY_END, - ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, TOGGLE_FULLSCREEN}, + ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kToggleFullscreen}, // [Down]+[Search]+[Alt]->[Next]+[Alt]. {/*trigger_on_press=*/true, ui::VKEY_DOWN, - ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, KEYBOARD_BRIGHTNESS_DOWN}, + ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kKeyboardBrightnessDown}, {/*trigger_on_press=*/true, ui::VKEY_NEXT, ui::EF_ALT_DOWN, - KEYBOARD_BRIGHTNESS_DOWN}, + AcceleratorAction::kKeyboardBrightnessDown}, // [Back]+[Search]+[Alt]->[Delete]+[Alt]. {/*trigger_on_press=*/true, ui::VKEY_BACK, - ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, CYCLE_FORWARD_MRU}, + ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, + AcceleratorAction::kCycleForwardMru}, {/*trigger_on_press=*/true, ui::VKEY_DELETE, ui::EF_ALT_DOWN, - CYCLE_FORWARD_MRU}, + AcceleratorAction::kCycleForwardMru}, // [Back]+[Search]+[Shift]+[Alt]->[Insert]+[Alt]. {/*trigger_on_press=*/true, ui::VKEY_BACK, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, - SHOW_TASK_MANAGER}, + AcceleratorAction::kShowTaskManager}, {/*trigger_on_press=*/true, ui::VKEY_INSERT, ui::EF_ALT_DOWN, - SHOW_TASK_MANAGER}, + AcceleratorAction::kShowTaskManager}, // [Back]+[Search]+[Shift] -> [Insert]. {/*trigger_on_press=*/true, ui::VKEY_BACK, - ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, BRIGHTNESS_UP}, - {/*trigger_on_press=*/true, ui::VKEY_INSERT, ui::EF_NONE, BRIGHTNESS_UP}, + ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, + AcceleratorAction::kBrightnessUp}, + {/*trigger_on_press=*/true, ui::VKEY_INSERT, ui::EF_NONE, + AcceleratorAction::kBrightnessUp}, }; Shell::Get()->ash_accelerator_configuration()->Initialize(test_data); @@ -1041,7 +1077,7 @@ // Initialize with all custom accelerators. const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_NEXT_IME}, + AcceleratorAction::kSwitchToNextIme}, }; AshAcceleratorConfiguration* config = Shell::Get()->ash_accelerator_configuration(); @@ -1054,7 +1090,7 @@ // Remove the accelerator. provider_->RemoveAccelerator( - mojom::AcceleratorSource::kAsh, SWITCH_TO_NEXT_IME, + mojom::AcceleratorSource::kAsh, AcceleratorAction::kSwitchToNextIme, ui::Accelerator(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN), base::BindLambdaForTesting([&](AcceleratorResultDataPtr result) { EXPECT_EQ(AcceleratorConfigResult::kSuccess, result->result); @@ -1064,15 +1100,17 @@ config->GetAllAccelerators(); EXPECT_EQ(0u, updated_accelerators.size()); - // Now verify that removing the default for `SWITCH_TO_NEXT_IME` will - // only disable it from the config. + // Now verify that removing the default for + // `AcceleratorAction::kSwitchToNextIme` will only disable it from the + // config. base::RunLoop().RunUntilIdle(); AcceleratorConfigurationProvider::AcceleratorConfigurationMap actual_config = observer.config(); ExpectMojomAcceleratorsEqual(mojom::AcceleratorSource::kAsh, test_data, actual_config); - std::vector<mojom::AcceleratorInfoPtr> actual_infos(mojo::Clone( - actual_config[mojom::AcceleratorSource::kAsh][SWITCH_TO_NEXT_IME])); + std::vector<mojom::AcceleratorInfoPtr> actual_infos( + mojo::Clone(actual_config[mojom::AcceleratorSource::kAsh] + [AcceleratorAction::kSwitchToNextIme])); EXPECT_EQ(1u, actual_infos.size()); // A disabled default accelerator should be marked as `kDisabledByUser`. EXPECT_EQ(mojom::AcceleratorState::kDisabledByUser, @@ -1086,9 +1124,9 @@ // Initialize with all custom accelerators. const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, {/*trigger_on_press=*/true, ui::VKEY_ZOOM, ui::EF_ALT_DOWN, - SWAP_PRIMARY_DISPLAY}, + AcceleratorAction::kSwapPrimaryDisplay}, }; AshAcceleratorConfiguration* config = Shell::Get()->ash_accelerator_configuration(); @@ -1097,7 +1135,7 @@ // Remove the accelerator. provider_->RemoveAccelerator( - mojom::AcceleratorSource::kAsh, TOGGLE_MIRROR_MODE, + mojom::AcceleratorSource::kAsh, AcceleratorAction::kToggleMirrorMode, ui::Accelerator(ui::VKEY_C, ui::EF_CONTROL_DOWN), base::BindLambdaForTesting([&](AcceleratorResultDataPtr result) { EXPECT_EQ(AcceleratorConfigResult::kNotFound, result->result); @@ -1110,9 +1148,9 @@ // Initialize with all custom accelerators. const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, {/*trigger_on_press=*/true, ui::VKEY_ZOOM, ui::EF_ALT_DOWN, - SWAP_PRIMARY_DISPLAY}, + AcceleratorAction::kSwapPrimaryDisplay}, }; AshAcceleratorConfiguration* config = Shell::Get()->ash_accelerator_configuration(); @@ -1121,7 +1159,7 @@ // Remove the accelerator. provider_->RemoveAccelerator( - mojom::AcceleratorSource::kBrowser, TOGGLE_MIRROR_MODE, + mojom::AcceleratorSource::kBrowser, AcceleratorAction::kToggleMirrorMode, ui::Accelerator(ui::VKEY_C, ui::EF_CONTROL_DOWN), base::BindLambdaForTesting([&](AcceleratorResultDataPtr result) { EXPECT_EQ(AcceleratorConfigResult::kActionLocked, result->result); @@ -1137,7 +1175,7 @@ // Initialize with all custom accelerators. const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - SWITCH_TO_NEXT_IME}, + AcceleratorAction::kSwitchToNextIme}, }; AshAcceleratorConfiguration* config = Shell::Get()->ash_accelerator_configuration(); @@ -1154,7 +1192,8 @@ ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) .RemoveAccelerator( - mojom::AcceleratorSource::kAsh, SWITCH_TO_NEXT_IME, + mojom::AcceleratorSource::kAsh, + AcceleratorAction::kSwitchToNextIme, ui::Accelerator(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN), &result); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result->result); EXPECT_FALSE(result->shortcut_name.has_value()); @@ -1163,15 +1202,16 @@ config->GetAllAccelerators(); EXPECT_EQ(0u, updated_accelerators.size()); - // Now verify that removing the default for `SWITCH_TO_NEXT_IME` will - // only disable it from the config. + // Now verify that removing the default for + // `AcceleratorAction::kSwitchToNextIme` will only disable it from the config. base::RunLoop().RunUntilIdle(); AcceleratorConfigurationProvider::AcceleratorConfigurationMap actual_config = observer.config(); ExpectMojomAcceleratorsEqual(mojom::AcceleratorSource::kAsh, test_data, actual_config); - std::vector<mojom::AcceleratorInfoPtr> actual_infos(mojo::Clone( - actual_config[mojom::AcceleratorSource::kAsh][SWITCH_TO_NEXT_IME])); + std::vector<mojom::AcceleratorInfoPtr> actual_infos( + mojo::Clone(actual_config[mojom::AcceleratorSource::kAsh] + [AcceleratorAction::kSwitchToNextIme])); EXPECT_EQ(1u, actual_infos.size()); // A disabled default accelerator should be marked as `kDisabledByUser`. EXPECT_EQ(mojom::AcceleratorState::kDisabledByUser, actual_infos[0]->state); @@ -1193,8 +1233,9 @@ actual_config = observer.config(); ExpectMojomAcceleratorsEqual(mojom::AcceleratorSource::kAsh, test_data, actual_config); - actual_infos = mojo::Clone( - actual_config[mojom::AcceleratorSource::kAsh][SWITCH_TO_NEXT_IME]); + actual_infos = + mojo::Clone(actual_config[mojom::AcceleratorSource::kAsh] + [AcceleratorAction::kSwitchToNextIme]); EXPECT_EQ(1u, actual_infos.size()); // Resetting to default will reset it back to `kEnabled`. EXPECT_EQ(mojom::AcceleratorState::kEnabled, actual_infos[0]->state); @@ -1208,7 +1249,7 @@ // Initialize with all custom accelerators. const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, }; AshAcceleratorConfiguration* config = Shell::Get()->ash_accelerator_configuration(); @@ -1224,7 +1265,8 @@ ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) .RemoveAccelerator( - mojom::AcceleratorSource::kAsh, TOGGLE_MIRROR_MODE, + mojom::AcceleratorSource::kAsh, + AcceleratorAction::kToggleMirrorMode, ui::Accelerator(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN), &result); EXPECT_EQ(AcceleratorConfigResult::kSuccess, result->result); EXPECT_FALSE(result->shortcut_name.has_value()); @@ -1233,15 +1275,17 @@ config->GetAllAccelerators(); EXPECT_EQ(0u, updated_accelerators.size()); - // Now verify that removing the default for `TOGGLE_MIRROR_MODE` will - // only disable it from the config. + // Now verify that removing the default for + // `AcceleratorAction::kToggleMirrorMode` will only disable it from the + // config. base::RunLoop().RunUntilIdle(); AcceleratorConfigurationProvider::AcceleratorConfigurationMap actual_config = observer.config(); ExpectMojomAcceleratorsEqual(mojom::AcceleratorSource::kAsh, test_data, actual_config); - std::vector<mojom::AcceleratorInfoPtr> actual_infos(mojo::Clone( - actual_config[mojom::AcceleratorSource::kAsh][TOGGLE_MIRROR_MODE])); + std::vector<mojom::AcceleratorInfoPtr> actual_infos( + mojo::Clone(actual_config[mojom::AcceleratorSource::kAsh] + [AcceleratorAction::kToggleMirrorMode])); EXPECT_EQ(1u, actual_infos.size()); // A disabled default accelerator should be marked as `kDisabledByUser`. EXPECT_EQ(mojom::AcceleratorState::kDisabledByUser, actual_infos[0]->state); @@ -1250,8 +1294,8 @@ // Restore all defaults. ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) - .RestoreDefault(mojom::AcceleratorSource::kAsh, TOGGLE_MIRROR_MODE, - &result); + .RestoreDefault(mojom::AcceleratorSource::kAsh, + AcceleratorAction::kToggleMirrorMode, &result); base::RunLoop().RunUntilIdle(); @@ -1263,8 +1307,9 @@ actual_config = observer.config(); ExpectMojomAcceleratorsEqual(mojom::AcceleratorSource::kAsh, test_data, actual_config); - actual_infos = mojo::Clone( - actual_config[mojom::AcceleratorSource::kAsh][TOGGLE_MIRROR_MODE]); + actual_infos = + mojo::Clone(actual_config[mojom::AcceleratorSource::kAsh] + [AcceleratorAction::kToggleMirrorMode]); EXPECT_EQ(1u, actual_infos.size()); // Resetting to default will reset it back to `kEnabled`. EXPECT_EQ(mojom::AcceleratorState::kEnabled, actual_infos[0]->state); @@ -1275,9 +1320,9 @@ // Initialize with all custom accelerators. const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, {/*trigger_on_press=*/true, ui::VKEY_ZOOM, ui::EF_ALT_DOWN, - SWAP_PRIMARY_DISPLAY}, + AcceleratorAction::kSwapPrimaryDisplay}, }; AshAcceleratorConfiguration* config = Shell::Get()->ash_accelerator_configuration(); @@ -1286,7 +1331,7 @@ // Remove the accelerator. provider_->RestoreDefault( - mojom::AcceleratorSource::kBrowser, TOGGLE_MIRROR_MODE, + mojom::AcceleratorSource::kBrowser, AcceleratorAction::kToggleMirrorMode, base::BindLambdaForTesting([&](AcceleratorResultDataPtr result) { EXPECT_EQ(AcceleratorConfigResult::kActionLocked, result->result); EXPECT_FALSE(result->shortcut_name.has_value()); @@ -1298,7 +1343,7 @@ // Initialize default accelerators. const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, }; AshAcceleratorConfiguration* config = @@ -1319,7 +1364,7 @@ // Initialize default accelerators. const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, }; AshAcceleratorConfiguration* config = @@ -1332,15 +1377,17 @@ const ui::Accelerator accelerator(ui::VKEY_M, ui::EF_NONE); ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) - .AddAccelerator(mojom::AcceleratorSource::kAsh, TOGGLE_MIRROR_MODE, - accelerator, &result); + .AddAccelerator(mojom::AcceleratorSource::kAsh, + AcceleratorAction::kToggleMirrorMode, accelerator, + &result); EXPECT_EQ(mojom::AcceleratorConfigResult::kMissingModifier, result->result); // Shift as the only modifier is an error. const ui::Accelerator shift_only_accelerator(ui::VKEY_M, ui::EF_SHIFT_DOWN); ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) - .AddAccelerator(mojom::AcceleratorSource::kAsh, TOGGLE_MIRROR_MODE, + .AddAccelerator(mojom::AcceleratorSource::kAsh, + AcceleratorAction::kToggleMirrorMode, shift_only_accelerator, &result); EXPECT_EQ(mojom::AcceleratorConfigResult::kShiftOnlyNotAllowed, result->result); @@ -1350,7 +1397,8 @@ ui::EF_CONTROL_DOWN); ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) - .AddAccelerator(mojom::AcceleratorSource::kAsh, TOGGLE_MIRROR_MODE, + .AddAccelerator(mojom::AcceleratorSource::kAsh, + AcceleratorAction::kToggleMirrorMode, top_row_accelerator, &result); EXPECT_EQ(mojom::AcceleratorConfigResult::kKeyNotAllowed, result->result); } @@ -1358,7 +1406,7 @@ TEST_F(AcceleratorConfigurationProviderTest, ReservedKeysNotAllowed) { const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + kToggleMirrorMode}, }; AshAcceleratorConfiguration* config = @@ -1371,7 +1419,7 @@ const ui::Accelerator power_accelerator(ui::VKEY_POWER, ui::EF_COMMAND_DOWN); ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) - .AddAccelerator(mojom::AcceleratorSource::kAsh, TOGGLE_MIRROR_MODE, + .AddAccelerator(mojom::AcceleratorSource::kAsh, kToggleMirrorMode, power_accelerator, &result); EXPECT_EQ(mojom::AcceleratorConfigResult::kKeyNotAllowed, result->result); @@ -1379,7 +1427,7 @@ const ui::Accelerator sleep_accelerator(ui::VKEY_SLEEP, ui::EF_COMMAND_DOWN); ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) - .AddAccelerator(mojom::AcceleratorSource::kAsh, TOGGLE_MIRROR_MODE, + .AddAccelerator(mojom::AcceleratorSource::kAsh, kToggleMirrorMode, sleep_accelerator, &result); EXPECT_EQ(mojom::AcceleratorConfigResult::kKeyNotAllowed, result->result); @@ -1387,7 +1435,7 @@ const ui::Accelerator lock_accelerator(ui::VKEY_F13, ui::EF_COMMAND_DOWN); ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) - .AddAccelerator(mojom::AcceleratorSource::kAsh, TOGGLE_MIRROR_MODE, + .AddAccelerator(mojom::AcceleratorSource::kAsh, kToggleMirrorMode, lock_accelerator, &result); EXPECT_EQ(mojom::AcceleratorConfigResult::kKeyNotAllowed, result->result); } @@ -1396,7 +1444,7 @@ // Initialize default accelerators. const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, }; AshAcceleratorConfiguration* config = @@ -1414,8 +1462,9 @@ AcceleratorResultDataPtr result; ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) - .AddAccelerator(mojom::AcceleratorSource::kAsh, TOGGLE_MIRROR_MODE, - accelerator, &result); + .AddAccelerator(mojom::AcceleratorSource::kAsh, + AcceleratorAction::kToggleMirrorMode, accelerator, + &result); EXPECT_EQ(mojom::AcceleratorConfigResult::kConflict, result->result); EXPECT_EQ(l10n_util::GetStringUTF16( IDS_BROWSER_ACCELERATOR_DESCRIPTION_SHOW_HISTORY), @@ -1429,7 +1478,7 @@ // Initialize default accelerators. const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, }; AshAcceleratorConfiguration* config = @@ -1448,16 +1497,17 @@ AcceleratorResultDataPtr result; ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) - .AddAccelerator(mojom::AcceleratorSource::kAsh, TOGGLE_MIRROR_MODE, + .AddAccelerator(mojom::AcceleratorSource::kAsh, + AcceleratorAction::kToggleMirrorMode, good_accelerator, &result); EXPECT_EQ(mojom::AcceleratorConfigResult::kSuccess, result->result); const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, {/*trigger_on_press=*/true, ui::VKEY_M, ui::EF_COMMAND_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, }; AcceleratorConfigurationProvider::AcceleratorConfigurationMap actual_config = observer.config(); @@ -1469,15 +1519,17 @@ // Initialize default accelerators. const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, - {/*trigger_on_press=*/true, ui::VKEY_M, ui::EF_COMMAND_DOWN, OPEN_CROSH}, + AcceleratorAction::kToggleMirrorMode}, + {/*trigger_on_press=*/true, ui::VKEY_M, ui::EF_COMMAND_DOWN, + AcceleratorAction::kOpenCrosh}, }; AshAcceleratorConfiguration* config = Shell::Get()->ash_accelerator_configuration(); config->Initialize(test_data); SetLayoutDetailsMap( - {{OPEN_CROSH, IDS_ASH_ACCELERATOR_DESCRIPTION_OPEN_CROSH, + {{AcceleratorAction::kOpenCrosh, + IDS_ASH_ACCELERATOR_DESCRIPTION_OPEN_CROSH, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kGeneralControls, /*locked=*/true, mojom::AcceleratorLayoutStyle::kDefault, @@ -1495,7 +1547,8 @@ AcceleratorResultDataPtr result; ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) - .AddAccelerator(mojom::AcceleratorSource::kAsh, TOGGLE_MIRROR_MODE, + .AddAccelerator(mojom::AcceleratorSource::kAsh, + AcceleratorAction::kToggleMirrorMode, conflict_accelerator, &result); EXPECT_EQ(mojom::AcceleratorConfigResult::kActionLocked, result->result); @@ -1511,8 +1564,9 @@ // Initialize default accelerators. const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, - {/*trigger_on_press=*/true, ui::VKEY_M, ui::EF_COMMAND_DOWN, OPEN_CROSH}, + AcceleratorAction::kToggleMirrorMode}, + {/*trigger_on_press=*/true, ui::VKEY_M, ui::EF_COMMAND_DOWN, + AcceleratorAction::kOpenCrosh}, }; AshAcceleratorConfiguration* config = @@ -1525,7 +1579,8 @@ AcceleratorResultDataPtr result; ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) - .AddAccelerator(mojom::AcceleratorSource::kAsh, TOGGLE_MIRROR_MODE, + .AddAccelerator(mojom::AcceleratorSource::kAsh, + AcceleratorAction::kToggleMirrorMode, conflict_accelerator, &result); EXPECT_EQ(mojom::AcceleratorConfigResult::kConflictCanOverride, @@ -1548,7 +1603,8 @@ // Press the same accelerator, expect the same error. ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) - .AddAccelerator(mojom::AcceleratorSource::kAsh, TOGGLE_MIRROR_MODE, + .AddAccelerator(mojom::AcceleratorSource::kAsh, + AcceleratorAction::kToggleMirrorMode, conflict_accelerator, &result); EXPECT_EQ(mojom::AcceleratorConfigResult::kConflictCanOverride, @@ -1568,8 +1624,9 @@ // Initialize default accelerators. const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, - {/*trigger_on_press=*/true, ui::VKEY_M, ui::EF_COMMAND_DOWN, OPEN_CROSH}, + AcceleratorAction::kToggleMirrorMode}, + {/*trigger_on_press=*/true, ui::VKEY_M, ui::EF_COMMAND_DOWN, + AcceleratorAction::kOpenCrosh}, }; AshAcceleratorConfiguration* config = @@ -1588,7 +1645,8 @@ AcceleratorResultDataPtr result; ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) - .AddAccelerator(mojom::AcceleratorSource::kAsh, TOGGLE_MIRROR_MODE, + .AddAccelerator(mojom::AcceleratorSource::kAsh, + AcceleratorAction::kToggleMirrorMode, conflict_accelerator, &result); EXPECT_EQ(mojom::AcceleratorConfigResult::kConflictCanOverride, @@ -1605,7 +1663,8 @@ // Now override the accelerator. ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) - .AddAccelerator(mojom::AcceleratorSource::kAsh, TOGGLE_MIRROR_MODE, + .AddAccelerator(mojom::AcceleratorSource::kAsh, + AcceleratorAction::kToggleMirrorMode, conflict_accelerator, &result); EXPECT_EQ(mojom::AcceleratorConfigResult::kSuccess, result->result); @@ -1613,9 +1672,9 @@ // Since this is an overridable accelerator, nothing should change at first. const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, {/*trigger_on_press=*/true, ui::VKEY_M, ui::EF_COMMAND_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, }; actual_config = observer.config(); @@ -1630,7 +1689,7 @@ // Initialize default accelerators. const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, }; AshAcceleratorConfiguration* config = @@ -1645,14 +1704,15 @@ ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) .ReplaceAccelerator(mojom::AcceleratorSource::kBrowser, - TOGGLE_MIRROR_MODE, old_accelerator, - new_accelerator, &result); + AcceleratorAction::kToggleMirrorMode, + old_accelerator, new_accelerator, &result); EXPECT_EQ(mojom::AcceleratorConfigResult::kActionLocked, result->result); - // TOGGLE_CALENDAR does not exist. + // AcceleratorAction::kToggleCalendar does not exist. ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) - .ReplaceAccelerator(mojom::AcceleratorSource::kAsh, TOGGLE_CALENDAR, + .ReplaceAccelerator(mojom::AcceleratorSource::kAsh, + AcceleratorAction::kToggleCalendar, old_accelerator, new_accelerator, &result); EXPECT_EQ(mojom::AcceleratorConfigResult::kNotFound, result->result); } @@ -1664,8 +1724,9 @@ // Initialize default accelerators. const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, - {/*trigger_on_press=*/true, ui::VKEY_M, ui::EF_COMMAND_DOWN, OPEN_CROSH}, + AcceleratorAction::kToggleMirrorMode}, + {/*trigger_on_press=*/true, ui::VKEY_M, ui::EF_COMMAND_DOWN, + AcceleratorAction::kOpenCrosh}, }; AshAcceleratorConfiguration* config = @@ -1684,7 +1745,8 @@ AcceleratorResultDataPtr result; ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) - .AddAccelerator(mojom::AcceleratorSource::kAsh, TOGGLE_MIRROR_MODE, + .AddAccelerator(mojom::AcceleratorSource::kAsh, + AcceleratorAction::kToggleMirrorMode, conflict_accelerator, &result); EXPECT_EQ(mojom::AcceleratorConfigResult::kConflictCanOverride, @@ -1702,17 +1764,19 @@ const ui::Accelerator good_accelerator(ui::VKEY_K, ui::EF_COMMAND_DOWN); ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) - .AddAccelerator(mojom::AcceleratorSource::kAsh, TOGGLE_MIRROR_MODE, + .AddAccelerator(mojom::AcceleratorSource::kAsh, + AcceleratorAction::kToggleMirrorMode, good_accelerator, &result); EXPECT_EQ(mojom::AcceleratorConfigResult::kSuccess, result->result); const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, {/*trigger_on_press=*/true, ui::VKEY_K, ui::EF_COMMAND_DOWN, - TOGGLE_MIRROR_MODE}, - {/*trigger_on_press=*/true, ui::VKEY_M, ui::EF_COMMAND_DOWN, OPEN_CROSH}, + AcceleratorAction::kToggleMirrorMode}, + {/*trigger_on_press=*/true, ui::VKEY_M, ui::EF_COMMAND_DOWN, + AcceleratorAction::kOpenCrosh}, }; actual_config = observer.config(); @@ -1743,7 +1807,7 @@ // Initialize default accelerators. const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, }; AshAcceleratorConfiguration* config = @@ -1757,17 +1821,17 @@ ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) .ReplaceAccelerator(mojom::AcceleratorSource::kAsh, - TOGGLE_MIRROR_MODE, old_accelerator, - new_accelerator, &result); + AcceleratorAction::kToggleMirrorMode, + old_accelerator, new_accelerator, &result); EXPECT_EQ(mojom::AcceleratorConfigResult::kSuccess, result->result); base::RunLoop().RunUntilIdle(); const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, {/*trigger_on_press=*/true, ui::VKEY_M, ui::EF_ALT_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, }; // Replacing a default will result in disabling the default and then adding @@ -1777,8 +1841,9 @@ ExpectMojomAcceleratorsEqual(mojom::AcceleratorSource::kAsh, updated_test_data, mojo::Clone(actual_config)); - std::vector<mojom::AcceleratorInfoPtr> actual_infos(mojo::Clone( - actual_config[mojom::AcceleratorSource::kAsh][TOGGLE_MIRROR_MODE])); + std::vector<mojom::AcceleratorInfoPtr> actual_infos( + mojo::Clone(actual_config[mojom::AcceleratorSource::kAsh] + [AcceleratorAction::kToggleMirrorMode])); EXPECT_EQ(2u, actual_infos.size()); // A disabled default accelerator should be marked as `kDisabledByUser`. EXPECT_EQ(mojom::AcceleratorState::kDisabledByUser, actual_infos[0]->state); @@ -1792,7 +1857,7 @@ // Initialize default accelerators. const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, }; AshAcceleratorConfiguration* config = @@ -1806,8 +1871,8 @@ ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) .ReplaceAccelerator(mojom::AcceleratorSource::kAsh, - TOGGLE_MIRROR_MODE, old_accelerator, - new_accelerator, &result); + AcceleratorAction::kToggleMirrorMode, + old_accelerator, new_accelerator, &result); EXPECT_EQ(mojom::AcceleratorConfigResult::kNotFound, result->result); } @@ -1818,7 +1883,7 @@ // Initialize default accelerators. const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, }; AshAcceleratorConfiguration* config = @@ -1830,15 +1895,16 @@ const ui::Accelerator accelerator(ui::VKEY_M, ui::EF_ALT_DOWN); ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) - .AddAccelerator(mojom::AcceleratorSource::kAsh, TOGGLE_MIRROR_MODE, - accelerator, &result); + .AddAccelerator(mojom::AcceleratorSource::kAsh, + AcceleratorAction::kToggleMirrorMode, accelerator, + &result); EXPECT_EQ(mojom::AcceleratorConfigResult::kSuccess, result->result); const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, {/*trigger_on_press=*/true, ui::VKEY_M, ui::EF_ALT_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, }; AcceleratorConfigurationProvider::AcceleratorConfigurationMap actual_config = @@ -1851,15 +1917,15 @@ ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) .ReplaceAccelerator(mojom::AcceleratorSource::kAsh, - TOGGLE_MIRROR_MODE, accelerator, new_accelerator, - &result); + AcceleratorAction::kToggleMirrorMode, accelerator, + new_accelerator, &result); EXPECT_EQ(mojom::AcceleratorConfigResult::kSuccess, result->result); const AcceleratorData updated_test_data2[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, {/*trigger_on_press=*/true, ui::VKEY_C, ui::EF_COMMAND_DOWN, - TOGGLE_MIRROR_MODE}, + AcceleratorAction::kToggleMirrorMode}, }; actual_config = observer.config(); @@ -1875,8 +1941,9 @@ // Initialize default accelerators. const AcceleratorData test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, - {/*trigger_on_press=*/true, ui::VKEY_D, ui::EF_ALT_DOWN, TOGGLE_CALENDAR}, + AcceleratorAction::kToggleMirrorMode}, + {/*trigger_on_press=*/true, ui::VKEY_D, ui::EF_ALT_DOWN, + AcceleratorAction::kToggleCalendar}, }; AshAcceleratorConfiguration* config = @@ -1884,16 +1951,18 @@ config->Initialize(test_data); base::RunLoop().RunUntilIdle(); - // Replace the default of `TOGGLE_CALENDAR` with that of the default of - // `TOGGLE_MIRROR_MODE`. This results in `TOGGLE_MIRROR_MODE` to have only the - // disabled default accelerator, `TOGGLE_CALENDAR` will also have disabled + // Replace the default of `AcceleratorAction::kToggleCalendar` with that of + // the default of `AcceleratorAction::kToggleMirrorMode`. This results in + // `AcceleratorAction::kToggleMirrorMode` to have only the disabled default + // accelerator, `AcceleratorAction::kToggleCalendar` will also have disabled // default accelerator but also a new accelerator added. AcceleratorResultDataPtr result; const ui::Accelerator old_accelerator(ui::VKEY_D, ui::EF_ALT_DOWN); const ui::Accelerator new_accelerator(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN); ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) - .ReplaceAccelerator(mojom::AcceleratorSource::kAsh, TOGGLE_CALENDAR, + .ReplaceAccelerator(mojom::AcceleratorSource::kAsh, + AcceleratorAction::kToggleCalendar, old_accelerator, new_accelerator, &result); // Overridable accelerator, but will need to re-call `ReplaceAccelerator` to // confirm the override. @@ -1905,7 +1974,8 @@ ash::shortcut_customization::mojom:: AcceleratorConfigurationProviderAsyncWaiter(provider_.get()) - .ReplaceAccelerator(mojom::AcceleratorSource::kAsh, TOGGLE_CALENDAR, + .ReplaceAccelerator(mojom::AcceleratorSource::kAsh, + AcceleratorAction::kToggleCalendar, old_accelerator, new_accelerator, &result); EXPECT_EQ(mojom::AcceleratorConfigResult::kSuccess, result->result); @@ -1914,10 +1984,11 @@ const AcceleratorData updated_test_data[] = { {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_MIRROR_MODE}, - {/*trigger_on_press=*/true, ui::VKEY_D, ui::EF_ALT_DOWN, TOGGLE_CALENDAR}, + AcceleratorAction::kToggleMirrorMode}, + {/*trigger_on_press=*/true, ui::VKEY_D, ui::EF_ALT_DOWN, + AcceleratorAction::kToggleCalendar}, {/*trigger_on_press=*/true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, - TOGGLE_CALENDAR}, + AcceleratorAction::kToggleCalendar}, }; AcceleratorConfigurationProvider::AcceleratorConfigurationMap actual_config = @@ -1925,14 +1996,16 @@ ExpectMojomAcceleratorsEqual(mojom::AcceleratorSource::kAsh, updated_test_data, mojo::Clone(actual_config)); - std::vector<mojom::AcceleratorInfoPtr> actual_infos(mojo::Clone( - actual_config[mojom::AcceleratorSource::kAsh][TOGGLE_MIRROR_MODE])); + std::vector<mojom::AcceleratorInfoPtr> actual_infos( + mojo::Clone(actual_config[mojom::AcceleratorSource::kAsh] + [AcceleratorAction::kToggleMirrorMode])); EXPECT_EQ(1u, actual_infos.size()); EXPECT_EQ(mojom::AcceleratorState::kDisabledByUser, actual_infos[0]->state); EXPECT_EQ(mojom::AcceleratorType::kDefault, actual_infos[0]->type); - std::vector<mojom::AcceleratorInfoPtr> actual_infos2(mojo::Clone( - actual_config[mojom::AcceleratorSource::kAsh][TOGGLE_CALENDAR])); + std::vector<mojom::AcceleratorInfoPtr> actual_infos2( + mojo::Clone(actual_config[mojom::AcceleratorSource::kAsh] + [AcceleratorAction::kToggleCalendar])); EXPECT_EQ(2u, actual_infos2.size()); EXPECT_EQ(mojom::AcceleratorState::kDisabledByUser, actual_infos2[0]->state); EXPECT_EQ(mojom::AcceleratorType::kDefault, actual_infos2[0]->type);
diff --git a/ash/webui/shortcut_customization_ui/backend/accelerator_layout_table.h b/ash/webui/shortcut_customization_ui/backend/accelerator_layout_table.h index 99648ad..49a4c5a1 100644 --- a/ash/webui/shortcut_customization_ui/backend/accelerator_layout_table.h +++ b/ash/webui/shortcut_customization_ui/backend/accelerator_layout_table.h
@@ -236,92 +236,102 @@ // app. constexpr AcceleratorLayoutDetails kAcceleratorLayouts[] = { // General - {TOGGLE_APP_LIST, IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_APP_LIST, + {AcceleratorAction::kToggleAppList, + IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_APP_LIST, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kGeneralControls, /*locked=*/true, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {TOGGLE_OVERVIEW, IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_OVERVIEW, + {AcceleratorAction::kToggleOverview, + IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_OVERVIEW, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kGeneralControls, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {TOGGLE_SYSTEM_TRAY_BUBBLE, + {AcceleratorAction::kToggleSystemTrayBubble, IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_SYSTEM_TRAY_BUBBLE, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kGeneralControls, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {TOGGLE_CALENDAR, IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_CALENDAR, + {AcceleratorAction::kToggleCalendar, + IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_CALENDAR, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kGeneralControls, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {TOGGLE_MESSAGE_CENTER_BUBBLE, + {AcceleratorAction::kToggleMessageCenterBubble, IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_MESSAGE_CENTER_BUBBLE, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kGeneralControls, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {TAKE_SCREENSHOT, IDS_ASH_ACCELERATOR_DESCRIPTION_TAKE_SCREENSHOT, + {AcceleratorAction::kTakeScreenshot, + IDS_ASH_ACCELERATOR_DESCRIPTION_TAKE_SCREENSHOT, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kGeneralControls, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {TAKE_PARTIAL_SCREENSHOT, + {AcceleratorAction::kTakePartialScreenshot, IDS_ASH_ACCELERATOR_DESCRIPTION_TAKE_PARTIAL_SCREENSHOT, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kGeneralControls, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {TAKE_WINDOW_SCREENSHOT, + {AcceleratorAction::kTakeWindowScreenshot, IDS_ASH_ACCELERATOR_DESCRIPTION_TAKE_WINDOW_SCREENSHOT, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kGeneralControls, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {LOCK_SCREEN, IDS_ASH_ACCELERATOR_DESCRIPTION_LOCK_SCREEN, + {AcceleratorAction::kLockScreen, + IDS_ASH_ACCELERATOR_DESCRIPTION_LOCK_SCREEN, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kGeneralControls, /*locked=*/true, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {SUSPEND, IDS_ASH_ACCELERATOR_DESCRIPTION_SUSPEND, + {AcceleratorAction::kSuspend, IDS_ASH_ACCELERATOR_DESCRIPTION_SUSPEND, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kGeneralControls, /*locked=*/true, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {EXIT, IDS_ASH_ACCELERATOR_DESCRIPTION_EXIT, + {AcceleratorAction::kExit, IDS_ASH_ACCELERATOR_DESCRIPTION_EXIT, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kGeneralControls, /*locked=*/true, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {SWITCH_TO_NEXT_USER, IDS_ASH_ACCELERATOR_DESCRIPTION_SWITCH_TO_NEXT_USER, + {AcceleratorAction::kSwitchToNextUser, + IDS_ASH_ACCELERATOR_DESCRIPTION_SWITCH_TO_NEXT_USER, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kGeneralControls, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {SWITCH_TO_PREVIOUS_USER, + {AcceleratorAction::kSwitchToPreviousUser, IDS_ASH_ACCELERATOR_DESCRIPTION_SWITCH_TO_PREVIOUS_USER, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kGeneralControls, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {FOCUS_CAMERA_PREVIEW, IDS_ASH_ACCELERATOR_DESCRIPTION_FOCUS_CAMERA_PREVIEW, + {AcceleratorAction::kFocusCameraPreview, + IDS_ASH_ACCELERATOR_DESCRIPTION_FOCUS_CAMERA_PREVIEW, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kGeneralControls, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {TOGGLE_DICTATION, IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_DICTATION, + {AcceleratorAction::kToggleDictation, + IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_DICTATION, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kGeneralControls, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {START_ASSISTANT, IDS_ASH_ACCELERATOR_DESCRIPTION_START_ASSISTANT, + {AcceleratorAction::kStartAssistant, + IDS_ASH_ACCELERATOR_DESCRIPTION_START_ASSISTANT, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kGeneralControls, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {OPEN_FILE_MANAGER, IDS_ASH_ACCELERATOR_DESCRIPTION_OPEN_FILE_MANAGER, + {AcceleratorAction::kOpenFileManager, + IDS_ASH_ACCELERATOR_DESCRIPTION_OPEN_FILE_MANAGER, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kApps, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, @@ -335,23 +345,28 @@ mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kApps, /*locked=*/true, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAmbient}, - {SHOW_SHORTCUT_VIEWER, IDS_ASH_ACCELERATOR_DESCRIPTION_SHOW_SHORTCUT_VIEWER, + {AcceleratorAction::kShowShortcutViewer, + IDS_ASH_ACCELERATOR_DESCRIPTION_SHOW_SHORTCUT_VIEWER, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kApps, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {OPEN_CALCULATOR, IDS_ASH_ACCELERATOR_DESCRIPTION_OPEN_CALCULATOR, + {AcceleratorAction::kOpenCalculator, + IDS_ASH_ACCELERATOR_DESCRIPTION_OPEN_CALCULATOR, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kApps, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {OPEN_DIAGNOSTICS, IDS_ASH_ACCELERATOR_DESCRIPTION_OPEN_DIAGNOSTICS, + {AcceleratorAction::kOpenDiagnostics, + IDS_ASH_ACCELERATOR_DESCRIPTION_OPEN_DIAGNOSTICS, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kApps, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {OPEN_GET_HELP, IDS_ASH_ACCELERATOR_DESCRIPTION_OPEN_GET_HELP, + {AcceleratorAction::kOpenGetHelp, + IDS_ASH_ACCELERATOR_DESCRIPTION_OPEN_GET_HELP, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kApps, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {OPEN_FEEDBACK_PAGE, IDS_ASH_ACCELERATOR_DESCRIPTION_OPEN_FEEDBACK_PAGE, + {AcceleratorAction::kOpenFeedbackPage, + IDS_ASH_ACCELERATOR_DESCRIPTION_OPEN_FEEDBACK_PAGE, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kApps, /*locked=*/true, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, @@ -360,104 +375,114 @@ mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kApps, /*locked=*/true, mojom::AcceleratorLayoutStyle::kText, mojom::AcceleratorSource::kAmbient}, - {LAUNCH_LAST_APP, IDS_ASH_ACCELERATOR_DESCRIPTION_LAUNCH_LAST_APP, + {AcceleratorAction::kLaunchLastApp, + IDS_ASH_ACCELERATOR_DESCRIPTION_LAUNCH_LAST_APP, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kApps, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {UNPIN, IDS_ASH_ACCELERATOR_DESCRIPTION_UNPIN, + {AcceleratorAction::kUnpin, IDS_ASH_ACCELERATOR_DESCRIPTION_UNPIN, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kApps, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {TOGGLE_RESIZE_LOCK_MENU, + {AcceleratorAction::kToggleResizeLockMenu, IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_RESIZE_LOCK_MENU, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kApps, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {SHOW_TASK_MANAGER, IDS_ASH_ACCELERATOR_DESCRIPTION_SHOW_TASK_MANAGER, + {AcceleratorAction::kShowTaskManager, + IDS_ASH_ACCELERATOR_DESCRIPTION_SHOW_TASK_MANAGER, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kApps, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {OPEN_CROSH, IDS_ASH_ACCELERATOR_DESCRIPTION_OPEN_CROSH, + {AcceleratorAction::kOpenCrosh, IDS_ASH_ACCELERATOR_DESCRIPTION_OPEN_CROSH, mojom::AcceleratorCategory::kGeneral, mojom::AcceleratorSubcategory::kApps, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, // Device - {VOLUME_UP, IDS_ASH_ACCELERATOR_DESCRIPTION_VOLUME_UP, + {AcceleratorAction::kVolumeUp, IDS_ASH_ACCELERATOR_DESCRIPTION_VOLUME_UP, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kMedia, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {VOLUME_DOWN, IDS_ASH_ACCELERATOR_DESCRIPTION_VOLUME_DOWN, + {AcceleratorAction::kVolumeDown, + IDS_ASH_ACCELERATOR_DESCRIPTION_VOLUME_DOWN, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kMedia, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {VOLUME_MUTE, IDS_ASH_ACCELERATOR_DESCRIPTION_VOLUME_MUTE, + {AcceleratorAction::kVolumeMute, + IDS_ASH_ACCELERATOR_DESCRIPTION_VOLUME_MUTE, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kMedia, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {MICROPHONE_MUTE_TOGGLE, + {AcceleratorAction::kMicrophoneMuteToggle, IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_MICROPHONE_MUTE, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kMedia, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {MEDIA_PLAY, IDS_ASH_ACCELERATOR_DESCRIPTION_PLAY_MEDIA, + {AcceleratorAction::kMediaPlay, IDS_ASH_ACCELERATOR_DESCRIPTION_PLAY_MEDIA, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kMedia, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {MEDIA_PAUSE, IDS_ASH_ACCELERATOR_DESCRIPTION_PAUSE_MEDIA, + {AcceleratorAction::kMediaPause, + IDS_ASH_ACCELERATOR_DESCRIPTION_PAUSE_MEDIA, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kMedia, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {MEDIA_PLAY_PAUSE, IDS_ASH_ACCELERATOR_DESCRIPTION_PLAY_PAUSE_MEDIA, + {AcceleratorAction::kMediaPlayPause, + IDS_ASH_ACCELERATOR_DESCRIPTION_PLAY_PAUSE_MEDIA, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kMedia, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {MEDIA_NEXT_TRACK, IDS_ASH_ACCELERATOR_DESCRIPTION_NEXT_TRACK, + {AcceleratorAction::kMediaNextTrack, + IDS_ASH_ACCELERATOR_DESCRIPTION_NEXT_TRACK, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kMedia, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {MEDIA_PREV_TRACK, IDS_ASH_ACCELERATOR_DESCRIPTION_PREVIOUS_TRACK, + {AcceleratorAction::kMediaPrevTrack, + IDS_ASH_ACCELERATOR_DESCRIPTION_PREVIOUS_TRACK, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kMedia, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {MEDIA_FAST_FORWARD, IDS_ASH_ACCELERATOR_DESCRIPTION_FAST_FORWARD_MEDIA, + {AcceleratorAction::kMediaFastForward, + IDS_ASH_ACCELERATOR_DESCRIPTION_FAST_FORWARD_MEDIA, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kMedia, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {FOCUS_PIP, IDS_ASH_ACCELERATOR_DESCRIPTION_FOCUS_PIP, + {AcceleratorAction::kFocusPip, IDS_ASH_ACCELERATOR_DESCRIPTION_FOCUS_PIP, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kMedia, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {KEYBOARD_BACKLIGHT_TOGGLE, + {AcceleratorAction::kKeyboardBacklightToggle, IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_KEYBOARD_BACKLIGHT, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kInputs, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {KEYBOARD_BRIGHTNESS_UP, + {AcceleratorAction::kKeyboardBrightnessUp, IDS_ASH_ACCELERATOR_DESCRIPTION_KEYBOARD_BRIGHTNESS_UP, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kInputs, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {KEYBOARD_BRIGHTNESS_DOWN, + {AcceleratorAction::kKeyboardBrightnessDown, IDS_ASH_ACCELERATOR_DESCRIPTION_KEYBOARD_BRIGHTNESS_DOWN, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kInputs, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {TOGGLE_IME_MENU_BUBBLE, + {AcceleratorAction::kToggleImeMenuBubble, IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_IME_MENU_BUBBLE, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kInputs, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {SWITCH_TO_NEXT_IME, IDS_ASH_ACCELERATOR_DESCRIPTION_SWITCH_TO_NEXT_IME, + {AcceleratorAction::kSwitchToNextIme, + IDS_ASH_ACCELERATOR_DESCRIPTION_SWITCH_TO_NEXT_IME, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kInputs, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {SWITCH_TO_LAST_USED_IME, + {AcceleratorAction::kSwitchToLastUsedIme, IDS_ASH_ACCELERATOR_DESCRIPTION_SWITCH_TO_LAST_USED_IME, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kInputs, @@ -469,53 +494,61 @@ mojom::AcceleratorSubcategory::kInputs, /*locked=*/true, mojom::AcceleratorLayoutStyle::kText, mojom::AcceleratorSource::kAmbient}, - {SHOW_STYLUS_TOOLS, IDS_ASH_ACCELERATOR_DESCRIPTION_SHOW_STYLUS_TOOLS, + {AcceleratorAction::kShowStylusTools, + IDS_ASH_ACCELERATOR_DESCRIPTION_SHOW_STYLUS_TOOLS, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kInputs, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {BRIGHTNESS_UP, IDS_ASH_ACCELERATOR_DESCRIPTION_BRIGHTNESS_UP, + {AcceleratorAction::kBrightnessUp, + IDS_ASH_ACCELERATOR_DESCRIPTION_BRIGHTNESS_UP, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kDisplay, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {BRIGHTNESS_DOWN, IDS_ASH_ACCELERATOR_DESCRIPTION_BRIGHTNESS_DOWN, + {AcceleratorAction::kBrightnessDown, + IDS_ASH_ACCELERATOR_DESCRIPTION_BRIGHTNESS_DOWN, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kDisplay, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {SCALE_UI_UP, IDS_ASH_ACCELERATOR_DESCRIPTION_SCALE_UI_UP, + {AcceleratorAction::kScaleUiUp, IDS_ASH_ACCELERATOR_DESCRIPTION_SCALE_UI_UP, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kDisplay, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {SCALE_UI_DOWN, IDS_ASH_ACCELERATOR_DESCRIPTION_SCALE_UI_DOWN, + {AcceleratorAction::kScaleUiDown, + IDS_ASH_ACCELERATOR_DESCRIPTION_SCALE_UI_DOWN, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kDisplay, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {SCALE_UI_RESET, IDS_ASH_ACCELERATOR_DESCRIPTION_SCALE_UI_RESET, + {AcceleratorAction::kScaleUiReset, + IDS_ASH_ACCELERATOR_DESCRIPTION_SCALE_UI_RESET, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kDisplay, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {PRIVACY_SCREEN_TOGGLE, + {AcceleratorAction::kPrivacyScreenToggle, IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_PRIVACY_SCREEN, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kDisplay, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {TOGGLE_MIRROR_MODE, IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_MIRROR_MODE, + {AcceleratorAction::kToggleMirrorMode, + IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_MIRROR_MODE, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kDisplay, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {SWAP_PRIMARY_DISPLAY, IDS_ASH_ACCELERATOR_DESCRIPTION_SWAP_PRIMARY_DISPLAY, + {AcceleratorAction::kSwapPrimaryDisplay, + IDS_ASH_ACCELERATOR_DESCRIPTION_SWAP_PRIMARY_DISPLAY, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kDisplay, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {ROTATE_SCREEN, IDS_ASH_ACCELERATOR_DESCRIPTION_ROTATE_SCREEN, + {AcceleratorAction::kRotateScreen, + IDS_ASH_ACCELERATOR_DESCRIPTION_ROTATE_SCREEN, mojom::AcceleratorCategory::kDevice, mojom::AcceleratorSubcategory::kDisplay, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, @@ -594,7 +627,8 @@ mojom::AcceleratorSubcategory::kBrowserNavigation, /*locked=*/true, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAmbient}, - {FOCUS_PREVIOUS_PANE, IDS_ASH_ACCELERATOR_DESCRIPTION_FOCUS_PREVIOUS_PANE, + {AcceleratorAction::kFocusPreviousPane, + IDS_ASH_ACCELERATOR_DESCRIPTION_FOCUS_PREVIOUS_PANE, mojom::AcceleratorCategory::kBrowser, mojom::AcceleratorSubcategory::kBrowserNavigation, /*locked=*/true, mojom::AcceleratorLayoutStyle::kDefault, @@ -869,12 +903,14 @@ mojom::AcceleratorSubcategory::kTextNavigation, /*locked=*/true, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAmbient}, - {TOGGLE_CAPS_LOCK, IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_CAPS_LOCK, + {AcceleratorAction::kToggleCapsLock, + IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_CAPS_LOCK, mojom::AcceleratorCategory::kText, mojom::AcceleratorSubcategory::kTextEditing, /*locked=*/true, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {SHOW_EMOJI_PICKER, IDS_ASH_ACCELERATOR_DESCRIPTION_SHOW_EMOJI_PICKER, + {AcceleratorAction::kShowEmojiPicker, + IDS_ASH_ACCELERATOR_DESCRIPTION_SHOW_EMOJI_PICKER, mojom::AcceleratorCategory::kText, mojom::AcceleratorSubcategory::kTextEditing, /*locked=*/true, mojom::AcceleratorLayoutStyle::kDefault, @@ -902,7 +938,7 @@ mojom::AcceleratorSubcategory::kTextEditing, /*locked=*/true, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAmbient}, - {TOGGLE_CLIPBOARD_HISTORY, + {AcceleratorAction::kToggleClipboardHistory, IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_CLIPBOARD_HISTORY, mojom::AcceleratorCategory::kText, mojom::AcceleratorSubcategory::kTextEditing, @@ -964,7 +1000,8 @@ mojom::AcceleratorSource::kAmbient}, // Windows and Desks - {CYCLE_FORWARD_MRU, IDS_ASH_ACCELERATOR_DESCRIPTION_CYCLE_FORWARD_MRU, + {AcceleratorAction::kCycleForwardMru, + IDS_ASH_ACCELERATOR_DESCRIPTION_CYCLE_FORWARD_MRU, mojom::AcceleratorCategory::kWindowsAndDesks, mojom::AcceleratorSubcategory::kWindows, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, @@ -975,17 +1012,20 @@ mojom::AcceleratorSubcategory::kWindows, /*locked=*/true, mojom::AcceleratorLayoutStyle::kText, mojom::AcceleratorSource::kAmbient}, - {TOGGLE_MAXIMIZED, IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_MAXIMIZED, + {AcceleratorAction::kToggleMaximized, + IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_MAXIMIZED, mojom::AcceleratorCategory::kWindowsAndDesks, mojom::AcceleratorSubcategory::kWindows, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {WINDOW_MINIMIZE, IDS_ASH_ACCELERATOR_DESCRIPTION_WINDOW_MINIMIZE, + {AcceleratorAction::kWindowMinimize, + IDS_ASH_ACCELERATOR_DESCRIPTION_WINDOW_MINIMIZE, mojom::AcceleratorCategory::kWindowsAndDesks, mojom::AcceleratorSubcategory::kWindows, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {TOGGLE_FULLSCREEN, IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_FULLSCREEN, + {AcceleratorAction::kToggleFullscreen, + IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_FULLSCREEN, mojom::AcceleratorCategory::kWindowsAndDesks, mojom::AcceleratorSubcategory::kWindows, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, @@ -996,65 +1036,67 @@ mojom::AcceleratorSubcategory::kWindows, /*locked=*/true, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAmbient}, - {WINDOW_CYCLE_SNAP_LEFT, + {AcceleratorAction::kWindowCycleSnapLeft, IDS_ASH_ACCELERATOR_DESCRIPTION_WINDOW_CYCLE_SNAP_LEFT, mojom::AcceleratorCategory::kWindowsAndDesks, mojom::AcceleratorSubcategory::kWindows, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {WINDOW_CYCLE_SNAP_RIGHT, + {AcceleratorAction::kWindowCycleSnapRight, IDS_ASH_ACCELERATOR_DESCRIPTION_WINDOW_CYCLE_SNAP_RIGHT, mojom::AcceleratorCategory::kWindowsAndDesks, mojom::AcceleratorSubcategory::kWindows, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {MOVE_ACTIVE_WINDOW_BETWEEN_DISPLAYS, + {AcceleratorAction::kMoveActiveWindowBetweenDisplays, IDS_ASH_ACCELERATOR_DESCRIPTION_MOVE_ACTIVE_WINDOW_BETWEEN_DISPLAYS, mojom::AcceleratorCategory::kWindowsAndDesks, mojom::AcceleratorSubcategory::kWindows, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {MINIMIZE_TOP_WINDOW_ON_BACK, + {AcceleratorAction::kMinimizeTopWindowOnBack, IDS_ASH_ACCELERATOR_DESCRIPTION_MINIMIZE_TOP_WINDOW_ON_BACK, mojom::AcceleratorCategory::kWindowsAndDesks, mojom::AcceleratorSubcategory::kWindows, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {TOGGLE_FLOATING, IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_FLOATING, + {AcceleratorAction::kToggleFloating, + IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_FLOATING, mojom::AcceleratorCategory::kWindowsAndDesks, mojom::AcceleratorSubcategory::kWindows, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {DESKS_NEW_DESK, IDS_ASH_ACCELERATOR_DESCRIPTION_DESKS_NEW_DESK, + {AcceleratorAction::kDesksNewDesk, + IDS_ASH_ACCELERATOR_DESCRIPTION_DESKS_NEW_DESK, mojom::AcceleratorCategory::kWindowsAndDesks, mojom::AcceleratorSubcategory::kDesks, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {DESKS_REMOVE_CURRENT_DESK, + {AcceleratorAction::kDesksRemoveCurrentDesk, IDS_ASH_ACCELERATOR_DESCRIPTION_DESKS_REMOVE_CURRENT_DESK, mojom::AcceleratorCategory::kWindowsAndDesks, mojom::AcceleratorSubcategory::kDesks, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {DESKS_ACTIVATE_DESK_LEFT, + {AcceleratorAction::kDesksActivateDeskLeft, IDS_ASH_ACCELERATOR_DESCRIPTION_DESKS_ACTIVATE_DESK_LEFT, mojom::AcceleratorCategory::kWindowsAndDesks, mojom::AcceleratorSubcategory::kDesks, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {DESKS_ACTIVATE_DESK_RIGHT, + {AcceleratorAction::kDesksActivateDeskRight, IDS_ASH_ACCELERATOR_DESCRIPTION_DESKS_ACTIVATE_DESK_RIGHT, mojom::AcceleratorCategory::kWindowsAndDesks, mojom::AcceleratorSubcategory::kDesks, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {DESKS_MOVE_ACTIVE_ITEM_LEFT, + {AcceleratorAction::kDesksMoveActiveItemLeft, IDS_ASH_ACCELERATOR_DESCRIPTION_DESKS_MOVE_ACTIVE_ITEM_LEFT, mojom::AcceleratorCategory::kWindowsAndDesks, mojom::AcceleratorSubcategory::kDesks, /*locked=*/false, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {DESKS_MOVE_ACTIVE_ITEM_RIGHT, + {AcceleratorAction::kDesksMoveActiveItemRight, IDS_ASH_ACCELERATOR_DESCRIPTION_DESKS_MOVE_ACTIVE_ITEM_RIGHT, mojom::AcceleratorCategory::kWindowsAndDesks, mojom::AcceleratorSubcategory::kDesks, @@ -1066,7 +1108,7 @@ mojom::AcceleratorSubcategory::kDesks, /*locked=*/true, mojom::AcceleratorLayoutStyle::kText, mojom::AcceleratorSource::kAmbient}, - {DESKS_TOGGLE_ASSIGN_TO_ALL_DESKS, + {AcceleratorAction::kDesksToggleAssignToAllDesks, IDS_ASH_ACCELERATOR_ACTIONDESKS_TOGGLE_ASSIGN_TO_ALL_DESKS, mojom::AcceleratorCategory::kWindowsAndDesks, mojom::AcceleratorSubcategory::kDesks, @@ -1074,35 +1116,38 @@ mojom::AcceleratorSource::kAsh}, // Accessibility - {TOGGLE_SPOKEN_FEEDBACK, + {AcceleratorAction::kToggleSpokenFeedback, IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_SPOKEN_FEEDBACK, mojom::AcceleratorCategory::kAccessibility, mojom::AcceleratorSubcategory::kChromeVox, /*locked=*/true, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {TOGGLE_HIGH_CONTRAST, IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_HIGH_CONTRAST, + {AcceleratorAction::kToggleHighContrast, + IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_HIGH_CONTRAST, mojom::AcceleratorCategory::kAccessibility, mojom::AcceleratorSubcategory::kVisibility, /*locked=*/true, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {TOGGLE_DOCKED_MAGNIFIER, + {AcceleratorAction::kToggleDockedMagnifier, IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_DOCKED_MAGNIFIER, mojom::AcceleratorCategory::kAccessibility, mojom::AcceleratorSubcategory::kVisibility, /*locked=*/true, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {TOGGLE_FULLSCREEN_MAGNIFIER, + {AcceleratorAction::kToggleFullscreenMagnifier, IDS_ASH_ACCELERATOR_DESCRIPTION_TOGGLE_FULLSCREEN_MAGNIFIER, mojom::AcceleratorCategory::kAccessibility, mojom::AcceleratorSubcategory::kVisibility, /*locked=*/true, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {MAGNIFIER_ZOOM_IN, IDS_ASH_ACCELERATOR_DESCRIPTION_MAGNIFIER_ZOOM_IN, + {AcceleratorAction::kMagnifierZoomIn, + IDS_ASH_ACCELERATOR_DESCRIPTION_MAGNIFIER_ZOOM_IN, mojom::AcceleratorCategory::kAccessibility, mojom::AcceleratorSubcategory::kVisibility, /*locked=*/true, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAsh}, - {MAGNIFIER_ZOOM_OUT, IDS_ASH_ACCELERATOR_DESCRIPTION_MAGNIFIER_ZOOM_OUT, + {AcceleratorAction::kMagnifierZoomOut, + IDS_ASH_ACCELERATOR_DESCRIPTION_MAGNIFIER_ZOOM_OUT, mojom::AcceleratorCategory::kAccessibility, mojom::AcceleratorSubcategory::kVisibility, /*locked=*/true, mojom::AcceleratorLayoutStyle::kDefault, @@ -1119,7 +1164,8 @@ mojom::AcceleratorSubcategory::kAccessibilityNavigation, /*locked=*/true, mojom::AcceleratorLayoutStyle::kDefault, mojom::AcceleratorSource::kAmbient}, - {FOCUS_SHELF, IDS_ASH_ACCELERATOR_DESCRIPTION_FOCUS_SHELF, + {AcceleratorAction::kFocusShelf, + IDS_ASH_ACCELERATOR_DESCRIPTION_FOCUS_SHELF, mojom::AcceleratorCategory::kAccessibility, mojom::AcceleratorSubcategory::kAccessibilityNavigation, /*locked=*/true, mojom::AcceleratorLayoutStyle::kDefault,
diff --git a/ash/webui/shortcut_customization_ui/resources/js/search/search_box.ts b/ash/webui/shortcut_customization_ui/resources/js/search/search_box.ts index 0d9caba2..1f95efa 100644 --- a/ash/webui/shortcut_customization_ui/resources/js/search/search_box.ts +++ b/ash/webui/shortcut_customization_ui/resources/js/search/search_box.ts
@@ -13,6 +13,7 @@ import {CrToolbarSearchFieldElement} from 'chrome://resources/cr_elements/cr_toolbar/cr_toolbar_search_field.js'; import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js'; import {assert} from 'chrome://resources/js/assert_ts.js'; +import {IronDropdownElement} from 'chrome://resources/polymer/v3_0/iron-dropdown/iron-dropdown.js'; import {IronListElement} from 'chrome://resources/polymer/v3_0/iron-list/iron-list.js'; import {PolymerElementProperties} from 'chrome://resources/polymer/v3_0/polymer/interfaces.js'; import {afterNextRender, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; @@ -143,9 +144,12 @@ override connectedCallback(): void { super.connectedCallback(); - this.searchInputElement = - strictQuery('#search', this.shadowRoot, CrToolbarSearchFieldElement) - .getSearchInput(); + const searchFieldElement = + strictQuery('#search', this.shadowRoot, CrToolbarSearchFieldElement); + searchFieldElement.addEventListener( + 'transitionend', this.onSearchFieldTransitionEnd.bind(this)); + + this.searchInputElement = searchFieldElement.getSearchInput(); // Focus the search bar when the app opens. afterNextRender(this, () => { @@ -256,6 +260,18 @@ } } + private onSearchFieldTransitionEnd(): void { + // Cast to IronDropdownElement since the interface cannot be used as a + // value. + const ironDropdown = + (strictQuery('iron-dropdown', this.shadowRoot, HTMLElement) as + IronDropdownElement); + + // Resize the dropdown once the search bar has finishing resizing to avoid + // misalignment when the window resizes. + ironDropdown.notifyResize(); + } + private onKeyDown(e: KeyboardEvent): void { const isSearchFocused = strictQuery('#search', this.shadowRoot, CrToolbarSearchFieldElement)
diff --git a/ash/wm/float/float_controller_unittest.cc b/ash/wm/float/float_controller_unittest.cc index 51a6e3c..10d0416 100644 --- a/ash/wm/float/float_controller_unittest.cc +++ b/ash/wm/float/float_controller_unittest.cc
@@ -319,7 +319,8 @@ Shell::Get()->accelerator_controller(); // Snap Left. - acc_controller->PerformActionIfEnabled(WINDOW_CYCLE_SNAP_LEFT, {}); + acc_controller->PerformActionIfEnabled( + AcceleratorAction::kWindowCycleSnapLeft, {}); ASSERT_EQ(chromeos::WindowStateType::kPrimarySnapped, window_state2->GetStateType()); PressAndReleaseKey(ui::VKEY_F, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN); @@ -332,7 +333,8 @@ window_state2->GetStateType()); // Snap Right. - acc_controller->PerformActionIfEnabled(WINDOW_CYCLE_SNAP_RIGHT, {}); + acc_controller->PerformActionIfEnabled( + AcceleratorAction::kWindowCycleSnapRight, {}); ASSERT_EQ(chromeos::WindowStateType::kSecondarySnapped, WindowState::Get(window2.get())->GetStateType()); PressAndReleaseKey(ui::VKEY_F, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN); @@ -833,7 +835,8 @@ EXPECT_FALSE(floated_window->IsVisible()); // Unpin the window. - Shell::Get()->accelerator_controller()->PerformActionIfEnabled(UNPIN, {}); + Shell::Get()->accelerator_controller()->PerformActionIfEnabled( + AcceleratorAction::kUnpin, {}); EXPECT_TRUE(floated_window->IsVisible()); // Trusted pin the window.
diff --git a/ash/wm/screen_pinning_controller_unittest.cc b/ash/wm/screen_pinning_controller_unittest.cc index d8c476f8..998ebc5 100644 --- a/ash/wm/screen_pinning_controller_unittest.cc +++ b/ash/wm/screen_pinning_controller_unittest.cc
@@ -172,9 +172,10 @@ window_util::PinWindow(w1, /* trusted */ true); EXPECT_TRUE(Shell::Get()->screen_pinning_controller()->IsPinned()); - Shell::Get()->accelerator_controller()->PerformActionIfEnabled(UNPIN, {}); - // The UNPIN accelerator key is disabled for trusted pinned and the window - // must be still pinned. + Shell::Get()->accelerator_controller()->PerformActionIfEnabled( + AcceleratorAction::kUnpin, {}); + // The AcceleratorAction::kUnpin accelerator key is disabled for trusted + // pinned and the window must be still pinned. EXPECT_TRUE(Shell::Get()->screen_pinning_controller()->IsPinned()); }
diff --git a/ash/wm/tablet_mode/tablet_mode_multitask_menu_event_handler_unittest.cc b/ash/wm/tablet_mode/tablet_mode_multitask_menu_event_handler_unittest.cc index f179e0b..ab4c2448 100644 --- a/ash/wm/tablet_mode/tablet_mode_multitask_menu_event_handler_unittest.cc +++ b/ash/wm/tablet_mode/tablet_mode_multitask_menu_event_handler_unittest.cc
@@ -775,7 +775,7 @@ ShowMultitaskMenu(*window); Shell::Get()->accelerator_controller()->PerformActionIfEnabled( - WINDOW_MINIMIZE, {}); + AcceleratorAction::kWindowMinimize, {}); ASSERT_TRUE(WindowState::Get(window.get())->IsMinimized()); EXPECT_FALSE(GetMultitaskMenu()); }
diff --git a/ash/wm/window_restore/window_restore_controller_unittest.cc b/ash/wm/window_restore/window_restore_controller_unittest.cc index d56b421..b515bd9 100644 --- a/ash/wm/window_restore/window_restore_controller_unittest.cc +++ b/ash/wm/window_restore/window_restore_controller_unittest.cc
@@ -389,7 +389,7 @@ window_state->Restore(); EXPECT_EQ(7, GetSaveWindowsCount(window.get())); - PerformAcceleratorAction(WINDOW_CYCLE_SNAP_LEFT, {}); + PerformAcceleratorAction(AcceleratorAction::kWindowCycleSnapLeft, {}); EXPECT_EQ(8, GetSaveWindowsCount(window.get())); } @@ -407,7 +407,7 @@ // Move the window to the desk on the right. Test that we save the window in // the database. PerformAcceleratorAction( - DESKS_MOVE_ACTIVE_ITEM_RIGHT, + AcceleratorAction::kDesksMoveActiveItemRight, {ui::VKEY_OEM_6, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN}); ASSERT_NE(previous_parent, window->parent()); EXPECT_EQ(1, GetSaveWindowsCount(window.get())); @@ -444,7 +444,8 @@ // Move the window to the next display. Test that we save the window in // the database. - PerformAcceleratorAction(MOVE_ACTIVE_WINDOW_BETWEEN_DISPLAYS, {}); + PerformAcceleratorAction(AcceleratorAction::kMoveActiveWindowBetweenDisplays, + {}); ASSERT_TRUE( gfx::Rect(801, 0, 800, 800).Contains(window->GetBoundsInScreen())); EXPECT_EQ(1, GetSaveWindowsCount(window.get()));
diff --git a/ash/wm/window_state_unittest.cc b/ash/wm/window_state_unittest.cc index 56c1069..24c3944 100644 --- a/ash/wm/window_state_unittest.cc +++ b/ash/wm/window_state_unittest.cc
@@ -1844,8 +1844,8 @@ window_state->Maximize(); // Use keyboard to snap a window. - AcceleratorController::Get()->PerformActionIfEnabled(WINDOW_CYCLE_SNAP_LEFT, - {}); + AcceleratorController::Get()->PerformActionIfEnabled( + AcceleratorAction::kWindowCycleSnapLeft, {}); histograms.ExpectBucketCount(kWindowSnapActionSourceHistogram, WindowSnapActionSource::kKeyboardShortcutToSnap, 1); @@ -1884,8 +1884,8 @@ EXPECT_TRUE(Shell::Get()->tablet_mode_controller()->InTabletMode()); // Use keyboard to snap the window in tablet mode. - AcceleratorController::Get()->PerformActionIfEnabled(WINDOW_CYCLE_SNAP_LEFT, - {}); + AcceleratorController::Get()->PerformActionIfEnabled( + AcceleratorAction::kWindowCycleSnapLeft, {}); histograms.ExpectBucketCount(kWindowSnapActionSourceHistogram, WindowSnapActionSource::kKeyboardShortcutToSnap, 2);
diff --git a/ash/wm/wm_pixel_diff_test.cc b/ash/wm/wm_pixel_diff_test.cc index ce6530f..dbaaddd5 100644 --- a/ash/wm/wm_pixel_diff_test.cc +++ b/ash/wm/wm_pixel_diff_test.cc
@@ -68,7 +68,7 @@ EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "overview_and_desks_bar_basic", - /*revision_number=*/2, desk_widget, overview_widget1, overview_widget2, + /*revision_number=*/3, desk_widget, overview_widget1, overview_widget2, overview_widget3)); }
diff --git a/base/allocator/partition_allocator/thread_cache.cc b/base/allocator/partition_allocator/thread_cache.cc index d34578d..e5b2b86 100644 --- a/base/allocator/partition_allocator/thread_cache.cc +++ b/base/allocator/partition_allocator/thread_cache.cc
@@ -12,7 +12,6 @@ #include "base/allocator/partition_allocator/partition_alloc-inl.h" #include "base/allocator/partition_allocator/partition_alloc_base/component_export.h" -#include "base/allocator/partition_allocator/partition_alloc_base/cxx17_backports.h" #include "base/allocator/partition_allocator/partition_alloc_base/debug/debugging_buildflags.h" #include "base/allocator/partition_allocator/partition_alloc_base/immediate_crash.h" #include "base/allocator/partition_allocator/partition_alloc_buildflags.h" @@ -304,7 +303,7 @@ // of cached memory cannot change between calls (since we do not purge // background threads, but only ask them to purge their own cache at the next // allocation). - periodic_purge_next_interval_ = internal::base::clamp( + periodic_purge_next_interval_ = std::clamp( periodic_purge_next_interval_, kMinPurgeInterval, kMaxPurgeInterval); PurgeAll(); @@ -423,8 +422,8 @@ constexpr size_t kMinLimit = 1; // |PutInBucket()| is called on a full bucket, which should not overflow. constexpr size_t kMaxLimit = std::numeric_limits<uint8_t>::max() - 1; - global_limits_[index] = static_cast<uint8_t>( - internal::base::clamp(value, kMinLimit, kMaxLimit)); + global_limits_[index] = + static_cast<uint8_t>(std::clamp(value, kMinLimit, kMaxLimit)); PA_DCHECK(global_limits_[index] >= kMinLimit); PA_DCHECK(global_limits_[index] <= kMaxLimit); }
diff --git a/base/android/jni_generator/golden/HashedSampleForAnnotationProcessor_jni.golden b/base/android/jni_generator/golden/HashedSampleForAnnotationProcessor_jni.golden deleted file mode 100644 index ba6bebe..0000000 --- a/base/android/jni_generator/golden/HashedSampleForAnnotationProcessor_jni.golden +++ /dev/null
@@ -1,265 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - - -// This file is autogenerated by -// base/android/jni_generator/jni_generator.py -// For -// org/chromium/example/jni_generator/SampleForAnnotationProcessor - -#ifndef org_chromium_example_jni_generator_SampleForAnnotationProcessor_JNI -#define org_chromium_example_jni_generator_SampleForAnnotationProcessor_JNI - -#include <jni.h> - -#include "base/android/jni_generator/jni_generator_helper.h" - - -// Step 1: Forward declarations. - - -// Step 2: Constants (optional). - - -// Step 3: Method stubs. -static void JNI_SampleForAnnotationProcessor_Foo(JNIEnv* env); - -JNI_GENERATOR_EXPORT void Java_J_N_MygCV2jQ( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_Foo(env); -} - -static base::android::ScopedJavaLocalRef<jobject> JNI_SampleForAnnotationProcessor_Bar(JNIEnv* env, - const base::android::JavaParamRef<jobject>& sample); - -JNI_GENERATOR_EXPORT jobject Java_J_N_MHuqnmXT( - JNIEnv* env, - jclass jcaller, - jobject sample) { - return JNI_SampleForAnnotationProcessor_Bar(env, base::android::JavaParamRef<jobject>(env, - sample)).Release(); -} - -static base::android::ScopedJavaLocalRef<jstring> JNI_SampleForAnnotationProcessor_RevString(JNIEnv* - env, const base::android::JavaParamRef<jstring>& stringToReverse); - -JNI_GENERATOR_EXPORT jstring Java_J_N_MM5Xkwyy( - JNIEnv* env, - jclass jcaller, - jstring stringToReverse) { - return JNI_SampleForAnnotationProcessor_RevString(env, base::android::JavaParamRef<jstring>(env, - stringToReverse)).Release(); -} - -static base::android::ScopedJavaLocalRef<jobjectArray> - JNI_SampleForAnnotationProcessor_SendToNative(JNIEnv* env, const - base::android::JavaParamRef<jobjectArray>& strs); - -JNI_GENERATOR_EXPORT jobjectArray Java_J_N_MAC2QhR9( - JNIEnv* env, - jclass jcaller, - jobjectArray strs) { - return JNI_SampleForAnnotationProcessor_SendToNative(env, - base::android::JavaParamRef<jobjectArray>(env, strs)).Release(); -} - -static base::android::ScopedJavaLocalRef<jobjectArray> - JNI_SampleForAnnotationProcessor_SendSamplesToNative(JNIEnv* env, const - base::android::JavaParamRef<jobjectArray>& strs); - -JNI_GENERATOR_EXPORT jobjectArray Java_J_N_MGhRh4Nd( - JNIEnv* env, - jclass jcaller, - jobjectArray strs) { - return JNI_SampleForAnnotationProcessor_SendSamplesToNative(env, - base::android::JavaParamRef<jobjectArray>(env, strs)).Release(); -} - -static jboolean JNI_SampleForAnnotationProcessor_HasPhalange(JNIEnv* env); - -JNI_GENERATOR_EXPORT jboolean Java_J_N_MW0aEs4h( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_HasPhalange(env); -} - -static base::android::ScopedJavaLocalRef<jintArray> - JNI_SampleForAnnotationProcessor_TestAllPrimitives(JNIEnv* env, jint zint, - const base::android::JavaParamRef<jintArray>& ints, - jlong zlong, - const base::android::JavaParamRef<jlongArray>& longs, - jshort zshort, - const base::android::JavaParamRef<jshortArray>& shorts, - jchar zchar, - const base::android::JavaParamRef<jcharArray>& chars, - jbyte zbyte, - const base::android::JavaParamRef<jbyteArray>& bytes, - jdouble zdouble, - const base::android::JavaParamRef<jdoubleArray>& doubles, - jfloat zfloat, - const base::android::JavaParamRef<jfloatArray>& floats, - jboolean zbool, - const base::android::JavaParamRef<jbooleanArray>& bools); - -JNI_GENERATOR_EXPORT jintArray Java_J_N_MlVFI4RX( - JNIEnv* env, - jclass jcaller, - jint zint, - jintArray ints, - jlong zlong, - jlongArray longs, - jshort zshort, - jshortArray shorts, - jchar zchar, - jcharArray chars, - jbyte zbyte, - jbyteArray bytes, - jdouble zdouble, - jdoubleArray doubles, - jfloat zfloat, - jfloatArray floats, - jboolean zbool, - jbooleanArray bools) { - return JNI_SampleForAnnotationProcessor_TestAllPrimitives(env, zint, - base::android::JavaParamRef<jintArray>(env, ints), zlong, - base::android::JavaParamRef<jlongArray>(env, longs), zshort, - base::android::JavaParamRef<jshortArray>(env, shorts), zchar, - base::android::JavaParamRef<jcharArray>(env, chars), zbyte, - base::android::JavaParamRef<jbyteArray>(env, bytes), zdouble, - base::android::JavaParamRef<jdoubleArray>(env, doubles), zfloat, - base::android::JavaParamRef<jfloatArray>(env, floats), zbool, - base::android::JavaParamRef<jbooleanArray>(env, bools)).Release(); -} - -static void JNI_SampleForAnnotationProcessor_TestSpecialTypes(JNIEnv* env, const - base::android::JavaParamRef<jclass>& clazz, - const base::android::JavaParamRef<jobjectArray>& classes, - const base::android::JavaParamRef<jthrowable>& throwable, - const base::android::JavaParamRef<jobjectArray>& throwables, - const base::android::JavaParamRef<jstring>& string, - const base::android::JavaParamRef<jobjectArray>& strings, - const base::android::JavaParamRef<jobject>& tStruct, - const base::android::JavaParamRef<jobjectArray>& structs, - const base::android::JavaParamRef<jobject>& obj, - const base::android::JavaParamRef<jobjectArray>& objects); - -JNI_GENERATOR_EXPORT void Java_J_N_MqOnlud7( - JNIEnv* env, - jclass jcaller, - jclass clazz, - jobjectArray classes, - jthrowable throwable, - jobjectArray throwables, - jstring string, - jobjectArray strings, - jobject tStruct, - jobjectArray structs, - jobject obj, - jobjectArray objects) { - return JNI_SampleForAnnotationProcessor_TestSpecialTypes(env, - base::android::JavaParamRef<jclass>(env, clazz), - base::android::JavaParamRef<jobjectArray>(env, classes), - base::android::JavaParamRef<jthrowable>(env, throwable), - base::android::JavaParamRef<jobjectArray>(env, throwables), - base::android::JavaParamRef<jstring>(env, string), - base::android::JavaParamRef<jobjectArray>(env, strings), - base::android::JavaParamRef<jobject>(env, tStruct), - base::android::JavaParamRef<jobjectArray>(env, structs), - base::android::JavaParamRef<jobject>(env, obj), base::android::JavaParamRef<jobjectArray>(env, - objects)); -} - -static base::android::ScopedJavaLocalRef<jthrowable> - JNI_SampleForAnnotationProcessor_ReturnThrowable(JNIEnv* env); - -JNI_GENERATOR_EXPORT jthrowable Java_J_N_MuZc76Vt( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_ReturnThrowable(env).Release(); -} - -static base::android::ScopedJavaLocalRef<jobjectArray> - JNI_SampleForAnnotationProcessor_ReturnThrowables(JNIEnv* env); - -JNI_GENERATOR_EXPORT jobjectArray Java_J_N_MAD53J7V( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_ReturnThrowables(env).Release(); -} - -static base::android::ScopedJavaLocalRef<jclass> - JNI_SampleForAnnotationProcessor_ReturnClass(JNIEnv* env); - -JNI_GENERATOR_EXPORT jclass Java_J_N_M_00024ZgOi4g( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_ReturnClass(env).Release(); -} - -static base::android::ScopedJavaLocalRef<jobjectArray> - JNI_SampleForAnnotationProcessor_ReturnClasses(JNIEnv* env); - -JNI_GENERATOR_EXPORT jobjectArray Java_J_N_M_00024hL1577( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_ReturnClasses(env).Release(); -} - -static base::android::ScopedJavaLocalRef<jstring> - JNI_SampleForAnnotationProcessor_ReturnString(JNIEnv* env); - -JNI_GENERATOR_EXPORT jstring Java_J_N_M0k1OjBK( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_ReturnString(env).Release(); -} - -static base::android::ScopedJavaLocalRef<jobjectArray> - JNI_SampleForAnnotationProcessor_ReturnStrings(JNIEnv* env); - -JNI_GENERATOR_EXPORT jobjectArray Java_J_N_Mssfs54E( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_ReturnStrings(env).Release(); -} - -static base::android::ScopedJavaLocalRef<jobject> - JNI_SampleForAnnotationProcessor_ReturnStruct(JNIEnv* env); - -JNI_GENERATOR_EXPORT jobject Java_J_N_MSzcel_1H( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_ReturnStruct(env).Release(); -} - -static base::android::ScopedJavaLocalRef<jobjectArray> - JNI_SampleForAnnotationProcessor_ReturnStructs(JNIEnv* env); - -JNI_GENERATOR_EXPORT jobjectArray Java_J_N_MIBrQLK4( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_ReturnStructs(env).Release(); -} - -static base::android::ScopedJavaLocalRef<jobject> - JNI_SampleForAnnotationProcessor_ReturnObject(JNIEnv* env); - -JNI_GENERATOR_EXPORT jobject Java_J_N_M_00024hPywjv( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_ReturnObject(env).Release(); -} - -static base::android::ScopedJavaLocalRef<jobjectArray> - JNI_SampleForAnnotationProcessor_ReturnObjects(JNIEnv* env); - -JNI_GENERATOR_EXPORT jobjectArray Java_J_N_MPpCU1l5( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_ReturnObjects(env).Release(); -} - - -#endif // org_chromium_example_jni_generator_SampleForAnnotationProcessor_JNI
diff --git a/base/android/jni_generator/golden/SampleBidirectionalNonProxy_jni.h.golden b/base/android/jni_generator/golden/SampleBidirectionalNonProxy_jni.h.golden new file mode 100644 index 0000000..955d3747 --- /dev/null +++ b/base/android/jni_generator/golden/SampleBidirectionalNonProxy_jni.h.golden
@@ -0,0 +1,200 @@ +// Copyright 2014 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + + +// This file is autogenerated by +// base/android/jni_generator/jni_generator.py +// For +// org/chromium/example/jni_generator/SampleBidirectionalNonProxy + +#ifndef org_chromium_example_jni_generator_SampleBidirectionalNonProxy_JNI +#define org_chromium_example_jni_generator_SampleBidirectionalNonProxy_JNI + +#include <jni.h> + +#include "base/android/jni_generator/jni_generator_helper.h" + + +// Step 1: Forward declarations. + +JNI_REGISTRATION_EXPORT extern const char + kClassPath_org_chromium_example_jni_1generator_SampleBidirectionalNonProxy[]; +const char kClassPath_org_chromium_example_jni_1generator_SampleBidirectionalNonProxy[] = + "org/chromium/example/jni_generator/SampleBidirectionalNonProxy"; +// Leaking this jclass as we cannot use LazyInstance from some threads. +JNI_REGISTRATION_EXPORT std::atomic<jclass> + g_org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_clazz(nullptr); +#ifndef org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_clazz_defined +#define org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_clazz_defined +inline jclass org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_clazz(JNIEnv* env) { + return base::android::LazyGetClass(env, + kClassPath_org_chromium_example_jni_1generator_SampleBidirectionalNonProxy, + &g_org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_clazz); +} +#endif + + +// Step 2: Constants (optional). + + +// Step 3: Method stubs. +JNI_GENERATOR_EXPORT jint + Java_org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_nativeStaticMethod( + JNIEnv* env, + jclass jcaller, + jlong nativeTest, + jint arg1) { + Test* native = reinterpret_cast<Test*>(nativeTest); + CHECK_NATIVE_PTR(env, jcaller, native, "StaticMethod", 0); + return native->StaticMethod(env, arg1); +} + +JNI_GENERATOR_EXPORT jint + Java_org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_nativeMethod( + JNIEnv* env, + jobject jcaller, + jlong nativeTest, + jint arg1) { + Test* native = reinterpret_cast<Test*>(nativeTest); + CHECK_NATIVE_PTR(env, jcaller, native, "Method", 0); + return native->Method(env, base::android::JavaParamRef<jobject>(env, jcaller), arg1); +} + +static jint JNI_SampleBidirectionalNonProxy_Init(JNIEnv* env, const + base::android::JavaParamRef<jobject>& jcaller); + +JNI_GENERATOR_EXPORT jint + Java_org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_nativeInit( + JNIEnv* env, + jobject jcaller) { + return JNI_SampleBidirectionalNonProxy_Init(env, base::android::JavaParamRef<jobject>(env, + jcaller)); +} + +static jint JNI_SampleBidirectionalNonProxy_Init(JNIEnv* env, const + base::android::JavaParamRef<jobject>& jcaller); + +JNI_GENERATOR_EXPORT jint + Java_org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_nativeInit( + JNIEnv* env, + jobject jcaller) { + return JNI_SampleBidirectionalNonProxy_Init(env, base::android::JavaParamRef<jobject>(env, + jcaller)); +} + + +static std::atomic<jmethodID> + g_org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_testMethodWithParam(nullptr); +static void Java_SampleBidirectionalNonProxy_testMethodWithParam(JNIEnv* env, const + base::android::JavaRef<jobject>& obj, JniIntWrapper iParam) { + jclass clazz = org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_clazz(env); + CHECK_CLAZZ(env, obj.obj(), + org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_clazz(env)); + + jni_generator::JniJavaCallContextChecked call_context; + call_context.Init< + base::android::MethodID::TYPE_INSTANCE>( + env, + clazz, + "testMethodWithParam", + "(I)V", + &g_org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_testMethodWithParam); + + env->CallVoidMethod(obj.obj(), + call_context.base.method_id, as_jint(iParam)); +} + +static std::atomic<jmethodID> + g_org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_testMethodWithParamAndReturn(nullptr); +static base::android::ScopedJavaLocalRef<jstring> + Java_SampleBidirectionalNonProxy_testMethodWithParamAndReturn(JNIEnv* env, const + base::android::JavaRef<jobject>& obj, JniIntWrapper iParam) { + jclass clazz = org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_clazz(env); + CHECK_CLAZZ(env, obj.obj(), + org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_clazz(env), NULL); + + jni_generator::JniJavaCallContextChecked call_context; + call_context.Init< + base::android::MethodID::TYPE_INSTANCE>( + env, + clazz, + "testMethodWithParamAndReturn", + "(I)Ljava/lang/String;", +&g_org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_testMethodWithParamAndReturn); + + jstring ret = + static_cast<jstring>(env->CallObjectMethod(obj.obj(), + call_context.base.method_id, as_jint(iParam))); + return base::android::ScopedJavaLocalRef<jstring>(env, ret); +} + +static std::atomic<jmethodID> + g_org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_testStaticMethodWithParam(nullptr); +static jint Java_SampleBidirectionalNonProxy_testStaticMethodWithParam(JNIEnv* env, JniIntWrapper + iParam) { + jclass clazz = org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_clazz(env); + CHECK_CLAZZ(env, clazz, + org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_clazz(env), 0); + + jni_generator::JniJavaCallContextChecked call_context; + call_context.Init< + base::android::MethodID::TYPE_STATIC>( + env, + clazz, + "testStaticMethodWithParam", + "(I)I", +&g_org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_testStaticMethodWithParam); + + jint ret = + env->CallStaticIntMethod(clazz, + call_context.base.method_id, as_jint(iParam)); + return ret; +} + +static std::atomic<jmethodID> + g_org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_testMethodWithNoParam(nullptr); +static jdouble Java_SampleBidirectionalNonProxy_testMethodWithNoParam(JNIEnv* env) { + jclass clazz = org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_clazz(env); + CHECK_CLAZZ(env, clazz, + org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_clazz(env), 0); + + jni_generator::JniJavaCallContextChecked call_context; + call_context.Init< + base::android::MethodID::TYPE_STATIC>( + env, + clazz, + "testMethodWithNoParam", + "()D", + &g_org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_testMethodWithNoParam); + + jdouble ret = + env->CallStaticDoubleMethod(clazz, + call_context.base.method_id); + return ret; +} + +static std::atomic<jmethodID> + g_org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_testStaticMethodWithNoParam(nullptr); +static base::android::ScopedJavaLocalRef<jstring> + Java_SampleBidirectionalNonProxy_testStaticMethodWithNoParam(JNIEnv* env) { + jclass clazz = org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_clazz(env); + CHECK_CLAZZ(env, clazz, + org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_clazz(env), NULL); + + jni_generator::JniJavaCallContextChecked call_context; + call_context.Init< + base::android::MethodID::TYPE_STATIC>( + env, + clazz, + "testStaticMethodWithNoParam", + "()Ljava/lang/String;", +&g_org_chromium_example_jni_1generator_SampleBidirectionalNonProxy_testStaticMethodWithNoParam); + + jstring ret = + static_cast<jstring>(env->CallStaticObjectMethod(clazz, + call_context.base.method_id)); + return base::android::ScopedJavaLocalRef<jstring>(env, ret); +} + +#endif // org_chromium_example_jni_generator_SampleBidirectionalNonProxy_JNI
diff --git a/base/android/jni_generator/golden/SampleForAnnotationProcessor_jni.golden b/base/android/jni_generator/golden/SampleForAnnotationProcessor_jni.golden deleted file mode 100644 index 130ac30..0000000 --- a/base/android/jni_generator/golden/SampleForAnnotationProcessor_jni.golden +++ /dev/null
@@ -1,283 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - - -// This file is autogenerated by -// base/android/jni_generator/jni_generator.py -// For -// org/chromium/example/jni_generator/SampleForAnnotationProcessor - -#ifndef org_chromium_example_jni_generator_SampleForAnnotationProcessor_JNI -#define org_chromium_example_jni_generator_SampleForAnnotationProcessor_JNI - -#include <jni.h> - -#include "base/android/jni_generator/jni_generator_helper.h" - - -// Step 1: Forward declarations. - - -// Step 2: Constants (optional). - - -// Step 3: Method stubs. -static void JNI_SampleForAnnotationProcessor_Foo(JNIEnv* env); - -JNI_GENERATOR_EXPORT void - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1foo( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_Foo(env); -} - -static base::android::ScopedJavaLocalRef<jobject> JNI_SampleForAnnotationProcessor_Bar(JNIEnv* env, - const base::android::JavaParamRef<jobject>& sample); - -JNI_GENERATOR_EXPORT jobject - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1bar( - JNIEnv* env, - jclass jcaller, - jobject sample) { - return JNI_SampleForAnnotationProcessor_Bar(env, base::android::JavaParamRef<jobject>(env, - sample)).Release(); -} - -static base::android::ScopedJavaLocalRef<jstring> JNI_SampleForAnnotationProcessor_RevString(JNIEnv* - env, const base::android::JavaParamRef<jstring>& stringToReverse); - -JNI_GENERATOR_EXPORT jstring - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1revString( - JNIEnv* env, - jclass jcaller, - jstring stringToReverse) { - return JNI_SampleForAnnotationProcessor_RevString(env, base::android::JavaParamRef<jstring>(env, - stringToReverse)).Release(); -} - -static base::android::ScopedJavaLocalRef<jobjectArray> - JNI_SampleForAnnotationProcessor_SendToNative(JNIEnv* env, const - base::android::JavaParamRef<jobjectArray>& strs); - -JNI_GENERATOR_EXPORT jobjectArray - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1sendToNative( - JNIEnv* env, - jclass jcaller, - jobjectArray strs) { - return JNI_SampleForAnnotationProcessor_SendToNative(env, - base::android::JavaParamRef<jobjectArray>(env, strs)).Release(); -} - -static base::android::ScopedJavaLocalRef<jobjectArray> - JNI_SampleForAnnotationProcessor_SendSamplesToNative(JNIEnv* env, const - base::android::JavaParamRef<jobjectArray>& strs); - -JNI_GENERATOR_EXPORT jobjectArray - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1sendSamplesToNative( - JNIEnv* env, - jclass jcaller, - jobjectArray strs) { - return JNI_SampleForAnnotationProcessor_SendSamplesToNative(env, - base::android::JavaParamRef<jobjectArray>(env, strs)).Release(); -} - -static jboolean JNI_SampleForAnnotationProcessor_HasPhalange(JNIEnv* env); - -JNI_GENERATOR_EXPORT jboolean - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1hasPhalange( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_HasPhalange(env); -} - -static base::android::ScopedJavaLocalRef<jintArray> - JNI_SampleForAnnotationProcessor_TestAllPrimitives(JNIEnv* env, jint zint, - const base::android::JavaParamRef<jintArray>& ints, - jlong zlong, - const base::android::JavaParamRef<jlongArray>& longs, - jshort zshort, - const base::android::JavaParamRef<jshortArray>& shorts, - jchar zchar, - const base::android::JavaParamRef<jcharArray>& chars, - jbyte zbyte, - const base::android::JavaParamRef<jbyteArray>& bytes, - jdouble zdouble, - const base::android::JavaParamRef<jdoubleArray>& doubles, - jfloat zfloat, - const base::android::JavaParamRef<jfloatArray>& floats, - jboolean zbool, - const base::android::JavaParamRef<jbooleanArray>& bools); - -JNI_GENERATOR_EXPORT jintArray - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1testAllPrimitives( - JNIEnv* env, - jclass jcaller, - jint zint, - jintArray ints, - jlong zlong, - jlongArray longs, - jshort zshort, - jshortArray shorts, - jchar zchar, - jcharArray chars, - jbyte zbyte, - jbyteArray bytes, - jdouble zdouble, - jdoubleArray doubles, - jfloat zfloat, - jfloatArray floats, - jboolean zbool, - jbooleanArray bools) { - return JNI_SampleForAnnotationProcessor_TestAllPrimitives(env, zint, - base::android::JavaParamRef<jintArray>(env, ints), zlong, - base::android::JavaParamRef<jlongArray>(env, longs), zshort, - base::android::JavaParamRef<jshortArray>(env, shorts), zchar, - base::android::JavaParamRef<jcharArray>(env, chars), zbyte, - base::android::JavaParamRef<jbyteArray>(env, bytes), zdouble, - base::android::JavaParamRef<jdoubleArray>(env, doubles), zfloat, - base::android::JavaParamRef<jfloatArray>(env, floats), zbool, - base::android::JavaParamRef<jbooleanArray>(env, bools)).Release(); -} - -static void JNI_SampleForAnnotationProcessor_TestSpecialTypes(JNIEnv* env, const - base::android::JavaParamRef<jclass>& clazz, - const base::android::JavaParamRef<jobjectArray>& classes, - const base::android::JavaParamRef<jthrowable>& throwable, - const base::android::JavaParamRef<jobjectArray>& throwables, - const base::android::JavaParamRef<jstring>& string, - const base::android::JavaParamRef<jobjectArray>& strings, - const base::android::JavaParamRef<jobject>& tStruct, - const base::android::JavaParamRef<jobjectArray>& structs, - const base::android::JavaParamRef<jobject>& obj, - const base::android::JavaParamRef<jobjectArray>& objects); - -JNI_GENERATOR_EXPORT void - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1testSpecialTypes( - JNIEnv* env, - jclass jcaller, - jclass clazz, - jobjectArray classes, - jthrowable throwable, - jobjectArray throwables, - jstring string, - jobjectArray strings, - jobject tStruct, - jobjectArray structs, - jobject obj, - jobjectArray objects) { - return JNI_SampleForAnnotationProcessor_TestSpecialTypes(env, - base::android::JavaParamRef<jclass>(env, clazz), - base::android::JavaParamRef<jobjectArray>(env, classes), - base::android::JavaParamRef<jthrowable>(env, throwable), - base::android::JavaParamRef<jobjectArray>(env, throwables), - base::android::JavaParamRef<jstring>(env, string), - base::android::JavaParamRef<jobjectArray>(env, strings), - base::android::JavaParamRef<jobject>(env, tStruct), - base::android::JavaParamRef<jobjectArray>(env, structs), - base::android::JavaParamRef<jobject>(env, obj), base::android::JavaParamRef<jobjectArray>(env, - objects)); -} - -static base::android::ScopedJavaLocalRef<jthrowable> - JNI_SampleForAnnotationProcessor_ReturnThrowable(JNIEnv* env); - -JNI_GENERATOR_EXPORT jthrowable - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnThrowable( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_ReturnThrowable(env).Release(); -} - -static base::android::ScopedJavaLocalRef<jobjectArray> - JNI_SampleForAnnotationProcessor_ReturnThrowables(JNIEnv* env); - -JNI_GENERATOR_EXPORT jobjectArray - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnThrowables( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_ReturnThrowables(env).Release(); -} - -static base::android::ScopedJavaLocalRef<jclass> - JNI_SampleForAnnotationProcessor_ReturnClass(JNIEnv* env); - -JNI_GENERATOR_EXPORT jclass - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnClass( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_ReturnClass(env).Release(); -} - -static base::android::ScopedJavaLocalRef<jobjectArray> - JNI_SampleForAnnotationProcessor_ReturnClasses(JNIEnv* env); - -JNI_GENERATOR_EXPORT jobjectArray - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnClasses( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_ReturnClasses(env).Release(); -} - -static base::android::ScopedJavaLocalRef<jstring> - JNI_SampleForAnnotationProcessor_ReturnString(JNIEnv* env); - -JNI_GENERATOR_EXPORT jstring - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnString( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_ReturnString(env).Release(); -} - -static base::android::ScopedJavaLocalRef<jobjectArray> - JNI_SampleForAnnotationProcessor_ReturnStrings(JNIEnv* env); - -JNI_GENERATOR_EXPORT jobjectArray - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnStrings( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_ReturnStrings(env).Release(); -} - -static base::android::ScopedJavaLocalRef<jobject> - JNI_SampleForAnnotationProcessor_ReturnStruct(JNIEnv* env); - -JNI_GENERATOR_EXPORT jobject - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnStruct( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_ReturnStruct(env).Release(); -} - -static base::android::ScopedJavaLocalRef<jobjectArray> - JNI_SampleForAnnotationProcessor_ReturnStructs(JNIEnv* env); - -JNI_GENERATOR_EXPORT jobjectArray - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnStructs( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_ReturnStructs(env).Release(); -} - -static base::android::ScopedJavaLocalRef<jobject> - JNI_SampleForAnnotationProcessor_ReturnObject(JNIEnv* env); - -JNI_GENERATOR_EXPORT jobject - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnObject( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_ReturnObject(env).Release(); -} - -static base::android::ScopedJavaLocalRef<jobjectArray> - JNI_SampleForAnnotationProcessor_ReturnObjects(JNIEnv* env); - -JNI_GENERATOR_EXPORT jobjectArray - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnObjects( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForAnnotationProcessor_ReturnObjects(env).Release(); -} - - -#endif // org_chromium_example_jni_generator_SampleForAnnotationProcessor_JNI
diff --git a/base/android/jni_generator/golden/SampleForAnnotationProcessorManualJni.golden b/base/android/jni_generator/golden/SampleForAnnotationProcessor_manual.h.golden similarity index 100% rename from base/android/jni_generator/golden/SampleForAnnotationProcessorManualJni.golden rename to base/android/jni_generator/golden/SampleForAnnotationProcessor_manual.h.golden
diff --git a/base/android/jni_generator/golden/testProxyMultiplexNatives.golden b/base/android/jni_generator/golden/SampleForAnnotationProcessor_multiplexing.h.golden similarity index 64% rename from base/android/jni_generator/golden/testProxyMultiplexNatives.golden rename to base/android/jni_generator/golden/SampleForAnnotationProcessor_multiplexing.h.golden index a4868bb..cae4cf8 100644 --- a/base/android/jni_generator/golden/testProxyMultiplexNatives.golden +++ b/base/android/jni_generator/golden/SampleForAnnotationProcessor_multiplexing.h.golden
@@ -7,8 +7,8 @@ // base/android/jni_generator/jni_registration_generator.py // Please do not change its content. -#ifndef HEADER_GUARD -#define HEADER_GUARD +#ifndef TEMP_DIR_HEADER_ +#define TEMP_DIR_HEADER_ #include <jni.h> @@ -23,36 +23,29 @@ // Step 2: Forward declarations (methods). -JNI_GENERATOR_EXPORT void - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1foo( +JNI_GENERATOR_EXPORT void Java_J_N_MygCV2jQ( JNIEnv* env, jclass jcaller); -JNI_GENERATOR_EXPORT jobject - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1bar( +JNI_GENERATOR_EXPORT jobject Java_J_N_MHuqnmXT( JNIEnv* env, jclass jcaller, jobject sample); -JNI_GENERATOR_EXPORT jstring - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1revString( +JNI_GENERATOR_EXPORT jstring Java_J_N_MM5Xkwyy( JNIEnv* env, jclass jcaller, jstring stringToReverse); -JNI_GENERATOR_EXPORT jobjectArray - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1sendToNative( +JNI_GENERATOR_EXPORT jobjectArray Java_J_N_MAC2QhR9( JNIEnv* env, jclass jcaller, jobjectArray strs); -JNI_GENERATOR_EXPORT jobjectArray - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1sendSamplesToNative( +JNI_GENERATOR_EXPORT jobjectArray Java_J_N_MGhRh4Nd( JNIEnv* env, jclass jcaller, jobjectArray strs); -JNI_GENERATOR_EXPORT jboolean - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1hasPhalange( +JNI_GENERATOR_EXPORT jboolean Java_J_N_MW0aEs4h( JNIEnv* env, jclass jcaller); -JNI_GENERATOR_EXPORT jintArray - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1testAllPrimitives( +JNI_GENERATOR_EXPORT jintArray Java_J_N_MlVFI4RX( JNIEnv* env, jclass jcaller, jint zint, @@ -71,8 +64,7 @@ jfloatArray floats, jboolean zbool, jbooleanArray bools); -JNI_GENERATOR_EXPORT void - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1testSpecialTypes( +JNI_GENERATOR_EXPORT void Java_J_N_MqOnlud7( JNIEnv* env, jclass jcaller, jclass clazz, @@ -85,44 +77,34 @@ jobjectArray structs, jobject obj, jobjectArray objects); -JNI_GENERATOR_EXPORT jthrowable - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnThrowable( +JNI_GENERATOR_EXPORT jthrowable Java_J_N_MuZc76Vt( JNIEnv* env, jclass jcaller); -JNI_GENERATOR_EXPORT jobjectArray - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnThrowables( +JNI_GENERATOR_EXPORT jobjectArray Java_J_N_MAD53J7V( JNIEnv* env, jclass jcaller); -JNI_GENERATOR_EXPORT jclass - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnClass( +JNI_GENERATOR_EXPORT jclass Java_J_N_M_00024ZgOi4g( JNIEnv* env, jclass jcaller); -JNI_GENERATOR_EXPORT jobjectArray - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnClasses( +JNI_GENERATOR_EXPORT jobjectArray Java_J_N_M_00024hL1577( JNIEnv* env, jclass jcaller); -JNI_GENERATOR_EXPORT jstring - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnString( +JNI_GENERATOR_EXPORT jstring Java_J_N_M0k1OjBK( JNIEnv* env, jclass jcaller); -JNI_GENERATOR_EXPORT jobjectArray - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnStrings( +JNI_GENERATOR_EXPORT jobjectArray Java_J_N_Mssfs54E( JNIEnv* env, jclass jcaller); -JNI_GENERATOR_EXPORT jobject - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnStruct( +JNI_GENERATOR_EXPORT jobject Java_J_N_MSzcel_1H( JNIEnv* env, jclass jcaller); -JNI_GENERATOR_EXPORT jobjectArray - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnStructs( +JNI_GENERATOR_EXPORT jobjectArray Java_J_N_MIBrQLK4( JNIEnv* env, jclass jcaller); -JNI_GENERATOR_EXPORT jobject - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnObject( +JNI_GENERATOR_EXPORT jobject Java_J_N_M_00024hPywjv( JNIEnv* env, jclass jcaller); -JNI_GENERATOR_EXPORT jobjectArray - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnObjects( +JNI_GENERATOR_EXPORT jobjectArray Java_J_N_MPpCU1l5( JNIEnv* env, jclass jcaller); @@ -134,7 +116,7 @@ switch (switch_num) { case -461602969360398827: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnClass(env, jcaller); + return Java_J_N_M_00024ZgOi4g(env, jcaller); default: CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1class was called with an invalid switch number: " << switch_num; @@ -148,7 +130,7 @@ switch (switch_num) { case -427008638958312484: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnClasses(env, jcaller); + return Java_J_N_M_00024hL1577(env, jcaller); default: CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1class_1array was called with an invalid switch number: " << switch_num; @@ -162,10 +144,10 @@ switch (switch_num) { case 5419834314509580268: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnStruct(env, jcaller); + return Java_J_N_MSzcel_1H(env, jcaller); case -426730623629742951: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnObject(env, jcaller); + return Java_J_N_M_00024hPywjv(env, jcaller); default: CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1object was called with an invalid switch number: " << switch_num; @@ -179,7 +161,7 @@ switch (switch_num) { case 2227777243221232668: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1bar(env, jcaller, object_param1); + return Java_J_N_MHuqnmXT(env, jcaller, object_param1); default: CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1object_1O was called with an invalid switch number: " << switch_num; @@ -193,10 +175,10 @@ switch (switch_num) { case 2313390248928530514: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnStructs(env, jcaller); + return Java_J_N_MIBrQLK4(env, jcaller); case 4508266875426191279: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnObjects(env, jcaller); + return Java_J_N_MPpCU1l5(env, jcaller); default: CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1object_1array was called with an invalid switch number: " << switch_num; @@ -210,7 +192,7 @@ switch (switch_num) { case 1879234562834588228: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1sendSamplesToNative(env, jcaller, object_array_param1); + return Java_J_N_MGhRh4Nd(env, jcaller, object_array_param1); default: CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1object_1array_1OA was called with an invalid switch number: " << switch_num; @@ -224,7 +206,7 @@ switch (switch_num) { case -3292889389021976364: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnString(env, jcaller); + return Java_J_N_M0k1OjBK(env, jcaller); default: CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1string was called with an invalid switch number: " << switch_num; @@ -238,7 +220,7 @@ switch (switch_num) { case 3717128594383367634: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1revString(env, jcaller, string_param1); + return Java_J_N_MM5Xkwyy(env, jcaller, string_param1); default: CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1string_1R was called with an invalid switch number: " << switch_num; @@ -252,7 +234,7 @@ switch (switch_num) { case -5564218335546380707: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnStrings(env, jcaller); + return Java_J_N_Mssfs54E(env, jcaller); default: CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1string_1array was called with an invalid switch number: " << switch_num; @@ -266,7 +248,7 @@ switch (switch_num) { case 12825275381484104: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1sendToNative(env, jcaller, string_array_param1); + return Java_J_N_MAC2QhR9(env, jcaller, string_array_param1); default: CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1string_1array_1RA was called with an invalid switch number: " << switch_num; @@ -280,7 +262,7 @@ switch (switch_num) { case -5073520581764159162: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnThrowable(env, jcaller); + return Java_J_N_MuZc76Vt(env, jcaller); default: CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1throwable was called with an invalid switch number: " << switch_num; @@ -294,7 +276,7 @@ switch (switch_num) { case 17582460986153510: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnThrowables(env, jcaller); + return Java_J_N_MAD53J7V(env, jcaller); default: CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1throwable_1array was called with an invalid switch number: " << switch_num; @@ -308,7 +290,7 @@ switch (switch_num) { case 6577090212445038314: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1hasPhalange(env, jcaller); + return Java_J_N_MW0aEs4h(env, jcaller); default: CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1boolean was called with an invalid switch number: " << switch_num; @@ -322,7 +304,7 @@ switch (switch_num) { case -7687282957371512872: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1testAllPrimitives(env, jcaller, int_param1, int_array_param1, long_param1, long_array_param1, short_param1, short_array_param1, char_param1, char_array_param1, byte_param1, byte_array_param1, double_param1, double_array_param1, float_param1, float_array_param1, boolean_param1, boolean_array_param1); + return Java_J_N_MlVFI4RX(env, jcaller, int_param1, int_array_param1, long_param1, long_array_param1, short_param1, short_array_param1, char_param1, char_array_param1, byte_param1, byte_array_param1, double_param1, double_array_param1, float_param1, float_array_param1, boolean_param1, boolean_array_param1); default: CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1int_1array_1IIAJJASSACCABBADDAFFAZZA was called with an invalid switch number: " << switch_num; @@ -336,7 +318,7 @@ switch (switch_num) { case -3890945313637314700: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1foo(env, jcaller); + return Java_J_N_MygCV2jQ(env, jcaller); default: CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1void was called with an invalid switch number: " << switch_num; @@ -350,7 +332,7 @@ switch (switch_num) { case -6275232019293411879: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1testSpecialTypes(env, jcaller, class_param1, class_array_param1, throwable_param1, throwable_array_param1, string_param1, string_array_param1, object_param1, object_array_param1, object_param2, object_array_param2); + return Java_J_N_MqOnlud7(env, jcaller, class_param1, class_array_param1, throwable_param1, throwable_array_param1, string_param1, string_array_param1, object_param1, object_array_param1, object_param2, object_array_param2); default: CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1void_1LLATTARRAOOAOOA was called with an invalid switch number: " << switch_num; @@ -358,4 +340,4 @@ } } -#endif // HEADER_GUARD +#endif // TEMP_DIR_HEADER_
diff --git a/base/android/jni_generator/golden/testProxyMultiplexGenJni.2.golden b/base/android/jni_generator/golden/SampleForAnnotationProcessor_multiplexing_GenJni.java.golden similarity index 100% rename from base/android/jni_generator/golden/testProxyMultiplexGenJni.2.golden rename to base/android/jni_generator/golden/SampleForAnnotationProcessor_multiplexing_GenJni.java.golden
diff --git a/base/android/jni_generator/golden/testProxyMultiplexGenJni.golden b/base/android/jni_generator/golden/SampleForAnnotationProcessor_multiplexing_JN.java.golden similarity index 100% rename from base/android/jni_generator/golden/testProxyMultiplexGenJni.golden rename to base/android/jni_generator/golden/SampleForAnnotationProcessor_multiplexing_JN.java.golden
diff --git a/base/android/jni_generator/golden/testProxyPackagePrefixWithManualRegistrationHeader.golden b/base/android/jni_generator/golden/SampleForAnnotationProcessor_package_prefix_manual.h.golden similarity index 100% rename from base/android/jni_generator/golden/testProxyPackagePrefixWithManualRegistrationHeader.golden rename to base/android/jni_generator/golden/SampleForAnnotationProcessor_package_prefix_manual.h.golden
diff --git a/base/android/jni_generator/golden/testProxyPackagePrefixWithManualRegistration.2.golden b/base/android/jni_generator/golden/SampleForAnnotationProcessor_package_prefix_manual_GenJni.java.golden similarity index 100% rename from base/android/jni_generator/golden/testProxyPackagePrefixWithManualRegistration.2.golden rename to base/android/jni_generator/golden/SampleForAnnotationProcessor_package_prefix_manual_GenJni.java.golden
diff --git a/base/android/jni_generator/golden/testProxyPackagePrefixWithManualRegistrationProxyHash.2.golden b/base/android/jni_generator/golden/SampleForAnnotationProcessor_package_prefix_proxy_GenJni.java.golden similarity index 100% rename from base/android/jni_generator/golden/testProxyPackagePrefixWithManualRegistrationProxyHash.2.golden rename to base/android/jni_generator/golden/SampleForAnnotationProcessor_package_prefix_proxy_GenJni.java.golden
diff --git a/base/android/jni_generator/golden/testProxyPackagePrefixWithManualRegistrationProxyHash.golden b/base/android/jni_generator/golden/SampleForAnnotationProcessor_package_prefix_proxy_JN.java.golden similarity index 100% rename from base/android/jni_generator/golden/testProxyPackagePrefixWithManualRegistrationProxyHash.golden rename to base/android/jni_generator/golden/SampleForAnnotationProcessor_package_prefix_proxy_JN.java.golden
diff --git a/base/android/jni_generator/golden/testProxyPackagePrefixWithManualRegistrationProxyHashHeader.golden b/base/android/jni_generator/golden/SampleForAnnotationProcessor_package_prefix_proxy_manual.h.golden similarity index 100% rename from base/android/jni_generator/golden/testProxyPackagePrefixWithManualRegistrationProxyHashHeader.golden rename to base/android/jni_generator/golden/SampleForAnnotationProcessor_package_prefix_proxy_manual.h.golden
diff --git a/base/android/jni_generator/golden/testProxyPackagePrefixWithManualRegistrationProxyHash.2.golden b/base/android/jni_generator/golden/SampleForAnnotationProcessor_package_prefix_proxy_manual_GenJni.java.golden similarity index 100% copy from base/android/jni_generator/golden/testProxyPackagePrefixWithManualRegistrationProxyHash.2.golden copy to base/android/jni_generator/golden/SampleForAnnotationProcessor_package_prefix_proxy_manual_GenJni.java.golden
diff --git a/base/android/jni_generator/golden/testProxyPackagePrefixWithManualRegistrationProxyHash.golden b/base/android/jni_generator/golden/SampleForAnnotationProcessor_package_prefix_proxy_manual_JN.java.golden similarity index 100% copy from base/android/jni_generator/golden/testProxyPackagePrefixWithManualRegistrationProxyHash.golden copy to base/android/jni_generator/golden/SampleForAnnotationProcessor_package_prefix_proxy_manual_JN.java.golden
diff --git a/base/android/jni_generator/golden/HashedSampleForAnnotationProcessorGenJni.2.golden b/base/android/jni_generator/golden/SampleForAnnotationProcessor_proxy_GenJni.java.golden similarity index 100% rename from base/android/jni_generator/golden/HashedSampleForAnnotationProcessorGenJni.2.golden rename to base/android/jni_generator/golden/SampleForAnnotationProcessor_proxy_GenJni.java.golden
diff --git a/base/android/jni_generator/golden/HashedSampleForAnnotationProcessorGenJni.golden b/base/android/jni_generator/golden/SampleForAnnotationProcessor_proxy_JN.java.golden similarity index 100% rename from base/android/jni_generator/golden/HashedSampleForAnnotationProcessorGenJni.golden rename to base/android/jni_generator/golden/SampleForAnnotationProcessor_proxy_JN.java.golden
diff --git a/base/android/jni_generator/golden/SampleForProxyEdgeCases_test_kept_GenJni.java.golden b/base/android/jni_generator/golden/SampleForProxyEdgeCases_test_kept_GenJni.java.golden new file mode 100644 index 0000000..ea029da2 --- /dev/null +++ b/base/android/jni_generator/golden/SampleForProxyEdgeCases_test_kept_GenJni.java.golden
@@ -0,0 +1,31 @@ +// 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. + +package org.chromium.base.natives; + +// This file is autogenerated by +// base/android/jni_generator/jni_registration_generator.py +// Please do not change its content. + +public class GEN_JNI { + public static final boolean TESTING_ENABLED = false; + public static final boolean REQUIRE_MOCK = false; + + + public static void org_chromium_example_jni_1generator_SampleProxyEdgeCases_foo_1_1weirdly_1_1escaped_1name1() { + J.N.MV9YSTxh(); + } + + public static String[][] org_chromium_example_jni_1generator_SampleProxyEdgeCases_crazyTypes(int[] a, Object[][] b) { + return J.N.My6x4jXt(a, b); + } + + public static void org_chromium_example_jni_1generator_SampleProxyEdgeCases_fooForTest() { + J.N.M3dXOemX_ForTesting(); + } + + public static void org_chromium_example_jni_1generator_SampleProxyEdgeCases_fooForTesting() { + J.N.MCNruAwI_ForTesting(); + } +}
diff --git a/base/android/jni_generator/golden/SampleForProxyEdgeCases_test_kept_JN.java.golden b/base/android/jni_generator/golden/SampleForProxyEdgeCases_test_kept_JN.java.golden new file mode 100644 index 0000000..5140fa8c6 --- /dev/null +++ b/base/android/jni_generator/golden/SampleForProxyEdgeCases_test_kept_JN.java.golden
@@ -0,0 +1,22 @@ +// 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. + +package J; + +// This file is autogenerated by +// base/android/jni_generator/jni_registration_generator.py +// Please do not change its content. + +public class N { + + + // Original name: org_chromium_example_jni_1generator_SampleProxyEdgeCases_foo_1_1weirdly_1_1escaped_1name1 + public static native void MV9YSTxh(); + // Original name: org_chromium_example_jni_1generator_SampleProxyEdgeCases_crazyTypes + public static native String[][] My6x4jXt(int[] a, Object[][] b); + // Original name: org_chromium_example_jni_1generator_SampleProxyEdgeCases_fooForTest + public static native void M3dXOemX_ForTesting(); + // Original name: org_chromium_example_jni_1generator_SampleProxyEdgeCases_fooForTesting + public static native void MCNruAwI_ForTesting(); +}
diff --git a/base/android/jni_generator/golden/SampleForProxyEdgeCases_test_kept_jni.h.golden b/base/android/jni_generator/golden/SampleForProxyEdgeCases_test_kept_jni.h.golden new file mode 100644 index 0000000..15e72a4f --- /dev/null +++ b/base/android/jni_generator/golden/SampleForProxyEdgeCases_test_kept_jni.h.golden
@@ -0,0 +1,103 @@ +// Copyright 2014 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + + +// This file is autogenerated by +// base/android/jni_generator/jni_generator.py +// For +// org/chromium/example/jni_generator/SampleProxyEdgeCases + +#ifndef org_chromium_example_jni_generator_SampleProxyEdgeCases_JNI +#define org_chromium_example_jni_generator_SampleProxyEdgeCases_JNI + +#include <jni.h> + +#include "base/android/jni_generator/jni_generator_helper.h" + + +// Step 1: Forward declarations. + +JNI_REGISTRATION_EXPORT extern const char + kClassPath_org_chromium_example_jni_1generator_SampleProxyEdgeCases[]; +const char kClassPath_org_chromium_example_jni_1generator_SampleProxyEdgeCases[] = + "org/chromium/example/jni_generator/SampleProxyEdgeCases"; +// Leaking this jclass as we cannot use LazyInstance from some threads. +JNI_REGISTRATION_EXPORT std::atomic<jclass> + g_org_chromium_example_jni_1generator_SampleProxyEdgeCases_clazz(nullptr); +#ifndef org_chromium_example_jni_1generator_SampleProxyEdgeCases_clazz_defined +#define org_chromium_example_jni_1generator_SampleProxyEdgeCases_clazz_defined +inline jclass org_chromium_example_jni_1generator_SampleProxyEdgeCases_clazz(JNIEnv* env) { + return base::android::LazyGetClass(env, + kClassPath_org_chromium_example_jni_1generator_SampleProxyEdgeCases, + &g_org_chromium_example_jni_1generator_SampleProxyEdgeCases_clazz); +} +#endif + + +// Step 2: Constants (optional). + + +// Step 3: Method stubs. +static void JNI_SampleProxyEdgeCases_Foo__weirdly__escaped_name1(JNIEnv* env); + +JNI_GENERATOR_EXPORT void + Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleProxyEdgeCases_1foo_11_11weirdly_11_11escaped_11name1( + JNIEnv* env, + jclass jcaller) { + return JNI_SampleProxyEdgeCases_Foo__weirdly__escaped_name1(env); +} + +static base::android::ScopedJavaLocalRef<jobjectArray> JNI_SampleProxyEdgeCases_CrazyTypes(JNIEnv* + env, const base::android::JavaParamRef<jintArray>& a, + const base::android::JavaParamRef<jobjectArray>& b); + +JNI_GENERATOR_EXPORT jobjectArray + Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleProxyEdgeCases_1crazyTypes( + JNIEnv* env, + jclass jcaller, + jintArray a, + jobjectArray b) { + return JNI_SampleProxyEdgeCases_CrazyTypes(env, base::android::JavaParamRef<jintArray>(env, a), + base::android::JavaParamRef<jobjectArray>(env, b)).Release(); +} + +static void JNI_SampleProxyEdgeCases_FooForTest(JNIEnv* env); + +JNI_GENERATOR_EXPORT void + Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleProxyEdgeCases_1fooForTest( + JNIEnv* env, + jclass jcaller) { + return JNI_SampleProxyEdgeCases_FooForTest(env); +} + +static void JNI_SampleProxyEdgeCases_FooForTesting(JNIEnv* env); + +JNI_GENERATOR_EXPORT void + Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleProxyEdgeCases_1fooForTesting( + JNIEnv* env, + jclass jcaller) { + return JNI_SampleProxyEdgeCases_FooForTesting(env); +} + +JNI_GENERATOR_EXPORT void + Java_org_chromium_example_jni_1generator_SampleProxyEdgeCases_nativeInstanceMethod( + JNIEnv* env, + jobject jcaller, + jlong nativeInstance) { + Instance* native = reinterpret_cast<Instance*>(nativeInstance); + CHECK_NATIVE_PTR(env, jcaller, native, "InstanceMethod"); + return native->InstanceMethod(env, base::android::JavaParamRef<jobject>(env, jcaller)); +} + +static void JNI_SampleProxyEdgeCases_StaticMethod(JNIEnv* env); + +JNI_GENERATOR_EXPORT void + Java_org_chromium_example_jni_1generator_SampleProxyEdgeCases_nativeStaticMethod( + JNIEnv* env, + jclass jcaller) { + return JNI_SampleProxyEdgeCases_StaticMethod(env); +} + + +#endif // org_chromium_example_jni_generator_SampleProxyEdgeCases_JNI
diff --git a/base/android/jni_generator/golden/SampleForProxyEdgeCases_test_removed_GenJni.java.golden b/base/android/jni_generator/golden/SampleForProxyEdgeCases_test_removed_GenJni.java.golden new file mode 100644 index 0000000..eb13023f --- /dev/null +++ b/base/android/jni_generator/golden/SampleForProxyEdgeCases_test_removed_GenJni.java.golden
@@ -0,0 +1,23 @@ +// 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. + +package org.chromium.base.natives; + +// This file is autogenerated by +// base/android/jni_generator/jni_registration_generator.py +// Please do not change its content. + +public class GEN_JNI { + public static final boolean TESTING_ENABLED = false; + public static final boolean REQUIRE_MOCK = false; + + + public static void org_chromium_example_jni_1generator_SampleProxyEdgeCases_foo_1_1weirdly_1_1escaped_1name1() { + J.N.MV9YSTxh(); + } + + public static String[][] org_chromium_example_jni_1generator_SampleProxyEdgeCases_crazyTypes(int[] a, Object[][] b) { + return J.N.My6x4jXt(a, b); + } +}
diff --git a/base/android/jni_generator/golden/SampleForProxyEdgeCases_test_removed_JN.java.golden b/base/android/jni_generator/golden/SampleForProxyEdgeCases_test_removed_JN.java.golden new file mode 100644 index 0000000..e82366d8 --- /dev/null +++ b/base/android/jni_generator/golden/SampleForProxyEdgeCases_test_removed_JN.java.golden
@@ -0,0 +1,18 @@ +// 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. + +package J; + +// This file is autogenerated by +// base/android/jni_generator/jni_registration_generator.py +// Please do not change its content. + +public class N { + + + // Original name: org_chromium_example_jni_1generator_SampleProxyEdgeCases_foo_1_1weirdly_1_1escaped_1name1 + public static native void MV9YSTxh(); + // Original name: org_chromium_example_jni_1generator_SampleProxyEdgeCases_crazyTypes + public static native String[][] My6x4jXt(int[] a, Object[][] b); +}
diff --git a/base/android/jni_generator/golden/SampleForProxyEdgeCases_test_removed_jni.h.golden b/base/android/jni_generator/golden/SampleForProxyEdgeCases_test_removed_jni.h.golden new file mode 100644 index 0000000..15e72a4f --- /dev/null +++ b/base/android/jni_generator/golden/SampleForProxyEdgeCases_test_removed_jni.h.golden
@@ -0,0 +1,103 @@ +// Copyright 2014 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + + +// This file is autogenerated by +// base/android/jni_generator/jni_generator.py +// For +// org/chromium/example/jni_generator/SampleProxyEdgeCases + +#ifndef org_chromium_example_jni_generator_SampleProxyEdgeCases_JNI +#define org_chromium_example_jni_generator_SampleProxyEdgeCases_JNI + +#include <jni.h> + +#include "base/android/jni_generator/jni_generator_helper.h" + + +// Step 1: Forward declarations. + +JNI_REGISTRATION_EXPORT extern const char + kClassPath_org_chromium_example_jni_1generator_SampleProxyEdgeCases[]; +const char kClassPath_org_chromium_example_jni_1generator_SampleProxyEdgeCases[] = + "org/chromium/example/jni_generator/SampleProxyEdgeCases"; +// Leaking this jclass as we cannot use LazyInstance from some threads. +JNI_REGISTRATION_EXPORT std::atomic<jclass> + g_org_chromium_example_jni_1generator_SampleProxyEdgeCases_clazz(nullptr); +#ifndef org_chromium_example_jni_1generator_SampleProxyEdgeCases_clazz_defined +#define org_chromium_example_jni_1generator_SampleProxyEdgeCases_clazz_defined +inline jclass org_chromium_example_jni_1generator_SampleProxyEdgeCases_clazz(JNIEnv* env) { + return base::android::LazyGetClass(env, + kClassPath_org_chromium_example_jni_1generator_SampleProxyEdgeCases, + &g_org_chromium_example_jni_1generator_SampleProxyEdgeCases_clazz); +} +#endif + + +// Step 2: Constants (optional). + + +// Step 3: Method stubs. +static void JNI_SampleProxyEdgeCases_Foo__weirdly__escaped_name1(JNIEnv* env); + +JNI_GENERATOR_EXPORT void + Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleProxyEdgeCases_1foo_11_11weirdly_11_11escaped_11name1( + JNIEnv* env, + jclass jcaller) { + return JNI_SampleProxyEdgeCases_Foo__weirdly__escaped_name1(env); +} + +static base::android::ScopedJavaLocalRef<jobjectArray> JNI_SampleProxyEdgeCases_CrazyTypes(JNIEnv* + env, const base::android::JavaParamRef<jintArray>& a, + const base::android::JavaParamRef<jobjectArray>& b); + +JNI_GENERATOR_EXPORT jobjectArray + Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleProxyEdgeCases_1crazyTypes( + JNIEnv* env, + jclass jcaller, + jintArray a, + jobjectArray b) { + return JNI_SampleProxyEdgeCases_CrazyTypes(env, base::android::JavaParamRef<jintArray>(env, a), + base::android::JavaParamRef<jobjectArray>(env, b)).Release(); +} + +static void JNI_SampleProxyEdgeCases_FooForTest(JNIEnv* env); + +JNI_GENERATOR_EXPORT void + Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleProxyEdgeCases_1fooForTest( + JNIEnv* env, + jclass jcaller) { + return JNI_SampleProxyEdgeCases_FooForTest(env); +} + +static void JNI_SampleProxyEdgeCases_FooForTesting(JNIEnv* env); + +JNI_GENERATOR_EXPORT void + Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleProxyEdgeCases_1fooForTesting( + JNIEnv* env, + jclass jcaller) { + return JNI_SampleProxyEdgeCases_FooForTesting(env); +} + +JNI_GENERATOR_EXPORT void + Java_org_chromium_example_jni_1generator_SampleProxyEdgeCases_nativeInstanceMethod( + JNIEnv* env, + jobject jcaller, + jlong nativeInstance) { + Instance* native = reinterpret_cast<Instance*>(nativeInstance); + CHECK_NATIVE_PTR(env, jcaller, native, "InstanceMethod"); + return native->InstanceMethod(env, base::android::JavaParamRef<jobject>(env, jcaller)); +} + +static void JNI_SampleProxyEdgeCases_StaticMethod(JNIEnv* env); + +JNI_GENERATOR_EXPORT void + Java_org_chromium_example_jni_1generator_SampleProxyEdgeCases_nativeStaticMethod( + JNIEnv* env, + jclass jcaller) { + return JNI_SampleProxyEdgeCases_StaticMethod(env); +} + + +#endif // org_chromium_example_jni_generator_SampleProxyEdgeCases_JNI
diff --git a/base/android/jni_generator/golden/SampleForTestsGenJni.java.golden b/base/android/jni_generator/golden/SampleForTestsGenJni.java.golden new file mode 100644 index 0000000..bc14fc2 --- /dev/null +++ b/base/android/jni_generator/golden/SampleForTestsGenJni.java.golden
@@ -0,0 +1,38 @@ +// 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. + +package org.chromium.base.natives; + +// This file is autogenerated by +// base/android/jni_generator/jni_registration_generator.py +// Please do not change its content. + +public class GEN_JNI { + public static final boolean TESTING_ENABLED = false; + public static final boolean REQUIRE_MOCK = false; + + + // Hashed name: Java_J_N_Mo5zFsNz + public static native long org_chromium_example_jni_1generator_SampleForTests_init(Object caller, String param); + // Hashed name: Java_J_N_Mr6pLRV4 + public static native void org_chromium_example_jni_1generator_SampleForTests_destroy(long nativeCPPClass, Object caller); + // Hashed name: Java_J_N_Mk8cdXlE + public static native double org_chromium_example_jni_1generator_SampleForTests_getDoubleFunction(Object caller); + // Hashed name: Java_J_N_MLxWa5Px + public static native float org_chromium_example_jni_1generator_SampleForTests_getFloatFunction(); + // Hashed name: Java_J_N_M2FORct0 + public static native void org_chromium_example_jni_1generator_SampleForTests_setNonPODDatatype(Object caller, Object rect); + // Hashed name: Java_J_N_MsSBMNlQ + public static native Object org_chromium_example_jni_1generator_SampleForTests_getNonPODDatatype(Object caller); + // Hashed name: Java_J_N_MsFLKdqd + public static native int org_chromium_example_jni_1generator_SampleForTests_method(long nativeCPPClass, Object caller); + // Hashed name: Java_J_N_MQo$lr$8 + public static native double org_chromium_example_jni_1generator_SampleForTests_methodOtherP0(long nativePtr, Object caller); + // Hashed name: Java_J_N_MVfRccKr + public static native void org_chromium_example_jni_1generator_SampleForTests_addStructB(long nativeCPPClass, Object caller, Object b); + // Hashed name: Java_J_N_Mrn4dUkS + public static native void org_chromium_example_jni_1generator_SampleForTests_iterateAndDoSomethingWithStructB(long nativeCPPClass, Object caller); + // Hashed name: Java_J_N_MmArlaE5 + public static native String org_chromium_example_jni_1generator_SampleForTests_returnAString(long nativeCPPClass, Object caller); +}
diff --git a/base/android/jni_generator/golden/SampleForTestsWithSplit_jni.golden b/base/android/jni_generator/golden/SampleForTestsWithSplit_jni.golden deleted file mode 100644 index 6b835a7f..0000000 --- a/base/android/jni_generator/golden/SampleForTestsWithSplit_jni.golden +++ /dev/null
@@ -1,527 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - - -// This file is autogenerated by -// base/android/jni_generator/jni_generator.py -// For -// org/chromium/example/jni_generator/SampleForTests - -#ifndef org_chromium_example_jni_generator_SampleForTests_JNI -#define org_chromium_example_jni_generator_SampleForTests_JNI - -#include <jni.h> - -#include "base/android/jni_generator/jni_generator_helper.h" - - -// Step 1: Forward declarations. - -JNI_REGISTRATION_EXPORT extern const char - kClassPath_org_chromium_example_jni_1generator_SampleForTests[]; -const char kClassPath_org_chromium_example_jni_1generator_SampleForTests[] = - "org/chromium/example/jni_generator/SampleForTests"; - -JNI_REGISTRATION_EXPORT extern const char - kClassPath_org_chromium_example_jni_1generator_SampleForTests_00024InnerStructA[]; -const char kClassPath_org_chromium_example_jni_1generator_SampleForTests_00024InnerStructA[] = - "org/chromium/example/jni_generator/SampleForTests$InnerStructA"; - -JNI_REGISTRATION_EXPORT extern const char - kClassPath_org_chromium_example_jni_1generator_SampleForTests_00024InnerStructB[]; -const char kClassPath_org_chromium_example_jni_1generator_SampleForTests_00024InnerStructB[] = - "org/chromium/example/jni_generator/SampleForTests$InnerStructB"; -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> - g_org_chromium_example_jni_1generator_SampleForTests_clazz(nullptr); -#ifndef org_chromium_example_jni_1generator_SampleForTests_clazz_defined -#define org_chromium_example_jni_1generator_SampleForTests_clazz_defined -inline jclass org_chromium_example_jni_1generator_SampleForTests_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, - kClassPath_org_chromium_example_jni_1generator_SampleForTests, "sample", - &g_org_chromium_example_jni_1generator_SampleForTests_clazz); -} -#endif -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> - g_org_chromium_example_jni_1generator_SampleForTests_00024InnerStructA_clazz(nullptr); -#ifndef org_chromium_example_jni_1generator_SampleForTests_00024InnerStructA_clazz_defined -#define org_chromium_example_jni_1generator_SampleForTests_00024InnerStructA_clazz_defined -inline jclass org_chromium_example_jni_1generator_SampleForTests_00024InnerStructA_clazz(JNIEnv* - env) { - return base::android::LazyGetClass(env, - kClassPath_org_chromium_example_jni_1generator_SampleForTests_00024InnerStructA, "sample", - &g_org_chromium_example_jni_1generator_SampleForTests_00024InnerStructA_clazz); -} -#endif -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> - g_org_chromium_example_jni_1generator_SampleForTests_00024InnerStructB_clazz(nullptr); -#ifndef org_chromium_example_jni_1generator_SampleForTests_00024InnerStructB_clazz_defined -#define org_chromium_example_jni_1generator_SampleForTests_00024InnerStructB_clazz_defined -inline jclass org_chromium_example_jni_1generator_SampleForTests_00024InnerStructB_clazz(JNIEnv* - env) { - return base::android::LazyGetClass(env, - kClassPath_org_chromium_example_jni_1generator_SampleForTests_00024InnerStructB, "sample", - &g_org_chromium_example_jni_1generator_SampleForTests_00024InnerStructB_clazz); -} -#endif - - -// Step 2: Constants (optional). - - -// Step 3: Method stubs. -namespace base { -namespace android { - -static jlong JNI_SampleForTests_Init(JNIEnv* env, const base::android::JavaParamRef<jobject>& - caller, - const base::android::JavaParamRef<jstring>& param); - -JNI_GENERATOR_EXPORT jlong - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForTests_1init( - JNIEnv* env, - jclass jcaller, - jobject caller, - jstring param) { - return JNI_SampleForTests_Init(env, base::android::JavaParamRef<jobject>(env, caller), - base::android::JavaParamRef<jstring>(env, param)); -} - -JNI_GENERATOR_EXPORT void - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForTests_1destroy( - JNIEnv* env, - jclass jcaller, - jlong nativeCPPClass, - jobject caller) { - CPPClass* native = reinterpret_cast<CPPClass*>(nativeCPPClass); - CHECK_NATIVE_PTR(env, jcaller, native, "Destroy"); - return native->Destroy(env, base::android::JavaParamRef<jobject>(env, caller)); -} - -static jdouble JNI_SampleForTests_GetDoubleFunction(JNIEnv* env, const - base::android::JavaParamRef<jobject>& caller); - -JNI_GENERATOR_EXPORT jdouble - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForTests_1getDoubleFunction( - JNIEnv* env, - jclass jcaller, - jobject caller) { - return JNI_SampleForTests_GetDoubleFunction(env, base::android::JavaParamRef<jobject>(env, - caller)); -} - -static jfloat JNI_SampleForTests_GetFloatFunction(JNIEnv* env); - -JNI_GENERATOR_EXPORT jfloat - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForTests_1getFloatFunction( - JNIEnv* env, - jclass jcaller) { - return JNI_SampleForTests_GetFloatFunction(env); -} - -static void JNI_SampleForTests_SetNonPODDatatype(JNIEnv* env, const - base::android::JavaParamRef<jobject>& caller, - const base::android::JavaParamRef<jobject>& rect); - -JNI_GENERATOR_EXPORT void - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForTests_1setNonPODDatatype( - JNIEnv* env, - jclass jcaller, - jobject caller, - jobject rect) { - return JNI_SampleForTests_SetNonPODDatatype(env, base::android::JavaParamRef<jobject>(env, - caller), base::android::JavaParamRef<jobject>(env, rect)); -} - -static base::android::ScopedJavaLocalRef<jobject> JNI_SampleForTests_GetNonPODDatatype(JNIEnv* env, - const base::android::JavaParamRef<jobject>& caller); - -JNI_GENERATOR_EXPORT jobject - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForTests_1getNonPODDatatype( - JNIEnv* env, - jclass jcaller, - jobject caller) { - return JNI_SampleForTests_GetNonPODDatatype(env, base::android::JavaParamRef<jobject>(env, - caller)).Release(); -} - -JNI_GENERATOR_EXPORT jint - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForTests_1method( - JNIEnv* env, - jclass jcaller, - jlong nativeCPPClass, - jobject caller) { - CPPClass* native = reinterpret_cast<CPPClass*>(nativeCPPClass); - CHECK_NATIVE_PTR(env, jcaller, native, "Method", 0); - return native->Method(env, base::android::JavaParamRef<jobject>(env, caller)); -} - -JNI_GENERATOR_EXPORT jdouble - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForTests_1methodOtherP0( - JNIEnv* env, - jclass jcaller, - jlong nativePtr, - jobject caller) { - CPPClass::InnerClass* native = reinterpret_cast<CPPClass::InnerClass*>(nativePtr); - CHECK_NATIVE_PTR(env, jcaller, native, "MethodOtherP0", 0); - return native->MethodOtherP0(env, base::android::JavaParamRef<jobject>(env, caller)); -} - -JNI_GENERATOR_EXPORT void - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForTests_1addStructB( - JNIEnv* env, - jclass jcaller, - jlong nativeCPPClass, - jobject caller, - jobject b) { - CPPClass* native = reinterpret_cast<CPPClass*>(nativeCPPClass); - CHECK_NATIVE_PTR(env, jcaller, native, "AddStructB"); - return native->AddStructB(env, base::android::JavaParamRef<jobject>(env, caller), - base::android::JavaParamRef<jobject>(env, b)); -} - -JNI_GENERATOR_EXPORT void - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForTests_1iterateAndDoSomethingWithStructB( - JNIEnv* env, - jclass jcaller, - jlong nativeCPPClass, - jobject caller) { - CPPClass* native = reinterpret_cast<CPPClass*>(nativeCPPClass); - CHECK_NATIVE_PTR(env, jcaller, native, "IterateAndDoSomethingWithStructB"); - return native->IterateAndDoSomethingWithStructB(env, base::android::JavaParamRef<jobject>(env, - caller)); -} - -JNI_GENERATOR_EXPORT jstring - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleForTests_1returnAString( - JNIEnv* env, - jclass jcaller, - jlong nativeCPPClass, - jobject caller) { - CPPClass* native = reinterpret_cast<CPPClass*>(nativeCPPClass); - CHECK_NATIVE_PTR(env, jcaller, native, "ReturnAString", NULL); - return native->ReturnAString(env, base::android::JavaParamRef<jobject>(env, caller)).Release(); -} - - -static std::atomic<jmethodID> - g_org_chromium_example_jni_1generator_SampleForTests_javaMethod(nullptr); -static jint Java_SampleForTests_javaMethod(JNIEnv* env, const base::android::JavaRef<jobject>& obj, - JniIntWrapper foo, - JniIntWrapper bar) { - jclass clazz = org_chromium_example_jni_1generator_SampleForTests_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_example_jni_1generator_SampleForTests_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "javaMethod", - "(II)I", - &g_org_chromium_example_jni_1generator_SampleForTests_javaMethod); - - jint ret = - env->CallIntMethod(obj.obj(), - call_context.base.method_id, as_jint(foo), as_jint(bar)); - return ret; -} - -static std::atomic<jmethodID> - g_org_chromium_example_jni_1generator_SampleForTests_staticJavaMethod(nullptr); -static jboolean Java_SampleForTests_staticJavaMethod(JNIEnv* env) { - jclass clazz = org_chromium_example_jni_1generator_SampleForTests_clazz(env); - CHECK_CLAZZ(env, clazz, - org_chromium_example_jni_1generator_SampleForTests_clazz(env), false); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "staticJavaMethod", - "()Z", - &g_org_chromium_example_jni_1generator_SampleForTests_staticJavaMethod); - - jboolean ret = - env->CallStaticBooleanMethod(clazz, - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> - g_org_chromium_example_jni_1generator_SampleForTests_packagePrivateJavaMethod(nullptr); -static void Java_SampleForTests_packagePrivateJavaMethod(JNIEnv* env, const - base::android::JavaRef<jobject>& obj) { - jclass clazz = org_chromium_example_jni_1generator_SampleForTests_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_example_jni_1generator_SampleForTests_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "packagePrivateJavaMethod", - "()V", - &g_org_chromium_example_jni_1generator_SampleForTests_packagePrivateJavaMethod); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id); -} - -static std::atomic<jmethodID> - g_org_chromium_example_jni_1generator_SampleForTests_methodWithGenericParams(nullptr); -static void Java_SampleForTests_methodWithGenericParams(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, const base::android::JavaRef<jobject>& foo, - const base::android::JavaRef<jobject>& bar) { - jclass clazz = org_chromium_example_jni_1generator_SampleForTests_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_example_jni_1generator_SampleForTests_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "methodWithGenericParams", - "(Ljava/util/Map;Ljava/util/LinkedList;)V", - &g_org_chromium_example_jni_1generator_SampleForTests_methodWithGenericParams); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id, foo.obj(), bar.obj()); -} - -static std::atomic<jmethodID> - g_org_chromium_example_jni_1generator_SampleForTests_Constructor(nullptr); -static base::android::ScopedJavaLocalRef<jobject> Java_SampleForTests_Constructor(JNIEnv* env, - JniIntWrapper foo, - JniIntWrapper bar) { - jclass clazz = org_chromium_example_jni_1generator_SampleForTests_clazz(env); - CHECK_CLAZZ(env, clazz, - org_chromium_example_jni_1generator_SampleForTests_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "<init>", - "(II)V", - &g_org_chromium_example_jni_1generator_SampleForTests_Constructor); - - jobject ret = - env->NewObject(clazz, - call_context.base.method_id, as_jint(foo), as_jint(bar)); - return base::android::ScopedJavaLocalRef<jobject>(env, ret); -} - -static std::atomic<jmethodID> - g_org_chromium_example_jni_1generator_SampleForTests_methodThatThrowsException(nullptr); -static void Java_SampleForTests_methodThatThrowsException(JNIEnv* env, const - base::android::JavaRef<jobject>& obj) { - jclass clazz = org_chromium_example_jni_1generator_SampleForTests_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_example_jni_1generator_SampleForTests_clazz(env)); - - jni_generator::JniJavaCallContextUnchecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "methodThatThrowsException", - "()V", - &g_org_chromium_example_jni_1generator_SampleForTests_methodThatThrowsException); - - env->CallVoidMethod(obj.obj(), - call_context.method_id); -} - -static std::atomic<jmethodID> - g_org_chromium_example_jni_1generator_SampleForTests_javaMethodWithAnnotatedParam(nullptr); -static void Java_SampleForTests_javaMethodWithAnnotatedParam(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper foo, - JniIntWrapper bar, - JniIntWrapper baz, - JniIntWrapper bat) { - jclass clazz = org_chromium_example_jni_1generator_SampleForTests_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_example_jni_1generator_SampleForTests_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "javaMethodWithAnnotatedParam", - "(IIII)V", - &g_org_chromium_example_jni_1generator_SampleForTests_javaMethodWithAnnotatedParam); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id, as_jint(foo), as_jint(bar), as_jint(baz), as_jint(bat)); -} - -static std::atomic<jmethodID> - g_org_chromium_example_jni_1generator_SampleForTests_00024InnerStructA_create(nullptr); -static base::android::ScopedJavaLocalRef<jobject> Java_InnerStructA_create(JNIEnv* env, jlong l, - JniIntWrapper i, - const base::android::JavaRef<jstring>& s) { - jclass clazz = org_chromium_example_jni_1generator_SampleForTests_00024InnerStructA_clazz(env); - CHECK_CLAZZ(env, clazz, - org_chromium_example_jni_1generator_SampleForTests_00024InnerStructA_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "create", - "(JILjava/lang/String;)Lorg/chromium/example/jni_generator/SampleForTests$InnerStructA;", - &g_org_chromium_example_jni_1generator_SampleForTests_00024InnerStructA_create); - - jobject ret = - env->CallStaticObjectMethod(clazz, - call_context.base.method_id, l, as_jint(i), s.obj()); - return base::android::ScopedJavaLocalRef<jobject>(env, ret); -} - -static std::atomic<jmethodID> - g_org_chromium_example_jni_1generator_SampleForTests_addStructA(nullptr); -static void Java_SampleForTests_addStructA(JNIEnv* env, const base::android::JavaRef<jobject>& obj, - const base::android::JavaRef<jobject>& a) { - jclass clazz = org_chromium_example_jni_1generator_SampleForTests_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_example_jni_1generator_SampleForTests_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "addStructA", - "(Lorg/chromium/example/jni_generator/SampleForTests$InnerStructA;)V", - &g_org_chromium_example_jni_1generator_SampleForTests_addStructA); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id, a.obj()); -} - -static std::atomic<jmethodID> - g_org_chromium_example_jni_1generator_SampleForTests_iterateAndDoSomething(nullptr); -static void Java_SampleForTests_iterateAndDoSomething(JNIEnv* env, const - base::android::JavaRef<jobject>& obj) { - jclass clazz = org_chromium_example_jni_1generator_SampleForTests_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_example_jni_1generator_SampleForTests_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "iterateAndDoSomething", - "()V", - &g_org_chromium_example_jni_1generator_SampleForTests_iterateAndDoSomething); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id); -} - -static std::atomic<jmethodID> - g_org_chromium_example_jni_1generator_SampleForTests_00024InnerStructB_getKey(nullptr); -static jlong Java_InnerStructB_getKey(JNIEnv* env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = org_chromium_example_jni_1generator_SampleForTests_00024InnerStructB_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_example_jni_1generator_SampleForTests_00024InnerStructB_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getKey", - "()J", - &g_org_chromium_example_jni_1generator_SampleForTests_00024InnerStructB_getKey); - - jlong ret = - env->CallLongMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> - g_org_chromium_example_jni_1generator_SampleForTests_00024InnerStructB_getValue(nullptr); -static base::android::ScopedJavaLocalRef<jstring> Java_InnerStructB_getValue(JNIEnv* env, const - base::android::JavaRef<jobject>& obj) { - jclass clazz = org_chromium_example_jni_1generator_SampleForTests_00024InnerStructB_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_example_jni_1generator_SampleForTests_00024InnerStructB_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getValue", - "()Ljava/lang/String;", - &g_org_chromium_example_jni_1generator_SampleForTests_00024InnerStructB_getValue); - - jstring ret = - static_cast<jstring>(env->CallObjectMethod(obj.obj(), - call_context.base.method_id)); - return base::android::ScopedJavaLocalRef<jstring>(env, ret); -} - -static std::atomic<jmethodID> - g_org_chromium_example_jni_1generator_SampleForTests_getInnerInterface(nullptr); -static base::android::ScopedJavaLocalRef<jobject> Java_SampleForTests_getInnerInterface(JNIEnv* env) - { - jclass clazz = org_chromium_example_jni_1generator_SampleForTests_clazz(env); - CHECK_CLAZZ(env, clazz, - org_chromium_example_jni_1generator_SampleForTests_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "getInnerInterface", - "()Lorg/chromium/example/jni_generator/SampleForTests$InnerInterface;", - &g_org_chromium_example_jni_1generator_SampleForTests_getInnerInterface); - - jobject ret = - env->CallStaticObjectMethod(clazz, - call_context.base.method_id); - return base::android::ScopedJavaLocalRef<jobject>(env, ret); -} - -static std::atomic<jmethodID> - g_org_chromium_example_jni_1generator_SampleForTests_getInnerEnum(nullptr); -static base::android::ScopedJavaLocalRef<jobject> Java_SampleForTests_getInnerEnum(JNIEnv* env) { - jclass clazz = org_chromium_example_jni_1generator_SampleForTests_clazz(env); - CHECK_CLAZZ(env, clazz, - org_chromium_example_jni_1generator_SampleForTests_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "getInnerEnum", - "()Lorg/chromium/example/jni_generator/SampleForTests$InnerEnum;", - &g_org_chromium_example_jni_1generator_SampleForTests_getInnerEnum); - - jobject ret = - env->CallStaticObjectMethod(clazz, - call_context.base.method_id); - return base::android::ScopedJavaLocalRef<jobject>(env, ret); -} - -} // namespace android -} // namespace base - -#endif // org_chromium_example_jni_generator_SampleForTests_JNI
diff --git a/base/android/jni_generator/golden/SampleForTests_jni.golden b/base/android/jni_generator/golden/SampleForTestsWithSplit_jni.h.golden similarity index 100% copy from base/android/jni_generator/golden/SampleForTests_jni.golden copy to base/android/jni_generator/golden/SampleForTestsWithSplit_jni.h.golden
diff --git a/base/android/jni_generator/golden/SampleForTests_jni.golden b/base/android/jni_generator/golden/SampleForTests_jni.h.golden similarity index 100% rename from base/android/jni_generator/golden/SampleForTests_jni.golden rename to base/android/jni_generator/golden/SampleForTests_jni.h.golden
diff --git a/base/android/jni_generator/golden/SampleForTestsWithPackagePrefix_jni.golden b/base/android/jni_generator/golden/SampleForTests_package_prefix_jni.h.golden similarity index 100% rename from base/android/jni_generator/golden/SampleForTestsWithPackagePrefix_jni.golden rename to base/android/jni_generator/golden/SampleForTests_package_prefix_jni.h.golden
diff --git a/base/android/jni_generator/golden/ModuleGenJni.golden b/base/android/jni_generator/golden/SampleModuleGenJni.golden similarity index 100% rename from base/android/jni_generator/golden/ModuleGenJni.golden rename to base/android/jni_generator/golden/SampleModuleGenJni.golden
diff --git a/base/android/jni_generator/golden/ModuleJN.golden b/base/android/jni_generator/golden/SampleModuleJN.golden similarity index 100% rename from base/android/jni_generator/golden/ModuleJN.golden rename to base/android/jni_generator/golden/SampleModuleJN.golden
diff --git a/base/android/jni_generator/golden/SampleNonProxy_class_file_jni.h.golden b/base/android/jni_generator/golden/SampleNonProxy_class_file_jni.h.golden new file mode 100644 index 0000000..4bc6468 --- /dev/null +++ b/base/android/jni_generator/golden/SampleNonProxy_class_file_jni.h.golden
@@ -0,0 +1,96 @@ +// Copyright 2014 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + + +// This file is autogenerated by +// base/android/jni_generator/jni_generator.py +// For +// org/chromium/example/jni_generator/SampleNonProxy + +#ifndef org_chromium_example_jni_generator_SampleNonProxy_JNI +#define org_chromium_example_jni_generator_SampleNonProxy_JNI + +#include <jni.h> + +#include "base/android/jni_generator/jni_generator_helper.h" + + +// Step 1: Forward declarations. + +JNI_REGISTRATION_EXPORT extern const char + kClassPath_org_chromium_example_jni_1generator_SampleNonProxy[]; +const char kClassPath_org_chromium_example_jni_1generator_SampleNonProxy[] = + "org/chromium/example/jni_generator/SampleNonProxy"; +// Leaking this jclass as we cannot use LazyInstance from some threads. +JNI_REGISTRATION_EXPORT std::atomic<jclass> + g_org_chromium_example_jni_1generator_SampleNonProxy_clazz(nullptr); +#ifndef org_chromium_example_jni_1generator_SampleNonProxy_clazz_defined +#define org_chromium_example_jni_1generator_SampleNonProxy_clazz_defined +inline jclass org_chromium_example_jni_1generator_SampleNonProxy_clazz(JNIEnv* env) { + return base::android::LazyGetClass(env, + kClassPath_org_chromium_example_jni_1generator_SampleNonProxy, + &g_org_chromium_example_jni_1generator_SampleNonProxy_clazz); +} +#endif + + +// Step 2: Constants (optional). + + +// Step 3: Method stubs. +namespace JNI_SampleNonProxy { + + +static std::atomic<jmethodID> + g_org_chromium_example_jni_1generator_SampleNonProxy_nativeFindAll(nullptr); +[[maybe_unused]] static jint Java_SampleNonProxy_nativeFindAll(JNIEnv* env, const + base::android::JavaRef<jobject>& obj, const base::android::JavaRef<jstring>& p0); +static jint Java_SampleNonProxy_nativeFindAll(JNIEnv* env, const base::android::JavaRef<jobject>& + obj, const base::android::JavaRef<jstring>& p0) { + jclass clazz = org_chromium_example_jni_1generator_SampleNonProxy_clazz(env); + CHECK_CLAZZ(env, obj.obj(), + org_chromium_example_jni_1generator_SampleNonProxy_clazz(env), 0); + + jni_generator::JniJavaCallContextChecked call_context; + call_context.Init< + base::android::MethodID::TYPE_INSTANCE>( + env, + clazz, + "nativeFindAll", + "(Ljava/lang/String;)I", + &g_org_chromium_example_jni_1generator_SampleNonProxy_nativeFindAll); + + jint ret = + env->CallIntMethod(obj.obj(), + call_context.base.method_id, p0.obj()); + return ret; +} + +static std::atomic<jmethodID> + g_org_chromium_example_jni_1generator_SampleNonProxy_Constructor(nullptr); +[[maybe_unused]] static base::android::ScopedJavaLocalRef<jobject> + Java_SampleNonProxy_Constructor(JNIEnv* env); +static base::android::ScopedJavaLocalRef<jobject> Java_SampleNonProxy_Constructor(JNIEnv* env) { + jclass clazz = org_chromium_example_jni_1generator_SampleNonProxy_clazz(env); + CHECK_CLAZZ(env, clazz, + org_chromium_example_jni_1generator_SampleNonProxy_clazz(env), NULL); + + jni_generator::JniJavaCallContextChecked call_context; + call_context.Init< + base::android::MethodID::TYPE_INSTANCE>( + env, + clazz, + "<init>", + "()V", + &g_org_chromium_example_jni_1generator_SampleNonProxy_Constructor); + + jobject ret = + env->NewObject(clazz, + call_context.base.method_id); + return base::android::ScopedJavaLocalRef<jobject>(env, ret); +} + +} // namespace JNI_SampleNonProxy + +#endif // org_chromium_example_jni_generator_SampleNonProxy_JNI
diff --git a/base/android/jni_generator/golden/SampleNonProxy_jni.h.golden b/base/android/jni_generator/golden/SampleNonProxy_jni.h.golden new file mode 100644 index 0000000..a4eaf4a --- /dev/null +++ b/base/android/jni_generator/golden/SampleNonProxy_jni.h.golden
@@ -0,0 +1,268 @@ +// Copyright 2014 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + + +// This file is autogenerated by +// base/android/jni_generator/jni_generator.py +// For +// org/chromium/example/jni_generator/SampleNonProxy + +#ifndef org_chromium_example_jni_generator_SampleNonProxy_JNI +#define org_chromium_example_jni_generator_SampleNonProxy_JNI + +#include <jni.h> + +#include "base/android/jni_generator/jni_generator_helper.h" + + +// Step 1: Forward declarations. + +JNI_REGISTRATION_EXPORT extern const char + kClassPath_org_chromium_example_jni_1generator_SampleNonProxy[]; +const char kClassPath_org_chromium_example_jni_1generator_SampleNonProxy[] = + "org/chromium/example/jni_generator/SampleNonProxy"; +// Leaking this jclass as we cannot use LazyInstance from some threads. +JNI_REGISTRATION_EXPORT std::atomic<jclass> + g_org_chromium_example_jni_1generator_SampleNonProxy_clazz(nullptr); +#ifndef org_chromium_example_jni_1generator_SampleNonProxy_clazz_defined +#define org_chromium_example_jni_1generator_SampleNonProxy_clazz_defined +inline jclass org_chromium_example_jni_1generator_SampleNonProxy_clazz(JNIEnv* env) { + return base::android::LazyGetClass(env, + kClassPath_org_chromium_example_jni_1generator_SampleNonProxy, + &g_org_chromium_example_jni_1generator_SampleNonProxy_clazz); +} +#endif + + +// Step 2: Constants (optional). + + +// Step 3: Method stubs. +static jint JNI_SampleNonProxy_Init(JNIEnv* env, const base::android::JavaParamRef<jobject>& + jcaller); + +JNI_GENERATOR_EXPORT jint Java_org_chromium_example_jni_1generator_SampleNonProxy_nativeInit( + JNIEnv* env, + jobject jcaller) { + return JNI_SampleNonProxy_Init(env, base::android::JavaParamRef<jobject>(env, jcaller)); +} + +static void JNI_SampleNonProxy_Destroy(JNIEnv* env, const base::android::JavaParamRef<jobject>& + jcaller, + jint nativeChromeBrowserProvider); + +JNI_GENERATOR_EXPORT void Java_org_chromium_example_jni_1generator_SampleNonProxy_nativeDestroy( + JNIEnv* env, + jobject jcaller, + jint nativeChromeBrowserProvider) { + return JNI_SampleNonProxy_Destroy(env, base::android::JavaParamRef<jobject>(env, jcaller), + nativeChromeBrowserProvider); +} + +static jlong JNI_SampleNonProxy_AddBookmark(JNIEnv* env, const base::android::JavaParamRef<jobject>& + jcaller, + jint nativeChromeBrowserProvider, + const base::android::JavaParamRef<jstring>& url, + const base::android::JavaParamRef<jstring>& title, + jboolean isFolder, + jlong parentId); + +JNI_GENERATOR_EXPORT jlong + Java_org_chromium_example_jni_1generator_SampleNonProxy_nativeAddBookmark( + JNIEnv* env, + jobject jcaller, + jint nativeChromeBrowserProvider, + jstring url, + jstring title, + jboolean isFolder, + jlong parentId) { + return JNI_SampleNonProxy_AddBookmark(env, base::android::JavaParamRef<jobject>(env, jcaller), + nativeChromeBrowserProvider, base::android::JavaParamRef<jstring>(env, url), + base::android::JavaParamRef<jstring>(env, title), isFolder, parentId); +} + +static base::android::ScopedJavaLocalRef<jstring> JNI_SampleNonProxy_GetDomainAndRegistry(JNIEnv* + env, const base::android::JavaParamRef<jstring>& url); + +JNI_GENERATOR_EXPORT jstring + Java_org_chromium_example_jni_1generator_SampleNonProxy_nativeGetDomainAndRegistry( + JNIEnv* env, + jclass jcaller, + jstring url) { + return JNI_SampleNonProxy_GetDomainAndRegistry(env, base::android::JavaParamRef<jstring>(env, + url)).Release(); +} + +static void JNI_SampleNonProxy_CreateHistoricalTabFromState(JNIEnv* env, const + base::android::JavaParamRef<jbyteArray>& state, + jint tabIndex); + +JNI_GENERATOR_EXPORT void + Java_org_chromium_example_jni_1generator_SampleNonProxy_nativeCreateHistoricalTabFromState( + JNIEnv* env, + jclass jcaller, + jbyteArray state, + jint tabIndex) { + return JNI_SampleNonProxy_CreateHistoricalTabFromState(env, + base::android::JavaParamRef<jbyteArray>(env, state), tabIndex); +} + +static base::android::ScopedJavaLocalRef<jbyteArray> JNI_SampleNonProxy_GetStateAsByteArray(JNIEnv* + env, const base::android::JavaParamRef<jobject>& jcaller, + const base::android::JavaParamRef<jobject>& view); + +JNI_GENERATOR_EXPORT jbyteArray + Java_org_chromium_example_jni_1generator_SampleNonProxy_nativeGetStateAsByteArray( + JNIEnv* env, + jobject jcaller, + jobject view) { + return JNI_SampleNonProxy_GetStateAsByteArray(env, base::android::JavaParamRef<jobject>(env, + jcaller), base::android::JavaParamRef<jobject>(env, view)).Release(); +} + +static base::android::ScopedJavaLocalRef<jobjectArray> + JNI_SampleNonProxy_GetAutofillProfileGUIDs(JNIEnv* env); + +JNI_GENERATOR_EXPORT jobjectArray + Java_org_chromium_example_jni_1generator_SampleNonProxy_nativeGetAutofillProfileGUIDs( + JNIEnv* env, + jclass jcaller) { + return JNI_SampleNonProxy_GetAutofillProfileGUIDs(env).Release(); +} + +static void JNI_SampleNonProxy_SetRecognitionResults(JNIEnv* env, const + base::android::JavaParamRef<jobject>& jcaller, + jint sessionId, + const base::android::JavaParamRef<jobjectArray>& results); + +JNI_GENERATOR_EXPORT void + Java_org_chromium_example_jni_1generator_SampleNonProxy_nativeSetRecognitionResults( + JNIEnv* env, + jobject jcaller, + jint sessionId, + jobjectArray results) { + return JNI_SampleNonProxy_SetRecognitionResults(env, base::android::JavaParamRef<jobject>(env, + jcaller), sessionId, base::android::JavaParamRef<jobjectArray>(env, results)); +} + +static jlong JNI_SampleNonProxy_AddBookmarkFromAPI(JNIEnv* env, const + base::android::JavaParamRef<jobject>& jcaller, + jint nativeChromeBrowserProvider, + const base::android::JavaParamRef<jstring>& url, + const base::android::JavaParamRef<jobject>& created, + const base::android::JavaParamRef<jobject>& isBookmark, + const base::android::JavaParamRef<jobject>& date, + const base::android::JavaParamRef<jbyteArray>& favicon, + const base::android::JavaParamRef<jstring>& title, + const base::android::JavaParamRef<jobject>& visits); + +JNI_GENERATOR_EXPORT jlong + Java_org_chromium_example_jni_1generator_SampleNonProxy_nativeAddBookmarkFromAPI( + JNIEnv* env, + jobject jcaller, + jint nativeChromeBrowserProvider, + jstring url, + jobject created, + jobject isBookmark, + jobject date, + jbyteArray favicon, + jstring title, + jobject visits) { + return JNI_SampleNonProxy_AddBookmarkFromAPI(env, base::android::JavaParamRef<jobject>(env, + jcaller), nativeChromeBrowserProvider, base::android::JavaParamRef<jstring>(env, url), + base::android::JavaParamRef<jobject>(env, created), base::android::JavaParamRef<jobject>(env, + isBookmark), base::android::JavaParamRef<jobject>(env, date), + base::android::JavaParamRef<jbyteArray>(env, favicon), + base::android::JavaParamRef<jstring>(env, title), base::android::JavaParamRef<jobject>(env, + visits)); +} + +static jint JNI_SampleNonProxy_FindAll(JNIEnv* env, const base::android::JavaParamRef<jobject>& + jcaller, + const base::android::JavaParamRef<jstring>& find); + +JNI_GENERATOR_EXPORT jint Java_org_chromium_example_jni_1generator_SampleNonProxy_nativeFindAll( + JNIEnv* env, + jobject jcaller, + jstring find) { + return JNI_SampleNonProxy_FindAll(env, base::android::JavaParamRef<jobject>(env, jcaller), + base::android::JavaParamRef<jstring>(env, find)); +} + +static base::android::ScopedJavaLocalRef<jobject> JNI_SampleNonProxy_GetInnerClass(JNIEnv* env); + +JNI_GENERATOR_EXPORT jobject + Java_org_chromium_example_jni_1generator_SampleNonProxy_nativeGetInnerClass( + JNIEnv* env, + jclass jcaller) { + return JNI_SampleNonProxy_GetInnerClass(env).Release(); +} + +static base::android::ScopedJavaLocalRef<jobject> JNI_SampleNonProxy_QueryBitmap(JNIEnv* env, const + base::android::JavaParamRef<jobject>& jcaller, + jint nativeChromeBrowserProvider, + const base::android::JavaParamRef<jobjectArray>& projection, + const base::android::JavaParamRef<jstring>& selection, + const base::android::JavaParamRef<jobjectArray>& selectionArgs, + const base::android::JavaParamRef<jstring>& sortOrder); + +JNI_GENERATOR_EXPORT jobject + Java_org_chromium_example_jni_1generator_SampleNonProxy_nativeQueryBitmap( + JNIEnv* env, + jobject jcaller, + jint nativeChromeBrowserProvider, + jobjectArray projection, + jstring selection, + jobjectArray selectionArgs, + jstring sortOrder) { + return JNI_SampleNonProxy_QueryBitmap(env, base::android::JavaParamRef<jobject>(env, jcaller), + nativeChromeBrowserProvider, base::android::JavaParamRef<jobjectArray>(env, projection), + base::android::JavaParamRef<jstring>(env, selection), + base::android::JavaParamRef<jobjectArray>(env, selectionArgs), + base::android::JavaParamRef<jstring>(env, sortOrder)).Release(); +} + +static void JNI_SampleNonProxy_GotOrientation(JNIEnv* env, const + base::android::JavaParamRef<jobject>& jcaller, + jint nativeDataFetcherImplAndroid, + jdouble alpha, + jdouble beta, + jdouble gamma); + +JNI_GENERATOR_EXPORT void + Java_org_chromium_example_jni_1generator_SampleNonProxy_nativeGotOrientation( + JNIEnv* env, + jobject jcaller, + jint nativeDataFetcherImplAndroid, + jdouble alpha, + jdouble beta, + jdouble gamma) { + return JNI_SampleNonProxy_GotOrientation(env, base::android::JavaParamRef<jobject>(env, jcaller), + nativeDataFetcherImplAndroid, alpha, beta, gamma); +} + +static base::android::ScopedJavaLocalRef<jthrowable> + JNI_SampleNonProxy_MessWithJavaException(JNIEnv* env, const + base::android::JavaParamRef<jthrowable>& e); + +JNI_GENERATOR_EXPORT jthrowable + Java_org_chromium_example_jni_1generator_SampleNonProxy_nativeMessWithJavaException( + JNIEnv* env, + jclass jcaller, + jthrowable e) { + return JNI_SampleNonProxy_MessWithJavaException(env, base::android::JavaParamRef<jthrowable>(env, + e)).Release(); +} + +static jint JNI_SampleNonProxy_Init(JNIEnv* env, const base::android::JavaParamRef<jobject>& + jcaller); + +JNI_GENERATOR_EXPORT jint Java_org_chromium_example_jni_1generator_SampleNonProxy_nativeInit( + JNIEnv* env, + jobject jcaller) { + return JNI_SampleNonProxy_Init(env, base::android::JavaParamRef<jobject>(env, jcaller)); +} + + +#endif // org_chromium_example_jni_generator_SampleNonProxy_JNI
diff --git a/base/android/jni_generator/golden/SampleUniqueAnnotations_jni.h.golden b/base/android/jni_generator/golden/SampleUniqueAnnotations_jni.h.golden new file mode 100644 index 0000000..b24ac020 --- /dev/null +++ b/base/android/jni_generator/golden/SampleUniqueAnnotations_jni.h.golden
@@ -0,0 +1,96 @@ +// Copyright 2014 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + + +// This file is autogenerated by +// base/android/jni_generator/jni_generator.py +// For +// org/chromium/example/jni_generator/SampleUniqueAnnotations + +#ifndef org_chromium_example_jni_generator_SampleUniqueAnnotations_JNI +#define org_chromium_example_jni_generator_SampleUniqueAnnotations_JNI + +#include <jni.h> + +#include "base/android/jni_generator/jni_generator_helper.h" + + +// Step 1: Forward declarations. + +JNI_REGISTRATION_EXPORT extern const char + kClassPath_org_chromium_example_jni_1generator_SampleUniqueAnnotations[]; +const char kClassPath_org_chromium_example_jni_1generator_SampleUniqueAnnotations[] = + "org/chromium/example/jni_generator/SampleUniqueAnnotations"; +// Leaking this jclass as we cannot use LazyInstance from some threads. +JNI_REGISTRATION_EXPORT std::atomic<jclass> + g_org_chromium_example_jni_1generator_SampleUniqueAnnotations_clazz(nullptr); +#ifndef org_chromium_example_jni_1generator_SampleUniqueAnnotations_clazz_defined +#define org_chromium_example_jni_1generator_SampleUniqueAnnotations_clazz_defined +inline jclass org_chromium_example_jni_1generator_SampleUniqueAnnotations_clazz(JNIEnv* env) { + return base::android::LazyGetClass(env, + kClassPath_org_chromium_example_jni_1generator_SampleUniqueAnnotations, + &g_org_chromium_example_jni_1generator_SampleUniqueAnnotations_clazz); +} +#endif + + +// Step 2: Constants (optional). + + +// Step 3: Method stubs. +JNI_GENERATOR_EXPORT void + Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleUniqueAnnotations_1foo( + JNIEnv* env, + jclass jcaller, + jlong nativePtr) { + FooAndroid::BarDelegate* native = reinterpret_cast<FooAndroid::BarDelegate*>(nativePtr); + CHECK_NATIVE_PTR(env, jcaller, native, "Foo"); + return native->Foo(env); +} + +static jint JNI_SampleUniqueAnnotations_Bar(JNIEnv* env, jint x, + jint y); + +JNI_GENERATOR_EXPORT jint + Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1jni_11generator_1SampleUniqueAnnotations_1bar( + JNIEnv* env, + jclass jcaller, + jint x, + jint y) { + return JNI_SampleUniqueAnnotations_Bar(env, x, y); +} + +JNI_GENERATOR_EXPORT void + Java_org_chromium_example_jni_1generator_SampleUniqueAnnotations_nativeCallWithQualifiedObject( + JNIEnv* env, + jobject jcaller, + jlong nativePtr) { + Foo::Bar* native = reinterpret_cast<Foo::Bar*>(nativePtr); + CHECK_NATIVE_PTR(env, jcaller, native, "CallWithQualifiedObject"); + return native->CallWithQualifiedObject(env, base::android::JavaParamRef<jobject>(env, jcaller)); +} + + +static std::atomic<jmethodID> + g_org_chromium_example_jni_1generator_SampleUniqueAnnotations_useBar1(nullptr); +static void Java_SampleUniqueAnnotations_useBar1(JNIEnv* env, const base::android::JavaRef<jobject>& + inner) { + jclass clazz = org_chromium_example_jni_1generator_SampleUniqueAnnotations_clazz(env); + CHECK_CLAZZ(env, clazz, + org_chromium_example_jni_1generator_SampleUniqueAnnotations_clazz(env)); + + jni_generator::JniJavaCallContextChecked call_context; + call_context.Init< + base::android::MethodID::TYPE_STATIC>( + env, + clazz, + "useBar1", + "(Lorg/chromium/example/jni_generator/Bar1$Inner;)V", + &g_org_chromium_example_jni_1generator_SampleUniqueAnnotations_useBar1); + + env->CallStaticVoidMethod(clazz, + call_context.base.method_id, inner.obj()); +} + +#endif // org_chromium_example_jni_generator_SampleUniqueAnnotations_JNI
diff --git a/base/android/jni_generator/golden/TinySample_enable_mocks_GenJni.java.golden b/base/android/jni_generator/golden/TinySample_enable_mocks_GenJni.java.golden new file mode 100644 index 0000000..ae8aabf --- /dev/null +++ b/base/android/jni_generator/golden/TinySample_enable_mocks_GenJni.java.golden
@@ -0,0 +1,20 @@ +// 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. + +package org.chromium.base.natives; + +// This file is autogenerated by +// base/android/jni_generator/jni_registration_generator.py +// Please do not change its content. + +public class GEN_JNI { + public static final boolean TESTING_ENABLED = true; + public static final boolean REQUIRE_MOCK = false; + + + // Hashed name: Java_J_N_MIkEiasS + public static native void org_chromium_example_jni_1generator_TinySample_foo(); + // Hashed name: Java_J_N_MtOQLwpt + public static native boolean org_chromium_example_jni_1generator_TinySample_bar(int a); +}
diff --git a/base/android/jni_generator/golden/TinySample_require_mocks_GenJni.java.golden b/base/android/jni_generator/golden/TinySample_require_mocks_GenJni.java.golden new file mode 100644 index 0000000..4b92074e --- /dev/null +++ b/base/android/jni_generator/golden/TinySample_require_mocks_GenJni.java.golden
@@ -0,0 +1,20 @@ +// 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. + +package org.chromium.base.natives; + +// This file is autogenerated by +// base/android/jni_generator/jni_registration_generator.py +// Please do not change its content. + +public class GEN_JNI { + public static final boolean TESTING_ENABLED = true; + public static final boolean REQUIRE_MOCK = true; + + + // Hashed name: Java_J_N_MIkEiasS + public static native void org_chromium_example_jni_1generator_TinySample_foo(); + // Hashed name: Java_J_N_MtOQLwpt + public static native boolean org_chromium_example_jni_1generator_TinySample_bar(int a); +}
diff --git a/base/android/jni_generator/golden/testCalledByNatives.golden b/base/android/jni_generator/golden/testCalledByNatives.golden deleted file mode 100644 index 2b34c97..0000000 --- a/base/android/jni_generator/golden/testCalledByNatives.golden +++ /dev/null
@@ -1,500 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - - -// This file is autogenerated by -// base/android/jni_generator/jni_generator.py -// For -// org/chromium/TestJni - -#ifndef org_chromium_TestJni_JNI -#define org_chromium_TestJni_JNI - -#include <jni.h> - -#include "base/android/jni_generator/jni_generator_helper.h" - - -// Step 1: Forward declarations. - -JNI_REGISTRATION_EXPORT extern const char kClassPath_org_chromium_TestJni[]; -const char kClassPath_org_chromium_TestJni[] = "org/chromium/TestJni"; - -JNI_REGISTRATION_EXPORT extern const char kClassPath_org_chromium_TestJni_00024InfoBar[]; -const char kClassPath_org_chromium_TestJni_00024InfoBar[] = "org/chromium/TestJni$InfoBar"; -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> g_org_chromium_TestJni_clazz(nullptr); -#ifndef org_chromium_TestJni_clazz_defined -#define org_chromium_TestJni_clazz_defined -inline jclass org_chromium_TestJni_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, kClassPath_org_chromium_TestJni, - &g_org_chromium_TestJni_clazz); -} -#endif -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> g_org_chromium_TestJni_00024InfoBar_clazz(nullptr); -#ifndef org_chromium_TestJni_00024InfoBar_clazz_defined -#define org_chromium_TestJni_00024InfoBar_clazz_defined -inline jclass org_chromium_TestJni_00024InfoBar_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, kClassPath_org_chromium_TestJni_00024InfoBar, - &g_org_chromium_TestJni_00024InfoBar_clazz); -} -#endif - - -// Step 2: Constants (optional). - - -// Step 3: Method stubs. - -static std::atomic<jmethodID> g_org_chromium_TestJni_showConfirmInfoBar(nullptr); -static base::android::ScopedJavaLocalRef<jobject> Java_TestJni_showConfirmInfoBar(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper nativeInfoBar, - const base::android::JavaRef<jstring>& buttonOk, - const base::android::JavaRef<jstring>& buttonCancel, - const base::android::JavaRef<jstring>& title, - const base::android::JavaRef<jobject>& icon) { - jclass clazz = org_chromium_TestJni_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_TestJni_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "showConfirmInfoBar", -"(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/graphics/Bitmap;)Lorg/chromium/Foo$InnerClass;", - &g_org_chromium_TestJni_showConfirmInfoBar); - - jobject ret = - env->CallObjectMethod(obj.obj(), - call_context.base.method_id, as_jint(nativeInfoBar), buttonOk.obj(), buttonCancel.obj(), - title.obj(), icon.obj()); - return base::android::ScopedJavaLocalRef<jobject>(env, ret); -} - -static std::atomic<jmethodID> g_org_chromium_TestJni_showAutoLoginInfoBar(nullptr); -static base::android::ScopedJavaLocalRef<jobject> Java_TestJni_showAutoLoginInfoBar(JNIEnv* env, - const base::android::JavaRef<jobject>& obj, JniIntWrapper nativeInfoBar, - const base::android::JavaRef<jstring>& realm, - const base::android::JavaRef<jstring>& account, - const base::android::JavaRef<jstring>& args) { - jclass clazz = org_chromium_TestJni_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_TestJni_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "showAutoLoginInfoBar", - "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/chromium/Foo$InnerClass;", - &g_org_chromium_TestJni_showAutoLoginInfoBar); - - jobject ret = - env->CallObjectMethod(obj.obj(), - call_context.base.method_id, as_jint(nativeInfoBar), realm.obj(), account.obj(), - args.obj()); - return base::android::ScopedJavaLocalRef<jobject>(env, ret); -} - -static std::atomic<jmethodID> g_org_chromium_TestJni_00024InfoBar_dismiss(nullptr); -static void Java_InfoBar_dismiss(JNIEnv* env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = org_chromium_TestJni_00024InfoBar_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_TestJni_00024InfoBar_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "dismiss", - "()V", - &g_org_chromium_TestJni_00024InfoBar_dismiss); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id); -} - -static std::atomic<jmethodID> g_org_chromium_TestJni_shouldShowAutoLogin(nullptr); -static jboolean Java_TestJni_shouldShowAutoLogin(JNIEnv* env, const base::android::JavaRef<jobject>& - view, - const base::android::JavaRef<jstring>& realm, - const base::android::JavaRef<jstring>& account, - const base::android::JavaRef<jstring>& args) { - jclass clazz = org_chromium_TestJni_clazz(env); - CHECK_CLAZZ(env, clazz, - org_chromium_TestJni_clazz(env), false); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "shouldShowAutoLogin", - "(Landroid/view/View;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z", - &g_org_chromium_TestJni_shouldShowAutoLogin); - - jboolean ret = - env->CallStaticBooleanMethod(clazz, - call_context.base.method_id, view.obj(), realm.obj(), account.obj(), args.obj()); - return ret; -} - -static std::atomic<jmethodID> g_org_chromium_TestJni_openUrl(nullptr); -static base::android::ScopedJavaLocalRef<jobject> Java_TestJni_openUrl(JNIEnv* env, const - base::android::JavaRef<jstring>& url) { - jclass clazz = org_chromium_TestJni_clazz(env); - CHECK_CLAZZ(env, clazz, - org_chromium_TestJni_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "openUrl", - "(Ljava/lang/String;)Ljava/io/InputStream;", - &g_org_chromium_TestJni_openUrl); - - jobject ret = - env->CallStaticObjectMethod(clazz, - call_context.base.method_id, url.obj()); - return base::android::ScopedJavaLocalRef<jobject>(env, ret); -} - -static std::atomic<jmethodID> g_org_chromium_TestJni_activateHardwareAcceleration(nullptr); -static void Java_TestJni_activateHardwareAcceleration(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, jboolean activated, - JniIntWrapper iPid, - JniIntWrapper iType, - JniIntWrapper iPrimaryID, - JniIntWrapper iSecondaryID) { - jclass clazz = org_chromium_TestJni_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_TestJni_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "activateHardwareAcceleration", - "(ZIIII)V", - &g_org_chromium_TestJni_activateHardwareAcceleration); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id, activated, as_jint(iPid), as_jint(iType), - as_jint(iPrimaryID), as_jint(iSecondaryID)); -} - -static std::atomic<jmethodID> g_org_chromium_TestJni_updateStatus(nullptr); -static jint Java_TestJni_updateStatus(JNIEnv* env, JniIntWrapper status) { - jclass clazz = org_chromium_TestJni_clazz(env); - CHECK_CLAZZ(env, clazz, - org_chromium_TestJni_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "updateStatus", - "(I)I", - &g_org_chromium_TestJni_updateStatus); - - jint ret = - env->CallStaticIntMethod(clazz, - call_context.base.method_id, as_jint(status)); - return ret; -} - -static std::atomic<jmethodID> g_org_chromium_TestJni_uncheckedCall(nullptr); -static void Java_TestJni_uncheckedCall(JNIEnv* env, const base::android::JavaRef<jobject>& obj, - JniIntWrapper iParam) { - jclass clazz = org_chromium_TestJni_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_TestJni_clazz(env)); - - jni_generator::JniJavaCallContextUnchecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "uncheckedCall", - "(I)V", - &g_org_chromium_TestJni_uncheckedCall); - - env->CallVoidMethod(obj.obj(), - call_context.method_id, as_jint(iParam)); -} - -static std::atomic<jmethodID> g_org_chromium_TestJni_returnByteArray(nullptr); -static base::android::ScopedJavaLocalRef<jbyteArray> Java_TestJni_returnByteArray(JNIEnv* env, const - base::android::JavaRef<jobject>& obj) { - jclass clazz = org_chromium_TestJni_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_TestJni_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "returnByteArray", - "()[B", - &g_org_chromium_TestJni_returnByteArray); - - jbyteArray ret = - static_cast<jbyteArray>(env->CallObjectMethod(obj.obj(), - call_context.base.method_id)); - return base::android::ScopedJavaLocalRef<jbyteArray>(env, ret); -} - -static std::atomic<jmethodID> g_org_chromium_TestJni_returnBooleanArray(nullptr); -static base::android::ScopedJavaLocalRef<jbooleanArray> Java_TestJni_returnBooleanArray(JNIEnv* env, - const base::android::JavaRef<jobject>& obj) { - jclass clazz = org_chromium_TestJni_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_TestJni_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "returnBooleanArray", - "()[Z", - &g_org_chromium_TestJni_returnBooleanArray); - - jbooleanArray ret = - static_cast<jbooleanArray>(env->CallObjectMethod(obj.obj(), - call_context.base.method_id)); - return base::android::ScopedJavaLocalRef<jbooleanArray>(env, ret); -} - -static std::atomic<jmethodID> g_org_chromium_TestJni_returnCharArray(nullptr); -static base::android::ScopedJavaLocalRef<jcharArray> Java_TestJni_returnCharArray(JNIEnv* env, const - base::android::JavaRef<jobject>& obj) { - jclass clazz = org_chromium_TestJni_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_TestJni_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "returnCharArray", - "()[C", - &g_org_chromium_TestJni_returnCharArray); - - jcharArray ret = - static_cast<jcharArray>(env->CallObjectMethod(obj.obj(), - call_context.base.method_id)); - return base::android::ScopedJavaLocalRef<jcharArray>(env, ret); -} - -static std::atomic<jmethodID> g_org_chromium_TestJni_returnShortArray(nullptr); -static base::android::ScopedJavaLocalRef<jshortArray> Java_TestJni_returnShortArray(JNIEnv* env, - const base::android::JavaRef<jobject>& obj) { - jclass clazz = org_chromium_TestJni_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_TestJni_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "returnShortArray", - "()[S", - &g_org_chromium_TestJni_returnShortArray); - - jshortArray ret = - static_cast<jshortArray>(env->CallObjectMethod(obj.obj(), - call_context.base.method_id)); - return base::android::ScopedJavaLocalRef<jshortArray>(env, ret); -} - -static std::atomic<jmethodID> g_org_chromium_TestJni_returnIntArray(nullptr); -static base::android::ScopedJavaLocalRef<jintArray> Java_TestJni_returnIntArray(JNIEnv* env, const - base::android::JavaRef<jobject>& obj) { - jclass clazz = org_chromium_TestJni_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_TestJni_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "returnIntArray", - "()[I", - &g_org_chromium_TestJni_returnIntArray); - - jintArray ret = - static_cast<jintArray>(env->CallObjectMethod(obj.obj(), - call_context.base.method_id)); - return base::android::ScopedJavaLocalRef<jintArray>(env, ret); -} - -static std::atomic<jmethodID> g_org_chromium_TestJni_returnLongArray(nullptr); -static base::android::ScopedJavaLocalRef<jlongArray> Java_TestJni_returnLongArray(JNIEnv* env, const - base::android::JavaRef<jobject>& obj) { - jclass clazz = org_chromium_TestJni_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_TestJni_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "returnLongArray", - "()[J", - &g_org_chromium_TestJni_returnLongArray); - - jlongArray ret = - static_cast<jlongArray>(env->CallObjectMethod(obj.obj(), - call_context.base.method_id)); - return base::android::ScopedJavaLocalRef<jlongArray>(env, ret); -} - -static std::atomic<jmethodID> g_org_chromium_TestJni_returnDoubleArray(nullptr); -static base::android::ScopedJavaLocalRef<jdoubleArray> Java_TestJni_returnDoubleArray(JNIEnv* env, - const base::android::JavaRef<jobject>& obj) { - jclass clazz = org_chromium_TestJni_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_TestJni_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "returnDoubleArray", - "()[D", - &g_org_chromium_TestJni_returnDoubleArray); - - jdoubleArray ret = - static_cast<jdoubleArray>(env->CallObjectMethod(obj.obj(), - call_context.base.method_id)); - return base::android::ScopedJavaLocalRef<jdoubleArray>(env, ret); -} - -static std::atomic<jmethodID> g_org_chromium_TestJni_returnObjectArray(nullptr); -static base::android::ScopedJavaLocalRef<jobjectArray> Java_TestJni_returnObjectArray(JNIEnv* env, - const base::android::JavaRef<jobject>& obj) { - jclass clazz = org_chromium_TestJni_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_TestJni_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "returnObjectArray", - "()[Ljava/lang/Object;", - &g_org_chromium_TestJni_returnObjectArray); - - jobjectArray ret = - static_cast<jobjectArray>(env->CallObjectMethod(obj.obj(), - call_context.base.method_id)); - return base::android::ScopedJavaLocalRef<jobjectArray>(env, ret); -} - -static std::atomic<jmethodID> g_org_chromium_TestJni_returnArrayOfByteArray(nullptr); -static base::android::ScopedJavaLocalRef<jobjectArray> Java_TestJni_returnArrayOfByteArray(JNIEnv* - env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = org_chromium_TestJni_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_TestJni_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "returnArrayOfByteArray", - "()[[B", - &g_org_chromium_TestJni_returnArrayOfByteArray); - - jobjectArray ret = - static_cast<jobjectArray>(env->CallObjectMethod(obj.obj(), - call_context.base.method_id)); - return base::android::ScopedJavaLocalRef<jobjectArray>(env, ret); -} - -static std::atomic<jmethodID> g_org_chromium_TestJni_getCompressFormat(nullptr); -static base::android::ScopedJavaLocalRef<jobject> Java_TestJni_getCompressFormat(JNIEnv* env, const - base::android::JavaRef<jobject>& obj) { - jclass clazz = org_chromium_TestJni_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_TestJni_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getCompressFormat", - "()Landroid/graphics/Bitmap$CompressFormat;", - &g_org_chromium_TestJni_getCompressFormat); - - jobject ret = - env->CallObjectMethod(obj.obj(), - call_context.base.method_id); - return base::android::ScopedJavaLocalRef<jobject>(env, ret); -} - -static std::atomic<jmethodID> g_org_chromium_TestJni_getCompressFormatList(nullptr); -static base::android::ScopedJavaLocalRef<jobject> Java_TestJni_getCompressFormatList(JNIEnv* env, - const base::android::JavaRef<jobject>& obj) { - jclass clazz = org_chromium_TestJni_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_TestJni_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getCompressFormatList", - "()Ljava/util/List;", - &g_org_chromium_TestJni_getCompressFormatList); - - jobject ret = - env->CallObjectMethod(obj.obj(), - call_context.base.method_id); - return base::android::ScopedJavaLocalRef<jobject>(env, ret); -} - -static std::atomic<jmethodID> g_org_chromium_TestJni_returnIntArrayForTesting(nullptr); -static base::android::ScopedJavaLocalRef<jintArray> Java_TestJni_returnIntArrayForTesting(JNIEnv* - env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = org_chromium_TestJni_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_TestJni_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "returnIntArrayForTesting", - "()[I", - &g_org_chromium_TestJni_returnIntArrayForTesting); - - jintArray ret = - static_cast<jintArray>(env->CallObjectMethod(obj.obj(), - call_context.base.method_id)); - return base::android::ScopedJavaLocalRef<jintArray>(env, ret); -} - -#endif // org_chromium_TestJni_JNI
diff --git a/base/android/jni_generator/golden/testConstantsFromJavaP.golden b/base/android/jni_generator/golden/testConstantsFromJavaP.golden deleted file mode 100644 index 0a787724..0000000 --- a/base/android/jni_generator/golden/testConstantsFromJavaP.golden +++ /dev/null
@@ -1,2320 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - - -// This file is autogenerated by -// base/android/jni_generator/jni_generator.py -// For -// android/view/MotionEvent - -#ifndef android_view_MotionEvent_JNI -#define android_view_MotionEvent_JNI - -#include <jni.h> - -#include "base/android/jni_generator/jni_generator_helper.h" - - -// Step 1: Forward declarations. - -JNI_REGISTRATION_EXPORT extern const char kClassPath_android_view_MotionEvent[]; -const char kClassPath_android_view_MotionEvent[] = "android/view/MotionEvent"; -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> g_android_view_MotionEvent_clazz(nullptr); -#ifndef android_view_MotionEvent_clazz_defined -#define android_view_MotionEvent_clazz_defined -inline jclass android_view_MotionEvent_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, kClassPath_android_view_MotionEvent, - &g_android_view_MotionEvent_clazz); -} -#endif - - -// Step 2: Constants (optional). - -namespace JNI_MotionEvent { - -enum Java_MotionEvent_constant_fields { - INVALID_POINTER_ID = -1, - ACTION_MASK = 255, - ACTION_DOWN = 0, - ACTION_UP = 1, - ACTION_MOVE = 2, - ACTION_CANCEL = 3, - ACTION_OUTSIDE = 4, - ACTION_POINTER_DOWN = 5, - ACTION_POINTER_UP = 6, - ACTION_HOVER_MOVE = 7, - ACTION_SCROLL = 8, - ACTION_HOVER_ENTER = 9, - ACTION_HOVER_EXIT = 10, - ACTION_POINTER_INDEX_MASK = 65280, - ACTION_POINTER_INDEX_SHIFT = 8, - ACTION_POINTER_1_DOWN = 5, - ACTION_POINTER_2_DOWN = 261, - ACTION_POINTER_3_DOWN = 517, - ACTION_POINTER_1_UP = 6, - ACTION_POINTER_2_UP = 262, - ACTION_POINTER_3_UP = 518, - ACTION_POINTER_ID_MASK = 65280, - ACTION_POINTER_ID_SHIFT = 8, - FLAG_WINDOW_IS_OBSCURED = 1, - EDGE_TOP = 1, - EDGE_BOTTOM = 2, - EDGE_LEFT = 4, - EDGE_RIGHT = 8, - AXIS_X = 0, - AXIS_Y = 1, - AXIS_PRESSURE = 2, - AXIS_SIZE = 3, - AXIS_TOUCH_MAJOR = 4, - AXIS_TOUCH_MINOR = 5, - AXIS_TOOL_MAJOR = 6, - AXIS_TOOL_MINOR = 7, - AXIS_ORIENTATION = 8, - AXIS_VSCROLL = 9, - AXIS_HSCROLL = 10, - AXIS_Z = 11, - AXIS_RX = 12, - AXIS_RY = 13, - AXIS_RZ = 14, - AXIS_HAT_X = 15, - AXIS_HAT_Y = 16, - AXIS_LTRIGGER = 17, - AXIS_RTRIGGER = 18, - AXIS_THROTTLE = 19, - AXIS_RUDDER = 20, - AXIS_WHEEL = 21, - AXIS_GAS = 22, - AXIS_BRAKE = 23, - AXIS_DISTANCE = 24, - AXIS_TILT = 25, - AXIS_GENERIC_1 = 32, - AXIS_GENERIC_2 = 33, - AXIS_GENERIC_3 = 34, - AXIS_GENERIC_4 = 35, - AXIS_GENERIC_5 = 36, - AXIS_GENERIC_6 = 37, - AXIS_GENERIC_7 = 38, - AXIS_GENERIC_8 = 39, - AXIS_GENERIC_9 = 40, - AXIS_GENERIC_10 = 41, - AXIS_GENERIC_11 = 42, - AXIS_GENERIC_12 = 43, - AXIS_GENERIC_13 = 44, - AXIS_GENERIC_14 = 45, - AXIS_GENERIC_15 = 46, - AXIS_GENERIC_16 = 47, - BUTTON_PRIMARY = 1, - BUTTON_SECONDARY = 2, - BUTTON_TERTIARY = 4, - BUTTON_BACK = 8, - BUTTON_FORWARD = 16, - TOOL_TYPE_UNKNOWN = 0, - TOOL_TYPE_FINGER = 1, - TOOL_TYPE_STYLUS = 2, - TOOL_TYPE_MOUSE = 3, - TOOL_TYPE_ERASER = 4, -}; - - -} // namespace JNI_MotionEvent -// Step 3: Method stubs. -namespace JNI_MotionEvent { - - -static std::atomic<jmethodID> g_android_view_MotionEvent_finalize(nullptr); -[[maybe_unused]] static void Java_MotionEvent_finalize(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static void Java_MotionEvent_finalize(JNIEnv* env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "finalize", - "()V", - &g_android_view_MotionEvent_finalize); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id); -} - -static std::atomic<jmethodID> - g_android_view_MotionEvent_obtainAVME_J_J_I_I_LAVMEPP_LAVMEPC_I_I_F_F_I_I_I_I(nullptr); -[[maybe_unused]] static base::android::ScopedJavaLocalRef<jobject> - Java_MotionEvent_obtainAVME_J_J_I_I_LAVMEPP_LAVMEPC_I_I_F_F_I_I_I_I(JNIEnv* env, jlong p0, - jlong p1, - JniIntWrapper p2, - JniIntWrapper p3, - const base::android::JavaRef<jobjectArray>& p4, - const base::android::JavaRef<jobjectArray>& p5, - JniIntWrapper p6, - JniIntWrapper p7, - jfloat p8, - jfloat p9, - JniIntWrapper p10, - JniIntWrapper p11, - JniIntWrapper p12, - JniIntWrapper p13); -static base::android::ScopedJavaLocalRef<jobject> - Java_MotionEvent_obtainAVME_J_J_I_I_LAVMEPP_LAVMEPC_I_I_F_F_I_I_I_I(JNIEnv* env, jlong p0, - jlong p1, - JniIntWrapper p2, - JniIntWrapper p3, - const base::android::JavaRef<jobjectArray>& p4, - const base::android::JavaRef<jobjectArray>& p5, - JniIntWrapper p6, - JniIntWrapper p7, - jfloat p8, - jfloat p9, - JniIntWrapper p10, - JniIntWrapper p11, - JniIntWrapper p12, - JniIntWrapper p13) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, clazz, - android_view_MotionEvent_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "obtain", -"(JJII[Landroid/view/MotionEvent$PointerProperties;[Landroid/view/MotionEvent$PointerCoords;IIFFIIII)Landroid/view/MotionEvent;", - &g_android_view_MotionEvent_obtainAVME_J_J_I_I_LAVMEPP_LAVMEPC_I_I_F_F_I_I_I_I); - - jobject ret = - env->CallStaticObjectMethod(clazz, - call_context.base.method_id, p0, p1, as_jint(p2), as_jint(p3), p4.obj(), p5.obj(), - as_jint(p6), as_jint(p7), p8, p9, as_jint(p10), as_jint(p11), as_jint(p12), - as_jint(p13)); - return base::android::ScopedJavaLocalRef<jobject>(env, ret); -} - -static std::atomic<jmethodID> - g_android_view_MotionEvent_obtainAVME_J_J_I_I_AI_LAVMEPC_I_F_F_I_I_I_I(nullptr); -[[maybe_unused]] static base::android::ScopedJavaLocalRef<jobject> - Java_MotionEvent_obtainAVME_J_J_I_I_AI_LAVMEPC_I_F_F_I_I_I_I(JNIEnv* env, jlong p0, - jlong p1, - JniIntWrapper p2, - JniIntWrapper p3, - const base::android::JavaRef<jintArray>& p4, - const base::android::JavaRef<jobjectArray>& p5, - JniIntWrapper p6, - jfloat p7, - jfloat p8, - JniIntWrapper p9, - JniIntWrapper p10, - JniIntWrapper p11, - JniIntWrapper p12); -static base::android::ScopedJavaLocalRef<jobject> - Java_MotionEvent_obtainAVME_J_J_I_I_AI_LAVMEPC_I_F_F_I_I_I_I(JNIEnv* env, jlong p0, - jlong p1, - JniIntWrapper p2, - JniIntWrapper p3, - const base::android::JavaRef<jintArray>& p4, - const base::android::JavaRef<jobjectArray>& p5, - JniIntWrapper p6, - jfloat p7, - jfloat p8, - JniIntWrapper p9, - JniIntWrapper p10, - JniIntWrapper p11, - JniIntWrapper p12) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, clazz, - android_view_MotionEvent_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "obtain", - "(JJII[I[Landroid/view/MotionEvent$PointerCoords;IFFIIII)Landroid/view/MotionEvent;", - &g_android_view_MotionEvent_obtainAVME_J_J_I_I_AI_LAVMEPC_I_F_F_I_I_I_I); - - jobject ret = - env->CallStaticObjectMethod(clazz, - call_context.base.method_id, p0, p1, as_jint(p2), as_jint(p3), p4.obj(), p5.obj(), - as_jint(p6), p7, p8, as_jint(p9), as_jint(p10), as_jint(p11), as_jint(p12)); - return base::android::ScopedJavaLocalRef<jobject>(env, ret); -} - -static std::atomic<jmethodID> - g_android_view_MotionEvent_obtainAVME_J_J_I_F_F_F_F_I_F_F_I_I(nullptr); -[[maybe_unused]] static base::android::ScopedJavaLocalRef<jobject> - Java_MotionEvent_obtainAVME_J_J_I_F_F_F_F_I_F_F_I_I(JNIEnv* env, jlong p0, - jlong p1, - JniIntWrapper p2, - jfloat p3, - jfloat p4, - jfloat p5, - jfloat p6, - JniIntWrapper p7, - jfloat p8, - jfloat p9, - JniIntWrapper p10, - JniIntWrapper p11); -static base::android::ScopedJavaLocalRef<jobject> - Java_MotionEvent_obtainAVME_J_J_I_F_F_F_F_I_F_F_I_I(JNIEnv* env, jlong p0, - jlong p1, - JniIntWrapper p2, - jfloat p3, - jfloat p4, - jfloat p5, - jfloat p6, - JniIntWrapper p7, - jfloat p8, - jfloat p9, - JniIntWrapper p10, - JniIntWrapper p11) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, clazz, - android_view_MotionEvent_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "obtain", - "(JJIFFFFIFFII)Landroid/view/MotionEvent;", - &g_android_view_MotionEvent_obtainAVME_J_J_I_F_F_F_F_I_F_F_I_I); - - jobject ret = - env->CallStaticObjectMethod(clazz, - call_context.base.method_id, p0, p1, as_jint(p2), p3, p4, p5, p6, as_jint(p7), p8, p9, - as_jint(p10), as_jint(p11)); - return base::android::ScopedJavaLocalRef<jobject>(env, ret); -} - -static std::atomic<jmethodID> - g_android_view_MotionEvent_obtainAVME_J_J_I_I_F_F_F_F_I_F_F_I_I(nullptr); -[[maybe_unused]] static base::android::ScopedJavaLocalRef<jobject> - Java_MotionEvent_obtainAVME_J_J_I_I_F_F_F_F_I_F_F_I_I(JNIEnv* env, jlong p0, - jlong p1, - JniIntWrapper p2, - JniIntWrapper p3, - jfloat p4, - jfloat p5, - jfloat p6, - jfloat p7, - JniIntWrapper p8, - jfloat p9, - jfloat p10, - JniIntWrapper p11, - JniIntWrapper p12); -static base::android::ScopedJavaLocalRef<jobject> - Java_MotionEvent_obtainAVME_J_J_I_I_F_F_F_F_I_F_F_I_I(JNIEnv* env, jlong p0, - jlong p1, - JniIntWrapper p2, - JniIntWrapper p3, - jfloat p4, - jfloat p5, - jfloat p6, - jfloat p7, - JniIntWrapper p8, - jfloat p9, - jfloat p10, - JniIntWrapper p11, - JniIntWrapper p12) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, clazz, - android_view_MotionEvent_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "obtain", - "(JJIIFFFFIFFII)Landroid/view/MotionEvent;", - &g_android_view_MotionEvent_obtainAVME_J_J_I_I_F_F_F_F_I_F_F_I_I); - - jobject ret = - env->CallStaticObjectMethod(clazz, - call_context.base.method_id, p0, p1, as_jint(p2), as_jint(p3), p4, p5, p6, p7, - as_jint(p8), p9, p10, as_jint(p11), as_jint(p12)); - return base::android::ScopedJavaLocalRef<jobject>(env, ret); -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_obtainAVME_J_J_I_F_F_I(nullptr); -[[maybe_unused]] static base::android::ScopedJavaLocalRef<jobject> - Java_MotionEvent_obtainAVME_J_J_I_F_F_I(JNIEnv* env, jlong p0, - jlong p1, - JniIntWrapper p2, - jfloat p3, - jfloat p4, - JniIntWrapper p5); -static base::android::ScopedJavaLocalRef<jobject> Java_MotionEvent_obtainAVME_J_J_I_F_F_I(JNIEnv* - env, jlong p0, - jlong p1, - JniIntWrapper p2, - jfloat p3, - jfloat p4, - JniIntWrapper p5) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, clazz, - android_view_MotionEvent_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "obtain", - "(JJIFFI)Landroid/view/MotionEvent;", - &g_android_view_MotionEvent_obtainAVME_J_J_I_F_F_I); - - jobject ret = - env->CallStaticObjectMethod(clazz, - call_context.base.method_id, p0, p1, as_jint(p2), p3, p4, as_jint(p5)); - return base::android::ScopedJavaLocalRef<jobject>(env, ret); -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_obtainAVME_AVME(nullptr); -[[maybe_unused]] static base::android::ScopedJavaLocalRef<jobject> - Java_MotionEvent_obtainAVME_AVME(JNIEnv* env, const base::android::JavaRef<jobject>& p0); -static base::android::ScopedJavaLocalRef<jobject> Java_MotionEvent_obtainAVME_AVME(JNIEnv* env, - const base::android::JavaRef<jobject>& p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, clazz, - android_view_MotionEvent_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "obtain", - "(Landroid/view/MotionEvent;)Landroid/view/MotionEvent;", - &g_android_view_MotionEvent_obtainAVME_AVME); - - jobject ret = - env->CallStaticObjectMethod(clazz, - call_context.base.method_id, p0.obj()); - return base::android::ScopedJavaLocalRef<jobject>(env, ret); -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_obtainNoHistory(nullptr); -[[maybe_unused]] static base::android::ScopedJavaLocalRef<jobject> - Java_MotionEvent_obtainNoHistory(JNIEnv* env, const base::android::JavaRef<jobject>& p0); -static base::android::ScopedJavaLocalRef<jobject> Java_MotionEvent_obtainNoHistory(JNIEnv* env, - const base::android::JavaRef<jobject>& p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, clazz, - android_view_MotionEvent_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "obtainNoHistory", - "(Landroid/view/MotionEvent;)Landroid/view/MotionEvent;", - &g_android_view_MotionEvent_obtainNoHistory); - - jobject ret = - env->CallStaticObjectMethod(clazz, - call_context.base.method_id, p0.obj()); - return base::android::ScopedJavaLocalRef<jobject>(env, ret); -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_recycle(nullptr); -[[maybe_unused]] static void Java_MotionEvent_recycle(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static void Java_MotionEvent_recycle(JNIEnv* env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "recycle", - "()V", - &g_android_view_MotionEvent_recycle); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id); -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getDeviceId(nullptr); -[[maybe_unused]] static jint Java_MotionEvent_getDeviceId(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jint Java_MotionEvent_getDeviceId(JNIEnv* env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getDeviceId", - "()I", - &g_android_view_MotionEvent_getDeviceId); - - jint ret = - env->CallIntMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getSource(nullptr); -[[maybe_unused]] static jint Java_MotionEvent_getSource(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jint Java_MotionEvent_getSource(JNIEnv* env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getSource", - "()I", - &g_android_view_MotionEvent_getSource); - - jint ret = - env->CallIntMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_setSource(nullptr); -[[maybe_unused]] static void Java_MotionEvent_setSource(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static void Java_MotionEvent_setSource(JNIEnv* env, const base::android::JavaRef<jobject>& obj, - JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "setSource", - "(I)V", - &g_android_view_MotionEvent_setSource); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getAction(nullptr); -[[maybe_unused]] static jint Java_MotionEvent_getAction(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jint Java_MotionEvent_getAction(JNIEnv* env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getAction", - "()I", - &g_android_view_MotionEvent_getAction); - - jint ret = - env->CallIntMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getActionMasked(nullptr); -[[maybe_unused]] static jint Java_MotionEvent_getActionMasked(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jint Java_MotionEvent_getActionMasked(JNIEnv* env, const base::android::JavaRef<jobject>& - obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getActionMasked", - "()I", - &g_android_view_MotionEvent_getActionMasked); - - jint ret = - env->CallIntMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getActionIndex(nullptr); -[[maybe_unused]] static jint Java_MotionEvent_getActionIndex(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jint Java_MotionEvent_getActionIndex(JNIEnv* env, const base::android::JavaRef<jobject>& obj) - { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getActionIndex", - "()I", - &g_android_view_MotionEvent_getActionIndex); - - jint ret = - env->CallIntMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getFlags(nullptr); -[[maybe_unused]] static jint Java_MotionEvent_getFlags(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jint Java_MotionEvent_getFlags(JNIEnv* env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getFlags", - "()I", - &g_android_view_MotionEvent_getFlags); - - jint ret = - env->CallIntMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getDownTime(nullptr); -[[maybe_unused]] static jlong Java_MotionEvent_getDownTime(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jlong Java_MotionEvent_getDownTime(JNIEnv* env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getDownTime", - "()J", - &g_android_view_MotionEvent_getDownTime); - - jlong ret = - env->CallLongMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getEventTime(nullptr); -[[maybe_unused]] static jlong Java_MotionEvent_getEventTime(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jlong Java_MotionEvent_getEventTime(JNIEnv* env, const base::android::JavaRef<jobject>& obj) - { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getEventTime", - "()J", - &g_android_view_MotionEvent_getEventTime); - - jlong ret = - env->CallLongMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getXF(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getXF(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jfloat Java_MotionEvent_getXF(JNIEnv* env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getX", - "()F", - &g_android_view_MotionEvent_getXF); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getYF(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getYF(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jfloat Java_MotionEvent_getYF(JNIEnv* env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getY", - "()F", - &g_android_view_MotionEvent_getYF); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getPressureF(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getPressureF(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jfloat Java_MotionEvent_getPressureF(JNIEnv* env, const base::android::JavaRef<jobject>& obj) - { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getPressure", - "()F", - &g_android_view_MotionEvent_getPressureF); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getSizeF(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getSizeF(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jfloat Java_MotionEvent_getSizeF(JNIEnv* env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getSize", - "()F", - &g_android_view_MotionEvent_getSizeF); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getTouchMajorF(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getTouchMajorF(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jfloat Java_MotionEvent_getTouchMajorF(JNIEnv* env, const base::android::JavaRef<jobject>& - obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getTouchMajor", - "()F", - &g_android_view_MotionEvent_getTouchMajorF); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getTouchMinorF(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getTouchMinorF(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jfloat Java_MotionEvent_getTouchMinorF(JNIEnv* env, const base::android::JavaRef<jobject>& - obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getTouchMinor", - "()F", - &g_android_view_MotionEvent_getTouchMinorF); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getToolMajorF(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getToolMajorF(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jfloat Java_MotionEvent_getToolMajorF(JNIEnv* env, const base::android::JavaRef<jobject>& - obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getToolMajor", - "()F", - &g_android_view_MotionEvent_getToolMajorF); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getToolMinorF(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getToolMinorF(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jfloat Java_MotionEvent_getToolMinorF(JNIEnv* env, const base::android::JavaRef<jobject>& - obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getToolMinor", - "()F", - &g_android_view_MotionEvent_getToolMinorF); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getOrientationF(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getOrientationF(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jfloat Java_MotionEvent_getOrientationF(JNIEnv* env, const base::android::JavaRef<jobject>& - obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getOrientation", - "()F", - &g_android_view_MotionEvent_getOrientationF); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getAxisValueF_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getAxisValueF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static jfloat Java_MotionEvent_getAxisValueF_I(JNIEnv* env, const base::android::JavaRef<jobject>& - obj, JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getAxisValue", - "(I)F", - &g_android_view_MotionEvent_getAxisValueF_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getPointerCount(nullptr); -[[maybe_unused]] static jint Java_MotionEvent_getPointerCount(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jint Java_MotionEvent_getPointerCount(JNIEnv* env, const base::android::JavaRef<jobject>& - obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getPointerCount", - "()I", - &g_android_view_MotionEvent_getPointerCount); - - jint ret = - env->CallIntMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getPointerId(nullptr); -[[maybe_unused]] static jint Java_MotionEvent_getPointerId(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static jint Java_MotionEvent_getPointerId(JNIEnv* env, const base::android::JavaRef<jobject>& obj, - JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getPointerId", - "(I)I", - &g_android_view_MotionEvent_getPointerId); - - jint ret = - env->CallIntMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getToolType(nullptr); -[[maybe_unused]] static jint Java_MotionEvent_getToolType(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static jint Java_MotionEvent_getToolType(JNIEnv* env, const base::android::JavaRef<jobject>& obj, - JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getToolType", - "(I)I", - &g_android_view_MotionEvent_getToolType); - - jint ret = - env->CallIntMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_findPointerIndex(nullptr); -[[maybe_unused]] static jint Java_MotionEvent_findPointerIndex(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static jint Java_MotionEvent_findPointerIndex(JNIEnv* env, const base::android::JavaRef<jobject>& - obj, JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "findPointerIndex", - "(I)I", - &g_android_view_MotionEvent_findPointerIndex); - - jint ret = - env->CallIntMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getXF_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getXF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static jfloat Java_MotionEvent_getXF_I(JNIEnv* env, const base::android::JavaRef<jobject>& obj, - JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getX", - "(I)F", - &g_android_view_MotionEvent_getXF_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getYF_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getYF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static jfloat Java_MotionEvent_getYF_I(JNIEnv* env, const base::android::JavaRef<jobject>& obj, - JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getY", - "(I)F", - &g_android_view_MotionEvent_getYF_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getPressureF_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getPressureF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static jfloat Java_MotionEvent_getPressureF_I(JNIEnv* env, const base::android::JavaRef<jobject>& - obj, JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getPressure", - "(I)F", - &g_android_view_MotionEvent_getPressureF_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getSizeF_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getSizeF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static jfloat Java_MotionEvent_getSizeF_I(JNIEnv* env, const base::android::JavaRef<jobject>& obj, - JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getSize", - "(I)F", - &g_android_view_MotionEvent_getSizeF_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getTouchMajorF_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getTouchMajorF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static jfloat Java_MotionEvent_getTouchMajorF_I(JNIEnv* env, const base::android::JavaRef<jobject>& - obj, JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getTouchMajor", - "(I)F", - &g_android_view_MotionEvent_getTouchMajorF_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getTouchMinorF_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getTouchMinorF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static jfloat Java_MotionEvent_getTouchMinorF_I(JNIEnv* env, const base::android::JavaRef<jobject>& - obj, JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getTouchMinor", - "(I)F", - &g_android_view_MotionEvent_getTouchMinorF_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getToolMajorF_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getToolMajorF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static jfloat Java_MotionEvent_getToolMajorF_I(JNIEnv* env, const base::android::JavaRef<jobject>& - obj, JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getToolMajor", - "(I)F", - &g_android_view_MotionEvent_getToolMajorF_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getToolMinorF_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getToolMinorF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static jfloat Java_MotionEvent_getToolMinorF_I(JNIEnv* env, const base::android::JavaRef<jobject>& - obj, JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getToolMinor", - "(I)F", - &g_android_view_MotionEvent_getToolMinorF_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getOrientationF_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getOrientationF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static jfloat Java_MotionEvent_getOrientationF_I(JNIEnv* env, const base::android::JavaRef<jobject>& - obj, JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getOrientation", - "(I)F", - &g_android_view_MotionEvent_getOrientationF_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getAxisValueF_I_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getAxisValueF_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1); -static jfloat Java_MotionEvent_getAxisValueF_I_I(JNIEnv* env, const base::android::JavaRef<jobject>& - obj, JniIntWrapper p0, - JniIntWrapper p1) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getAxisValue", - "(II)F", - &g_android_view_MotionEvent_getAxisValueF_I_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0), as_jint(p1)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getPointerCoords(nullptr); -[[maybe_unused]] static void Java_MotionEvent_getPointerCoords(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - const base::android::JavaRef<jobject>& p1); -static void Java_MotionEvent_getPointerCoords(JNIEnv* env, const base::android::JavaRef<jobject>& - obj, JniIntWrapper p0, - const base::android::JavaRef<jobject>& p1) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getPointerCoords", - "(ILandroid/view/MotionEvent$PointerCoords;)V", - &g_android_view_MotionEvent_getPointerCoords); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id, as_jint(p0), p1.obj()); -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getPointerProperties(nullptr); -[[maybe_unused]] static void Java_MotionEvent_getPointerProperties(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - const base::android::JavaRef<jobject>& p1); -static void Java_MotionEvent_getPointerProperties(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - const base::android::JavaRef<jobject>& p1) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getPointerProperties", - "(ILandroid/view/MotionEvent$PointerProperties;)V", - &g_android_view_MotionEvent_getPointerProperties); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id, as_jint(p0), p1.obj()); -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getMetaState(nullptr); -[[maybe_unused]] static jint Java_MotionEvent_getMetaState(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jint Java_MotionEvent_getMetaState(JNIEnv* env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getMetaState", - "()I", - &g_android_view_MotionEvent_getMetaState); - - jint ret = - env->CallIntMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getButtonState(nullptr); -[[maybe_unused]] static jint Java_MotionEvent_getButtonState(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jint Java_MotionEvent_getButtonState(JNIEnv* env, const base::android::JavaRef<jobject>& obj) - { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getButtonState", - "()I", - &g_android_view_MotionEvent_getButtonState); - - jint ret = - env->CallIntMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getRawX(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getRawX(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jfloat Java_MotionEvent_getRawX(JNIEnv* env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getRawX", - "()F", - &g_android_view_MotionEvent_getRawX); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getRawY(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getRawY(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jfloat Java_MotionEvent_getRawY(JNIEnv* env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getRawY", - "()F", - &g_android_view_MotionEvent_getRawY); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getXPrecision(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getXPrecision(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jfloat Java_MotionEvent_getXPrecision(JNIEnv* env, const base::android::JavaRef<jobject>& - obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getXPrecision", - "()F", - &g_android_view_MotionEvent_getXPrecision); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getYPrecision(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getYPrecision(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jfloat Java_MotionEvent_getYPrecision(JNIEnv* env, const base::android::JavaRef<jobject>& - obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getYPrecision", - "()F", - &g_android_view_MotionEvent_getYPrecision); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getHistorySize(nullptr); -[[maybe_unused]] static jint Java_MotionEvent_getHistorySize(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jint Java_MotionEvent_getHistorySize(JNIEnv* env, const base::android::JavaRef<jobject>& obj) - { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getHistorySize", - "()I", - &g_android_view_MotionEvent_getHistorySize); - - jint ret = - env->CallIntMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getHistoricalEventTime(nullptr); -[[maybe_unused]] static jlong Java_MotionEvent_getHistoricalEventTime(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static jlong Java_MotionEvent_getHistoricalEventTime(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getHistoricalEventTime", - "(I)J", - &g_android_view_MotionEvent_getHistoricalEventTime); - - jlong ret = - env->CallLongMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getHistoricalXF_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getHistoricalXF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static jfloat Java_MotionEvent_getHistoricalXF_I(JNIEnv* env, const base::android::JavaRef<jobject>& - obj, JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getHistoricalX", - "(I)F", - &g_android_view_MotionEvent_getHistoricalXF_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getHistoricalYF_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getHistoricalYF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static jfloat Java_MotionEvent_getHistoricalYF_I(JNIEnv* env, const base::android::JavaRef<jobject>& - obj, JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getHistoricalY", - "(I)F", - &g_android_view_MotionEvent_getHistoricalYF_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getHistoricalPressureF_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getHistoricalPressureF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static jfloat Java_MotionEvent_getHistoricalPressureF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getHistoricalPressure", - "(I)F", - &g_android_view_MotionEvent_getHistoricalPressureF_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getHistoricalSizeF_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getHistoricalSizeF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static jfloat Java_MotionEvent_getHistoricalSizeF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getHistoricalSize", - "(I)F", - &g_android_view_MotionEvent_getHistoricalSizeF_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getHistoricalTouchMajorF_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getHistoricalTouchMajorF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static jfloat Java_MotionEvent_getHistoricalTouchMajorF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getHistoricalTouchMajor", - "(I)F", - &g_android_view_MotionEvent_getHistoricalTouchMajorF_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getHistoricalTouchMinorF_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getHistoricalTouchMinorF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static jfloat Java_MotionEvent_getHistoricalTouchMinorF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getHistoricalTouchMinor", - "(I)F", - &g_android_view_MotionEvent_getHistoricalTouchMinorF_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getHistoricalToolMajorF_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getHistoricalToolMajorF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static jfloat Java_MotionEvent_getHistoricalToolMajorF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getHistoricalToolMajor", - "(I)F", - &g_android_view_MotionEvent_getHistoricalToolMajorF_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getHistoricalToolMinorF_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getHistoricalToolMinorF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static jfloat Java_MotionEvent_getHistoricalToolMinorF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getHistoricalToolMinor", - "(I)F", - &g_android_view_MotionEvent_getHistoricalToolMinorF_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getHistoricalOrientationF_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getHistoricalOrientationF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static jfloat Java_MotionEvent_getHistoricalOrientationF_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getHistoricalOrientation", - "(I)F", - &g_android_view_MotionEvent_getHistoricalOrientationF_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getHistoricalAxisValueF_I_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getHistoricalAxisValueF_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1); -static jfloat Java_MotionEvent_getHistoricalAxisValueF_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getHistoricalAxisValue", - "(II)F", - &g_android_view_MotionEvent_getHistoricalAxisValueF_I_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0), as_jint(p1)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getHistoricalXF_I_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getHistoricalXF_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1); -static jfloat Java_MotionEvent_getHistoricalXF_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getHistoricalX", - "(II)F", - &g_android_view_MotionEvent_getHistoricalXF_I_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0), as_jint(p1)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getHistoricalYF_I_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getHistoricalYF_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1); -static jfloat Java_MotionEvent_getHistoricalYF_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getHistoricalY", - "(II)F", - &g_android_view_MotionEvent_getHistoricalYF_I_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0), as_jint(p1)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getHistoricalPressureF_I_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getHistoricalPressureF_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1); -static jfloat Java_MotionEvent_getHistoricalPressureF_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getHistoricalPressure", - "(II)F", - &g_android_view_MotionEvent_getHistoricalPressureF_I_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0), as_jint(p1)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getHistoricalSizeF_I_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getHistoricalSizeF_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1); -static jfloat Java_MotionEvent_getHistoricalSizeF_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getHistoricalSize", - "(II)F", - &g_android_view_MotionEvent_getHistoricalSizeF_I_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0), as_jint(p1)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getHistoricalTouchMajorF_I_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getHistoricalTouchMajorF_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1); -static jfloat Java_MotionEvent_getHistoricalTouchMajorF_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getHistoricalTouchMajor", - "(II)F", - &g_android_view_MotionEvent_getHistoricalTouchMajorF_I_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0), as_jint(p1)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getHistoricalTouchMinorF_I_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getHistoricalTouchMinorF_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1); -static jfloat Java_MotionEvent_getHistoricalTouchMinorF_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getHistoricalTouchMinor", - "(II)F", - &g_android_view_MotionEvent_getHistoricalTouchMinorF_I_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0), as_jint(p1)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getHistoricalToolMajorF_I_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getHistoricalToolMajorF_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1); -static jfloat Java_MotionEvent_getHistoricalToolMajorF_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getHistoricalToolMajor", - "(II)F", - &g_android_view_MotionEvent_getHistoricalToolMajorF_I_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0), as_jint(p1)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getHistoricalToolMinorF_I_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getHistoricalToolMinorF_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1); -static jfloat Java_MotionEvent_getHistoricalToolMinorF_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getHistoricalToolMinor", - "(II)F", - &g_android_view_MotionEvent_getHistoricalToolMinorF_I_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0), as_jint(p1)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getHistoricalOrientationF_I_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getHistoricalOrientationF_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1); -static jfloat Java_MotionEvent_getHistoricalOrientationF_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getHistoricalOrientation", - "(II)F", - &g_android_view_MotionEvent_getHistoricalOrientationF_I_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0), as_jint(p1)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getHistoricalAxisValueF_I_I_I(nullptr); -[[maybe_unused]] static jfloat Java_MotionEvent_getHistoricalAxisValueF_I_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1, - JniIntWrapper p2); -static jfloat Java_MotionEvent_getHistoricalAxisValueF_I_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1, - JniIntWrapper p2) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getHistoricalAxisValue", - "(III)F", - &g_android_view_MotionEvent_getHistoricalAxisValueF_I_I_I); - - jfloat ret = - env->CallFloatMethod(obj.obj(), - call_context.base.method_id, as_jint(p0), as_jint(p1), as_jint(p2)); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getHistoricalPointerCoords(nullptr); -[[maybe_unused]] static void Java_MotionEvent_getHistoricalPointerCoords(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1, - const base::android::JavaRef<jobject>& p2); -static void Java_MotionEvent_getHistoricalPointerCoords(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0, - JniIntWrapper p1, - const base::android::JavaRef<jobject>& p2) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getHistoricalPointerCoords", - "(IILandroid/view/MotionEvent$PointerCoords;)V", - &g_android_view_MotionEvent_getHistoricalPointerCoords); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id, as_jint(p0), as_jint(p1), p2.obj()); -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_getEdgeFlags(nullptr); -[[maybe_unused]] static jint Java_MotionEvent_getEdgeFlags(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jint Java_MotionEvent_getEdgeFlags(JNIEnv* env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getEdgeFlags", - "()I", - &g_android_view_MotionEvent_getEdgeFlags); - - jint ret = - env->CallIntMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_setEdgeFlags(nullptr); -[[maybe_unused]] static void Java_MotionEvent_setEdgeFlags(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static void Java_MotionEvent_setEdgeFlags(JNIEnv* env, const base::android::JavaRef<jobject>& obj, - JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "setEdgeFlags", - "(I)V", - &g_android_view_MotionEvent_setEdgeFlags); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_setAction(nullptr); -[[maybe_unused]] static void Java_MotionEvent_setAction(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static void Java_MotionEvent_setAction(JNIEnv* env, const base::android::JavaRef<jobject>& obj, - JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "setAction", - "(I)V", - &g_android_view_MotionEvent_setAction); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_offsetLocation(nullptr); -[[maybe_unused]] static void Java_MotionEvent_offsetLocation(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, jfloat p0, - jfloat p1); -static void Java_MotionEvent_offsetLocation(JNIEnv* env, const base::android::JavaRef<jobject>& obj, - jfloat p0, - jfloat p1) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "offsetLocation", - "(FF)V", - &g_android_view_MotionEvent_offsetLocation); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id, p0, p1); -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_setLocation(nullptr); -[[maybe_unused]] static void Java_MotionEvent_setLocation(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, jfloat p0, - jfloat p1); -static void Java_MotionEvent_setLocation(JNIEnv* env, const base::android::JavaRef<jobject>& obj, - jfloat p0, - jfloat p1) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "setLocation", - "(FF)V", - &g_android_view_MotionEvent_setLocation); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id, p0, p1); -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_transform(nullptr); -[[maybe_unused]] static void Java_MotionEvent_transform(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, const base::android::JavaRef<jobject>& p0); -static void Java_MotionEvent_transform(JNIEnv* env, const base::android::JavaRef<jobject>& obj, - const base::android::JavaRef<jobject>& p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "transform", - "(Landroid/graphics/Matrix;)V", - &g_android_view_MotionEvent_transform); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id, p0.obj()); -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_addBatchV_J_F_F_F_F_I(nullptr); -[[maybe_unused]] static void Java_MotionEvent_addBatchV_J_F_F_F_F_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, jlong p0, - jfloat p1, - jfloat p2, - jfloat p3, - jfloat p4, - JniIntWrapper p5); -static void Java_MotionEvent_addBatchV_J_F_F_F_F_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, jlong p0, - jfloat p1, - jfloat p2, - jfloat p3, - jfloat p4, - JniIntWrapper p5) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "addBatch", - "(JFFFFI)V", - &g_android_view_MotionEvent_addBatchV_J_F_F_F_F_I); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id, p0, p1, p2, p3, p4, as_jint(p5)); -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_addBatchV_J_LAVMEPC_I(nullptr); -[[maybe_unused]] static void Java_MotionEvent_addBatchV_J_LAVMEPC_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, jlong p0, - const base::android::JavaRef<jobjectArray>& p1, - JniIntWrapper p2); -static void Java_MotionEvent_addBatchV_J_LAVMEPC_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, jlong p0, - const base::android::JavaRef<jobjectArray>& p1, - JniIntWrapper p2) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "addBatch", - "(J[Landroid/view/MotionEvent$PointerCoords;I)V", - &g_android_view_MotionEvent_addBatchV_J_LAVMEPC_I); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id, p0, p1.obj(), as_jint(p2)); -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_toString(nullptr); -[[maybe_unused]] static base::android::ScopedJavaLocalRef<jstring> Java_MotionEvent_toString(JNIEnv* - env, const base::android::JavaRef<jobject>& obj); -static base::android::ScopedJavaLocalRef<jstring> Java_MotionEvent_toString(JNIEnv* env, const - base::android::JavaRef<jobject>& obj) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "toString", - "()Ljava/lang/String;", - &g_android_view_MotionEvent_toString); - - jstring ret = - static_cast<jstring>(env->CallObjectMethod(obj.obj(), - call_context.base.method_id)); - return base::android::ScopedJavaLocalRef<jstring>(env, ret); -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_actionToString(nullptr); -[[maybe_unused]] static base::android::ScopedJavaLocalRef<jstring> - Java_MotionEvent_actionToString(JNIEnv* env, JniIntWrapper p0); -static base::android::ScopedJavaLocalRef<jstring> Java_MotionEvent_actionToString(JNIEnv* env, - JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, clazz, - android_view_MotionEvent_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "actionToString", - "(I)Ljava/lang/String;", - &g_android_view_MotionEvent_actionToString); - - jstring ret = - static_cast<jstring>(env->CallStaticObjectMethod(clazz, - call_context.base.method_id, as_jint(p0))); - return base::android::ScopedJavaLocalRef<jstring>(env, ret); -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_axisToString(nullptr); -[[maybe_unused]] static base::android::ScopedJavaLocalRef<jstring> - Java_MotionEvent_axisToString(JNIEnv* env, JniIntWrapper p0); -static base::android::ScopedJavaLocalRef<jstring> Java_MotionEvent_axisToString(JNIEnv* env, - JniIntWrapper p0) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, clazz, - android_view_MotionEvent_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "axisToString", - "(I)Ljava/lang/String;", - &g_android_view_MotionEvent_axisToString); - - jstring ret = - static_cast<jstring>(env->CallStaticObjectMethod(clazz, - call_context.base.method_id, as_jint(p0))); - return base::android::ScopedJavaLocalRef<jstring>(env, ret); -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_axisFromString(nullptr); -[[maybe_unused]] static jint Java_MotionEvent_axisFromString(JNIEnv* env, const - base::android::JavaRef<jstring>& p0); -static jint Java_MotionEvent_axisFromString(JNIEnv* env, const base::android::JavaRef<jstring>& p0) - { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, clazz, - android_view_MotionEvent_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "axisFromString", - "(Ljava/lang/String;)I", - &g_android_view_MotionEvent_axisFromString); - - jint ret = - env->CallStaticIntMethod(clazz, - call_context.base.method_id, p0.obj()); - return ret; -} - -static std::atomic<jmethodID> g_android_view_MotionEvent_writeToParcel(nullptr); -[[maybe_unused]] static void Java_MotionEvent_writeToParcel(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, const base::android::JavaRef<jobject>& p0, - JniIntWrapper p1); -static void Java_MotionEvent_writeToParcel(JNIEnv* env, const base::android::JavaRef<jobject>& obj, - const base::android::JavaRef<jobject>& p0, - JniIntWrapper p1) { - jclass clazz = android_view_MotionEvent_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - android_view_MotionEvent_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "writeToParcel", - "(Landroid/os/Parcel;I)V", - &g_android_view_MotionEvent_writeToParcel); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id, p0.obj(), as_jint(p1)); -} - -} // namespace JNI_MotionEvent - -#endif // android_view_MotionEvent_JNI
diff --git a/base/android/jni_generator/golden/testFromJavaP.golden b/base/android/jni_generator/golden/testFromJavaP.golden deleted file mode 100644 index aba554d2..0000000 --- a/base/android/jni_generator/golden/testFromJavaP.golden +++ /dev/null
@@ -1,276 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - - -// This file is autogenerated by -// base/android/jni_generator/jni_generator.py -// For -// java/io/InputStream - -#ifndef java_io_InputStream_JNI -#define java_io_InputStream_JNI - -#include <jni.h> - -#include "base/android/jni_generator/jni_generator_helper.h" - - -// Step 1: Forward declarations. - -JNI_REGISTRATION_EXPORT extern const char kClassPath_java_io_InputStream[]; -const char kClassPath_java_io_InputStream[] = "java/io/InputStream"; -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> g_java_io_InputStream_clazz(nullptr); -#ifndef java_io_InputStream_clazz_defined -#define java_io_InputStream_clazz_defined -inline jclass java_io_InputStream_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, kClassPath_java_io_InputStream, - &g_java_io_InputStream_clazz); -} -#endif - - -// Step 2: Constants (optional). - - -// Step 3: Method stubs. -namespace JNI_InputStream { - - -static std::atomic<jmethodID> g_java_io_InputStream_available(nullptr); -[[maybe_unused]] static jint Java_InputStream_available(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jint Java_InputStream_available(JNIEnv* env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = java_io_InputStream_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - java_io_InputStream_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "available", - "()I", - &g_java_io_InputStream_available); - - jint ret = - env->CallIntMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_java_io_InputStream_close(nullptr); -[[maybe_unused]] static void Java_InputStream_close(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static void Java_InputStream_close(JNIEnv* env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = java_io_InputStream_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - java_io_InputStream_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "close", - "()V", - &g_java_io_InputStream_close); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id); -} - -static std::atomic<jmethodID> g_java_io_InputStream_mark(nullptr); -[[maybe_unused]] static void Java_InputStream_mark(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper p0); -static void Java_InputStream_mark(JNIEnv* env, const base::android::JavaRef<jobject>& obj, - JniIntWrapper p0) { - jclass clazz = java_io_InputStream_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - java_io_InputStream_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "mark", - "(I)V", - &g_java_io_InputStream_mark); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id, as_jint(p0)); -} - -static std::atomic<jmethodID> g_java_io_InputStream_markSupported(nullptr); -[[maybe_unused]] static jboolean Java_InputStream_markSupported(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jboolean Java_InputStream_markSupported(JNIEnv* env, const base::android::JavaRef<jobject>& - obj) { - jclass clazz = java_io_InputStream_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - java_io_InputStream_clazz(env), false); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "markSupported", - "()Z", - &g_java_io_InputStream_markSupported); - - jboolean ret = - env->CallBooleanMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_java_io_InputStream_readI(nullptr); -[[maybe_unused]] static jint Java_InputStream_readI(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static jint Java_InputStream_readI(JNIEnv* env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = java_io_InputStream_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - java_io_InputStream_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "read", - "()I", - &g_java_io_InputStream_readI); - - jint ret = - env->CallIntMethod(obj.obj(), - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> g_java_io_InputStream_readI_AB(nullptr); -[[maybe_unused]] static jint Java_InputStream_readI_AB(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, const base::android::JavaRef<jbyteArray>& p0); -static jint Java_InputStream_readI_AB(JNIEnv* env, const base::android::JavaRef<jobject>& obj, const - base::android::JavaRef<jbyteArray>& p0) { - jclass clazz = java_io_InputStream_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - java_io_InputStream_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "read", - "([B)I", - &g_java_io_InputStream_readI_AB); - - jint ret = - env->CallIntMethod(obj.obj(), - call_context.base.method_id, p0.obj()); - return ret; -} - -static std::atomic<jmethodID> g_java_io_InputStream_readI_AB_I_I(nullptr); -[[maybe_unused]] static jint Java_InputStream_readI_AB_I_I(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, const base::android::JavaRef<jbyteArray>& p0, - JniIntWrapper p1, - JniIntWrapper p2); -static jint Java_InputStream_readI_AB_I_I(JNIEnv* env, const base::android::JavaRef<jobject>& obj, - const base::android::JavaRef<jbyteArray>& p0, - JniIntWrapper p1, - JniIntWrapper p2) { - jclass clazz = java_io_InputStream_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - java_io_InputStream_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "read", - "([BII)I", - &g_java_io_InputStream_readI_AB_I_I); - - jint ret = - env->CallIntMethod(obj.obj(), - call_context.base.method_id, p0.obj(), as_jint(p1), as_jint(p2)); - return ret; -} - -static std::atomic<jmethodID> g_java_io_InputStream_reset(nullptr); -[[maybe_unused]] static void Java_InputStream_reset(JNIEnv* env, const - base::android::JavaRef<jobject>& obj); -static void Java_InputStream_reset(JNIEnv* env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = java_io_InputStream_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - java_io_InputStream_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "reset", - "()V", - &g_java_io_InputStream_reset); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id); -} - -static std::atomic<jmethodID> g_java_io_InputStream_skip(nullptr); -[[maybe_unused]] static jlong Java_InputStream_skip(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, jlong p0); -static jlong Java_InputStream_skip(JNIEnv* env, const base::android::JavaRef<jobject>& obj, jlong - p0) { - jclass clazz = java_io_InputStream_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - java_io_InputStream_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "skip", - "(J)J", - &g_java_io_InputStream_skip); - - jlong ret = - env->CallLongMethod(obj.obj(), - call_context.base.method_id, p0); - return ret; -} - -static std::atomic<jmethodID> g_java_io_InputStream_Constructor(nullptr); -[[maybe_unused]] static base::android::ScopedJavaLocalRef<jobject> - Java_InputStream_Constructor(JNIEnv* env); -static base::android::ScopedJavaLocalRef<jobject> Java_InputStream_Constructor(JNIEnv* env) { - jclass clazz = java_io_InputStream_clazz(env); - CHECK_CLAZZ(env, clazz, - java_io_InputStream_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "<init>", - "()V", - &g_java_io_InputStream_Constructor); - - jobject ret = - env->NewObject(clazz, - call_context.base.method_id); - return base::android::ScopedJavaLocalRef<jobject>(env, ret); -} - -} // namespace JNI_InputStream - -#endif // java_io_InputStream_JNI
diff --git a/base/android/jni_generator/golden/testFromJavaPGenerics.golden b/base/android/jni_generator/golden/testFromJavaPGenerics.golden deleted file mode 100644 index c98bc40..0000000 --- a/base/android/jni_generator/golden/testFromJavaPGenerics.golden +++ /dev/null
@@ -1,131 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - - -// This file is autogenerated by -// base/android/jni_generator/jni_generator.py -// For -// java/util/HashSet - -#ifndef java_util_HashSet_JNI -#define java_util_HashSet_JNI - -#include <jni.h> - -#include "base/android/jni_generator/jni_generator_helper.h" - - -// Step 1: Forward declarations. - -JNI_REGISTRATION_EXPORT extern const char kClassPath_java_util_HashSet[]; -const char kClassPath_java_util_HashSet[] = "java/util/HashSet"; -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> g_java_util_HashSet_clazz(nullptr); -#ifndef java_util_HashSet_clazz_defined -#define java_util_HashSet_clazz_defined -inline jclass java_util_HashSet_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, kClassPath_java_util_HashSet, &g_java_util_HashSet_clazz); -} -#endif - - -// Step 2: Constants (optional). - - -// Step 3: Method stubs. -namespace JNI_HashSet { - - -static std::atomic<jmethodID> g_java_util_HashSet_dummy(nullptr); -[[maybe_unused]] static void Java_HashSet_dummy(JNIEnv* env, const base::android::JavaRef<jobject>& - obj); -static void Java_HashSet_dummy(JNIEnv* env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = java_util_HashSet_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - java_util_HashSet_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "dummy", - "()V", - &g_java_util_HashSet_dummy); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id); -} - -static std::atomic<jmethodID> g_java_util_HashSet_getClass(nullptr); -[[maybe_unused]] static base::android::ScopedJavaLocalRef<jclass> Java_HashSet_getClass(JNIEnv* env, - const base::android::JavaRef<jobject>& obj); -static base::android::ScopedJavaLocalRef<jclass> Java_HashSet_getClass(JNIEnv* env, const - base::android::JavaRef<jobject>& obj) { - jclass clazz = java_util_HashSet_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - java_util_HashSet_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "getClass", - "()Ljava/lang/Class<*>;", - &g_java_util_HashSet_getClass); - - jclass ret = - static_cast<jclass>(env->CallObjectMethod(obj.obj(), - call_context.base.method_id)); - return base::android::ScopedJavaLocalRef<jclass>(env, ret); -} - -static std::atomic<jmethodID> g_java_util_HashSet_overloadWithVarargsV_LJLS(nullptr); -[[maybe_unused]] static void Java_HashSet_overloadWithVarargsV_LJLS(JNIEnv* env, const - base::android::JavaRef<jobjectArray>& p0); -static void Java_HashSet_overloadWithVarargsV_LJLS(JNIEnv* env, const - base::android::JavaRef<jobjectArray>& p0) { - jclass clazz = java_util_HashSet_clazz(env); - CHECK_CLAZZ(env, clazz, - java_util_HashSet_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "overloadWithVarargs", - "([Ljava/lang/String;)V", - &g_java_util_HashSet_overloadWithVarargsV_LJLS); - - env->CallStaticVoidMethod(clazz, - call_context.base.method_id, p0.obj()); -} - -static std::atomic<jmethodID> g_java_util_HashSet_overloadWithVarargsV_LAITDC(nullptr); -[[maybe_unused]] static void Java_HashSet_overloadWithVarargsV_LAITDC(JNIEnv* env, const - base::android::JavaRef<jobjectArray>& p0); -static void Java_HashSet_overloadWithVarargsV_LAITDC(JNIEnv* env, const - base::android::JavaRef<jobjectArray>& p0) { - jclass clazz = java_util_HashSet_clazz(env); - CHECK_CLAZZ(env, clazz, - java_util_HashSet_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "overloadWithVarargs", - "([Landroid/icu/text/DisplayContext;)V", - &g_java_util_HashSet_overloadWithVarargsV_LAITDC); - - env->CallStaticVoidMethod(clazz, - call_context.base.method_id, p0.obj()); -} - -} // namespace JNI_HashSet - -#endif // java_util_HashSet_JNI
diff --git a/base/android/jni_generator/golden/testGenJniFlagsDisabled.golden b/base/android/jni_generator/golden/testGenJniFlagsDisabled.golden deleted file mode 100644 index efb1f72..0000000 --- a/base/android/jni_generator/golden/testGenJniFlagsDisabled.golden +++ /dev/null
@@ -1,52 +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. - -package org.chromium.base.natives; - -// This file is autogenerated by -// base/android/jni_generator/jni_registration_generator.py -// Please do not change its content. - -public class GEN_JNI { - public static final boolean TESTING_ENABLED = false; - public static final boolean REQUIRE_MOCK = false; - - - // Hashed name: Java_J_N_MygCV2jQ - public static native void org_chromium_example_jni_1generator_SampleForAnnotationProcessor_foo(); - // Hashed name: Java_J_N_MHuqnmXT - public static native Object org_chromium_example_jni_1generator_SampleForAnnotationProcessor_bar(Object sample); - // Hashed name: Java_J_N_MM5Xkwyy - public static native String org_chromium_example_jni_1generator_SampleForAnnotationProcessor_revString(String stringToReverse); - // Hashed name: Java_J_N_MAC2QhR9 - public static native String[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_sendToNative(String[] strs); - // Hashed name: Java_J_N_MGhRh4Nd - public static native Object[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_sendSamplesToNative(Object[] strs); - // Hashed name: Java_J_N_MW0aEs4h - public static native boolean org_chromium_example_jni_1generator_SampleForAnnotationProcessor_hasPhalange(); - // Hashed name: Java_J_N_MlVFI4RX - public static native int[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_testAllPrimitives(int zint, int[] ints, long zlong, long[] longs, short zshort, short[] shorts, char zchar, char[] chars, byte zbyte, byte[] bytes, double zdouble, double[] doubles, float zfloat, float[] floats, boolean zbool, boolean[] bools); - // Hashed name: Java_J_N_MqOnlud7 - public static native void org_chromium_example_jni_1generator_SampleForAnnotationProcessor_testSpecialTypes(Class clazz, Class[] classes, Throwable throwable, Throwable[] throwables, String string, String[] strings, Object tStruct, Object[] structs, Object obj, Object[] objects); - // Hashed name: Java_J_N_MuZc76Vt - public static native Throwable org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnThrowable(); - // Hashed name: Java_J_N_MAD53J7V - public static native Throwable[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnThrowables(); - // Hashed name: Java_J_N_M$ZgOi4g - public static native Class org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnClass(); - // Hashed name: Java_J_N_M$hL1577 - public static native Class[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnClasses(); - // Hashed name: Java_J_N_M0k1OjBK - public static native String org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnString(); - // Hashed name: Java_J_N_Mssfs54E - public static native String[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnStrings(); - // Hashed name: Java_J_N_MSzcel_H - public static native Object org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnStruct(); - // Hashed name: Java_J_N_MIBrQLK4 - public static native Object[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnStructs(); - // Hashed name: Java_J_N_M$hPywjv - public static native Object org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnObject(); - // Hashed name: Java_J_N_MPpCU1l5 - public static native Object[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnObjects(); -}
diff --git a/base/android/jni_generator/golden/testGenJniFlagsMocksEnabled.golden b/base/android/jni_generator/golden/testGenJniFlagsMocksEnabled.golden deleted file mode 100644 index 385c302..0000000 --- a/base/android/jni_generator/golden/testGenJniFlagsMocksEnabled.golden +++ /dev/null
@@ -1,52 +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. - -package org.chromium.base.natives; - -// This file is autogenerated by -// base/android/jni_generator/jni_registration_generator.py -// Please do not change its content. - -public class GEN_JNI { - public static final boolean TESTING_ENABLED = true; - public static final boolean REQUIRE_MOCK = false; - - - // Hashed name: Java_J_N_MygCV2jQ - public static native void org_chromium_example_jni_1generator_SampleForAnnotationProcessor_foo(); - // Hashed name: Java_J_N_MHuqnmXT - public static native Object org_chromium_example_jni_1generator_SampleForAnnotationProcessor_bar(Object sample); - // Hashed name: Java_J_N_MM5Xkwyy - public static native String org_chromium_example_jni_1generator_SampleForAnnotationProcessor_revString(String stringToReverse); - // Hashed name: Java_J_N_MAC2QhR9 - public static native String[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_sendToNative(String[] strs); - // Hashed name: Java_J_N_MGhRh4Nd - public static native Object[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_sendSamplesToNative(Object[] strs); - // Hashed name: Java_J_N_MW0aEs4h - public static native boolean org_chromium_example_jni_1generator_SampleForAnnotationProcessor_hasPhalange(); - // Hashed name: Java_J_N_MlVFI4RX - public static native int[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_testAllPrimitives(int zint, int[] ints, long zlong, long[] longs, short zshort, short[] shorts, char zchar, char[] chars, byte zbyte, byte[] bytes, double zdouble, double[] doubles, float zfloat, float[] floats, boolean zbool, boolean[] bools); - // Hashed name: Java_J_N_MqOnlud7 - public static native void org_chromium_example_jni_1generator_SampleForAnnotationProcessor_testSpecialTypes(Class clazz, Class[] classes, Throwable throwable, Throwable[] throwables, String string, String[] strings, Object tStruct, Object[] structs, Object obj, Object[] objects); - // Hashed name: Java_J_N_MuZc76Vt - public static native Throwable org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnThrowable(); - // Hashed name: Java_J_N_MAD53J7V - public static native Throwable[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnThrowables(); - // Hashed name: Java_J_N_M$ZgOi4g - public static native Class org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnClass(); - // Hashed name: Java_J_N_M$hL1577 - public static native Class[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnClasses(); - // Hashed name: Java_J_N_M0k1OjBK - public static native String org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnString(); - // Hashed name: Java_J_N_Mssfs54E - public static native String[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnStrings(); - // Hashed name: Java_J_N_MSzcel_H - public static native Object org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnStruct(); - // Hashed name: Java_J_N_MIBrQLK4 - public static native Object[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnStructs(); - // Hashed name: Java_J_N_M$hPywjv - public static native Object org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnObject(); - // Hashed name: Java_J_N_MPpCU1l5 - public static native Object[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnObjects(); -}
diff --git a/base/android/jni_generator/golden/testGenJniFlagsMocksRequired.golden b/base/android/jni_generator/golden/testGenJniFlagsMocksRequired.golden deleted file mode 100644 index 468359a..0000000 --- a/base/android/jni_generator/golden/testGenJniFlagsMocksRequired.golden +++ /dev/null
@@ -1,52 +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. - -package org.chromium.base.natives; - -// This file is autogenerated by -// base/android/jni_generator/jni_registration_generator.py -// Please do not change its content. - -public class GEN_JNI { - public static final boolean TESTING_ENABLED = true; - public static final boolean REQUIRE_MOCK = true; - - - // Hashed name: Java_J_N_MygCV2jQ - public static native void org_chromium_example_jni_1generator_SampleForAnnotationProcessor_foo(); - // Hashed name: Java_J_N_MHuqnmXT - public static native Object org_chromium_example_jni_1generator_SampleForAnnotationProcessor_bar(Object sample); - // Hashed name: Java_J_N_MM5Xkwyy - public static native String org_chromium_example_jni_1generator_SampleForAnnotationProcessor_revString(String stringToReverse); - // Hashed name: Java_J_N_MAC2QhR9 - public static native String[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_sendToNative(String[] strs); - // Hashed name: Java_J_N_MGhRh4Nd - public static native Object[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_sendSamplesToNative(Object[] strs); - // Hashed name: Java_J_N_MW0aEs4h - public static native boolean org_chromium_example_jni_1generator_SampleForAnnotationProcessor_hasPhalange(); - // Hashed name: Java_J_N_MlVFI4RX - public static native int[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_testAllPrimitives(int zint, int[] ints, long zlong, long[] longs, short zshort, short[] shorts, char zchar, char[] chars, byte zbyte, byte[] bytes, double zdouble, double[] doubles, float zfloat, float[] floats, boolean zbool, boolean[] bools); - // Hashed name: Java_J_N_MqOnlud7 - public static native void org_chromium_example_jni_1generator_SampleForAnnotationProcessor_testSpecialTypes(Class clazz, Class[] classes, Throwable throwable, Throwable[] throwables, String string, String[] strings, Object tStruct, Object[] structs, Object obj, Object[] objects); - // Hashed name: Java_J_N_MuZc76Vt - public static native Throwable org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnThrowable(); - // Hashed name: Java_J_N_MAD53J7V - public static native Throwable[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnThrowables(); - // Hashed name: Java_J_N_M$ZgOi4g - public static native Class org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnClass(); - // Hashed name: Java_J_N_M$hL1577 - public static native Class[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnClasses(); - // Hashed name: Java_J_N_M0k1OjBK - public static native String org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnString(); - // Hashed name: Java_J_N_Mssfs54E - public static native String[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnStrings(); - // Hashed name: Java_J_N_MSzcel_H - public static native Object org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnStruct(); - // Hashed name: Java_J_N_MIBrQLK4 - public static native Object[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnStructs(); - // Hashed name: Java_J_N_M$hPywjv - public static native Object org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnObject(); - // Hashed name: Java_J_N_MPpCU1l5 - public static native Object[] org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnObjects(); -}
diff --git a/base/android/jni_generator/golden/testInnerClassNatives.golden b/base/android/jni_generator/golden/testInnerClassNatives.golden deleted file mode 100644 index 454f030b..0000000 --- a/base/android/jni_generator/golden/testInnerClassNatives.golden +++ /dev/null
@@ -1,60 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - - -// This file is autogenerated by -// base/android/jni_generator/jni_generator.py -// For -// org/chromium/TestJni - -#ifndef org_chromium_TestJni_JNI -#define org_chromium_TestJni_JNI - -#include <jni.h> - -#include "base/android/jni_generator/jni_generator_helper.h" - - -// Step 1: Forward declarations. - -JNI_REGISTRATION_EXPORT extern const char kClassPath_org_chromium_TestJni[]; -const char kClassPath_org_chromium_TestJni[] = "org/chromium/TestJni"; - -JNI_REGISTRATION_EXPORT extern const char kClassPath_org_chromium_TestJni_00024MyInnerClass[]; -const char kClassPath_org_chromium_TestJni_00024MyInnerClass[] = - "org/chromium/TestJni$MyInnerClass"; -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> g_org_chromium_TestJni_clazz(nullptr); -#ifndef org_chromium_TestJni_clazz_defined -#define org_chromium_TestJni_clazz_defined -inline jclass org_chromium_TestJni_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, kClassPath_org_chromium_TestJni, - &g_org_chromium_TestJni_clazz); -} -#endif -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> g_org_chromium_TestJni_00024MyInnerClass_clazz(nullptr); -#ifndef org_chromium_TestJni_00024MyInnerClass_clazz_defined -#define org_chromium_TestJni_00024MyInnerClass_clazz_defined -inline jclass org_chromium_TestJni_00024MyInnerClass_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, kClassPath_org_chromium_TestJni_00024MyInnerClass, - &g_org_chromium_TestJni_00024MyInnerClass_clazz); -} -#endif - - -// Step 2: Constants (optional). - - -// Step 3: Method stubs. -static jint JNI_MyInnerClass_Init(JNIEnv* env, const base::android::JavaParamRef<jobject>& jcaller); - -JNI_GENERATOR_EXPORT jint Java_org_chromium_TestJni_00024MyInnerClass_nativeInit( - JNIEnv* env, - jobject jcaller) { - return JNI_MyInnerClass_Init(env, base::android::JavaParamRef<jobject>(env, jcaller)); -} - - -#endif // org_chromium_TestJni_JNI
diff --git a/base/android/jni_generator/golden/testInnerClassNativesBothInnerAndOuter.golden b/base/android/jni_generator/golden/testInnerClassNativesBothInnerAndOuter.golden deleted file mode 100644 index 06195da..0000000 --- a/base/android/jni_generator/golden/testInnerClassNativesBothInnerAndOuter.golden +++ /dev/null
@@ -1,70 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - - -// This file is autogenerated by -// base/android/jni_generator/jni_generator.py -// For -// org/chromium/TestJni - -#ifndef org_chromium_TestJni_JNI -#define org_chromium_TestJni_JNI - -#include <jni.h> - -#include "base/android/jni_generator/jni_generator_helper.h" - - -// Step 1: Forward declarations. - -JNI_REGISTRATION_EXPORT extern const char kClassPath_org_chromium_TestJni[]; -const char kClassPath_org_chromium_TestJni[] = "org/chromium/TestJni"; - -JNI_REGISTRATION_EXPORT extern const char kClassPath_org_chromium_TestJni_00024MyOtherInnerClass[]; -const char kClassPath_org_chromium_TestJni_00024MyOtherInnerClass[] = - "org/chromium/TestJni$MyOtherInnerClass"; -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> g_org_chromium_TestJni_clazz(nullptr); -#ifndef org_chromium_TestJni_clazz_defined -#define org_chromium_TestJni_clazz_defined -inline jclass org_chromium_TestJni_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, kClassPath_org_chromium_TestJni, - &g_org_chromium_TestJni_clazz); -} -#endif -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> - g_org_chromium_TestJni_00024MyOtherInnerClass_clazz(nullptr); -#ifndef org_chromium_TestJni_00024MyOtherInnerClass_clazz_defined -#define org_chromium_TestJni_00024MyOtherInnerClass_clazz_defined -inline jclass org_chromium_TestJni_00024MyOtherInnerClass_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, kClassPath_org_chromium_TestJni_00024MyOtherInnerClass, - &g_org_chromium_TestJni_00024MyOtherInnerClass_clazz); -} -#endif - - -// Step 2: Constants (optional). - - -// Step 3: Method stubs. -static jint JNI_TestJni_Init(JNIEnv* env, const base::android::JavaParamRef<jobject>& jcaller); - -JNI_GENERATOR_EXPORT jint Java_org_chromium_TestJni_nativeInit( - JNIEnv* env, - jobject jcaller) { - return JNI_TestJni_Init(env, base::android::JavaParamRef<jobject>(env, jcaller)); -} - -static jint JNI_MyOtherInnerClass_Init(JNIEnv* env, const base::android::JavaParamRef<jobject>& - jcaller); - -JNI_GENERATOR_EXPORT jint Java_org_chromium_TestJni_00024MyOtherInnerClass_nativeInit( - JNIEnv* env, - jobject jcaller) { - return JNI_MyOtherInnerClass_Init(env, base::android::JavaParamRef<jobject>(env, jcaller)); -} - - -#endif // org_chromium_TestJni_JNI
diff --git a/base/android/jni_generator/golden/testInnerClassNativesBothInnerAndOuterRegistrations.golden b/base/android/jni_generator/golden/testInnerClassNativesBothInnerAndOuterRegistrations.golden deleted file mode 100644 index e831212..0000000 --- a/base/android/jni_generator/golden/testInnerClassNativesBothInnerAndOuterRegistrations.golden +++ /dev/null
@@ -1,108 +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. - - -// This file is autogenerated by -// base/android/jni_generator/jni_registration_generator.py -// Please do not change its content. - -#ifndef HEADER_GUARD -#define HEADER_GUARD - -#include <jni.h> - -#include <iterator> - -#include "base/android/jni_generator/jni_generator_helper.h" -#include "base/android/jni_int_wrapper.h" - - -// Step 1: Forward declarations (classes). - -extern const char kClassPath_org_chromium_TestJni[]; - -extern const char kClassPath_org_chromium_TestJni_00024MyOtherInnerClass[]; -extern std::atomic<jclass> g_org_chromium_TestJni_clazz; -#ifndef org_chromium_TestJni_clazz_defined -#define org_chromium_TestJni_clazz_defined -inline jclass org_chromium_TestJni_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, kClassPath_org_chromium_TestJni, - &g_org_chromium_TestJni_clazz); -} -#endif -extern std::atomic<jclass> g_org_chromium_TestJni_00024MyOtherInnerClass_clazz; -#ifndef org_chromium_TestJni_00024MyOtherInnerClass_clazz_defined -#define org_chromium_TestJni_00024MyOtherInnerClass_clazz_defined -inline jclass org_chromium_TestJni_00024MyOtherInnerClass_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, kClassPath_org_chromium_TestJni_00024MyOtherInnerClass, - &g_org_chromium_TestJni_00024MyOtherInnerClass_clazz); -} -#endif - - -// Step 2: Forward declarations (methods). - -JNI_GENERATOR_EXPORT jint Java_org_chromium_TestJni_nativeInit( - JNIEnv* env, - jobject jcaller); -JNI_GENERATOR_EXPORT jint Java_org_chromium_TestJni_00024MyOtherInnerClass_nativeInit( - JNIEnv* env, - jobject jcaller); - - -// Step 3: Method declarations. - -static const JNINativeMethod kMethods_org_chromium_TestJni[] = { - { "nativeInit", "()I", reinterpret_cast<void*>(Java_org_chromium_TestJni_nativeInit) }, -}; - - -static const JNINativeMethod kMethods_org_chromium_TestJni_00024MyOtherInnerClass[] = { - { "nativeInit", "()I", - reinterpret_cast<void*>(Java_org_chromium_TestJni_00024MyOtherInnerClass_nativeInit) }, -}; - - -JNI_REGISTRATION_EXPORT bool RegisterNative_org_chromium_TestJni(JNIEnv* env) { - const int kMethods_org_chromium_TestJniSize = - std::size(kMethods_org_chromium_TestJni); - if (env->RegisterNatives( - org_chromium_TestJni_clazz(env), - kMethods_org_chromium_TestJni, - kMethods_org_chromium_TestJniSize) < 0) { - jni_generator::HandleRegistrationError(env, - org_chromium_TestJni_clazz(env), - __FILE__); - return false; - } - - - const int kMethods_org_chromium_TestJni_00024MyOtherInnerClassSize = - std::size(kMethods_org_chromium_TestJni_00024MyOtherInnerClass); - if (env->RegisterNatives( - org_chromium_TestJni_00024MyOtherInnerClass_clazz(env), - kMethods_org_chromium_TestJni_00024MyOtherInnerClass, - kMethods_org_chromium_TestJni_00024MyOtherInnerClassSize) < 0) { - jni_generator::HandleRegistrationError(env, - org_chromium_TestJni_00024MyOtherInnerClass_clazz(env), - __FILE__); - return false; - } - - return true; -} - - -// Step 4: Registration function. - -namespace test { - -bool RegisterNatives(JNIEnv* env) { - - return true; -} - -} // namespace test - -#endif // HEADER_GUARD
diff --git a/base/android/jni_generator/golden/testInnerClassNativesMultiple.golden b/base/android/jni_generator/golden/testInnerClassNativesMultiple.golden deleted file mode 100644 index de0a7217..0000000 --- a/base/android/jni_generator/golden/testInnerClassNativesMultiple.golden +++ /dev/null
@@ -1,83 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - - -// This file is autogenerated by -// base/android/jni_generator/jni_generator.py -// For -// org/chromium/TestJni - -#ifndef org_chromium_TestJni_JNI -#define org_chromium_TestJni_JNI - -#include <jni.h> - -#include "base/android/jni_generator/jni_generator_helper.h" - - -// Step 1: Forward declarations. - -JNI_REGISTRATION_EXPORT extern const char kClassPath_org_chromium_TestJni[]; -const char kClassPath_org_chromium_TestJni[] = "org/chromium/TestJni"; - -JNI_REGISTRATION_EXPORT extern const char kClassPath_org_chromium_TestJni_00024MyInnerClass[]; -const char kClassPath_org_chromium_TestJni_00024MyInnerClass[] = - "org/chromium/TestJni$MyInnerClass"; - -JNI_REGISTRATION_EXPORT extern const char kClassPath_org_chromium_TestJni_00024MyOtherInnerClass[]; -const char kClassPath_org_chromium_TestJni_00024MyOtherInnerClass[] = - "org/chromium/TestJni$MyOtherInnerClass"; -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> g_org_chromium_TestJni_clazz(nullptr); -#ifndef org_chromium_TestJni_clazz_defined -#define org_chromium_TestJni_clazz_defined -inline jclass org_chromium_TestJni_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, kClassPath_org_chromium_TestJni, - &g_org_chromium_TestJni_clazz); -} -#endif -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> g_org_chromium_TestJni_00024MyInnerClass_clazz(nullptr); -#ifndef org_chromium_TestJni_00024MyInnerClass_clazz_defined -#define org_chromium_TestJni_00024MyInnerClass_clazz_defined -inline jclass org_chromium_TestJni_00024MyInnerClass_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, kClassPath_org_chromium_TestJni_00024MyInnerClass, - &g_org_chromium_TestJni_00024MyInnerClass_clazz); -} -#endif -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> - g_org_chromium_TestJni_00024MyOtherInnerClass_clazz(nullptr); -#ifndef org_chromium_TestJni_00024MyOtherInnerClass_clazz_defined -#define org_chromium_TestJni_00024MyOtherInnerClass_clazz_defined -inline jclass org_chromium_TestJni_00024MyOtherInnerClass_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, kClassPath_org_chromium_TestJni_00024MyOtherInnerClass, - &g_org_chromium_TestJni_00024MyOtherInnerClass_clazz); -} -#endif - - -// Step 2: Constants (optional). - - -// Step 3: Method stubs. -static jint JNI_MyInnerClass_Init(JNIEnv* env, const base::android::JavaParamRef<jobject>& jcaller); - -JNI_GENERATOR_EXPORT jint Java_org_chromium_TestJni_00024MyInnerClass_nativeInit( - JNIEnv* env, - jobject jcaller) { - return JNI_MyInnerClass_Init(env, base::android::JavaParamRef<jobject>(env, jcaller)); -} - -static jint JNI_MyOtherInnerClass_Init(JNIEnv* env, const base::android::JavaParamRef<jobject>& - jcaller); - -JNI_GENERATOR_EXPORT jint Java_org_chromium_TestJni_00024MyOtherInnerClass_nativeInit( - JNIEnv* env, - jobject jcaller) { - return JNI_MyOtherInnerClass_Init(env, base::android::JavaParamRef<jobject>(env, jcaller)); -} - - -#endif // org_chromium_TestJni_JNI
diff --git a/base/android/jni_generator/golden/testInputStream.javap b/base/android/jni_generator/golden/testInputStream.javap deleted file mode 100644 index 50ab617..0000000 --- a/base/android/jni_generator/golden/testInputStream.javap +++ /dev/null
@@ -1,228 +0,0 @@ -Compiled from "InputStream.java" -public abstract class java.io.InputStream extends java.lang.Object implements java.io.Closeable - SourceFile: "InputStream.java" - minor version: 0 - major version: 49 - Constant pool: -const #1 = Method #6.#39; // java/lang/Object."<init>":()V -const #2 = class #40; // java/lang/RuntimeException -const #3 = String #41; // Stub! -const #4 = Method #2.#42; // java/lang/RuntimeException."<init>":(Ljava/lang/String;)V -const #5 = class #43; // java/io/InputStream -const #6 = class #44; // java/lang/Object -const #7 = class #45; // java/io/Closeable -const #8 = Asciz <init>; -const #9 = Asciz ()V; -const #10 = Asciz Code; -const #11 = Asciz LineNumberTable; -const #12 = Asciz LocalVariableTable; -const #13 = Asciz this; -const #14 = Asciz Ljava/io/InputStream;; -const #15 = Asciz available; -const #16 = Asciz ()I; -const #17 = Asciz Exceptions; -const #18 = class #46; // java/io/IOException -const #19 = Asciz close; -const #20 = Asciz mark; -const #21 = Asciz (I)V; -const #22 = Asciz readlimit; -const #23 = Asciz I; -const #24 = Asciz markSupported; -const #25 = Asciz ()Z; -const #26 = Asciz read; -const #27 = Asciz ([B)I; -const #28 = Asciz buffer; -const #29 = Asciz [B; -const #30 = Asciz ([BII)I; -const #31 = Asciz byteOffset; -const #32 = Asciz byteCount; -const #33 = Asciz reset; -const #34 = Asciz skip; -const #35 = Asciz (J)J; -const #36 = Asciz J; -const #37 = Asciz SourceFile; -const #38 = Asciz InputStream.java; -const #39 = NameAndType #8:#9;// "<init>":()V -const #40 = Asciz java/lang/RuntimeException; -const #41 = Asciz Stub!; -const #42 = NameAndType #8:#47;// "<init>":(Ljava/lang/String;)V -const #43 = Asciz java/io/InputStream; -const #44 = Asciz java/lang/Object; -const #45 = Asciz java/io/Closeable; -const #46 = Asciz java/io/IOException; -const #47 = Asciz (Ljava/lang/String;)V; - -{ -public java.io.InputStream(); - Signature: ()V - Code: - Stack=3, Locals=1, Args_size=1 - 0: aload_0 - 1: invokespecial #1; //Method java/lang/Object."<init>":()V - 4: new #2; //class java/lang/RuntimeException - 7: dup - 8: ldc #3; //String Stub! - 10: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 13: athrow - LineNumberTable: - line 5: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 14 0 this Ljava/io/InputStream; - - -public int available() throws java.io.IOException; - Signature: ()I - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 6: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Ljava/io/InputStream; - - Exceptions: - throws java.io.IOException -public void close() throws java.io.IOException; - Signature: ()V - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 7: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Ljava/io/InputStream; - - Exceptions: - throws java.io.IOException -public void mark(int); - Signature: (I)V - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 8: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Ljava/io/InputStream; - 0 10 1 readlimit I - - -public boolean markSupported(); - Signature: ()Z - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 9: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Ljava/io/InputStream; - - -public abstract int read() throws java.io.IOException; - Signature: ()I - Exceptions: - throws java.io.IOException -public int read(byte[]) throws java.io.IOException; - Signature: ([B)I - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 11: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Ljava/io/InputStream; - 0 10 1 buffer [B - - Exceptions: - throws java.io.IOException -public int read(byte[], int, int) throws java.io.IOException; - Signature: ([BII)I - Code: - Stack=3, Locals=4, Args_size=4 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 12: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Ljava/io/InputStream; - 0 10 1 buffer [B - 0 10 2 byteOffset I - 0 10 3 byteCount I - - Exceptions: - throws java.io.IOException -public synchronized void reset() throws java.io.IOException; - Signature: ()V - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 13: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Ljava/io/InputStream; - - Exceptions: - throws java.io.IOException -public long skip(long) throws java.io.IOException; - Signature: (J)J - Code: - Stack=3, Locals=3, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 14: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Ljava/io/InputStream; - 0 10 1 byteCount J - - Exceptions: - throws java.io.IOException -} -
diff --git a/base/android/jni_generator/golden/testMotionEvent.javap b/base/android/jni_generator/golden/testMotionEvent.javap deleted file mode 100644 index 0746943..0000000 --- a/base/android/jni_generator/golden/testMotionEvent.javap +++ /dev/null
@@ -1,2295 +0,0 @@ -Compiled from "MotionEvent.java" -public final class android.view.MotionEvent extends android.view.InputEvent implements android.os.Parcelable - SourceFile: "MotionEvent.java" - InnerClass: - public final #10= #9 of #6; //PointerProperties=class android/view/MotionEvent$PointerProperties of class android/view/MotionEvent - public final #13= #12 of #6; //PointerCoords=class android/view/MotionEvent$PointerCoords of class android/view/MotionEvent - public abstract #150= #149 of #8; //Creator=class android/os/Parcelable$Creator of class android/os/Parcelable - minor version: 0 - major version: 49 - Constant pool: -const #1 = Method #7.#293; // android/view/InputEvent."<init>":()V -const #2 = class #294; // java/lang/RuntimeException -const #3 = String #295; // Stub! -const #4 = Method #2.#296; // java/lang/RuntimeException."<init>":(Ljava/lang/String;)V -const #5 = Field #6.#297; // android/view/MotionEvent.CREATOR:Landroid/os/Parcelable$Creator; -const #6 = class #298; // android/view/MotionEvent -const #7 = class #299; // android/view/InputEvent -const #8 = class #300; // android/os/Parcelable -const #9 = class #301; // android/view/MotionEvent$PointerProperties -const #10 = Asciz PointerProperties; -const #11 = Asciz InnerClasses; -const #12 = class #302; // android/view/MotionEvent$PointerCoords -const #13 = Asciz PointerCoords; -const #14 = Asciz INVALID_POINTER_ID; -const #15 = Asciz I; -const #16 = Asciz ConstantValue; -const #17 = int -1; -const #18 = Asciz ACTION_MASK; -const #19 = int 255; -const #20 = Asciz ACTION_DOWN; -const #21 = int 0; -const #22 = Asciz ACTION_UP; -const #23 = int 1; -const #24 = Asciz ACTION_MOVE; -const #25 = int 2; -const #26 = Asciz ACTION_CANCEL; -const #27 = int 3; -const #28 = Asciz ACTION_OUTSIDE; -const #29 = int 4; -const #30 = Asciz ACTION_POINTER_DOWN; -const #31 = int 5; -const #32 = Asciz ACTION_POINTER_UP; -const #33 = int 6; -const #34 = Asciz ACTION_HOVER_MOVE; -const #35 = int 7; -const #36 = Asciz ACTION_SCROLL; -const #37 = int 8; -const #38 = Asciz ACTION_HOVER_ENTER; -const #39 = int 9; -const #40 = Asciz ACTION_HOVER_EXIT; -const #41 = int 10; -const #42 = Asciz ACTION_POINTER_INDEX_MASK; -const #43 = int 65280; -const #44 = Asciz ACTION_POINTER_INDEX_SHIFT; -const #45 = Asciz ACTION_POINTER_1_DOWN; -const #46 = Asciz Deprecated; -const #47 = Asciz RuntimeVisibleAnnotations; -const #48 = Asciz Ljava/lang/Deprecated;; -const #49 = Asciz ACTION_POINTER_2_DOWN; -const #50 = int 261; -const #51 = Asciz ACTION_POINTER_3_DOWN; -const #52 = int 517; -const #53 = Asciz ACTION_POINTER_1_UP; -const #54 = Asciz ACTION_POINTER_2_UP; -const #55 = int 262; -const #56 = Asciz ACTION_POINTER_3_UP; -const #57 = int 518; -const #58 = Asciz ACTION_POINTER_ID_MASK; -const #59 = Asciz ACTION_POINTER_ID_SHIFT; -const #60 = Asciz FLAG_WINDOW_IS_OBSCURED; -const #61 = Asciz EDGE_TOP; -const #62 = Asciz EDGE_BOTTOM; -const #63 = Asciz EDGE_LEFT; -const #64 = Asciz EDGE_RIGHT; -const #65 = Asciz AXIS_X; -const #66 = Asciz AXIS_Y; -const #67 = Asciz AXIS_PRESSURE; -const #68 = Asciz AXIS_SIZE; -const #69 = Asciz AXIS_TOUCH_MAJOR; -const #70 = Asciz AXIS_TOUCH_MINOR; -const #71 = Asciz AXIS_TOOL_MAJOR; -const #72 = Asciz AXIS_TOOL_MINOR; -const #73 = Asciz AXIS_ORIENTATION; -const #74 = Asciz AXIS_VSCROLL; -const #75 = Asciz AXIS_HSCROLL; -const #76 = Asciz AXIS_Z; -const #77 = int 11; -const #78 = Asciz AXIS_RX; -const #79 = int 12; -const #80 = Asciz AXIS_RY; -const #81 = int 13; -const #82 = Asciz AXIS_RZ; -const #83 = int 14; -const #84 = Asciz AXIS_HAT_X; -const #85 = int 15; -const #86 = Asciz AXIS_HAT_Y; -const #87 = int 16; -const #88 = Asciz AXIS_LTRIGGER; -const #89 = int 17; -const #90 = Asciz AXIS_RTRIGGER; -const #91 = int 18; -const #92 = Asciz AXIS_THROTTLE; -const #93 = int 19; -const #94 = Asciz AXIS_RUDDER; -const #95 = int 20; -const #96 = Asciz AXIS_WHEEL; -const #97 = int 21; -const #98 = Asciz AXIS_GAS; -const #99 = int 22; -const #100 = Asciz AXIS_BRAKE; -const #101 = int 23; -const #102 = Asciz AXIS_DISTANCE; -const #103 = int 24; -const #104 = Asciz AXIS_TILT; -const #105 = int 25; -const #106 = Asciz AXIS_GENERIC_1; -const #107 = int 32; -const #108 = Asciz AXIS_GENERIC_2; -const #109 = int 33; -const #110 = Asciz AXIS_GENERIC_3; -const #111 = int 34; -const #112 = Asciz AXIS_GENERIC_4; -const #113 = int 35; -const #114 = Asciz AXIS_GENERIC_5; -const #115 = int 36; -const #116 = Asciz AXIS_GENERIC_6; -const #117 = int 37; -const #118 = Asciz AXIS_GENERIC_7; -const #119 = int 38; -const #120 = Asciz AXIS_GENERIC_8; -const #121 = int 39; -const #122 = Asciz AXIS_GENERIC_9; -const #123 = int 40; -const #124 = Asciz AXIS_GENERIC_10; -const #125 = int 41; -const #126 = Asciz AXIS_GENERIC_11; -const #127 = int 42; -const #128 = Asciz AXIS_GENERIC_12; -const #129 = int 43; -const #130 = Asciz AXIS_GENERIC_13; -const #131 = int 44; -const #132 = Asciz AXIS_GENERIC_14; -const #133 = int 45; -const #134 = Asciz AXIS_GENERIC_15; -const #135 = int 46; -const #136 = Asciz AXIS_GENERIC_16; -const #137 = int 47; -const #138 = Asciz BUTTON_PRIMARY; -const #139 = Asciz BUTTON_SECONDARY; -const #140 = Asciz BUTTON_TERTIARY; -const #141 = Asciz BUTTON_BACK; -const #142 = Asciz BUTTON_FORWARD; -const #143 = Asciz TOOL_TYPE_UNKNOWN; -const #144 = Asciz TOOL_TYPE_FINGER; -const #145 = Asciz TOOL_TYPE_STYLUS; -const #146 = Asciz TOOL_TYPE_MOUSE; -const #147 = Asciz TOOL_TYPE_ERASER; -const #148 = Asciz CREATOR; -const #149 = class #303; // android/os/Parcelable$Creator -const #150 = Asciz Creator; -const #151 = Asciz Landroid/os/Parcelable$Creator;; -const #152 = Asciz Signature; -const #153 = Asciz Landroid/os/Parcelable$Creator<Landroid/view/MotionEvent;>;; -const #154 = Asciz <init>; -const #155 = Asciz ()V; -const #156 = Asciz Code; -const #157 = Asciz LineNumberTable; -const #158 = Asciz LocalVariableTable; -const #159 = Asciz this; -const #160 = Asciz Landroid/view/MotionEvent;; -const #161 = Asciz finalize; -const #162 = Asciz Exceptions; -const #163 = class #304; // java/lang/Throwable -const #164 = Asciz obtain; -const #165 = Asciz (JJII[Landroid/view/MotionEvent$PointerProperties;[Landroid/view/MotionEvent$PointerCoords;IIFFIIII)Landroid/view/MotionEvent;; -const #166 = Asciz downTime; -const #167 = Asciz J; -const #168 = Asciz eventTime; -const #169 = Asciz action; -const #170 = Asciz pointerCount; -const #171 = Asciz pointerProperties; -const #172 = Asciz [Landroid/view/MotionEvent$PointerProperties;; -const #173 = Asciz pointerCoords; -const #174 = Asciz [Landroid/view/MotionEvent$PointerCoords;; -const #175 = Asciz metaState; -const #176 = Asciz buttonState; -const #177 = Asciz xPrecision; -const #178 = Asciz F; -const #179 = Asciz yPrecision; -const #180 = Asciz deviceId; -const #181 = Asciz edgeFlags; -const #182 = Asciz source; -const #183 = Asciz flags; -const #184 = Asciz (JJII[I[Landroid/view/MotionEvent$PointerCoords;IFFIIII)Landroid/view/MotionEvent;; -const #185 = Asciz pointerIds; -const #186 = Asciz [I; -const #187 = Asciz (JJIFFFFIFFII)Landroid/view/MotionEvent;; -const #188 = Asciz x; -const #189 = Asciz y; -const #190 = Asciz pressure; -const #191 = Asciz size; -const #192 = Asciz (JJIIFFFFIFFII)Landroid/view/MotionEvent;; -const #193 = Asciz (JJIFFI)Landroid/view/MotionEvent;; -const #194 = Asciz (Landroid/view/MotionEvent;)Landroid/view/MotionEvent;; -const #195 = Asciz other; -const #196 = Asciz obtainNoHistory; -const #197 = Asciz recycle; -const #198 = Asciz getDeviceId; -const #199 = Asciz ()I; -const #200 = Asciz getSource; -const #201 = Asciz setSource; -const #202 = Asciz (I)V; -const #203 = Asciz getAction; -const #204 = Asciz getActionMasked; -const #205 = Asciz getActionIndex; -const #206 = Asciz getFlags; -const #207 = Asciz getDownTime; -const #208 = Asciz ()J; -const #209 = Asciz getEventTime; -const #210 = Asciz getX; -const #211 = Asciz ()F; -const #212 = Asciz getY; -const #213 = Asciz getPressure; -const #214 = Asciz getSize; -const #215 = Asciz getTouchMajor; -const #216 = Asciz getTouchMinor; -const #217 = Asciz getToolMajor; -const #218 = Asciz getToolMinor; -const #219 = Asciz getOrientation; -const #220 = Asciz getAxisValue; -const #221 = Asciz (I)F; -const #222 = Asciz axis; -const #223 = Asciz getPointerCount; -const #224 = Asciz getPointerId; -const #225 = Asciz (I)I; -const #226 = Asciz pointerIndex; -const #227 = Asciz getToolType; -const #228 = Asciz findPointerIndex; -const #229 = Asciz pointerId; -const #230 = Asciz (II)F; -const #231 = Asciz getPointerCoords; -const #232 = Asciz (ILandroid/view/MotionEvent$PointerCoords;)V; -const #233 = Asciz outPointerCoords; -const #234 = Asciz Landroid/view/MotionEvent$PointerCoords;; -const #235 = Asciz getPointerProperties; -const #236 = Asciz (ILandroid/view/MotionEvent$PointerProperties;)V; -const #237 = Asciz outPointerProperties; -const #238 = Asciz Landroid/view/MotionEvent$PointerProperties;; -const #239 = Asciz getMetaState; -const #240 = Asciz getButtonState; -const #241 = Asciz getRawX; -const #242 = Asciz getRawY; -const #243 = Asciz getXPrecision; -const #244 = Asciz getYPrecision; -const #245 = Asciz getHistorySize; -const #246 = Asciz getHistoricalEventTime; -const #247 = Asciz (I)J; -const #248 = Asciz pos; -const #249 = Asciz getHistoricalX; -const #250 = Asciz getHistoricalY; -const #251 = Asciz getHistoricalPressure; -const #252 = Asciz getHistoricalSize; -const #253 = Asciz getHistoricalTouchMajor; -const #254 = Asciz getHistoricalTouchMinor; -const #255 = Asciz getHistoricalToolMajor; -const #256 = Asciz getHistoricalToolMinor; -const #257 = Asciz getHistoricalOrientation; -const #258 = Asciz getHistoricalAxisValue; -const #259 = Asciz (III)F; -const #260 = Asciz getHistoricalPointerCoords; -const #261 = Asciz (IILandroid/view/MotionEvent$PointerCoords;)V; -const #262 = Asciz getEdgeFlags; -const #263 = Asciz setEdgeFlags; -const #264 = Asciz setAction; -const #265 = Asciz offsetLocation; -const #266 = Asciz (FF)V; -const #267 = Asciz deltaX; -const #268 = Asciz deltaY; -const #269 = Asciz setLocation; -const #270 = Asciz transform; -const #271 = Asciz (Landroid/graphics/Matrix;)V; -const #272 = Asciz matrix; -const #273 = Asciz Landroid/graphics/Matrix;; -const #274 = Asciz addBatch; -const #275 = Asciz (JFFFFI)V; -const #276 = Asciz (J[Landroid/view/MotionEvent$PointerCoords;I)V; -const #277 = Asciz toString; -const #278 = Asciz ()Ljava/lang/String;; -const #279 = Asciz actionToString; -const #280 = Asciz (I)Ljava/lang/String;; -const #281 = Asciz axisToString; -const #282 = Asciz axisFromString; -const #283 = Asciz (Ljava/lang/String;)I; -const #284 = Asciz symbolicName; -const #285 = Asciz Ljava/lang/String;; -const #286 = Asciz writeToParcel; -const #287 = Asciz (Landroid/os/Parcel;I)V; -const #288 = Asciz out; -const #289 = Asciz Landroid/os/Parcel;; -const #290 = Asciz <clinit>; -const #291 = Asciz SourceFile; -const #292 = Asciz MotionEvent.java; -const #293 = NameAndType #154:#155;// "<init>":()V -const #294 = Asciz java/lang/RuntimeException; -const #295 = Asciz Stub!; -const #296 = NameAndType #154:#305;// "<init>":(Ljava/lang/String;)V -const #297 = NameAndType #148:#151;// CREATOR:Landroid/os/Parcelable$Creator; -const #298 = Asciz android/view/MotionEvent; -const #299 = Asciz android/view/InputEvent; -const #300 = Asciz android/os/Parcelable; -const #301 = Asciz android/view/MotionEvent$PointerProperties; -const #302 = Asciz android/view/MotionEvent$PointerCoords; -const #303 = Asciz android/os/Parcelable$Creator; -const #304 = Asciz java/lang/Throwable; -const #305 = Asciz (Ljava/lang/String;)V; - -{ -public static final int INVALID_POINTER_ID; - Signature: I - Constant value: int -1 - -public static final int ACTION_MASK; - Signature: I - Constant value: int 255 - -public static final int ACTION_DOWN; - Signature: I - Constant value: int 0 - -public static final int ACTION_UP; - Signature: I - Constant value: int 1 - -public static final int ACTION_MOVE; - Signature: I - Constant value: int 2 - -public static final int ACTION_CANCEL; - Signature: I - Constant value: int 3 - -public static final int ACTION_OUTSIDE; - Signature: I - Constant value: int 4 - -public static final int ACTION_POINTER_DOWN; - Signature: I - Constant value: int 5 - -public static final int ACTION_POINTER_UP; - Signature: I - Constant value: int 6 - -public static final int ACTION_HOVER_MOVE; - Signature: I - Constant value: int 7 - -public static final int ACTION_SCROLL; - Signature: I - Constant value: int 8 - -public static final int ACTION_HOVER_ENTER; - Signature: I - Constant value: int 9 - -public static final int ACTION_HOVER_EXIT; - Signature: I - Constant value: int 10 - -public static final int ACTION_POINTER_INDEX_MASK; - Signature: I - Constant value: int 65280 - -public static final int ACTION_POINTER_INDEX_SHIFT; - Signature: I - Constant value: int 8 - -public static final int ACTION_POINTER_1_DOWN; - Signature: I - Constant value: int 5Deprecated: true - RuntimeVisibleAnnotations: length = 0x6 - 00 01 00 30 00 00 - - -public static final int ACTION_POINTER_2_DOWN; - Signature: I - Constant value: int 261Deprecated: true - RuntimeVisibleAnnotations: length = 0x6 - 00 01 00 30 00 00 - - -public static final int ACTION_POINTER_3_DOWN; - Signature: I - Constant value: int 517Deprecated: true - RuntimeVisibleAnnotations: length = 0x6 - 00 01 00 30 00 00 - - -public static final int ACTION_POINTER_1_UP; - Signature: I - Constant value: int 6Deprecated: true - RuntimeVisibleAnnotations: length = 0x6 - 00 01 00 30 00 00 - - -public static final int ACTION_POINTER_2_UP; - Signature: I - Constant value: int 262Deprecated: true - RuntimeVisibleAnnotations: length = 0x6 - 00 01 00 30 00 00 - - -public static final int ACTION_POINTER_3_UP; - Signature: I - Constant value: int 518Deprecated: true - RuntimeVisibleAnnotations: length = 0x6 - 00 01 00 30 00 00 - - -public static final int ACTION_POINTER_ID_MASK; - Signature: I - Constant value: int 65280Deprecated: true - RuntimeVisibleAnnotations: length = 0x6 - 00 01 00 30 00 00 - - -public static final int ACTION_POINTER_ID_SHIFT; - Signature: I - Constant value: int 8Deprecated: true - RuntimeVisibleAnnotations: length = 0x6 - 00 01 00 30 00 00 - - -public static final int FLAG_WINDOW_IS_OBSCURED; - Signature: I - Constant value: int 1 - -public static final int EDGE_TOP; - Signature: I - Constant value: int 1 - -public static final int EDGE_BOTTOM; - Signature: I - Constant value: int 2 - -public static final int EDGE_LEFT; - Signature: I - Constant value: int 4 - -public static final int EDGE_RIGHT; - Signature: I - Constant value: int 8 - -public static final int AXIS_X; - Signature: I - Constant value: int 0 - -public static final int AXIS_Y; - Signature: I - Constant value: int 1 - -public static final int AXIS_PRESSURE; - Signature: I - Constant value: int 2 - -public static final int AXIS_SIZE; - Signature: I - Constant value: int 3 - -public static final int AXIS_TOUCH_MAJOR; - Signature: I - Constant value: int 4 - -public static final int AXIS_TOUCH_MINOR; - Signature: I - Constant value: int 5 - -public static final int AXIS_TOOL_MAJOR; - Signature: I - Constant value: int 6 - -public static final int AXIS_TOOL_MINOR; - Signature: I - Constant value: int 7 - -public static final int AXIS_ORIENTATION; - Signature: I - Constant value: int 8 - -public static final int AXIS_VSCROLL; - Signature: I - Constant value: int 9 - -public static final int AXIS_HSCROLL; - Signature: I - Constant value: int 10 - -public static final int AXIS_Z; - Signature: I - Constant value: int 11 - -public static final int AXIS_RX; - Signature: I - Constant value: int 12 - -public static final int AXIS_RY; - Signature: I - Constant value: int 13 - -public static final int AXIS_RZ; - Signature: I - Constant value: int 14 - -public static final int AXIS_HAT_X; - Signature: I - Constant value: int 15 - -public static final int AXIS_HAT_Y; - Signature: I - Constant value: int 16 - -public static final int AXIS_LTRIGGER; - Signature: I - Constant value: int 17 - -public static final int AXIS_RTRIGGER; - Signature: I - Constant value: int 18 - -public static final int AXIS_THROTTLE; - Signature: I - Constant value: int 19 - -public static final int AXIS_RUDDER; - Signature: I - Constant value: int 20 - -public static final int AXIS_WHEEL; - Signature: I - Constant value: int 21 - -public static final int AXIS_GAS; - Signature: I - Constant value: int 22 - -public static final int AXIS_BRAKE; - Signature: I - Constant value: int 23 - -public static final int AXIS_DISTANCE; - Signature: I - Constant value: int 24 - -public static final int AXIS_TILT; - Signature: I - Constant value: int 25 - -public static final int AXIS_GENERIC_1; - Signature: I - Constant value: int 32 - -public static final int AXIS_GENERIC_2; - Signature: I - Constant value: int 33 - -public static final int AXIS_GENERIC_3; - Signature: I - Constant value: int 34 - -public static final int AXIS_GENERIC_4; - Signature: I - Constant value: int 35 - -public static final int AXIS_GENERIC_5; - Signature: I - Constant value: int 36 - -public static final int AXIS_GENERIC_6; - Signature: I - Constant value: int 37 - -public static final int AXIS_GENERIC_7; - Signature: I - Constant value: int 38 - -public static final int AXIS_GENERIC_8; - Signature: I - Constant value: int 39 - -public static final int AXIS_GENERIC_9; - Signature: I - Constant value: int 40 - -public static final int AXIS_GENERIC_10; - Signature: I - Constant value: int 41 - -public static final int AXIS_GENERIC_11; - Signature: I - Constant value: int 42 - -public static final int AXIS_GENERIC_12; - Signature: I - Constant value: int 43 - -public static final int AXIS_GENERIC_13; - Signature: I - Constant value: int 44 - -public static final int AXIS_GENERIC_14; - Signature: I - Constant value: int 45 - -public static final int AXIS_GENERIC_15; - Signature: I - Constant value: int 46 - -public static final int AXIS_GENERIC_16; - Signature: I - Constant value: int 47 - -public static final int BUTTON_PRIMARY; - Signature: I - Constant value: int 1 - -public static final int BUTTON_SECONDARY; - Signature: I - Constant value: int 2 - -public static final int BUTTON_TERTIARY; - Signature: I - Constant value: int 4 - -public static final int BUTTON_BACK; - Signature: I - Constant value: int 8 - -public static final int BUTTON_FORWARD; - Signature: I - Constant value: int 16 - -public static final int TOOL_TYPE_UNKNOWN; - Signature: I - Constant value: int 0 - -public static final int TOOL_TYPE_FINGER; - Signature: I - Constant value: int 1 - -public static final int TOOL_TYPE_STYLUS; - Signature: I - Constant value: int 2 - -public static final int TOOL_TYPE_MOUSE; - Signature: I - Constant value: int 3 - -public static final int TOOL_TYPE_ERASER; - Signature: I - Constant value: int 4 - -public static final android.os.Parcelable$Creator CREATOR; - Signature: Landroid/os/Parcelable$Creator; - Signature: length = 0x2 - 00 FFFFFF99 - - -android.view.MotionEvent(); - Signature: ()V - Code: - Stack=3, Locals=1, Args_size=1 - 0: aload_0 - 1: invokespecial #1; //Method android/view/InputEvent."<init>":()V - 4: new #2; //class java/lang/RuntimeException - 7: dup - 8: ldc #3; //String Stub! - 10: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 13: athrow - LineNumberTable: - line 35: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 14 0 this Landroid/view/MotionEvent; - - -protected void finalize() throws java.lang.Throwable; - Signature: ()V - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 36: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - Exceptions: - throws java.lang.Throwable -public static android.view.MotionEvent obtain(long, long, int, int, android.view.MotionEvent$PointerProperties[], android.view.MotionEvent$PointerCoords[], int, int, float, float, int, int, int, int); - Signature: (JJII[Landroid/view/MotionEvent$PointerProperties;[Landroid/view/MotionEvent$PointerCoords;IIFFIIII)Landroid/view/MotionEvent; - Code: - Stack=3, Locals=16, Args_size=14 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 37: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 downTime J - 0 10 2 eventTime J - 0 10 4 action I - 0 10 5 pointerCount I - 0 10 6 pointerProperties [Landroid/view/MotionEvent$PointerProperties; - 0 10 7 pointerCoords [Landroid/view/MotionEvent$PointerCoords; - 0 10 8 metaState I - 0 10 9 buttonState I - 0 10 10 xPrecision F - 0 10 11 yPrecision F - 0 10 12 deviceId I - 0 10 13 edgeFlags I - 0 10 14 source I - 0 10 15 flags I - - -public static android.view.MotionEvent obtain(long, long, int, int, int[], android.view.MotionEvent$PointerCoords[], int, float, float, int, int, int, int); - Signature: (JJII[I[Landroid/view/MotionEvent$PointerCoords;IFFIIII)Landroid/view/MotionEvent; - Code: - Stack=3, Locals=15, Args_size=13 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 39: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 downTime J - 0 10 2 eventTime J - 0 10 4 action I - 0 10 5 pointerCount I - 0 10 6 pointerIds [I - 0 10 7 pointerCoords [Landroid/view/MotionEvent$PointerCoords; - 0 10 8 metaState I - 0 10 9 xPrecision F - 0 10 10 yPrecision F - 0 10 11 deviceId I - 0 10 12 edgeFlags I - 0 10 13 source I - 0 10 14 flags I - - Deprecated: true - RuntimeVisibleAnnotations: length = 0x6 - 00 01 00 30 00 00 - -public static android.view.MotionEvent obtain(long, long, int, float, float, float, float, int, float, float, int, int); - Signature: (JJIFFFFIFFII)Landroid/view/MotionEvent; - Code: - Stack=3, Locals=14, Args_size=12 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 40: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 downTime J - 0 10 2 eventTime J - 0 10 4 action I - 0 10 5 x F - 0 10 6 y F - 0 10 7 pressure F - 0 10 8 size F - 0 10 9 metaState I - 0 10 10 xPrecision F - 0 10 11 yPrecision F - 0 10 12 deviceId I - 0 10 13 edgeFlags I - - -public static android.view.MotionEvent obtain(long, long, int, int, float, float, float, float, int, float, float, int, int); - Signature: (JJIIFFFFIFFII)Landroid/view/MotionEvent; - Code: - Stack=3, Locals=15, Args_size=13 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 42: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 downTime J - 0 10 2 eventTime J - 0 10 4 action I - 0 10 5 pointerCount I - 0 10 6 x F - 0 10 7 y F - 0 10 8 pressure F - 0 10 9 size F - 0 10 10 metaState I - 0 10 11 xPrecision F - 0 10 12 yPrecision F - 0 10 13 deviceId I - 0 10 14 edgeFlags I - - Deprecated: true - RuntimeVisibleAnnotations: length = 0x6 - 00 01 00 30 00 00 - -public static android.view.MotionEvent obtain(long, long, int, float, float, int); - Signature: (JJIFFI)Landroid/view/MotionEvent; - Code: - Stack=3, Locals=8, Args_size=6 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 43: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 downTime J - 0 10 2 eventTime J - 0 10 4 action I - 0 10 5 x F - 0 10 6 y F - 0 10 7 metaState I - - -public static android.view.MotionEvent obtain(android.view.MotionEvent); - Signature: (Landroid/view/MotionEvent;)Landroid/view/MotionEvent; - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 44: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 other Landroid/view/MotionEvent; - - -public static android.view.MotionEvent obtainNoHistory(android.view.MotionEvent); - Signature: (Landroid/view/MotionEvent;)Landroid/view/MotionEvent; - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 45: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 other Landroid/view/MotionEvent; - - -public final void recycle(); - Signature: ()V - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 46: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final int getDeviceId(); - Signature: ()I - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 47: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final int getSource(); - Signature: ()I - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 48: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final void setSource(int); - Signature: (I)V - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 49: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 source I - - -public final int getAction(); - Signature: ()I - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 50: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final int getActionMasked(); - Signature: ()I - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 51: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final int getActionIndex(); - Signature: ()I - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 52: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final int getFlags(); - Signature: ()I - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 53: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final long getDownTime(); - Signature: ()J - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 54: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final long getEventTime(); - Signature: ()J - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 55: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final float getX(); - Signature: ()F - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 56: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final float getY(); - Signature: ()F - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 57: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final float getPressure(); - Signature: ()F - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 58: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final float getSize(); - Signature: ()F - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 59: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final float getTouchMajor(); - Signature: ()F - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 60: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final float getTouchMinor(); - Signature: ()F - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 61: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final float getToolMajor(); - Signature: ()F - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 62: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final float getToolMinor(); - Signature: ()F - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 63: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final float getOrientation(); - Signature: ()F - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 64: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final float getAxisValue(int); - Signature: (I)F - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 65: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 axis I - - -public final int getPointerCount(); - Signature: ()I - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 66: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final int getPointerId(int); - Signature: (I)I - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 67: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - - -public final int getToolType(int); - Signature: (I)I - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 68: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - - -public final int findPointerIndex(int); - Signature: (I)I - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 69: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerId I - - -public final float getX(int); - Signature: (I)F - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 70: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - - -public final float getY(int); - Signature: (I)F - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 71: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - - -public final float getPressure(int); - Signature: (I)F - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 72: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - - -public final float getSize(int); - Signature: (I)F - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 73: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - - -public final float getTouchMajor(int); - Signature: (I)F - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 74: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - - -public final float getTouchMinor(int); - Signature: (I)F - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 75: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - - -public final float getToolMajor(int); - Signature: (I)F - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 76: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - - -public final float getToolMinor(int); - Signature: (I)F - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 77: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - - -public final float getOrientation(int); - Signature: (I)F - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 78: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - - -public final float getAxisValue(int, int); - Signature: (II)F - Code: - Stack=3, Locals=3, Args_size=3 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 79: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 axis I - 0 10 2 pointerIndex I - - -public final void getPointerCoords(int, android.view.MotionEvent$PointerCoords); - Signature: (ILandroid/view/MotionEvent$PointerCoords;)V - Code: - Stack=3, Locals=3, Args_size=3 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 80: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 outPointerCoords Landroid/view/MotionEvent$PointerCoords; - - -public final void getPointerProperties(int, android.view.MotionEvent$PointerProperties); - Signature: (ILandroid/view/MotionEvent$PointerProperties;)V - Code: - Stack=3, Locals=3, Args_size=3 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 81: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 outPointerProperties Landroid/view/MotionEvent$PointerProperties; - - -public final int getMetaState(); - Signature: ()I - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 82: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final int getButtonState(); - Signature: ()I - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 83: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final float getRawX(); - Signature: ()F - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 84: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final float getRawY(); - Signature: ()F - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 85: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final float getXPrecision(); - Signature: ()F - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 86: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final float getYPrecision(); - Signature: ()F - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 87: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final int getHistorySize(); - Signature: ()I - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 88: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final long getHistoricalEventTime(int); - Signature: (I)J - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 89: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pos I - - -public final float getHistoricalX(int); - Signature: (I)F - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 90: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pos I - - -public final float getHistoricalY(int); - Signature: (I)F - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 91: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pos I - - -public final float getHistoricalPressure(int); - Signature: (I)F - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 92: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pos I - - -public final float getHistoricalSize(int); - Signature: (I)F - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 93: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pos I - - -public final float getHistoricalTouchMajor(int); - Signature: (I)F - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 94: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pos I - - -public final float getHistoricalTouchMinor(int); - Signature: (I)F - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 95: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pos I - - -public final float getHistoricalToolMajor(int); - Signature: (I)F - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 96: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pos I - - -public final float getHistoricalToolMinor(int); - Signature: (I)F - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 97: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pos I - - -public final float getHistoricalOrientation(int); - Signature: (I)F - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 98: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pos I - - -public final float getHistoricalAxisValue(int, int); - Signature: (II)F - Code: - Stack=3, Locals=3, Args_size=3 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 99: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 axis I - 0 10 2 pos I - - -public final float getHistoricalX(int, int); - Signature: (II)F - Code: - Stack=3, Locals=3, Args_size=3 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 100: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 pos I - - -public final float getHistoricalY(int, int); - Signature: (II)F - Code: - Stack=3, Locals=3, Args_size=3 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 101: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 pos I - - -public final float getHistoricalPressure(int, int); - Signature: (II)F - Code: - Stack=3, Locals=3, Args_size=3 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 102: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 pos I - - -public final float getHistoricalSize(int, int); - Signature: (II)F - Code: - Stack=3, Locals=3, Args_size=3 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 103: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 pos I - - -public final float getHistoricalTouchMajor(int, int); - Signature: (II)F - Code: - Stack=3, Locals=3, Args_size=3 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 104: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 pos I - - -public final float getHistoricalTouchMinor(int, int); - Signature: (II)F - Code: - Stack=3, Locals=3, Args_size=3 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 105: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 pos I - - -public final float getHistoricalToolMajor(int, int); - Signature: (II)F - Code: - Stack=3, Locals=3, Args_size=3 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 106: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 pos I - - -public final float getHistoricalToolMinor(int, int); - Signature: (II)F - Code: - Stack=3, Locals=3, Args_size=3 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 107: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 pos I - - -public final float getHistoricalOrientation(int, int); - Signature: (II)F - Code: - Stack=3, Locals=3, Args_size=3 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 108: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 pos I - - -public final float getHistoricalAxisValue(int, int, int); - Signature: (III)F - Code: - Stack=3, Locals=4, Args_size=4 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 109: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 axis I - 0 10 2 pointerIndex I - 0 10 3 pos I - - -public final void getHistoricalPointerCoords(int, int, android.view.MotionEvent$PointerCoords); - Signature: (IILandroid/view/MotionEvent$PointerCoords;)V - Code: - Stack=3, Locals=4, Args_size=4 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 110: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 pos I - 0 10 3 outPointerCoords Landroid/view/MotionEvent$PointerCoords; - - -public final int getEdgeFlags(); - Signature: ()I - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 111: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public final void setEdgeFlags(int); - Signature: (I)V - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 112: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 flags I - - -public final void setAction(int); - Signature: (I)V - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 113: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 action I - - -public final void offsetLocation(float, float); - Signature: (FF)V - Code: - Stack=3, Locals=3, Args_size=3 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 114: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 deltaX F - 0 10 2 deltaY F - - -public final void setLocation(float, float); - Signature: (FF)V - Code: - Stack=3, Locals=3, Args_size=3 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 115: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 x F - 0 10 2 y F - - -public final void transform(android.graphics.Matrix); - Signature: (Landroid/graphics/Matrix;)V - Code: - Stack=3, Locals=2, Args_size=2 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 116: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 matrix Landroid/graphics/Matrix; - - -public final void addBatch(long, float, float, float, float, int); - Signature: (JFFFFI)V - Code: - Stack=3, Locals=8, Args_size=7 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 117: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 eventTime J - 0 10 3 x F - 0 10 4 y F - 0 10 5 pressure F - 0 10 6 size F - 0 10 7 metaState I - - -public final void addBatch(long, android.view.MotionEvent$PointerCoords[], int); - Signature: (J[Landroid/view/MotionEvent$PointerCoords;I)V - Code: - Stack=3, Locals=5, Args_size=4 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 118: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 eventTime J - 0 10 3 pointerCoords [Landroid/view/MotionEvent$PointerCoords; - 0 10 4 metaState I - - -public java.lang.String toString(); - Signature: ()Ljava/lang/String; - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 119: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - -public static java.lang.String actionToString(int); - Signature: (I)Ljava/lang/String; - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 120: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 action I - - -public static java.lang.String axisToString(int); - Signature: (I)Ljava/lang/String; - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 121: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 axis I - - -public static int axisFromString(java.lang.String); - Signature: (Ljava/lang/String;)I - Code: - Stack=3, Locals=1, Args_size=1 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 122: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 symbolicName Ljava/lang/String; - - -public void writeToParcel(android.os.Parcel, int); - Signature: (Landroid/os/Parcel;I)V - Code: - Stack=3, Locals=3, Args_size=3 - 0: new #2; //class java/lang/RuntimeException - 3: dup - 4: ldc #3; //String Stub! - 6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 123: 0 - - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 out Landroid/os/Parcel; - 0 10 2 flags I - - -static {}; - Signature: ()V - Code: - Stack=1, Locals=0, Args_size=0 - 0: aconst_null - 1: putstatic #5; //Field CREATOR:Landroid/os/Parcelable$Creator; - 4: return - LineNumberTable: - line 213: 0 - - -} -
diff --git a/base/android/jni_generator/golden/testMotionEvent.javap7 b/base/android/jni_generator/golden/testMotionEvent.javap7 deleted file mode 100644 index f4f5444..0000000 --- a/base/android/jni_generator/golden/testMotionEvent.javap7 +++ /dev/null
@@ -1,2370 +0,0 @@ -Classfile out_android/Debug/gen/content/jni/android/view/MotionEvent.class - Last modified Feb 27, 2014; size 13369 bytes - MD5 checksum 3718d77a994cb8aceb7b35c5df3c4dd1 - Compiled from "MotionEvent.java" -public final class android.view.MotionEvent extends android.view.InputEvent implements android.os.Parcelable - SourceFile: "MotionEvent.java" - InnerClasses: - public static final #10= #9 of #6; //PointerProperties=class android/view/MotionEvent$PointerProperties of class android/view/MotionEvent - public static final #13= #12 of #6; //PointerCoords=class android/view/MotionEvent$PointerCoords of class android/view/MotionEvent - public static #150= #149 of #8; //Creator=class android/os/Parcelable$Creator of class android/os/Parcelable - minor version: 0 - major version: 49 - flags: ACC_PUBLIC, ACC_FINAL, ACC_SUPER -Constant pool: - #1 = Methodref #7.#293 // android/view/InputEvent."<init>":()V - #2 = Class #294 // java/lang/RuntimeException - #3 = String #295 // Stub! - #4 = Methodref #2.#296 // java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - #5 = Fieldref #6.#297 // android/view/MotionEvent.CREATOR:Landroid/os/Parcelable$Creator; - #6 = Class #298 // android/view/MotionEvent - #7 = Class #299 // android/view/InputEvent - #8 = Class #300 // android/os/Parcelable - #9 = Class #301 // android/view/MotionEvent$PointerProperties - #10 = Utf8 PointerProperties - #11 = Utf8 InnerClasses - #12 = Class #302 // android/view/MotionEvent$PointerCoords - #13 = Utf8 PointerCoords - #14 = Utf8 INVALID_POINTER_ID - #15 = Utf8 I - #16 = Utf8 ConstantValue - #17 = Integer -1 - #18 = Utf8 ACTION_MASK - #19 = Integer 255 - #20 = Utf8 ACTION_DOWN - #21 = Integer 0 - #22 = Utf8 ACTION_UP - #23 = Integer 1 - #24 = Utf8 ACTION_MOVE - #25 = Integer 2 - #26 = Utf8 ACTION_CANCEL - #27 = Integer 3 - #28 = Utf8 ACTION_OUTSIDE - #29 = Integer 4 - #30 = Utf8 ACTION_POINTER_DOWN - #31 = Integer 5 - #32 = Utf8 ACTION_POINTER_UP - #33 = Integer 6 - #34 = Utf8 ACTION_HOVER_MOVE - #35 = Integer 7 - #36 = Utf8 ACTION_SCROLL - #37 = Integer 8 - #38 = Utf8 ACTION_HOVER_ENTER - #39 = Integer 9 - #40 = Utf8 ACTION_HOVER_EXIT - #41 = Integer 10 - #42 = Utf8 ACTION_POINTER_INDEX_MASK - #43 = Integer 65280 - #44 = Utf8 ACTION_POINTER_INDEX_SHIFT - #45 = Utf8 ACTION_POINTER_1_DOWN - #46 = Utf8 Deprecated - #47 = Utf8 RuntimeVisibleAnnotations - #48 = Utf8 Ljava/lang/Deprecated; - #49 = Utf8 ACTION_POINTER_2_DOWN - #50 = Integer 261 - #51 = Utf8 ACTION_POINTER_3_DOWN - #52 = Integer 517 - #53 = Utf8 ACTION_POINTER_1_UP - #54 = Utf8 ACTION_POINTER_2_UP - #55 = Integer 262 - #56 = Utf8 ACTION_POINTER_3_UP - #57 = Integer 518 - #58 = Utf8 ACTION_POINTER_ID_MASK - #59 = Utf8 ACTION_POINTER_ID_SHIFT - #60 = Utf8 FLAG_WINDOW_IS_OBSCURED - #61 = Utf8 EDGE_TOP - #62 = Utf8 EDGE_BOTTOM - #63 = Utf8 EDGE_LEFT - #64 = Utf8 EDGE_RIGHT - #65 = Utf8 AXIS_X - #66 = Utf8 AXIS_Y - #67 = Utf8 AXIS_PRESSURE - #68 = Utf8 AXIS_SIZE - #69 = Utf8 AXIS_TOUCH_MAJOR - #70 = Utf8 AXIS_TOUCH_MINOR - #71 = Utf8 AXIS_TOOL_MAJOR - #72 = Utf8 AXIS_TOOL_MINOR - #73 = Utf8 AXIS_ORIENTATION - #74 = Utf8 AXIS_VSCROLL - #75 = Utf8 AXIS_HSCROLL - #76 = Utf8 AXIS_Z - #77 = Integer 11 - #78 = Utf8 AXIS_RX - #79 = Integer 12 - #80 = Utf8 AXIS_RY - #81 = Integer 13 - #82 = Utf8 AXIS_RZ - #83 = Integer 14 - #84 = Utf8 AXIS_HAT_X - #85 = Integer 15 - #86 = Utf8 AXIS_HAT_Y - #87 = Integer 16 - #88 = Utf8 AXIS_LTRIGGER - #89 = Integer 17 - #90 = Utf8 AXIS_RTRIGGER - #91 = Integer 18 - #92 = Utf8 AXIS_THROTTLE - #93 = Integer 19 - #94 = Utf8 AXIS_RUDDER - #95 = Integer 20 - #96 = Utf8 AXIS_WHEEL - #97 = Integer 21 - #98 = Utf8 AXIS_GAS - #99 = Integer 22 - #100 = Utf8 AXIS_BRAKE - #101 = Integer 23 - #102 = Utf8 AXIS_DISTANCE - #103 = Integer 24 - #104 = Utf8 AXIS_TILT - #105 = Integer 25 - #106 = Utf8 AXIS_GENERIC_1 - #107 = Integer 32 - #108 = Utf8 AXIS_GENERIC_2 - #109 = Integer 33 - #110 = Utf8 AXIS_GENERIC_3 - #111 = Integer 34 - #112 = Utf8 AXIS_GENERIC_4 - #113 = Integer 35 - #114 = Utf8 AXIS_GENERIC_5 - #115 = Integer 36 - #116 = Utf8 AXIS_GENERIC_6 - #117 = Integer 37 - #118 = Utf8 AXIS_GENERIC_7 - #119 = Integer 38 - #120 = Utf8 AXIS_GENERIC_8 - #121 = Integer 39 - #122 = Utf8 AXIS_GENERIC_9 - #123 = Integer 40 - #124 = Utf8 AXIS_GENERIC_10 - #125 = Integer 41 - #126 = Utf8 AXIS_GENERIC_11 - #127 = Integer 42 - #128 = Utf8 AXIS_GENERIC_12 - #129 = Integer 43 - #130 = Utf8 AXIS_GENERIC_13 - #131 = Integer 44 - #132 = Utf8 AXIS_GENERIC_14 - #133 = Integer 45 - #134 = Utf8 AXIS_GENERIC_15 - #135 = Integer 46 - #136 = Utf8 AXIS_GENERIC_16 - #137 = Integer 47 - #138 = Utf8 BUTTON_PRIMARY - #139 = Utf8 BUTTON_SECONDARY - #140 = Utf8 BUTTON_TERTIARY - #141 = Utf8 BUTTON_BACK - #142 = Utf8 BUTTON_FORWARD - #143 = Utf8 TOOL_TYPE_UNKNOWN - #144 = Utf8 TOOL_TYPE_FINGER - #145 = Utf8 TOOL_TYPE_STYLUS - #146 = Utf8 TOOL_TYPE_MOUSE - #147 = Utf8 TOOL_TYPE_ERASER - #148 = Utf8 CREATOR - #149 = Class #303 // android/os/Parcelable$Creator - #150 = Utf8 Creator - #151 = Utf8 Landroid/os/Parcelable$Creator; - #152 = Utf8 Signature - #153 = Utf8 Landroid/os/Parcelable$Creator<Landroid/view/MotionEvent;>; - #154 = Utf8 <init> - #155 = Utf8 ()V - #156 = Utf8 Code - #157 = Utf8 LineNumberTable - #158 = Utf8 LocalVariableTable - #159 = Utf8 this - #160 = Utf8 Landroid/view/MotionEvent; - #161 = Utf8 finalize - #162 = Utf8 Exceptions - #163 = Class #304 // java/lang/Throwable - #164 = Utf8 obtain - #165 = Utf8 (JJII[Landroid/view/MotionEvent$PointerProperties;[Landroid/view/MotionEvent$PointerCoords;IIFFIIII)Landroid/view/MotionEvent; - #166 = Utf8 downTime - #167 = Utf8 J - #168 = Utf8 eventTime - #169 = Utf8 action - #170 = Utf8 pointerCount - #171 = Utf8 pointerProperties - #172 = Utf8 [Landroid/view/MotionEvent$PointerProperties; - #173 = Utf8 pointerCoords - #174 = Utf8 [Landroid/view/MotionEvent$PointerCoords; - #175 = Utf8 metaState - #176 = Utf8 buttonState - #177 = Utf8 xPrecision - #178 = Utf8 F - #179 = Utf8 yPrecision - #180 = Utf8 deviceId - #181 = Utf8 edgeFlags - #182 = Utf8 source - #183 = Utf8 flags - #184 = Utf8 (JJII[I[Landroid/view/MotionEvent$PointerCoords;IFFIIII)Landroid/view/MotionEvent; - #185 = Utf8 pointerIds - #186 = Utf8 [I - #187 = Utf8 (JJIFFFFIFFII)Landroid/view/MotionEvent; - #188 = Utf8 x - #189 = Utf8 y - #190 = Utf8 pressure - #191 = Utf8 size - #192 = Utf8 (JJIIFFFFIFFII)Landroid/view/MotionEvent; - #193 = Utf8 (JJIFFI)Landroid/view/MotionEvent; - #194 = Utf8 (Landroid/view/MotionEvent;)Landroid/view/MotionEvent; - #195 = Utf8 other - #196 = Utf8 obtainNoHistory - #197 = Utf8 recycle - #198 = Utf8 getDeviceId - #199 = Utf8 ()I - #200 = Utf8 getSource - #201 = Utf8 setSource - #202 = Utf8 (I)V - #203 = Utf8 getAction - #204 = Utf8 getActionMasked - #205 = Utf8 getActionIndex - #206 = Utf8 getFlags - #207 = Utf8 getDownTime - #208 = Utf8 ()J - #209 = Utf8 getEventTime - #210 = Utf8 getX - #211 = Utf8 ()F - #212 = Utf8 getY - #213 = Utf8 getPressure - #214 = Utf8 getSize - #215 = Utf8 getTouchMajor - #216 = Utf8 getTouchMinor - #217 = Utf8 getToolMajor - #218 = Utf8 getToolMinor - #219 = Utf8 getOrientation - #220 = Utf8 getAxisValue - #221 = Utf8 (I)F - #222 = Utf8 axis - #223 = Utf8 getPointerCount - #224 = Utf8 getPointerId - #225 = Utf8 (I)I - #226 = Utf8 pointerIndex - #227 = Utf8 getToolType - #228 = Utf8 findPointerIndex - #229 = Utf8 pointerId - #230 = Utf8 (II)F - #231 = Utf8 getPointerCoords - #232 = Utf8 (ILandroid/view/MotionEvent$PointerCoords;)V - #233 = Utf8 outPointerCoords - #234 = Utf8 Landroid/view/MotionEvent$PointerCoords; - #235 = Utf8 getPointerProperties - #236 = Utf8 (ILandroid/view/MotionEvent$PointerProperties;)V - #237 = Utf8 outPointerProperties - #238 = Utf8 Landroid/view/MotionEvent$PointerProperties; - #239 = Utf8 getMetaState - #240 = Utf8 getButtonState - #241 = Utf8 getRawX - #242 = Utf8 getRawY - #243 = Utf8 getXPrecision - #244 = Utf8 getYPrecision - #245 = Utf8 getHistorySize - #246 = Utf8 getHistoricalEventTime - #247 = Utf8 (I)J - #248 = Utf8 pos - #249 = Utf8 getHistoricalX - #250 = Utf8 getHistoricalY - #251 = Utf8 getHistoricalPressure - #252 = Utf8 getHistoricalSize - #253 = Utf8 getHistoricalTouchMajor - #254 = Utf8 getHistoricalTouchMinor - #255 = Utf8 getHistoricalToolMajor - #256 = Utf8 getHistoricalToolMinor - #257 = Utf8 getHistoricalOrientation - #258 = Utf8 getHistoricalAxisValue - #259 = Utf8 (III)F - #260 = Utf8 getHistoricalPointerCoords - #261 = Utf8 (IILandroid/view/MotionEvent$PointerCoords;)V - #262 = Utf8 getEdgeFlags - #263 = Utf8 setEdgeFlags - #264 = Utf8 setAction - #265 = Utf8 offsetLocation - #266 = Utf8 (FF)V - #267 = Utf8 deltaX - #268 = Utf8 deltaY - #269 = Utf8 setLocation - #270 = Utf8 transform - #271 = Utf8 (Landroid/graphics/Matrix;)V - #272 = Utf8 matrix - #273 = Utf8 Landroid/graphics/Matrix; - #274 = Utf8 addBatch - #275 = Utf8 (JFFFFI)V - #276 = Utf8 (J[Landroid/view/MotionEvent$PointerCoords;I)V - #277 = Utf8 toString - #278 = Utf8 ()Ljava/lang/String; - #279 = Utf8 actionToString - #280 = Utf8 (I)Ljava/lang/String; - #281 = Utf8 axisToString - #282 = Utf8 axisFromString - #283 = Utf8 (Ljava/lang/String;)I - #284 = Utf8 symbolicName - #285 = Utf8 Ljava/lang/String; - #286 = Utf8 writeToParcel - #287 = Utf8 (Landroid/os/Parcel;I)V - #288 = Utf8 out - #289 = Utf8 Landroid/os/Parcel; - #290 = Utf8 <clinit> - #291 = Utf8 SourceFile - #292 = Utf8 MotionEvent.java - #293 = NameAndType #154:#155 // "<init>":()V - #294 = Utf8 java/lang/RuntimeException - #295 = Utf8 Stub! - #296 = NameAndType #154:#305 // "<init>":(Ljava/lang/String;)V - #297 = NameAndType #148:#151 // CREATOR:Landroid/os/Parcelable$Creator; - #298 = Utf8 android/view/MotionEvent - #299 = Utf8 android/view/InputEvent - #300 = Utf8 android/os/Parcelable - #301 = Utf8 android/view/MotionEvent$PointerProperties - #302 = Utf8 android/view/MotionEvent$PointerCoords - #303 = Utf8 android/os/Parcelable$Creator - #304 = Utf8 java/lang/Throwable - #305 = Utf8 (Ljava/lang/String;)V -{ - public static final int INVALID_POINTER_ID; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int -1 - - - public static final int ACTION_MASK; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 255 - - - public static final int ACTION_DOWN; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 0 - - - public static final int ACTION_UP; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 1 - - - public static final int ACTION_MOVE; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 2 - - - public static final int ACTION_CANCEL; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 3 - - - public static final int ACTION_OUTSIDE; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 4 - - - public static final int ACTION_POINTER_DOWN; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 5 - - - public static final int ACTION_POINTER_UP; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 6 - - - public static final int ACTION_HOVER_MOVE; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 7 - - - public static final int ACTION_SCROLL; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 8 - - - public static final int ACTION_HOVER_ENTER; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 9 - - - public static final int ACTION_HOVER_EXIT; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 10 - - - public static final int ACTION_POINTER_INDEX_MASK; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 65280 - - - public static final int ACTION_POINTER_INDEX_SHIFT; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 8 - - - public static final int ACTION_POINTER_1_DOWN; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 5 - Deprecated: true - RuntimeVisibleAnnotations: - 0: #48() - - - public static final int ACTION_POINTER_2_DOWN; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 261 - Deprecated: true - RuntimeVisibleAnnotations: - 0: #48() - - - public static final int ACTION_POINTER_3_DOWN; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 517 - Deprecated: true - RuntimeVisibleAnnotations: - 0: #48() - - - public static final int ACTION_POINTER_1_UP; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 6 - Deprecated: true - RuntimeVisibleAnnotations: - 0: #48() - - - public static final int ACTION_POINTER_2_UP; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 262 - Deprecated: true - RuntimeVisibleAnnotations: - 0: #48() - - - public static final int ACTION_POINTER_3_UP; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 518 - Deprecated: true - RuntimeVisibleAnnotations: - 0: #48() - - - public static final int ACTION_POINTER_ID_MASK; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 65280 - Deprecated: true - RuntimeVisibleAnnotations: - 0: #48() - - - public static final int ACTION_POINTER_ID_SHIFT; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 8 - Deprecated: true - RuntimeVisibleAnnotations: - 0: #48() - - - public static final int FLAG_WINDOW_IS_OBSCURED; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 1 - - - public static final int EDGE_TOP; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 1 - - - public static final int EDGE_BOTTOM; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 2 - - - public static final int EDGE_LEFT; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 4 - - - public static final int EDGE_RIGHT; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 8 - - - public static final int AXIS_X; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 0 - - - public static final int AXIS_Y; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 1 - - - public static final int AXIS_PRESSURE; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 2 - - - public static final int AXIS_SIZE; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 3 - - - public static final int AXIS_TOUCH_MAJOR; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 4 - - - public static final int AXIS_TOUCH_MINOR; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 5 - - - public static final int AXIS_TOOL_MAJOR; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 6 - - - public static final int AXIS_TOOL_MINOR; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 7 - - - public static final int AXIS_ORIENTATION; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 8 - - - public static final int AXIS_VSCROLL; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 9 - - - public static final int AXIS_HSCROLL; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 10 - - - public static final int AXIS_Z; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 11 - - - public static final int AXIS_RX; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 12 - - - public static final int AXIS_RY; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 13 - - - public static final int AXIS_RZ; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 14 - - - public static final int AXIS_HAT_X; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 15 - - - public static final int AXIS_HAT_Y; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 16 - - - public static final int AXIS_LTRIGGER; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 17 - - - public static final int AXIS_RTRIGGER; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 18 - - - public static final int AXIS_THROTTLE; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 19 - - - public static final int AXIS_RUDDER; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 20 - - - public static final int AXIS_WHEEL; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 21 - - - public static final int AXIS_GAS; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 22 - - - public static final int AXIS_BRAKE; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 23 - - - public static final int AXIS_DISTANCE; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 24 - - - public static final int AXIS_TILT; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 25 - - - public static final int AXIS_GENERIC_1; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 32 - - - public static final int AXIS_GENERIC_2; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 33 - - - public static final int AXIS_GENERIC_3; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 34 - - - public static final int AXIS_GENERIC_4; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 35 - - - public static final int AXIS_GENERIC_5; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 36 - - - public static final int AXIS_GENERIC_6; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 37 - - - public static final int AXIS_GENERIC_7; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 38 - - - public static final int AXIS_GENERIC_8; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 39 - - - public static final int AXIS_GENERIC_9; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 40 - - - public static final int AXIS_GENERIC_10; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 41 - - - public static final int AXIS_GENERIC_11; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 42 - - - public static final int AXIS_GENERIC_12; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 43 - - - public static final int AXIS_GENERIC_13; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 44 - - - public static final int AXIS_GENERIC_14; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 45 - - - public static final int AXIS_GENERIC_15; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 46 - - - public static final int AXIS_GENERIC_16; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 47 - - - public static final int BUTTON_PRIMARY; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 1 - - - public static final int BUTTON_SECONDARY; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 2 - - - public static final int BUTTON_TERTIARY; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 4 - - - public static final int BUTTON_BACK; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 8 - - - public static final int BUTTON_FORWARD; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 16 - - - public static final int TOOL_TYPE_UNKNOWN; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 0 - - - public static final int TOOL_TYPE_FINGER; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 1 - - - public static final int TOOL_TYPE_STYLUS; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 2 - - - public static final int TOOL_TYPE_MOUSE; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 3 - - - public static final int TOOL_TYPE_ERASER; - Signature: I - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - ConstantValue: int 4 - - - public static final android.os.Parcelable$Creator<android.view.MotionEvent> CREATOR; - Signature: Landroid/os/Parcelable$Creator; - flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL - Signature: #153 // Landroid/os/Parcelable$Creator<Landroid/view/MotionEvent;>; - - - android.view.MotionEvent(); - Signature: ()V - flags: - Code: - stack=3, locals=1, args_size=1 - 0: aload_0 - 1: invokespecial #1 // Method android/view/InputEvent."<init>":()V - 4: new #2 // class java/lang/RuntimeException - 7: dup - 8: ldc #3 // String Stub! - 10: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 13: athrow - LineNumberTable: - line 35: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 14 0 this Landroid/view/MotionEvent; - - protected void finalize() throws java.lang.Throwable; - Signature: ()V - flags: ACC_PROTECTED - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 36: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - Exceptions: - throws java.lang.Throwable - - public static android.view.MotionEvent obtain(long, long, int, int, android.view.MotionEvent$PointerProperties[], android.view.MotionEvent$PointerCoords[], int, int, float, float, int, int, int, int); - Signature: (JJII[Landroid/view/MotionEvent$PointerProperties;[Landroid/view/MotionEvent$PointerCoords;IIFFIIII)Landroid/view/MotionEvent; - flags: ACC_PUBLIC, ACC_STATIC - Code: - stack=3, locals=16, args_size=14 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 37: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 downTime J - 0 10 2 eventTime J - 0 10 4 action I - 0 10 5 pointerCount I - 0 10 6 pointerProperties [Landroid/view/MotionEvent$PointerProperties; - 0 10 7 pointerCoords [Landroid/view/MotionEvent$PointerCoords; - 0 10 8 metaState I - 0 10 9 buttonState I - 0 10 10 xPrecision F - 0 10 11 yPrecision F - 0 10 12 deviceId I - 0 10 13 edgeFlags I - 0 10 14 source I - 0 10 15 flags I - - public static android.view.MotionEvent obtain(long, long, int, int, int[], android.view.MotionEvent$PointerCoords[], int, float, float, int, int, int, int); - Signature: (JJII[I[Landroid/view/MotionEvent$PointerCoords;IFFIIII)Landroid/view/MotionEvent; - flags: ACC_PUBLIC, ACC_STATIC - Code: - stack=3, locals=15, args_size=13 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 39: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 downTime J - 0 10 2 eventTime J - 0 10 4 action I - 0 10 5 pointerCount I - 0 10 6 pointerIds [I - 0 10 7 pointerCoords [Landroid/view/MotionEvent$PointerCoords; - 0 10 8 metaState I - 0 10 9 xPrecision F - 0 10 10 yPrecision F - 0 10 11 deviceId I - 0 10 12 edgeFlags I - 0 10 13 source I - 0 10 14 flags I - Deprecated: true - RuntimeVisibleAnnotations: - 0: #48() - - public static android.view.MotionEvent obtain(long, long, int, float, float, float, float, int, float, float, int, int); - Signature: (JJIFFFFIFFII)Landroid/view/MotionEvent; - flags: ACC_PUBLIC, ACC_STATIC - Code: - stack=3, locals=14, args_size=12 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 40: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 downTime J - 0 10 2 eventTime J - 0 10 4 action I - 0 10 5 x F - 0 10 6 y F - 0 10 7 pressure F - 0 10 8 size F - 0 10 9 metaState I - 0 10 10 xPrecision F - 0 10 11 yPrecision F - 0 10 12 deviceId I - 0 10 13 edgeFlags I - - public static android.view.MotionEvent obtain(long, long, int, int, float, float, float, float, int, float, float, int, int); - Signature: (JJIIFFFFIFFII)Landroid/view/MotionEvent; - flags: ACC_PUBLIC, ACC_STATIC - Code: - stack=3, locals=15, args_size=13 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 42: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 downTime J - 0 10 2 eventTime J - 0 10 4 action I - 0 10 5 pointerCount I - 0 10 6 x F - 0 10 7 y F - 0 10 8 pressure F - 0 10 9 size F - 0 10 10 metaState I - 0 10 11 xPrecision F - 0 10 12 yPrecision F - 0 10 13 deviceId I - 0 10 14 edgeFlags I - Deprecated: true - RuntimeVisibleAnnotations: - 0: #48() - - public static android.view.MotionEvent obtain(long, long, int, float, float, int); - Signature: (JJIFFI)Landroid/view/MotionEvent; - flags: ACC_PUBLIC, ACC_STATIC - Code: - stack=3, locals=8, args_size=6 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 43: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 downTime J - 0 10 2 eventTime J - 0 10 4 action I - 0 10 5 x F - 0 10 6 y F - 0 10 7 metaState I - - public static android.view.MotionEvent obtain(android.view.MotionEvent); - Signature: (Landroid/view/MotionEvent;)Landroid/view/MotionEvent; - flags: ACC_PUBLIC, ACC_STATIC - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 44: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 other Landroid/view/MotionEvent; - - public static android.view.MotionEvent obtainNoHistory(android.view.MotionEvent); - Signature: (Landroid/view/MotionEvent;)Landroid/view/MotionEvent; - flags: ACC_PUBLIC, ACC_STATIC - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 45: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 other Landroid/view/MotionEvent; - - public final void recycle(); - Signature: ()V - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 46: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final int getDeviceId(); - Signature: ()I - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 47: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final int getSource(); - Signature: ()I - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 48: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final void setSource(int); - Signature: (I)V - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 49: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 source I - - public final int getAction(); - Signature: ()I - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 50: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final int getActionMasked(); - Signature: ()I - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 51: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final int getActionIndex(); - Signature: ()I - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 52: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final int getFlags(); - Signature: ()I - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 53: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final long getDownTime(); - Signature: ()J - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 54: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final long getEventTime(); - Signature: ()J - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 55: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final float getX(); - Signature: ()F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 56: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final float getY(); - Signature: ()F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 57: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final float getPressure(); - Signature: ()F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 58: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final float getSize(); - Signature: ()F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 59: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final float getTouchMajor(); - Signature: ()F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 60: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final float getTouchMinor(); - Signature: ()F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 61: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final float getToolMajor(); - Signature: ()F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 62: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final float getToolMinor(); - Signature: ()F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 63: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final float getOrientation(); - Signature: ()F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 64: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final float getAxisValue(int); - Signature: (I)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 65: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 axis I - - public final int getPointerCount(); - Signature: ()I - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 66: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final int getPointerId(int); - Signature: (I)I - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 67: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - - public final int getToolType(int); - Signature: (I)I - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 68: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - - public final int findPointerIndex(int); - Signature: (I)I - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 69: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerId I - - public final float getX(int); - Signature: (I)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 70: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - - public final float getY(int); - Signature: (I)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 71: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - - public final float getPressure(int); - Signature: (I)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 72: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - - public final float getSize(int); - Signature: (I)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 73: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - - public final float getTouchMajor(int); - Signature: (I)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 74: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - - public final float getTouchMinor(int); - Signature: (I)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 75: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - - public final float getToolMajor(int); - Signature: (I)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 76: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - - public final float getToolMinor(int); - Signature: (I)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 77: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - - public final float getOrientation(int); - Signature: (I)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 78: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - - public final float getAxisValue(int, int); - Signature: (II)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=3, args_size=3 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 79: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 axis I - 0 10 2 pointerIndex I - - public final void getPointerCoords(int, android.view.MotionEvent$PointerCoords); - Signature: (ILandroid/view/MotionEvent$PointerCoords;)V - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=3, args_size=3 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 80: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 outPointerCoords Landroid/view/MotionEvent$PointerCoords; - - public final void getPointerProperties(int, android.view.MotionEvent$PointerProperties); - Signature: (ILandroid/view/MotionEvent$PointerProperties;)V - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=3, args_size=3 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 81: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 outPointerProperties Landroid/view/MotionEvent$PointerProperties; - - public final int getMetaState(); - Signature: ()I - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 82: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final int getButtonState(); - Signature: ()I - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 83: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final float getRawX(); - Signature: ()F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 84: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final float getRawY(); - Signature: ()F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 85: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final float getXPrecision(); - Signature: ()F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 86: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final float getYPrecision(); - Signature: ()F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 87: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final int getHistorySize(); - Signature: ()I - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 88: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final long getHistoricalEventTime(int); - Signature: (I)J - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 89: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pos I - - public final float getHistoricalX(int); - Signature: (I)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 90: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pos I - - public final float getHistoricalY(int); - Signature: (I)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 91: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pos I - - public final float getHistoricalPressure(int); - Signature: (I)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 92: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pos I - - public final float getHistoricalSize(int); - Signature: (I)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 93: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pos I - - public final float getHistoricalTouchMajor(int); - Signature: (I)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 94: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pos I - - public final float getHistoricalTouchMinor(int); - Signature: (I)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 95: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pos I - - public final float getHistoricalToolMajor(int); - Signature: (I)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 96: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pos I - - public final float getHistoricalToolMinor(int); - Signature: (I)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 97: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pos I - - public final float getHistoricalOrientation(int); - Signature: (I)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 98: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pos I - - public final float getHistoricalAxisValue(int, int); - Signature: (II)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=3, args_size=3 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 99: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 axis I - 0 10 2 pos I - - public final float getHistoricalX(int, int); - Signature: (II)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=3, args_size=3 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 100: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 pos I - - public final float getHistoricalY(int, int); - Signature: (II)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=3, args_size=3 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 101: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 pos I - - public final float getHistoricalPressure(int, int); - Signature: (II)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=3, args_size=3 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 102: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 pos I - - public final float getHistoricalSize(int, int); - Signature: (II)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=3, args_size=3 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 103: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 pos I - - public final float getHistoricalTouchMajor(int, int); - Signature: (II)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=3, args_size=3 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 104: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 pos I - - public final float getHistoricalTouchMinor(int, int); - Signature: (II)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=3, args_size=3 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 105: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 pos I - - public final float getHistoricalToolMajor(int, int); - Signature: (II)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=3, args_size=3 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 106: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 pos I - - public final float getHistoricalToolMinor(int, int); - Signature: (II)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=3, args_size=3 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 107: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 pos I - - public final float getHistoricalOrientation(int, int); - Signature: (II)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=3, args_size=3 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 108: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 pos I - - public final float getHistoricalAxisValue(int, int, int); - Signature: (III)F - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=4, args_size=4 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 109: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 axis I - 0 10 2 pointerIndex I - 0 10 3 pos I - - public final void getHistoricalPointerCoords(int, int, android.view.MotionEvent$PointerCoords); - Signature: (IILandroid/view/MotionEvent$PointerCoords;)V - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=4, args_size=4 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 110: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 pointerIndex I - 0 10 2 pos I - 0 10 3 outPointerCoords Landroid/view/MotionEvent$PointerCoords; - - public final int getEdgeFlags(); - Signature: ()I - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 111: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public final void setEdgeFlags(int); - Signature: (I)V - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 112: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 flags I - - public final void setAction(int); - Signature: (I)V - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 113: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 action I - - public final void offsetLocation(float, float); - Signature: (FF)V - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=3, args_size=3 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 114: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 deltaX F - 0 10 2 deltaY F - - public final void setLocation(float, float); - Signature: (FF)V - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=3, args_size=3 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 115: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 x F - 0 10 2 y F - - public final void transform(android.graphics.Matrix); - Signature: (Landroid/graphics/Matrix;)V - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=2, args_size=2 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 116: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 matrix Landroid/graphics/Matrix; - - public final void addBatch(long, float, float, float, float, int); - Signature: (JFFFFI)V - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=8, args_size=7 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 117: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 eventTime J - 0 10 3 x F - 0 10 4 y F - 0 10 5 pressure F - 0 10 6 size F - 0 10 7 metaState I - - public final void addBatch(long, android.view.MotionEvent$PointerCoords[], int); - Signature: (J[Landroid/view/MotionEvent$PointerCoords;I)V - flags: ACC_PUBLIC, ACC_FINAL - Code: - stack=3, locals=5, args_size=4 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 118: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 eventTime J - 0 10 3 pointerCoords [Landroid/view/MotionEvent$PointerCoords; - 0 10 4 metaState I - - public java.lang.String toString(); - Signature: ()Ljava/lang/String; - flags: ACC_PUBLIC - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 119: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - - public static java.lang.String actionToString(int); - Signature: (I)Ljava/lang/String; - flags: ACC_PUBLIC, ACC_STATIC - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 120: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 action I - - public static java.lang.String axisToString(int); - Signature: (I)Ljava/lang/String; - flags: ACC_PUBLIC, ACC_STATIC - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 121: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 axis I - - public static int axisFromString(java.lang.String); - Signature: (Ljava/lang/String;)I - flags: ACC_PUBLIC, ACC_STATIC - Code: - stack=3, locals=1, args_size=1 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 122: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 symbolicName Ljava/lang/String; - - public void writeToParcel(android.os.Parcel, int); - Signature: (Landroid/os/Parcel;I)V - flags: ACC_PUBLIC - Code: - stack=3, locals=3, args_size=3 - 0: new #2 // class java/lang/RuntimeException - 3: dup - 4: ldc #3 // String Stub! - 6: invokespecial #4 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V - 9: athrow - LineNumberTable: - line 123: 0 - LocalVariableTable: - Start Length Slot Name Signature - 0 10 0 this Landroid/view/MotionEvent; - 0 10 1 out Landroid/os/Parcel; - 0 10 2 flags I - - static {}; - Signature: ()V - flags: ACC_STATIC - Code: - stack=1, locals=0, args_size=0 - 0: aconst_null - 1: putstatic #5 // Field CREATOR:Landroid/os/Parcelable$Creator; - 4: return - LineNumberTable: - line 213: 0 -}
diff --git a/base/android/jni_generator/golden/testMultipleJNIAdditionalImport.golden b/base/android/jni_generator/golden/testMultipleJNIAdditionalImport.golden deleted file mode 100644 index 5398b32..0000000 --- a/base/android/jni_generator/golden/testMultipleJNIAdditionalImport.golden +++ /dev/null
@@ -1,71 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - - -// This file is autogenerated by -// base/android/jni_generator/jni_generator.py -// For -// org/chromium/foo/Foo - -#ifndef org_chromium_foo_Foo_JNI -#define org_chromium_foo_Foo_JNI - -#include <jni.h> - -#include "base/android/jni_generator/jni_generator_helper.h" - - -// Step 1: Forward declarations. - -JNI_REGISTRATION_EXPORT extern const char kClassPath_org_chromium_foo_Foo[]; -const char kClassPath_org_chromium_foo_Foo[] = "org/chromium/foo/Foo"; -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> g_org_chromium_foo_Foo_clazz(nullptr); -#ifndef org_chromium_foo_Foo_clazz_defined -#define org_chromium_foo_Foo_clazz_defined -inline jclass org_chromium_foo_Foo_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, kClassPath_org_chromium_foo_Foo, - &g_org_chromium_foo_Foo_clazz); -} -#endif - - -// Step 2: Constants (optional). - - -// Step 3: Method stubs. -static void JNI_Foo_DoSomething(JNIEnv* env, const base::android::JavaParamRef<jobject>& callback1, - const base::android::JavaParamRef<jobject>& callback2); - -JNI_GENERATOR_EXPORT void Java_org_chromium_foo_Foo_nativeDoSomething( - JNIEnv* env, - jclass jcaller, - jobject callback1, - jobject callback2) { - return JNI_Foo_DoSomething(env, base::android::JavaParamRef<jobject>(env, callback1), - base::android::JavaParamRef<jobject>(env, callback2)); -} - - -static std::atomic<jmethodID> g_org_chromium_foo_Foo_calledByNative(nullptr); -static void Java_Foo_calledByNative(JNIEnv* env, const base::android::JavaRef<jobject>& callback1, - const base::android::JavaRef<jobject>& callback2) { - jclass clazz = org_chromium_foo_Foo_clazz(env); - CHECK_CLAZZ(env, clazz, - org_chromium_foo_Foo_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "calledByNative", - "(Lorg/chromium/foo/Bar1$Callback;Lorg/chromium/foo/Bar2$Callback;)V", - &g_org_chromium_foo_Foo_calledByNative); - - env->CallStaticVoidMethod(clazz, - call_context.base.method_id, callback1.obj(), callback2.obj()); -} - -#endif // org_chromium_foo_Foo_JNI
diff --git a/base/android/jni_generator/golden/testNativeExportsOnlyOption.golden b/base/android/jni_generator/golden/testNativeExportsOnlyOption.golden deleted file mode 100644 index 08b6ec4e..0000000 --- a/base/android/jni_generator/golden/testNativeExportsOnlyOption.golden +++ /dev/null
@@ -1,229 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - - -// This file is autogenerated by -// base/android/jni_generator/jni_generator.py -// For -// org/chromium/example/jni_generator/SampleForTests - -#ifndef org_chromium_example_jni_generator_SampleForTests_JNI -#define org_chromium_example_jni_generator_SampleForTests_JNI - -#include <jni.h> - -#include "base/android/jni_generator/jni_generator_helper.h" - - -// Step 1: Forward declarations. - -JNI_REGISTRATION_EXPORT extern const char - kClassPath_org_chromium_example_jni_1generator_SampleForTests[]; -const char kClassPath_org_chromium_example_jni_1generator_SampleForTests[] = - "org/chromium/example/jni_generator/SampleForTests"; - -JNI_REGISTRATION_EXPORT extern const char - kClassPath_org_chromium_example_jni_1generator_SampleForTests_00024MyInnerClass[]; -const char kClassPath_org_chromium_example_jni_1generator_SampleForTests_00024MyInnerClass[] = - "org/chromium/example/jni_generator/SampleForTests$MyInnerClass"; - -JNI_REGISTRATION_EXPORT extern const char - kClassPath_org_chromium_example_jni_1generator_SampleForTests_00024MyOtherInnerClass[]; -const char kClassPath_org_chromium_example_jni_1generator_SampleForTests_00024MyOtherInnerClass[] = - "org/chromium/example/jni_generator/SampleForTests$MyOtherInnerClass"; -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> - g_org_chromium_example_jni_1generator_SampleForTests_clazz(nullptr); -#ifndef org_chromium_example_jni_1generator_SampleForTests_clazz_defined -#define org_chromium_example_jni_1generator_SampleForTests_clazz_defined -inline jclass org_chromium_example_jni_1generator_SampleForTests_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, - kClassPath_org_chromium_example_jni_1generator_SampleForTests, - &g_org_chromium_example_jni_1generator_SampleForTests_clazz); -} -#endif -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> - g_org_chromium_example_jni_1generator_SampleForTests_00024MyInnerClass_clazz(nullptr); -#ifndef org_chromium_example_jni_1generator_SampleForTests_00024MyInnerClass_clazz_defined -#define org_chromium_example_jni_1generator_SampleForTests_00024MyInnerClass_clazz_defined -inline jclass org_chromium_example_jni_1generator_SampleForTests_00024MyInnerClass_clazz(JNIEnv* - env) { - return base::android::LazyGetClass(env, - kClassPath_org_chromium_example_jni_1generator_SampleForTests_00024MyInnerClass, - &g_org_chromium_example_jni_1generator_SampleForTests_00024MyInnerClass_clazz); -} -#endif -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> - g_org_chromium_example_jni_1generator_SampleForTests_00024MyOtherInnerClass_clazz(nullptr); -#ifndef org_chromium_example_jni_1generator_SampleForTests_00024MyOtherInnerClass_clazz_defined -#define org_chromium_example_jni_1generator_SampleForTests_00024MyOtherInnerClass_clazz_defined -inline jclass - org_chromium_example_jni_1generator_SampleForTests_00024MyOtherInnerClass_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, - kClassPath_org_chromium_example_jni_1generator_SampleForTests_00024MyOtherInnerClass, - &g_org_chromium_example_jni_1generator_SampleForTests_00024MyOtherInnerClass_clazz); -} -#endif - - -// Step 2: Constants (optional). - - -// Step 3: Method stubs. -JNI_GENERATOR_EXPORT jint - Java_org_chromium_example_jni_1generator_SampleForTests_nativeStaticMethod( - JNIEnv* env, - jclass jcaller, - jlong nativeTest, - jint arg1) { - Test* native = reinterpret_cast<Test*>(nativeTest); - CHECK_NATIVE_PTR(env, jcaller, native, "StaticMethod", 0); - return native->StaticMethod(env, arg1); -} - -JNI_GENERATOR_EXPORT jint Java_org_chromium_example_jni_1generator_SampleForTests_nativeMethod( - JNIEnv* env, - jobject jcaller, - jlong nativeTest, - jint arg1) { - Test* native = reinterpret_cast<Test*>(nativeTest); - CHECK_NATIVE_PTR(env, jcaller, native, "Method", 0); - return native->Method(env, base::android::JavaParamRef<jobject>(env, jcaller), arg1); -} - -static jint JNI_MyInnerClass_Init(JNIEnv* env, const base::android::JavaParamRef<jobject>& jcaller); - -JNI_GENERATOR_EXPORT jint - Java_org_chromium_example_jni_1generator_SampleForTests_00024MyInnerClass_nativeInit( - JNIEnv* env, - jobject jcaller) { - return JNI_MyInnerClass_Init(env, base::android::JavaParamRef<jobject>(env, jcaller)); -} - -static jint JNI_MyOtherInnerClass_Init(JNIEnv* env, const base::android::JavaParamRef<jobject>& - jcaller); - -JNI_GENERATOR_EXPORT jint - Java_org_chromium_example_jni_1generator_SampleForTests_00024MyOtherInnerClass_nativeInit( - JNIEnv* env, - jobject jcaller) { - return JNI_MyOtherInnerClass_Init(env, base::android::JavaParamRef<jobject>(env, jcaller)); -} - - -static std::atomic<jmethodID> - g_org_chromium_example_jni_1generator_SampleForTests_testMethodWithParam(nullptr); -static void Java_SampleForTests_testMethodWithParam(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper iParam) { - jclass clazz = org_chromium_example_jni_1generator_SampleForTests_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_example_jni_1generator_SampleForTests_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "testMethodWithParam", - "(I)V", - &g_org_chromium_example_jni_1generator_SampleForTests_testMethodWithParam); - - env->CallVoidMethod(obj.obj(), - call_context.base.method_id, as_jint(iParam)); -} - -static std::atomic<jmethodID> - g_org_chromium_example_jni_1generator_SampleForTests_testMethodWithParamAndReturn(nullptr); -static base::android::ScopedJavaLocalRef<jstring> - Java_SampleForTests_testMethodWithParamAndReturn(JNIEnv* env, const - base::android::JavaRef<jobject>& obj, JniIntWrapper iParam) { - jclass clazz = org_chromium_example_jni_1generator_SampleForTests_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_example_jni_1generator_SampleForTests_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "testMethodWithParamAndReturn", - "(I)Ljava/lang/String;", - &g_org_chromium_example_jni_1generator_SampleForTests_testMethodWithParamAndReturn); - - jstring ret = - static_cast<jstring>(env->CallObjectMethod(obj.obj(), - call_context.base.method_id, as_jint(iParam))); - return base::android::ScopedJavaLocalRef<jstring>(env, ret); -} - -static std::atomic<jmethodID> - g_org_chromium_example_jni_1generator_SampleForTests_testStaticMethodWithParam(nullptr); -static jint Java_SampleForTests_testStaticMethodWithParam(JNIEnv* env, JniIntWrapper iParam) { - jclass clazz = org_chromium_example_jni_1generator_SampleForTests_clazz(env); - CHECK_CLAZZ(env, clazz, - org_chromium_example_jni_1generator_SampleForTests_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "testStaticMethodWithParam", - "(I)I", - &g_org_chromium_example_jni_1generator_SampleForTests_testStaticMethodWithParam); - - jint ret = - env->CallStaticIntMethod(clazz, - call_context.base.method_id, as_jint(iParam)); - return ret; -} - -static std::atomic<jmethodID> - g_org_chromium_example_jni_1generator_SampleForTests_testMethodWithNoParam(nullptr); -static jdouble Java_SampleForTests_testMethodWithNoParam(JNIEnv* env) { - jclass clazz = org_chromium_example_jni_1generator_SampleForTests_clazz(env); - CHECK_CLAZZ(env, clazz, - org_chromium_example_jni_1generator_SampleForTests_clazz(env), 0); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "testMethodWithNoParam", - "()D", - &g_org_chromium_example_jni_1generator_SampleForTests_testMethodWithNoParam); - - jdouble ret = - env->CallStaticDoubleMethod(clazz, - call_context.base.method_id); - return ret; -} - -static std::atomic<jmethodID> - g_org_chromium_example_jni_1generator_SampleForTests_testStaticMethodWithNoParam(nullptr); -static base::android::ScopedJavaLocalRef<jstring> - Java_SampleForTests_testStaticMethodWithNoParam(JNIEnv* env) { - jclass clazz = org_chromium_example_jni_1generator_SampleForTests_clazz(env); - CHECK_CLAZZ(env, clazz, - org_chromium_example_jni_1generator_SampleForTests_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "testStaticMethodWithNoParam", - "()Ljava/lang/String;", - &g_org_chromium_example_jni_1generator_SampleForTests_testStaticMethodWithNoParam); - - jstring ret = - static_cast<jstring>(env->CallStaticObjectMethod(clazz, - call_context.base.method_id)); - return base::android::ScopedJavaLocalRef<jstring>(env, ret); -} - -#endif // org_chromium_example_jni_generator_SampleForTests_JNI
diff --git a/base/android/jni_generator/golden/testNatives.golden b/base/android/jni_generator/golden/testNatives.golden deleted file mode 100644 index 23629f1..0000000 --- a/base/android/jni_generator/golden/testNatives.golden +++ /dev/null
@@ -1,216 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - - -// This file is autogenerated by -// base/android/jni_generator/jni_generator.py -// For -// org/chromium/TestJni - -#ifndef org_chromium_TestJni_JNI -#define org_chromium_TestJni_JNI - -#include <jni.h> - -#include "base/android/jni_generator/jni_generator_helper.h" - - -// Step 1: Forward declarations. - -JNI_REGISTRATION_EXPORT extern const char kClassPath_org_chromium_TestJni[]; -const char kClassPath_org_chromium_TestJni[] = "org/chromium/TestJni"; -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> g_org_chromium_TestJni_clazz(nullptr); -#ifndef org_chromium_TestJni_clazz_defined -#define org_chromium_TestJni_clazz_defined -inline jclass org_chromium_TestJni_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, kClassPath_org_chromium_TestJni, - &g_org_chromium_TestJni_clazz); -} -#endif - - -// Step 2: Constants (optional). - - -// Step 3: Method stubs. -static jint JNI_TestJni_Init(JNIEnv* env, const base::android::JavaParamRef<jobject>& jcaller); - -JNI_GENERATOR_EXPORT jint Java_org_chromium_TestJni_nativeInit( - JNIEnv* env, - jobject jcaller) { - return JNI_TestJni_Init(env, base::android::JavaParamRef<jobject>(env, jcaller)); -} - -JNI_GENERATOR_EXPORT void Java_org_chromium_TestJni_nativeDestroy( - JNIEnv* env, - jobject jcaller, - jint nativeChromeBrowserProvider) { - ChromeBrowserProvider* native = - reinterpret_cast<ChromeBrowserProvider*>(nativeChromeBrowserProvider); - CHECK_NATIVE_PTR(env, jcaller, native, "Destroy"); - return native->Destroy(env, base::android::JavaParamRef<jobject>(env, jcaller)); -} - -JNI_GENERATOR_EXPORT jlong Java_org_chromium_TestJni_nativeAddBookmark( - JNIEnv* env, - jobject jcaller, - jint nativeChromeBrowserProvider, - jstring url, - jstring title, - jboolean isFolder, - jlong parentId) { - ChromeBrowserProvider* native = - reinterpret_cast<ChromeBrowserProvider*>(nativeChromeBrowserProvider); - CHECK_NATIVE_PTR(env, jcaller, native, "AddBookmark", 0); - return native->AddBookmark(env, base::android::JavaParamRef<jobject>(env, jcaller), - base::android::JavaParamRef<jstring>(env, url), base::android::JavaParamRef<jstring>(env, - title), isFolder, parentId); -} - -static base::android::ScopedJavaLocalRef<jstring> JNI_TestJni_GetDomainAndRegistry(JNIEnv* env, - const base::android::JavaParamRef<jstring>& url); - -JNI_GENERATOR_EXPORT jstring Java_org_chromium_TestJni_nativeGetDomainAndRegistry( - JNIEnv* env, - jclass jcaller, - jstring url) { - return JNI_TestJni_GetDomainAndRegistry(env, base::android::JavaParamRef<jstring>(env, - url)).Release(); -} - -static void JNI_TestJni_CreateHistoricalTabFromState(JNIEnv* env, const - base::android::JavaParamRef<jbyteArray>& state, - jint tab_index); - -JNI_GENERATOR_EXPORT void Java_org_chromium_TestJni_nativeCreateHistoricalTabFromState( - JNIEnv* env, - jclass jcaller, - jbyteArray state, - jint tab_index) { - return JNI_TestJni_CreateHistoricalTabFromState(env, base::android::JavaParamRef<jbyteArray>(env, - state), tab_index); -} - -static base::android::ScopedJavaLocalRef<jbyteArray> JNI_TestJni_GetStateAsByteArray(JNIEnv* env, - const base::android::JavaParamRef<jobject>& jcaller, - const base::android::JavaParamRef<jobject>& view); - -JNI_GENERATOR_EXPORT jbyteArray Java_org_chromium_TestJni_nativeGetStateAsByteArray( - JNIEnv* env, - jobject jcaller, - jobject view) { - return JNI_TestJni_GetStateAsByteArray(env, base::android::JavaParamRef<jobject>(env, jcaller), - base::android::JavaParamRef<jobject>(env, view)).Release(); -} - -static base::android::ScopedJavaLocalRef<jobjectArray> JNI_TestJni_GetAutofillProfileGUIDs(JNIEnv* - env); - -JNI_GENERATOR_EXPORT jobjectArray Java_org_chromium_TestJni_nativeGetAutofillProfileGUIDs( - JNIEnv* env, - jclass jcaller) { - return JNI_TestJni_GetAutofillProfileGUIDs(env).Release(); -} - -static void JNI_TestJni_SetRecognitionResults(JNIEnv* env, const - base::android::JavaParamRef<jobject>& jcaller, - jint sessionId, - const base::android::JavaParamRef<jobjectArray>& results); - -JNI_GENERATOR_EXPORT void Java_org_chromium_TestJni_nativeSetRecognitionResults( - JNIEnv* env, - jobject jcaller, - jint sessionId, - jobjectArray results) { - return JNI_TestJni_SetRecognitionResults(env, base::android::JavaParamRef<jobject>(env, jcaller), - sessionId, base::android::JavaParamRef<jobjectArray>(env, results)); -} - -JNI_GENERATOR_EXPORT jlong Java_org_chromium_TestJni_nativeAddBookmarkFromAPI( - JNIEnv* env, - jobject jcaller, - jint nativeChromeBrowserProvider, - jstring url, - jobject created, - jobject isBookmark, - jobject date, - jbyteArray favicon, - jstring title, - jobject visits) { - ChromeBrowserProvider* native = - reinterpret_cast<ChromeBrowserProvider*>(nativeChromeBrowserProvider); - CHECK_NATIVE_PTR(env, jcaller, native, "AddBookmarkFromAPI", 0); - return native->AddBookmarkFromAPI(env, base::android::JavaParamRef<jobject>(env, jcaller), - base::android::JavaParamRef<jstring>(env, url), base::android::JavaParamRef<jobject>(env, - created), base::android::JavaParamRef<jobject>(env, isBookmark), - base::android::JavaParamRef<jobject>(env, date), base::android::JavaParamRef<jbyteArray>(env, - favicon), base::android::JavaParamRef<jstring>(env, title), - base::android::JavaParamRef<jobject>(env, visits)); -} - -static jint JNI_TestJni_FindAll(JNIEnv* env, const base::android::JavaParamRef<jobject>& jcaller, - const base::android::JavaParamRef<jstring>& find); - -JNI_GENERATOR_EXPORT jint Java_org_chromium_TestJni_nativeFindAll( - JNIEnv* env, - jobject jcaller, - jstring find) { - return JNI_TestJni_FindAll(env, base::android::JavaParamRef<jobject>(env, jcaller), - base::android::JavaParamRef<jstring>(env, find)); -} - -static base::android::ScopedJavaLocalRef<jobject> JNI_TestJni_GetInnerClass(JNIEnv* env); - -JNI_GENERATOR_EXPORT jobject Java_org_chromium_TestJni_nativeGetInnerClass( - JNIEnv* env, - jclass jcaller) { - return JNI_TestJni_GetInnerClass(env).Release(); -} - -JNI_GENERATOR_EXPORT jobject Java_org_chromium_TestJni_nativeQueryBitmap( - JNIEnv* env, - jobject jcaller, - jint nativeChromeBrowserProvider, - jobjectArray projection, - jstring selection, - jobjectArray selectionArgs, - jstring sortOrder) { - ChromeBrowserProvider* native = - reinterpret_cast<ChromeBrowserProvider*>(nativeChromeBrowserProvider); - CHECK_NATIVE_PTR(env, jcaller, native, "QueryBitmap", NULL); - return native->QueryBitmap(env, base::android::JavaParamRef<jobject>(env, jcaller), - base::android::JavaParamRef<jobjectArray>(env, projection), - base::android::JavaParamRef<jstring>(env, selection), - base::android::JavaParamRef<jobjectArray>(env, selectionArgs), - base::android::JavaParamRef<jstring>(env, sortOrder)).Release(); -} - -JNI_GENERATOR_EXPORT void Java_org_chromium_TestJni_nativeGotOrientation( - JNIEnv* env, - jobject jcaller, - jint nativeDataFetcherImplAndroid, - jdouble alpha, - jdouble beta, - jdouble gamma) { - DataFetcherImplAndroid* native = - reinterpret_cast<DataFetcherImplAndroid*>(nativeDataFetcherImplAndroid); - CHECK_NATIVE_PTR(env, jcaller, native, "GotOrientation"); - return native->GotOrientation(env, base::android::JavaParamRef<jobject>(env, jcaller), alpha, - beta, gamma); -} - -static base::android::ScopedJavaLocalRef<jthrowable> JNI_TestJni_MessWithJavaException(JNIEnv* env, - const base::android::JavaParamRef<jthrowable>& e); - -JNI_GENERATOR_EXPORT jthrowable Java_org_chromium_TestJni_nativeMessWithJavaException( - JNIEnv* env, - jclass jcaller, - jthrowable e) { - return JNI_TestJni_MessWithJavaException(env, base::android::JavaParamRef<jthrowable>(env, - e)).Release(); -} - - -#endif // org_chromium_TestJni_JNI
diff --git a/base/android/jni_generator/golden/testNativesLong.golden b/base/android/jni_generator/golden/testNativesLong.golden deleted file mode 100644 index 81be022..0000000 --- a/base/android/jni_generator/golden/testNativesLong.golden +++ /dev/null
@@ -1,49 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - - -// This file is autogenerated by -// base/android/jni_generator/jni_generator.py -// For -// org/chromium/TestJni - -#ifndef org_chromium_TestJni_JNI -#define org_chromium_TestJni_JNI - -#include <jni.h> - -#include "base/android/jni_generator/jni_generator_helper.h" - - -// Step 1: Forward declarations. - -JNI_REGISTRATION_EXPORT extern const char kClassPath_org_chromium_TestJni[]; -const char kClassPath_org_chromium_TestJni[] = "org/chromium/TestJni"; -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> g_org_chromium_TestJni_clazz(nullptr); -#ifndef org_chromium_TestJni_clazz_defined -#define org_chromium_TestJni_clazz_defined -inline jclass org_chromium_TestJni_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, kClassPath_org_chromium_TestJni, - &g_org_chromium_TestJni_clazz); -} -#endif - - -// Step 2: Constants (optional). - - -// Step 3: Method stubs. -JNI_GENERATOR_EXPORT void Java_org_chromium_TestJni_nativeDestroy( - JNIEnv* env, - jobject jcaller, - jlong nativeChromeBrowserProvider) { - ChromeBrowserProvider* native = - reinterpret_cast<ChromeBrowserProvider*>(nativeChromeBrowserProvider); - CHECK_NATIVE_PTR(env, jcaller, native, "Destroy"); - return native->Destroy(env, base::android::JavaParamRef<jobject>(env, jcaller)); -} - - -#endif // org_chromium_TestJni_JNI
diff --git a/base/android/jni_generator/golden/testNativesRegistrations.golden b/base/android/jni_generator/golden/testNativesRegistrations.golden deleted file mode 100644 index de98b51..0000000 --- a/base/android/jni_generator/golden/testNativesRegistrations.golden +++ /dev/null
@@ -1,174 +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. - - -// This file is autogenerated by -// base/android/jni_generator/jni_registration_generator.py -// Please do not change its content. - -#ifndef HEADER_GUARD -#define HEADER_GUARD - -#include <jni.h> - -#include <iterator> - -#include "base/android/jni_generator/jni_generator_helper.h" -#include "base/android/jni_int_wrapper.h" - - -// Step 1: Forward declarations (classes). - -extern const char kClassPath_org_chromium_TestJni[]; -extern std::atomic<jclass> g_org_chromium_TestJni_clazz; -#ifndef org_chromium_TestJni_clazz_defined -#define org_chromium_TestJni_clazz_defined -inline jclass org_chromium_TestJni_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, kClassPath_org_chromium_TestJni, - &g_org_chromium_TestJni_clazz); -} -#endif - - -// Step 2: Forward declarations (methods). - -JNI_GENERATOR_EXPORT jint Java_org_chromium_TestJni_nativeInit( - JNIEnv* env, - jobject jcaller); -JNI_GENERATOR_EXPORT void Java_org_chromium_TestJni_nativeDestroy( - JNIEnv* env, - jobject jcaller, - jint nativeChromeBrowserProvider); -JNI_GENERATOR_EXPORT jlong Java_org_chromium_TestJni_nativeAddBookmark( - JNIEnv* env, - jobject jcaller, - jint nativeChromeBrowserProvider, - jstring url, - jstring title, - jboolean isFolder, - jlong parentId); -JNI_GENERATOR_EXPORT jstring Java_org_chromium_TestJni_nativeGetDomainAndRegistry( - JNIEnv* env, - jclass jcaller, - jstring url); -JNI_GENERATOR_EXPORT void Java_org_chromium_TestJni_nativeCreateHistoricalTabFromState( - JNIEnv* env, - jclass jcaller, - jbyteArray state, - jint tab_index); -JNI_GENERATOR_EXPORT jbyteArray Java_org_chromium_TestJni_nativeGetStateAsByteArray( - JNIEnv* env, - jobject jcaller, - jobject view); -JNI_GENERATOR_EXPORT jobjectArray Java_org_chromium_TestJni_nativeGetAutofillProfileGUIDs( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT void Java_org_chromium_TestJni_nativeSetRecognitionResults( - JNIEnv* env, - jobject jcaller, - jint sessionId, - jobjectArray results); -JNI_GENERATOR_EXPORT jlong Java_org_chromium_TestJni_nativeAddBookmarkFromAPI( - JNIEnv* env, - jobject jcaller, - jint nativeChromeBrowserProvider, - jstring url, - jobject created, - jobject isBookmark, - jobject date, - jbyteArray favicon, - jstring title, - jobject visits); -JNI_GENERATOR_EXPORT jint Java_org_chromium_TestJni_nativeFindAll( - JNIEnv* env, - jobject jcaller, - jstring find); -JNI_GENERATOR_EXPORT jobject Java_org_chromium_TestJni_nativeGetInnerClass( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT jobject Java_org_chromium_TestJni_nativeQueryBitmap( - JNIEnv* env, - jobject jcaller, - jint nativeChromeBrowserProvider, - jobjectArray projection, - jstring selection, - jobjectArray selectionArgs, - jstring sortOrder); -JNI_GENERATOR_EXPORT void Java_org_chromium_TestJni_nativeGotOrientation( - JNIEnv* env, - jobject jcaller, - jint nativeDataFetcherImplAndroid, - jdouble alpha, - jdouble beta, - jdouble gamma); -JNI_GENERATOR_EXPORT jthrowable Java_org_chromium_TestJni_nativeMessWithJavaException( - JNIEnv* env, - jclass jcaller, - jthrowable e); - - -// Step 3: Method declarations. - -static const JNINativeMethod kMethods_org_chromium_TestJni[] = { - { "nativeInit", "()I", reinterpret_cast<void*>(Java_org_chromium_TestJni_nativeInit) }, - { "nativeDestroy", "(I)V", reinterpret_cast<void*>(Java_org_chromium_TestJni_nativeDestroy) }, - { "nativeAddBookmark", "(ILjava/lang/String;Ljava/lang/String;ZJ)J", - reinterpret_cast<void*>(Java_org_chromium_TestJni_nativeAddBookmark) }, - { "nativeGetDomainAndRegistry", "(Ljava/lang/String;)Ljava/lang/String;", - reinterpret_cast<void*>(Java_org_chromium_TestJni_nativeGetDomainAndRegistry) }, - { "nativeCreateHistoricalTabFromState", "([BI)V", - reinterpret_cast<void*>(Java_org_chromium_TestJni_nativeCreateHistoricalTabFromState) }, - { "nativeGetStateAsByteArray", "(Landroid/view/View;)[B", - reinterpret_cast<void*>(Java_org_chromium_TestJni_nativeGetStateAsByteArray) }, - { "nativeGetAutofillProfileGUIDs", "()[Ljava/lang/String;", - reinterpret_cast<void*>(Java_org_chromium_TestJni_nativeGetAutofillProfileGUIDs) }, - { "nativeSetRecognitionResults", "(I[Ljava/lang/String;)V", - reinterpret_cast<void*>(Java_org_chromium_TestJni_nativeSetRecognitionResults) }, - { "nativeAddBookmarkFromAPI", - "(ILjava/lang/String;Ljava/lang/Long;Ljava/lang/Boolean;Ljava/lang/Long;[BLjava/lang/String;Ljava/lang/Integer;)J", - reinterpret_cast<void*>(Java_org_chromium_TestJni_nativeAddBookmarkFromAPI) }, - { "nativeFindAll", "(Ljava/lang/String;)I", - reinterpret_cast<void*>(Java_org_chromium_TestJni_nativeFindAll) }, - { "nativeGetInnerClass", - "()Lorg/chromium/example/jni_generator/SampleForTests$OnFrameAvailableListener;", - reinterpret_cast<void*>(Java_org_chromium_TestJni_nativeGetInnerClass) }, - { "nativeQueryBitmap", - "(I[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/graphics/Bitmap;", - reinterpret_cast<void*>(Java_org_chromium_TestJni_nativeQueryBitmap) }, - { "nativeGotOrientation", "(IDDD)V", - reinterpret_cast<void*>(Java_org_chromium_TestJni_nativeGotOrientation) }, - { "nativeMessWithJavaException", "(Ljava/lang/Throwable;)Ljava/lang/Throwable;", - reinterpret_cast<void*>(Java_org_chromium_TestJni_nativeMessWithJavaException) }, -}; - - -JNI_REGISTRATION_EXPORT bool RegisterNative_org_chromium_TestJni(JNIEnv* env) { - const int kMethods_org_chromium_TestJniSize = - std::size(kMethods_org_chromium_TestJni); - if (env->RegisterNatives( - org_chromium_TestJni_clazz(env), - kMethods_org_chromium_TestJni, - kMethods_org_chromium_TestJniSize) < 0) { - jni_generator::HandleRegistrationError(env, - org_chromium_TestJni_clazz(env), - __FILE__); - return false; - } - - return true; -} - - -// Step 4: Registration function. - -namespace test { - -bool RegisterNatives(JNIEnv* env) { - - return true; -} - -} // namespace test - -#endif // HEADER_GUARD
diff --git a/base/android/jni_generator/golden/testProxyMultiplexNativesRegistration.golden b/base/android/jni_generator/golden/testProxyMultiplexNativesRegistration.golden deleted file mode 100644 index ac7d5fb..0000000 --- a/base/android/jni_generator/golden/testProxyMultiplexNativesRegistration.golden +++ /dev/null
@@ -1,435 +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. - - -// This file is autogenerated by -// base/android/jni_generator/jni_registration_generator.py -// Please do not change its content. - -#ifndef HEADER_GUARD -#define HEADER_GUARD - -#include <jni.h> - -#include <iterator> - -#include "base/android/jni_generator/jni_generator_helper.h" -#include "base/android/jni_int_wrapper.h" - - -// Step 1: Forward declarations (classes). - - -// Step 2: Forward declarations (methods). - -JNI_GENERATOR_EXPORT void - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1foo( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT jobject - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1bar( - JNIEnv* env, - jclass jcaller, - jobject sample); -JNI_GENERATOR_EXPORT jstring - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1revString( - JNIEnv* env, - jclass jcaller, - jstring stringToReverse); -JNI_GENERATOR_EXPORT jobjectArray - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1sendToNative( - JNIEnv* env, - jclass jcaller, - jobjectArray strs); -JNI_GENERATOR_EXPORT jobjectArray - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1sendSamplesToNative( - JNIEnv* env, - jclass jcaller, - jobjectArray strs); -JNI_GENERATOR_EXPORT jboolean - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1hasPhalange( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT jintArray - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1testAllPrimitives( - JNIEnv* env, - jclass jcaller, - jint zint, - jintArray ints, - jlong zlong, - jlongArray longs, - jshort zshort, - jshortArray shorts, - jchar zchar, - jcharArray chars, - jbyte zbyte, - jbyteArray bytes, - jdouble zdouble, - jdoubleArray doubles, - jfloat zfloat, - jfloatArray floats, - jboolean zbool, - jbooleanArray bools); -JNI_GENERATOR_EXPORT void - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1testSpecialTypes( - JNIEnv* env, - jclass jcaller, - jclass clazz, - jobjectArray classes, - jthrowable throwable, - jobjectArray throwables, - jstring string, - jobjectArray strings, - jobject tStruct, - jobjectArray structs, - jobject obj, - jobjectArray objects); -JNI_GENERATOR_EXPORT jthrowable - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnThrowable( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT jobjectArray - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnThrowables( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT jclass - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnClass( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT jobjectArray - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnClasses( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT jstring - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnString( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT jobjectArray - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnStrings( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT jobject - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnStruct( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT jobjectArray - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnStructs( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT jobject - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnObject( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT jobjectArray - Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnObjects( - JNIEnv* env, - jclass jcaller); - - -JNI_GENERATOR_EXPORT jclass Java_J_N_resolve_1for_1class( - JNIEnv* env, - jclass jcaller, - jlong switch_num) { - switch (switch_num) { - - case -461602969360398827: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnClass(env, jcaller); - - default: - CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1class was called with an invalid switch number: " << switch_num; - return {}; - } -} -JNI_GENERATOR_EXPORT jobjectArray Java_J_N_resolve_1for_1class_1array( - JNIEnv* env, - jclass jcaller, - jlong switch_num) { - switch (switch_num) { - - case -427008638958312484: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnClasses(env, jcaller); - - default: - CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1class_1array was called with an invalid switch number: " << switch_num; - return {}; - } -} -JNI_GENERATOR_EXPORT jobject Java_J_N_resolve_1for_1object( - JNIEnv* env, - jclass jcaller, - jlong switch_num) { - switch (switch_num) { - - case 5419834314509580268: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnStruct(env, jcaller); - - case -426730623629742951: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnObject(env, jcaller); - - default: - CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1object was called with an invalid switch number: " << switch_num; - return {}; - } -} -JNI_GENERATOR_EXPORT jobject Java_J_N_resolve_1for_1object_1O( - JNIEnv* env, - jclass jcaller, - jlong switch_num, jobject object_param1) { - switch (switch_num) { - - case 2227777243221232668: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1bar(env, jcaller, object_param1); - - default: - CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1object_1O was called with an invalid switch number: " << switch_num; - return {}; - } -} -JNI_GENERATOR_EXPORT jobjectArray Java_J_N_resolve_1for_1object_1array( - JNIEnv* env, - jclass jcaller, - jlong switch_num) { - switch (switch_num) { - - case 2313390248928530514: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnStructs(env, jcaller); - - case 4508266875426191279: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnObjects(env, jcaller); - - default: - CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1object_1array was called with an invalid switch number: " << switch_num; - return {}; - } -} -JNI_GENERATOR_EXPORT jobjectArray Java_J_N_resolve_1for_1object_1array_1OA( - JNIEnv* env, - jclass jcaller, - jlong switch_num, jobjectArray object_array_param1) { - switch (switch_num) { - - case 1879234562834588228: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1sendSamplesToNative(env, jcaller, object_array_param1); - - default: - CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1object_1array_1OA was called with an invalid switch number: " << switch_num; - return {}; - } -} -JNI_GENERATOR_EXPORT jstring Java_J_N_resolve_1for_1string( - JNIEnv* env, - jclass jcaller, - jlong switch_num) { - switch (switch_num) { - - case -3292889389021976364: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnString(env, jcaller); - - default: - CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1string was called with an invalid switch number: " << switch_num; - return {}; - } -} -JNI_GENERATOR_EXPORT jstring Java_J_N_resolve_1for_1string_1R( - JNIEnv* env, - jclass jcaller, - jlong switch_num, jstring string_param1) { - switch (switch_num) { - - case 3717128594383367634: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1revString(env, jcaller, string_param1); - - default: - CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1string_1R was called with an invalid switch number: " << switch_num; - return {}; - } -} -JNI_GENERATOR_EXPORT jobjectArray Java_J_N_resolve_1for_1string_1array( - JNIEnv* env, - jclass jcaller, - jlong switch_num) { - switch (switch_num) { - - case -5564218335546380707: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnStrings(env, jcaller); - - default: - CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1string_1array was called with an invalid switch number: " << switch_num; - return {}; - } -} -JNI_GENERATOR_EXPORT jobjectArray Java_J_N_resolve_1for_1string_1array_1RA( - JNIEnv* env, - jclass jcaller, - jlong switch_num, jobjectArray string_array_param1) { - switch (switch_num) { - - case 12825275381484104: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1sendToNative(env, jcaller, string_array_param1); - - default: - CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1string_1array_1RA was called with an invalid switch number: " << switch_num; - return {}; - } -} -JNI_GENERATOR_EXPORT jthrowable Java_J_N_resolve_1for_1throwable( - JNIEnv* env, - jclass jcaller, - jlong switch_num) { - switch (switch_num) { - - case -5073520581764159162: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnThrowable(env, jcaller); - - default: - CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1throwable was called with an invalid switch number: " << switch_num; - return {}; - } -} -JNI_GENERATOR_EXPORT jobjectArray Java_J_N_resolve_1for_1throwable_1array( - JNIEnv* env, - jclass jcaller, - jlong switch_num) { - switch (switch_num) { - - case 17582460986153510: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1returnThrowables(env, jcaller); - - default: - CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1throwable_1array was called with an invalid switch number: " << switch_num; - return {}; - } -} -JNI_GENERATOR_EXPORT jboolean Java_J_N_resolve_1for_1boolean( - JNIEnv* env, - jclass jcaller, - jlong switch_num) { - switch (switch_num) { - - case 6577090212445038314: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1hasPhalange(env, jcaller); - - default: - CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1boolean was called with an invalid switch number: " << switch_num; - return {}; - } -} -JNI_GENERATOR_EXPORT jintArray Java_J_N_resolve_1for_1int_1array_1IIAJJASSACCABBADDAFFAZZA( - JNIEnv* env, - jclass jcaller, - jlong switch_num, jint int_param1, jintArray int_array_param1, jlong long_param1, jlongArray long_array_param1, jshort short_param1, jshortArray short_array_param1, jchar char_param1, jcharArray char_array_param1, jbyte byte_param1, jbyteArray byte_array_param1, jdouble double_param1, jdoubleArray double_array_param1, jfloat float_param1, jfloatArray float_array_param1, jboolean boolean_param1, jbooleanArray boolean_array_param1) { - switch (switch_num) { - - case -7687282957371512872: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1testAllPrimitives(env, jcaller, int_param1, int_array_param1, long_param1, long_array_param1, short_param1, short_array_param1, char_param1, char_array_param1, byte_param1, byte_array_param1, double_param1, double_array_param1, float_param1, float_array_param1, boolean_param1, boolean_array_param1); - - default: - CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1int_1array_1IIAJJASSACCABBADDAFFAZZA was called with an invalid switch number: " << switch_num; - return {}; - } -} -JNI_GENERATOR_EXPORT void Java_J_N_resolve_1for_1void( - JNIEnv* env, - jclass jcaller, - jlong switch_num) { - switch (switch_num) { - - case -3890945313637314700: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1foo(env, jcaller); - - default: - CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1void was called with an invalid switch number: " << switch_num; - return; - } -} -JNI_GENERATOR_EXPORT void Java_J_N_resolve_1for_1void_1LLATTARRAOOAOOA( - JNIEnv* env, - jclass jcaller, - jlong switch_num, jclass class_param1, jobjectArray class_array_param1, jthrowable throwable_param1, jobjectArray throwable_array_param1, jstring string_param1, jobjectArray string_array_param1, jobject object_param1, jobjectArray object_array_param1, jobject object_param2, jobjectArray object_array_param2) { - switch (switch_num) { - - case -6275232019293411879: - return Java_J_N_org_1chromium_1example_1jni_11generator_1SampleForAnnotationProcessor_1testSpecialTypes(env, jcaller, class_param1, class_array_param1, throwable_param1, throwable_array_param1, string_param1, string_array_param1, object_param1, object_array_param1, object_param2, object_array_param2); - - default: - CHECK(false) << "JNI multiplexing function Java_J_N_resolve_1for_1void_1LLATTARRAOOAOOA was called with an invalid switch number: " << switch_num; - return; - } -} -// Step 3: Method declarations. - - -static const JNINativeMethod kMethods_J_N[] = { - { "resolve_for_boolean", "(J)Z", reinterpret_cast<void*>(Java_J_N_resolve_1for_1boolean) }, - { "resolve_for_class", "(J)Ljava/lang/Class;", - reinterpret_cast<void*>(Java_J_N_resolve_1for_1class) }, - { "resolve_for_class_array", "(J)[Ljava/lang/Class;", - reinterpret_cast<void*>(Java_J_N_resolve_1for_1class_1array) }, - { "resolve_for_int_array_IIAJJASSACCABBADDAFFAZZA", "(JI[IJ[JS[SC[CB[BD[DF[FZ[Z)[I", - reinterpret_cast<void*>(Java_J_N_resolve_1for_1int_1array_1IIAJJASSACCABBADDAFFAZZA) }, - { "resolve_for_object", "(J)Ljava/lang/Object;", - reinterpret_cast<void*>(Java_J_N_resolve_1for_1object) }, - { "resolve_for_object_O", "(JLjava/lang/Object;)Ljava/lang/Object;", - reinterpret_cast<void*>(Java_J_N_resolve_1for_1object_1O) }, - { "resolve_for_object_array", "(J)[Ljava/lang/Object;", - reinterpret_cast<void*>(Java_J_N_resolve_1for_1object_1array) }, - { "resolve_for_object_array_OA", "(J[Ljava/lang/Object;)[Ljava/lang/Object;", - reinterpret_cast<void*>(Java_J_N_resolve_1for_1object_1array_1OA) }, - { "resolve_for_string", "(J)Ljava/lang/String;", - reinterpret_cast<void*>(Java_J_N_resolve_1for_1string) }, - { "resolve_for_string_R", "(JLjava/lang/String;)Ljava/lang/String;", - reinterpret_cast<void*>(Java_J_N_resolve_1for_1string_1R) }, - { "resolve_for_string_array", "(J)[Ljava/lang/String;", - reinterpret_cast<void*>(Java_J_N_resolve_1for_1string_1array) }, - { "resolve_for_string_array_RA", "(J[Ljava/lang/String;)[Ljava/lang/String;", - reinterpret_cast<void*>(Java_J_N_resolve_1for_1string_1array_1RA) }, - { "resolve_for_throwable", "(J)Ljava/lang/Throwable;", - reinterpret_cast<void*>(Java_J_N_resolve_1for_1throwable) }, - { "resolve_for_throwable_array", "(J)[Ljava/lang/Throwable;", - reinterpret_cast<void*>(Java_J_N_resolve_1for_1throwable_1array) }, - { "resolve_for_void", "(J)V", reinterpret_cast<void*>(Java_J_N_resolve_1for_1void) }, - { "resolve_for_void_LLATTARRAOOAOOA", - "(JLjava/lang/Class;[Ljava/lang/Class;Ljava/lang/Throwable;[Ljava/lang/Throwable;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)V", - reinterpret_cast<void*>(Java_J_N_resolve_1for_1void_1LLATTARRAOOAOOA) } -}; - -namespace { - -JNI_REGISTRATION_EXPORT bool RegisterNative_J_N(JNIEnv* env) { - const int number_of_methods = std::size(kMethods_J_N); - - base::android::ScopedJavaLocalRef<jclass> native_clazz = - base::android::GetClass(env, "J/N"); - if (env->RegisterNatives( - native_clazz.obj(), - kMethods_J_N, - number_of_methods) < 0) { - - jni_generator::HandleRegistrationError(env, native_clazz.obj(), __FILE__); - return false; - } - - return true; -} - -} // namespace - - -// Step 4: Registration function. - -namespace test { - -bool RegisterNatives(JNIEnv* env) { - // Register natives in a proxy. - if (!RegisterNative_J_N(env)) { - return false; - } - - - return true; -} - -} // namespace test - -#endif // HEADER_GUARD
diff --git a/base/android/jni_generator/golden/testProxyNatives.golden b/base/android/jni_generator/golden/testProxyNatives.golden deleted file mode 100644 index f9675053..0000000 --- a/base/android/jni_generator/golden/testProxyNatives.golden +++ /dev/null
@@ -1,63 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - - -// This file is autogenerated by -// base/android/jni_generator/jni_generator.py -// For -// org/chromium/example/SampleProxyJni - -#ifndef org_chromium_example_SampleProxyJni_JNI -#define org_chromium_example_SampleProxyJni_JNI - -#include <jni.h> - -#include "base/android/jni_generator/jni_generator_helper.h" - - -// Step 1: Forward declarations. - - -// Step 2: Constants (optional). - - -// Step 3: Method stubs. -JNI_GENERATOR_EXPORT void - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1SampleProxyJni_1foo( - JNIEnv* env, - jclass jcaller, - jlong nativePtr) { - FooAndroid::BarDelegate* native = reinterpret_cast<FooAndroid::BarDelegate*>(nativePtr); - CHECK_NATIVE_PTR(env, jcaller, native, "Foo"); - return native->Foo(env); -} - -static jint JNI_SampleProxyJni_Bar(JNIEnv* env, jint x, - jint y); - -JNI_GENERATOR_EXPORT jint - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1SampleProxyJni_1bar( - JNIEnv* env, - jclass jcaller, - jint x, - jint y) { - return JNI_SampleProxyJni_Bar(env, x, y); -} - -static base::android::ScopedJavaLocalRef<jstring> JNI_SampleProxyJni_Foobar(JNIEnv* env, const - base::android::JavaParamRef<jstring>& x, - const base::android::JavaParamRef<jstring>& y); - -JNI_GENERATOR_EXPORT jstring - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1SampleProxyJni_1foobar( - JNIEnv* env, - jclass jcaller, - jstring x, - jstring y) { - return JNI_SampleProxyJni_Foobar(env, base::android::JavaParamRef<jstring>(env, x), - base::android::JavaParamRef<jstring>(env, y)).Release(); -} - - -#endif // org_chromium_example_SampleProxyJni_JNI
diff --git a/base/android/jni_generator/golden/testProxyNativesJava.golden b/base/android/jni_generator/golden/testProxyNativesJava.golden deleted file mode 100644 index a40f9859..0000000 --- a/base/android/jni_generator/golden/testProxyNativesJava.golden +++ /dev/null
@@ -1,22 +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. - -package org.chromium.base.natives; - -// This file is autogenerated by -// base/android/jni_generator/jni_registration_generator.py -// Please do not change its content. - -public class GEN_JNI { - public static final boolean TESTING_ENABLED = false; - public static final boolean REQUIRE_MOCK = false; - - - // Hashed name: Java_J_N_MfuvK7$r - public static native void org_chromium_example_SampleProxyJni_foo(long nativePtr); - // Hashed name: Java_J_N_MB1mTV9a - public static native int org_chromium_example_SampleProxyJni_bar(int x, int y); - // Hashed name: Java_J_N_Me7X4JzV - public static native String org_chromium_example_SampleProxyJni_foobar(String x, String y); -}
diff --git a/base/android/jni_generator/golden/testProxyNativesRegistrations.golden b/base/android/jni_generator/golden/testProxyNativesRegistrations.golden deleted file mode 100644 index 334d022..0000000 --- a/base/android/jni_generator/golden/testProxyNativesRegistrations.golden +++ /dev/null
@@ -1,100 +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. - - -// This file is autogenerated by -// base/android/jni_generator/jni_registration_generator.py -// Please do not change its content. - -#ifndef HEADER_GUARD -#define HEADER_GUARD - -#include <jni.h> - -#include <iterator> - -#include "base/android/jni_generator/jni_generator_helper.h" -#include "base/android/jni_int_wrapper.h" - - -// Step 1: Forward declarations (classes). - - -// Step 2: Forward declarations (methods). - -JNI_GENERATOR_EXPORT void - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1SampleProxyJni_1foo( - JNIEnv* env, - jclass jcaller, - jlong nativePtr); -JNI_GENERATOR_EXPORT jint - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1SampleProxyJni_1bar( - JNIEnv* env, - jclass jcaller, - jint x, - jint y); -JNI_GENERATOR_EXPORT jstring - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1SampleProxyJni_1foobar( - JNIEnv* env, - jclass jcaller, - jstring x, - jstring y); - - -// Step 3: Method declarations. - - -static const JNINativeMethod kMethods_org_chromium_base_natives_GEN_1JNI[] = { - { "org_chromium_example_SampleProxyJni_foo", "(J)V", - reinterpret_cast<void*>(Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1SampleProxyJni_1foo) - }, - { "org_chromium_example_SampleProxyJni_bar", "(II)I", - reinterpret_cast<void*>(Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1SampleProxyJni_1bar) - }, - { "org_chromium_example_SampleProxyJni_foobar", - "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", - reinterpret_cast<void*>(Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1example_1SampleProxyJni_1foobar) - }, - -}; - -namespace { - -JNI_REGISTRATION_EXPORT bool RegisterNative_org_chromium_base_natives_GEN_1JNI(JNIEnv* env) { - const int number_of_methods = std::size(kMethods_org_chromium_base_natives_GEN_1JNI); - - base::android::ScopedJavaLocalRef<jclass> native_clazz = - base::android::GetClass(env, "org/chromium/base/natives/GEN_JNI"); - if (env->RegisterNatives( - native_clazz.obj(), - kMethods_org_chromium_base_natives_GEN_1JNI, - number_of_methods) < 0) { - - jni_generator::HandleRegistrationError(env, native_clazz.obj(), __FILE__); - return false; - } - - return true; -} - -} // namespace - - -// Step 4: Registration function. - -namespace test { - -bool RegisterNatives(JNIEnv* env) { - // Register natives in a proxy. - if (!RegisterNative_org_chromium_base_natives_GEN_1JNI(env)) { - return false; - } - - - return true; -} - -} // namespace test - -#endif // HEADER_GUARD
diff --git a/base/android/jni_generator/golden/testProxyNativesWithNatives.golden b/base/android/jni_generator/golden/testProxyNativesWithNatives.golden deleted file mode 100644 index 0ae45c2..0000000 --- a/base/android/jni_generator/golden/testProxyNativesWithNatives.golden +++ /dev/null
@@ -1,110 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - - -// This file is autogenerated by -// base/android/jni_generator/jni_generator.py -// For -// org/chromium/foo/Foo - -#ifndef org_chromium_foo_Foo_JNI -#define org_chromium_foo_Foo_JNI - -#include <jni.h> - -#include "base/android/jni_generator/jni_generator_helper.h" - - -// Step 1: Forward declarations. - -JNI_REGISTRATION_EXPORT extern const char kClassPath_org_chromium_foo_Foo[]; -const char kClassPath_org_chromium_foo_Foo[] = "org/chromium/foo/Foo"; -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> g_org_chromium_foo_Foo_clazz(nullptr); -#ifndef org_chromium_foo_Foo_clazz_defined -#define org_chromium_foo_Foo_clazz_defined -inline jclass org_chromium_foo_Foo_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, kClassPath_org_chromium_foo_Foo, - &g_org_chromium_foo_Foo_clazz); -} -#endif - - -// Step 2: Constants (optional). - - -// Step 3: Method stubs. -static void JNI_Foo_Foo(JNIEnv* env); - -JNI_GENERATOR_EXPORT void Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1foo_1Foo_1foo( - JNIEnv* env, - jclass jcaller) { - return JNI_Foo_Foo(env); -} - -static base::android::ScopedJavaLocalRef<jstring> JNI_Foo_Bar(JNIEnv* env, const - base::android::JavaParamRef<jstring>& s, - jint y, - jchar x, - jshort z); - -JNI_GENERATOR_EXPORT jstring Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1foo_1Foo_1bar( - JNIEnv* env, - jclass jcaller, - jstring s, - jint y, - jchar x, - jshort z) { - return JNI_Foo_Bar(env, base::android::JavaParamRef<jstring>(env, s), y, x, z).Release(); -} - -static base::android::ScopedJavaLocalRef<jobjectArray> JNI_Foo_Foobar(JNIEnv* env, const - base::android::JavaParamRef<jobjectArray>& a); - -JNI_GENERATOR_EXPORT jobjectArray - Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1foo_1Foo_1foobar( - JNIEnv* env, - jclass jcaller, - jobjectArray a) { - return JNI_Foo_Foobar(env, base::android::JavaParamRef<jobjectArray>(env, a)).Release(); -} - -JNI_GENERATOR_EXPORT void Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1foo_1Foo_1baz( - JNIEnv* env, - jclass jcaller, - jlong nativePtr, - jobject caller) { - Ptr* native = reinterpret_cast<Ptr*>(nativePtr); - CHECK_NATIVE_PTR(env, jcaller, native, "Baz"); - return native->Baz(env, base::android::JavaParamRef<jobject>(env, caller)); -} - -JNI_GENERATOR_EXPORT void Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1foo_1Foo_1fooBar( - JNIEnv* env, - jclass jcaller, - jlong nativePtr) { - Ptr* native = reinterpret_cast<Ptr*>(nativePtr); - CHECK_NATIVE_PTR(env, jcaller, native, "FooBar"); - return native->FooBar(env); -} - -JNI_GENERATOR_EXPORT void Java_org_chromium_foo_Foo_nativeInstanceMethod( - JNIEnv* env, - jobject jcaller, - jlong nativeInstance) { - Instance* native = reinterpret_cast<Instance*>(nativeInstance); - CHECK_NATIVE_PTR(env, jcaller, native, "InstanceMethod"); - return native->InstanceMethod(env, base::android::JavaParamRef<jobject>(env, jcaller)); -} - -static void JNI_Foo_StaticMethod(JNIEnv* env); - -JNI_GENERATOR_EXPORT void Java_org_chromium_foo_Foo_nativeStaticMethod( - JNIEnv* env, - jclass jcaller) { - return JNI_Foo_StaticMethod(env); -} - - -#endif // org_chromium_foo_Foo_JNI
diff --git a/base/android/jni_generator/golden/testProxyPackagePrefixWithProxyHash.2.golden b/base/android/jni_generator/golden/testProxyPackagePrefixWithProxyHash.2.golden deleted file mode 100644 index 5ed4615..0000000 --- a/base/android/jni_generator/golden/testProxyPackagePrefixWithProxyHash.2.golden +++ /dev/null
@@ -1,87 +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. - -package this.is.a.package.prefix.org.chromium.base.natives; - -// This file is autogenerated by -// base/android/jni_generator/jni_registration_generator.py -// Please do not change its content. - -public class GEN_JNI { - public static final boolean TESTING_ENABLED = false; - public static final boolean REQUIRE_MOCK = false; - - - public static void this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_foo() { - this.is.a.package.prefix.J.N.MGfHLNVl(); - } - - public static Object this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_bar(Object sample) { - return this.is.a.package.prefix.J.N.M5EfCheU(sample); - } - - public static String this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_revString(String stringToReverse) { - return this.is.a.package.prefix.J.N.MXQefv1w(stringToReverse); - } - - public static String[] this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_sendToNative(String[] strs) { - return this.is.a.package.prefix.J.N.MSYtnUBS(strs); - } - - public static Object[] this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_sendSamplesToNative(Object[] strs) { - return this.is.a.package.prefix.J.N.MaV5G8K8(strs); - } - - public static boolean this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_hasPhalange() { - return this.is.a.package.prefix.J.N.MM2Yz6XD(); - } - - public static int[] this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_testAllPrimitives(int zint, int[] ints, long zlong, long[] longs, short zshort, short[] shorts, char zchar, char[] chars, byte zbyte, byte[] bytes, double zdouble, double[] doubles, float zfloat, float[] floats, boolean zbool, boolean[] bools) { - return this.is.a.package.prefix.J.N.MMy4dcxH(zint, ints, zlong, longs, zshort, shorts, zchar, chars, zbyte, bytes, zdouble, doubles, zfloat, floats, zbool, bools); - } - - public static void this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_testSpecialTypes(Class clazz, Class[] classes, Throwable throwable, Throwable[] throwables, String string, String[] strings, Object tStruct, Object[] structs, Object obj, Object[] objects) { - this.is.a.package.prefix.J.N.MSslZIsy(clazz, classes, throwable, throwables, string, strings, tStruct, structs, obj, objects); - } - - public static Throwable this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnThrowable() { - return this.is.a.package.prefix.J.N.Mehs9t7u(); - } - - public static Throwable[] this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnThrowables() { - return this.is.a.package.prefix.J.N.MQH82FhP(); - } - - public static Class this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnClass() { - return this.is.a.package.prefix.J.N.MyxAHj2Y(); - } - - public static Class[] this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnClasses() { - return this.is.a.package.prefix.J.N.MNGv55Cm(); - } - - public static String this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnString() { - return this.is.a.package.prefix.J.N.Mysjo$pl(); - } - - public static String[] this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnStrings() { - return this.is.a.package.prefix.J.N.M3B287zk(); - } - - public static Object this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnStruct() { - return this.is.a.package.prefix.J.N.M8UGsyhL(); - } - - public static Object[] this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnStructs() { - return this.is.a.package.prefix.J.N.MtYMX5wX(); - } - - public static Object this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnObject() { - return this.is.a.package.prefix.J.N.MIs8T9aQ(); - } - - public static Object[] this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnObjects() { - return this.is.a.package.prefix.J.N.MtkQGyRy(); - } -}
diff --git a/base/android/jni_generator/golden/testProxyPackagePrefixWithProxyHash.golden b/base/android/jni_generator/golden/testProxyPackagePrefixWithProxyHash.golden deleted file mode 100644 index d30733e..0000000 --- a/base/android/jni_generator/golden/testProxyPackagePrefixWithProxyHash.golden +++ /dev/null
@@ -1,50 +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. - -package this.is.a.package.prefix.J; - -// This file is autogenerated by -// base/android/jni_generator/jni_registration_generator.py -// Please do not change its content. - -public class N { - - - // Original name: this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_foo - public static native void MGfHLNVl(); - // Original name: this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_bar - public static native Object M5EfCheU(Object sample); - // Original name: this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_revString - public static native String MXQefv1w(String stringToReverse); - // Original name: this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_sendToNative - public static native String[] MSYtnUBS(String[] strs); - // Original name: this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_sendSamplesToNative - public static native Object[] MaV5G8K8(Object[] strs); - // Original name: this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_hasPhalange - public static native boolean MM2Yz6XD(); - // Original name: this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_testAllPrimitives - public static native int[] MMy4dcxH(int zint, int[] ints, long zlong, long[] longs, short zshort, short[] shorts, char zchar, char[] chars, byte zbyte, byte[] bytes, double zdouble, double[] doubles, float zfloat, float[] floats, boolean zbool, boolean[] bools); - // Original name: this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_testSpecialTypes - public static native void MSslZIsy(Class clazz, Class[] classes, Throwable throwable, Throwable[] throwables, String string, String[] strings, Object tStruct, Object[] structs, Object obj, Object[] objects); - // Original name: this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnThrowable - public static native Throwable Mehs9t7u(); - // Original name: this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnThrowables - public static native Throwable[] MQH82FhP(); - // Original name: this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnClass - public static native Class MyxAHj2Y(); - // Original name: this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnClasses - public static native Class[] MNGv55Cm(); - // Original name: this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnString - public static native String Mysjo$pl(); - // Original name: this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnStrings - public static native String[] M3B287zk(); - // Original name: this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnStruct - public static native Object M8UGsyhL(); - // Original name: this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnStructs - public static native Object[] MtYMX5wX(); - // Original name: this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnObject - public static native Object MIs8T9aQ(); - // Original name: this_is_a_package_prefix_org_chromium_example_jni_1generator_SampleForAnnotationProcessor_returnObjects - public static native Object[] MtkQGyRy(); -}
diff --git a/base/android/jni_generator/golden/testProxyPackagePrefixWithProxyHashHeader.golden b/base/android/jni_generator/golden/testProxyPackagePrefixWithProxyHashHeader.golden deleted file mode 100644 index c92b36ef..0000000 --- a/base/android/jni_generator/golden/testProxyPackagePrefixWithProxyHashHeader.golden +++ /dev/null
@@ -1,113 +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. - - -// This file is autogenerated by -// base/android/jni_generator/jni_registration_generator.py -// Please do not change its content. - -#ifndef TEMP_DIR_HEADER_ -#define TEMP_DIR_HEADER_ - -#include <jni.h> - -#include <iterator> - -#include "base/android/jni_generator/jni_generator_helper.h" -#include "base/android/jni_int_wrapper.h" - - -// Step 1: Forward declarations (classes). - - -// Step 2: Forward declarations (methods). - -JNI_GENERATOR_EXPORT void Java_this_is_a_package_prefix_J_N_MGfHLNVl( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT jobject Java_this_is_a_package_prefix_J_N_M5EfCheU( - JNIEnv* env, - jclass jcaller, - jobject sample); -JNI_GENERATOR_EXPORT jstring Java_this_is_a_package_prefix_J_N_MXQefv1w( - JNIEnv* env, - jclass jcaller, - jstring stringToReverse); -JNI_GENERATOR_EXPORT jobjectArray Java_this_is_a_package_prefix_J_N_MSYtnUBS( - JNIEnv* env, - jclass jcaller, - jobjectArray strs); -JNI_GENERATOR_EXPORT jobjectArray Java_this_is_a_package_prefix_J_N_MaV5G8K8( - JNIEnv* env, - jclass jcaller, - jobjectArray strs); -JNI_GENERATOR_EXPORT jboolean Java_this_is_a_package_prefix_J_N_MM2Yz6XD( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT jintArray Java_this_is_a_package_prefix_J_N_MMy4dcxH( - JNIEnv* env, - jclass jcaller, - jint zint, - jintArray ints, - jlong zlong, - jlongArray longs, - jshort zshort, - jshortArray shorts, - jchar zchar, - jcharArray chars, - jbyte zbyte, - jbyteArray bytes, - jdouble zdouble, - jdoubleArray doubles, - jfloat zfloat, - jfloatArray floats, - jboolean zbool, - jbooleanArray bools); -JNI_GENERATOR_EXPORT void Java_this_is_a_package_prefix_J_N_MSslZIsy( - JNIEnv* env, - jclass jcaller, - jclass clazz, - jobjectArray classes, - jthrowable throwable, - jobjectArray throwables, - jstring string, - jobjectArray strings, - jobject tStruct, - jobjectArray structs, - jobject obj, - jobjectArray objects); -JNI_GENERATOR_EXPORT jthrowable Java_this_is_a_package_prefix_J_N_Mehs9t7u( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT jobjectArray Java_this_is_a_package_prefix_J_N_MQH82FhP( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT jclass Java_this_is_a_package_prefix_J_N_MyxAHj2Y( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT jobjectArray Java_this_is_a_package_prefix_J_N_MNGv55Cm( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT jstring Java_this_is_a_package_prefix_J_N_Mysjo_00024pl( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT jobjectArray Java_this_is_a_package_prefix_J_N_M3B287zk( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT jobject Java_this_is_a_package_prefix_J_N_M8UGsyhL( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT jobjectArray Java_this_is_a_package_prefix_J_N_MtYMX5wX( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT jobject Java_this_is_a_package_prefix_J_N_MIs8T9aQ( - JNIEnv* env, - jclass jcaller); -JNI_GENERATOR_EXPORT jobjectArray Java_this_is_a_package_prefix_J_N_MtkQGyRy( - JNIEnv* env, - jclass jcaller); - - - -#endif // TEMP_DIR_HEADER_
diff --git a/base/android/jni_generator/golden/testREForNatives.golden b/base/android/jni_generator/golden/testREForNatives.golden deleted file mode 100644 index b9efc59..0000000 --- a/base/android/jni_generator/golden/testREForNatives.golden +++ /dev/null
@@ -1,49 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - - -// This file is autogenerated by -// base/android/jni_generator/jni_generator.py -// For -// foo/bar - -#ifndef foo_bar_JNI -#define foo_bar_JNI - -#include <jni.h> - -#include "base/android/jni_generator/jni_generator_helper.h" - - -// Step 1: Forward declarations. - -JNI_REGISTRATION_EXPORT extern const char kClassPath_foo_bar[]; -const char kClassPath_foo_bar[] = "foo/bar"; -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> g_foo_bar_clazz(nullptr); -#ifndef foo_bar_clazz_defined -#define foo_bar_clazz_defined -inline jclass foo_bar_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, kClassPath_foo_bar, &g_foo_bar_clazz); -} -#endif - - -// Step 2: Constants (optional). - - -// Step 3: Method stubs. -static void JNI_bar_SyncSetupEnded(JNIEnv* env, const base::android::JavaParamRef<jobject>& jcaller, - jint nativeAndroidSyncSetupFlowHandler); - -JNI_GENERATOR_EXPORT void Java_foo_bar_nativeSyncSetupEnded( - JNIEnv* env, - jobject jcaller, - jint nativeAndroidSyncSetupFlowHandler) { - return JNI_bar_SyncSetupEnded(env, base::android::JavaParamRef<jobject>(env, jcaller), - nativeAndroidSyncSetupFlowHandler); -} - - -#endif // foo_bar_JNI
diff --git a/base/android/jni_generator/golden/testSingleJNIAdditionalImport.golden b/base/android/jni_generator/golden/testSingleJNIAdditionalImport.golden deleted file mode 100644 index bfcd98c..0000000 --- a/base/android/jni_generator/golden/testSingleJNIAdditionalImport.golden +++ /dev/null
@@ -1,67 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - - -// This file is autogenerated by -// base/android/jni_generator/jni_generator.py -// For -// org/chromium/foo/Foo - -#ifndef org_chromium_foo_Foo_JNI -#define org_chromium_foo_Foo_JNI - -#include <jni.h> - -#include "base/android/jni_generator/jni_generator_helper.h" - - -// Step 1: Forward declarations. - -JNI_REGISTRATION_EXPORT extern const char kClassPath_org_chromium_foo_Foo[]; -const char kClassPath_org_chromium_foo_Foo[] = "org/chromium/foo/Foo"; -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> g_org_chromium_foo_Foo_clazz(nullptr); -#ifndef org_chromium_foo_Foo_clazz_defined -#define org_chromium_foo_Foo_clazz_defined -inline jclass org_chromium_foo_Foo_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, kClassPath_org_chromium_foo_Foo, - &g_org_chromium_foo_Foo_clazz); -} -#endif - - -// Step 2: Constants (optional). - - -// Step 3: Method stubs. -static void JNI_Foo_DoSomething(JNIEnv* env, const base::android::JavaParamRef<jobject>& callback); - -JNI_GENERATOR_EXPORT void Java_org_chromium_foo_Foo_nativeDoSomething( - JNIEnv* env, - jclass jcaller, - jobject callback) { - return JNI_Foo_DoSomething(env, base::android::JavaParamRef<jobject>(env, callback)); -} - - -static std::atomic<jmethodID> g_org_chromium_foo_Foo_calledByNative(nullptr); -static void Java_Foo_calledByNative(JNIEnv* env, const base::android::JavaRef<jobject>& callback) { - jclass clazz = org_chromium_foo_Foo_clazz(env); - CHECK_CLAZZ(env, clazz, - org_chromium_foo_Foo_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_STATIC>( - env, - clazz, - "calledByNative", - "(Lorg/chromium/foo/Bar$Callback;)V", - &g_org_chromium_foo_Foo_calledByNative); - - env->CallStaticVoidMethod(clazz, - call_context.base.method_id, callback.obj()); -} - -#endif // org_chromium_foo_Foo_JNI
diff --git a/base/android/jni_generator/golden/testStaticBindingCaller.golden b/base/android/jni_generator/golden/testStaticBindingCaller.golden deleted file mode 100644 index 413ee09f..0000000 --- a/base/android/jni_generator/golden/testStaticBindingCaller.golden +++ /dev/null
@@ -1,100 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - - -// This file is autogenerated by -// base/android/jni_generator/jni_generator.py -// For -// org/chromium/foo/Foo - -#ifndef org_chromium_foo_Foo_JNI -#define org_chromium_foo_Foo_JNI - -#include <jni.h> - -#include "base/android/jni_generator/jni_generator_helper.h" - - -// Step 1: Forward declarations. - -JNI_REGISTRATION_EXPORT extern const char kClassPath_org_chromium_foo_Foo[]; -const char kClassPath_org_chromium_foo_Foo[] = "org/chromium/foo/Foo"; -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> g_org_chromium_foo_Foo_clazz(nullptr); -#ifndef org_chromium_foo_Foo_clazz_defined -#define org_chromium_foo_Foo_clazz_defined -inline jclass org_chromium_foo_Foo_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, kClassPath_org_chromium_foo_Foo, - &g_org_chromium_foo_Foo_clazz); -} -#endif - - -// Step 2: Constants (optional). - - -// Step 3: Method stubs. -static void JNI_Foo_ShouldBindCaller(JNIEnv* env, const base::android::JavaParamRef<jobject>& - caller); - -JNI_GENERATOR_EXPORT void Java_org_chromium_foo_Foo_nativeShouldBindCaller( - JNIEnv* env, - jclass jcaller, - jobject caller) { - return JNI_Foo_ShouldBindCaller(env, base::android::JavaParamRef<jobject>(env, caller)); -} - -static void JNI_Foo_ShouldBindCaller(JNIEnv* env, const base::android::JavaParamRef<jobject>& - caller, - jint a); - -JNI_GENERATOR_EXPORT void Java_org_chromium_foo_Foo_nativeShouldBindCaller( - JNIEnv* env, - jclass jcaller, - jobject caller, - jint a) { - return JNI_Foo_ShouldBindCaller(env, base::android::JavaParamRef<jobject>(env, caller), a); -} - -JNI_GENERATOR_EXPORT void Java_org_chromium_foo_Foo_nativeFoo( - JNIEnv* env, - jclass jcaller, - jlong nativeNativeObject, - jobject caller) { - NativeObject* native = reinterpret_cast<NativeObject*>(nativeNativeObject); - CHECK_NATIVE_PTR(env, jcaller, native, "Foo"); - return native->Foo(env, base::android::JavaParamRef<jobject>(env, caller)); -} - -JNI_GENERATOR_EXPORT void Java_org_chromium_foo_Foo_nativeFoo( - JNIEnv* env, - jclass jcaller, - jlong nativeNativeObject, - jobject caller, - jint a) { - NativeObject* native = reinterpret_cast<NativeObject*>(nativeNativeObject); - CHECK_NATIVE_PTR(env, jcaller, native, "Foo"); - return native->Foo(env, base::android::JavaParamRef<jobject>(env, caller), a); -} - -JNI_GENERATOR_EXPORT void Java_org_chromium_foo_Foo_nativeCallNativeMethod( - JNIEnv* env, - jobject jcaller, - jlong nativePtr) { - Ptr* native = reinterpret_cast<Ptr*>(nativePtr); - CHECK_NATIVE_PTR(env, jcaller, native, "CallNativeMethod"); - return native->CallNativeMethod(env, base::android::JavaParamRef<jobject>(env, jcaller)); -} - -JNI_GENERATOR_EXPORT void Java_org_chromium_foo_Foo_nativeCallWithQualifiedObject( - JNIEnv* env, - jobject jcaller, - jlong nativePtr) { - Foo::Bar* native = reinterpret_cast<Foo::Bar*>(nativePtr); - CHECK_NATIVE_PTR(env, jcaller, native, "CallWithQualifiedObject"); - return native->CallWithQualifiedObject(env, base::android::JavaParamRef<jobject>(env, jcaller)); -} - - -#endif // org_chromium_foo_Foo_JNI
diff --git a/base/android/jni_generator/golden/testTracing.golden b/base/android/jni_generator/golden/testTracing.golden deleted file mode 100644 index 63136a30..0000000 --- a/base/android/jni_generator/golden/testTracing.golden +++ /dev/null
@@ -1,106 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - - -// This file is autogenerated by -// base/android/jni_generator/jni_generator.py -// For -// org/chromium/foo/Foo - -#ifndef org_chromium_foo_Foo_JNI -#define org_chromium_foo_Foo_JNI - -#include <jni.h> - -#include "base/android/jni_generator/jni_generator_helper.h" - - -// Step 1: Forward declarations. - -JNI_REGISTRATION_EXPORT extern const char kClassPath_org_chromium_foo_Foo[]; -const char kClassPath_org_chromium_foo_Foo[] = "org/chromium/foo/Foo"; -// Leaking this jclass as we cannot use LazyInstance from some threads. -JNI_REGISTRATION_EXPORT std::atomic<jclass> g_org_chromium_foo_Foo_clazz(nullptr); -#ifndef org_chromium_foo_Foo_clazz_defined -#define org_chromium_foo_Foo_clazz_defined -inline jclass org_chromium_foo_Foo_clazz(JNIEnv* env) { - return base::android::LazyGetClass(env, kClassPath_org_chromium_foo_Foo, - &g_org_chromium_foo_Foo_clazz); -} -#endif - - -// Step 2: Constants (optional). - - -// Step 3: Method stubs. -namespace org { -namespace chromium_foo { - -JNI_GENERATOR_EXPORT void Java_org_chromium_foo_Foo_nativeInstanceMethod( - JNIEnv* env, - jobject jcaller, - jlong nativeInstance) { - TRACE_EVENT0("jni", "org::chromium_foo::Instance::InstanceMethod"); - Instance* native = reinterpret_cast<Instance*>(nativeInstance); - CHECK_NATIVE_PTR(env, jcaller, native, "InstanceMethod"); - return native->InstanceMethod(env, base::android::JavaParamRef<jobject>(env, jcaller)); -} - -static void JNI_Foo_StaticMethod(JNIEnv* env); - -JNI_GENERATOR_EXPORT void Java_org_chromium_foo_Foo_nativeStaticMethod( - JNIEnv* env, - jclass jcaller) { - TRACE_EVENT0("jni", "org::chromium_foo::JNI_Foo_StaticMethod"); - return JNI_Foo_StaticMethod(env); -} - - -static std::atomic<jmethodID> g_org_chromium_foo_Foo_Constructor(nullptr); -static base::android::ScopedJavaLocalRef<jobject> Java_Foo_Constructor(JNIEnv* env) { - jclass clazz = org_chromium_foo_Foo_clazz(env); - CHECK_CLAZZ(env, clazz, - org_chromium_foo_Foo_clazz(env), NULL); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "<init>", - "()V", - &g_org_chromium_foo_Foo_Constructor); - - TRACE_EVENT0("jni", "org.chromium.foo.Foo.<init>"); - jobject ret = - env->NewObject(clazz, - call_context.base.method_id); - return base::android::ScopedJavaLocalRef<jobject>(env, ret); -} - -static std::atomic<jmethodID> g_org_chromium_foo_Foo_callbackFromNative(nullptr); -static void Java_Foo_callbackFromNative(JNIEnv* env, const base::android::JavaRef<jobject>& obj) { - jclass clazz = org_chromium_foo_Foo_clazz(env); - CHECK_CLAZZ(env, obj.obj(), - org_chromium_foo_Foo_clazz(env)); - - jni_generator::JniJavaCallContextChecked call_context; - call_context.Init< - base::android::MethodID::TYPE_INSTANCE>( - env, - clazz, - "callbackFromNative", - "()V", - &g_org_chromium_foo_Foo_callbackFromNative); - - TRACE_EVENT0("jni", "org.chromium.foo.Foo.callbackFromNative"); - env->CallVoidMethod(obj.obj(), - call_context.base.method_id); -} - -} // namespace chromium_foo -} // namespace org - -#endif // org_chromium_foo_Foo_JNI
diff --git a/base/android/jni_generator/java/src/org/chromium/example/jni_generator/.gitignore b/base/android/jni_generator/java/src/org/chromium/example/jni_generator/.gitignore new file mode 100644 index 0000000..a3f6283 --- /dev/null +++ b/base/android/jni_generator/java/src/org/chromium/example/jni_generator/.gitignore
@@ -0,0 +1 @@ +!/*.class
diff --git a/base/android/jni_generator/java/src/org/chromium/example/jni_generator/SampleBidirectionalNonProxy.java b/base/android/jni_generator/java/src/org/chromium/example/jni_generator/SampleBidirectionalNonProxy.java new file mode 100644 index 0000000..6c7721c --- /dev/null +++ b/base/android/jni_generator/java/src/org/chromium/example/jni_generator/SampleBidirectionalNonProxy.java
@@ -0,0 +1,31 @@ +// 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. + +package org.chromium.example.jni_generator; + +class SampleBidirectionalNonProxy { + /** The pointer to the native Test. */ + public long nativeTest; + private static native int nativeStaticMethod(long nativeTest, int arg1); + private native int nativeMethod(long nativeTest, int arg1); + @CalledByNative + private void testMethodWithParam(int iParam); + @CalledByNative + private String testMethodWithParamAndReturn(int iParam); + @CalledByNative + private static int testStaticMethodWithParam(int iParam); + @CalledByNative + private static double testMethodWithNoParam(); + @CalledByNative + private static String testStaticMethodWithNoParam(); + + class MyInnerClass { + @NativeCall("MyInnerClass") + private native int nativeInit(); + } + class MyOtherInnerClass { + @NativeCall("MyOtherInnerClass") + private native int nativeInit(); + } +}
diff --git a/base/android/jni_generator/java/src/org/chromium/example/jni_generator/SampleForTests.java b/base/android/jni_generator/java/src/org/chromium/example/jni_generator/SampleForTests.java index 9deddf8..30cc9c5 100644 --- a/base/android/jni_generator/java/src/org/chromium/example/jni_generator/SampleForTests.java +++ b/base/android/jni_generator/java/src/org/chromium/example/jni_generator/SampleForTests.java
@@ -58,6 +58,9 @@ SampleForTestsJni.get().method(mNativeCPPObject, this); } + // Just a comment to ensure we aren't reading comments: + // private native void thisShouldNotExist(); + public void finishExample() { // We're done, so let's destroy nativePtr object. SampleForTestsJni.get().destroy(mNativeCPPObject, this);
diff --git a/base/android/jni_generator/java/src/org/chromium/example/jni_generator/SampleNonProxy.class b/base/android/jni_generator/java/src/org/chromium/example/jni_generator/SampleNonProxy.class new file mode 100644 index 0000000..f2bd504 --- /dev/null +++ b/base/android/jni_generator/java/src/org/chromium/example/jni_generator/SampleNonProxy.class Binary files differ
diff --git a/base/android/jni_generator/java/src/org/chromium/example/jni_generator/SampleNonProxy.java b/base/android/jni_generator/java/src/org/chromium/example/jni_generator/SampleNonProxy.java new file mode 100644 index 0000000..e91ef4f6 --- /dev/null +++ b/base/android/jni_generator/java/src/org/chromium/example/jni_generator/SampleNonProxy.java
@@ -0,0 +1,34 @@ +// 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. + +package org.chromium.example.jni_generator; + +import android.graphics.Bitmap; +import android.view.View; + +public class SampleNonProxy { + interface OnFrameAvailableListener {} + private native int nativeInit(); + private native void nativeDestroy(int nativeChromeBrowserProvider); + private native long nativeAddBookmark(int nativeChromeBrowserProvider, String url, String title, + boolean isFolder, long parentId); + private static native String nativeGetDomainAndRegistry(String url); + private static native void nativeCreateHistoricalTabFromState(byte[] state, int tabIndex); + private native byte[] nativeGetStateAsByteArray(View view); + private static native String[] nativeGetAutofillProfileGUIDs(); + private native void nativeSetRecognitionResults(int sessionId, String[] results); + private native long nativeAddBookmarkFromAPI(int nativeChromeBrowserProvider, String url, + Long created, Boolean isBookmark, Long date, byte[] favicon, String title, + Integer visits); + native int nativeFindAll(String find); + private static native OnFrameAvailableListener nativeGetInnerClass(); + private native Bitmap nativeQueryBitmap(int nativeChromeBrowserProvider, String[] projection, + String selection, String[] selectionArgs, String sortOrder); + private native void nativeGotOrientation( + int nativeDataFetcherImplAndroid, double alpha, double beta, double gamma); + private static native Throwable nativeMessWithJavaException(Throwable e); + class MyInnerClass { + private native int nativeInit(); + } +}
diff --git a/base/android/jni_generator/java/src/org/chromium/example/jni_generator/SampleProxyEdgeCases.java b/base/android/jni_generator/java/src/org/chromium/example/jni_generator/SampleProxyEdgeCases.java new file mode 100644 index 0000000..6d1f8a5 --- /dev/null +++ b/base/android/jni_generator/java/src/org/chromium/example/jni_generator/SampleProxyEdgeCases.java
@@ -0,0 +1,19 @@ +// 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. + +package org.chromium.example.jni_generator; + +class SampleProxyEdgeCases { + @NativeMethods + interface Natives { + void foo__weirdly__escaped_name1(); + String[][] crazyTypes(int[] a, Object[][] b); + void fooForTest(); + void fooForTesting(); + } + + // Non-proxy natives in same file. + native void nativeInstanceMethod(long nativeInstance); + static native void nativeStaticMethod(); +}
diff --git a/base/android/jni_generator/java/src/org/chromium/example/jni_generator/SampleUniqueAnnotations.java b/base/android/jni_generator/java/src/org/chromium/example/jni_generator/SampleUniqueAnnotations.java new file mode 100644 index 0000000..257359f --- /dev/null +++ b/base/android/jni_generator/java/src/org/chromium/example/jni_generator/SampleUniqueAnnotations.java
@@ -0,0 +1,26 @@ +// 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. + +package org.chromium.example.jni_generator; + +@JNIAdditionalImport({Bar1.class, Bar2.class}) +class SampleUniqueAnnotations { + // Poorly spaced intentionally + private void do_not_match(); + @VisibleForTesting + @NativeMethods + + @Generated("Test") + interface Natives { + @NativeClassQualifiedName("FooAndroid::BarDelegate") + + void foo(long nativePtr); + int bar(int x, int y); + } + + @CalledByNative + static void useBar1(Bar1.Inner inner) {} + @NativeClassQualifiedName("Foo::Bar") + native void nativeCallWithQualifiedObject(long nativePtr); +}
diff --git a/base/android/jni_generator/java/src/org/chromium/example/jni_generator/TinySample.java b/base/android/jni_generator/java/src/org/chromium/example/jni_generator/TinySample.java new file mode 100644 index 0000000..2018d76 --- /dev/null +++ b/base/android/jni_generator/java/src/org/chromium/example/jni_generator/TinySample.java
@@ -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. + +package org.chromium.example.jni_generator; + +import org.chromium.base.annotations.NativeMethods; + +class TinySample { + @NativeMethods() + interface Natives { + void foo(); + boolean bar(int a); + } +}
diff --git a/base/android/jni_generator/jni_generator.py b/base/android/jni_generator/jni_generator.py index 57c8d0a7..d08f38d 100755 --- a/base/android/jni_generator/jni_generator.py +++ b/base/android/jni_generator/jni_generator.py
@@ -38,8 +38,7 @@ _EXTRACT_NATIVES_REGEX = re.compile( r'(@NativeClassQualifiedName' - r'\(\"(?P<native_class_name>.*?)\"\)\s+)?' - r'(@NativeCall(\(\"(?P<java_class_name>.*?)\"\))\s+)?' + r'\(\"(?P<native_class_name>\S*?)\"\)\s+)?' r'(?P<qualifiers>\w+\s\w+|\w+|\s+)\s*native ' r'(?P<return_type>\S*) ' r'(?P<name>native\w+)\((?P<params>.*?)\);') @@ -51,8 +50,7 @@ # doesn't require name to be prefixed with native, and does not # require a native qualifier. _EXTRACT_METHODS_REGEX = re.compile( - r'(@NativeClassQualifiedName' - r'\(\"(?P<native_class_name>.*?)\"\)\s*)?' + r'(@NativeClassQualifiedName\(\"(?P<native_class_name>\S*?)\"\)\s*)?' r'(?P<qualifiers>' r'((public|private|static|final|abstract|protected|native)\s*)*)\s+' r'(?P<return_type>\S*)\s+' @@ -124,7 +122,6 @@ def __init__(self, **kwargs): self.static = kwargs['static'] - self.java_class_name = kwargs['java_class_name'] self.return_type = kwargs['return_type'] self.params = kwargs['params'] self.is_proxy = kwargs.get('is_proxy', False) @@ -547,7 +544,6 @@ for match in _EXTRACT_NATIVES_REGEX.finditer(contents): native = NativeMethod( static='static' in match.group('qualifiers'), - java_class_name=match.group('java_class_name'), native_class_name=match.group('native_class_name'), return_type=match.group('return_type'), name=match.group('name').replace('native', ''), @@ -970,7 +966,6 @@ fully_qualified_class, name, use_hash=True) native = NativeMethod( static=True, - java_class_name=None, return_type=return_type, name=name, native_class_name=method.group('native_class_name'), @@ -1064,8 +1059,6 @@ template = Template('Java_${JAVA_NAME}_native${NAME}') java_name = self.fully_qualified_class - if native.java_class_name: - java_name += '$' + native.java_class_name values = {'NAME': native.name, 'JAVA_NAME': EscapeClassName(java_name)} return template.substitute(values) @@ -1082,7 +1075,7 @@ class_name = self.class_name jni_class_path = self.fully_qualified_class - if entry.java_class_name: + if isinstance(entry, CalledByNative) and entry.java_class_name: class_name = entry.java_class_name jni_class_path = self.fully_qualified_class + '$' + class_name ret[class_name] = jni_class_path @@ -1206,7 +1199,7 @@ #endif // ${HEADER_GUARD} """) values = { - 'SCRIPT_NAME': self.options.script_name, + 'SCRIPT_NAME': GetScriptName(), 'FULLY_QUALIFIED_CLASS': self.fully_qualified_class, 'CLASS_PATH_DEFINITIONS': self.GetClassPathDefinitionsString(), 'CONSTANT_FIELDS': self.GetConstantFieldsString(), @@ -1294,12 +1287,7 @@ }) def GetImplementationMethodName(self, native): - class_name = self.class_name - if native.java_class_name is not None: - # Inner class - class_name = native.java_class_name - - return 'JNI_%s_%s' % (class_name, native.name) + return 'JNI_%s_%s' % (self.class_name, native.name) def GetNativeStub(self, native): is_method = native.type == 'method' @@ -1628,11 +1616,6 @@ dest='output_names', help='Output filenames within output directory.') parser.add_argument( - '--script_name', - default=GetScriptName(), - help='The name of this script in the generated ' - 'header.') - parser.add_argument( '--includes', help='The comma-separated list of header files to ' 'include in the generated header.')
diff --git a/base/android/jni_generator/jni_generator_tests.py b/base/android/jni_generator/jni_generator_tests.py index 84952e5..e2f9c1d 100755 --- a/base/android/jni_generator/jni_generator_tests.py +++ b/base/android/jni_generator/jni_generator_tests.py
@@ -23,12 +23,8 @@ import jni_generator import jni_registration_generator import zipfile -from jni_generator import CalledByNative -from jni_generator import NativeMethod -from jni_generator import Param -from jni_generator import ProxyHelpers +from util import build_utils -_SCRIPT_NAME = 'base/android/jni_generator/jni_generator.py' _INCLUDES = ('base/android/jni_generator/jni_generator_helper.h') _JAVA_SRC_DIR = os.path.join('java', 'src', 'org', 'chromium', 'example', 'jni_generator') @@ -38,24 +34,15 @@ _REBASELINE_ENV = 'REBASELINE' -def _RemoveHashedNames(natives): - ret = [] - for n in natives: - ret.append(jni_generator.NativeMethod(**n.__dict__)) - ret[-1].hashed_proxy_name = None - return ret - - class JniGeneratorOptions(object): """The mock options object which is passed to the jni_generator.py script.""" def __init__(self): self.namespace = None - self.script_name = _SCRIPT_NAME self.includes = _INCLUDES self.ptr_type = 'long' self.cpp = 'cpp' - self.javap = 'mock-javap' + self.javap = build_utils.JAVAP_PATH self.enable_profiling = False self.use_proxy_hash = False self.enable_jni_multiplexing = False @@ -84,41 +71,15 @@ class BaseTest(unittest.TestCase): - @staticmethod - def _MergeRegistrationForTests(results, - header_guard='HEADER_GUARD', - namespace='test', - enable_jni_multiplexing=False): - - results.sort(key=lambda d: d['FULL_CLASS_NAME']) - - combined_dict = {} - for key in jni_registration_generator.MERGEABLE_KEYS: - combined_dict[key] = ''.join(d.get(key, '') for d in results) - - combined_dict['HEADER_GUARD'] = header_guard - combined_dict['NAMESPACE'] = namespace - - if enable_jni_multiplexing: - proxy_signatures_list = sorted( - set(combined_dict['PROXY_NATIVE_SIGNATURES'].split('\n'))) - combined_dict['PROXY_NATIVE_SIGNATURES'] = '\n'.join( - signature for signature in proxy_signatures_list) - - proxy_native_array_list = sorted( - set(combined_dict['PROXY_NATIVE_METHOD_ARRAY'].split('},\n'))) - combined_dict['PROXY_NATIVE_METHOD_ARRAY'] = '},\n'.join( - p for p in proxy_native_array_list if p != '') + '}' - - signature_to_cases = collections.defaultdict(list) - for d in results: - for signature, cases in d['SIGNATURE_TO_CASES'].items(): - signature_to_cases[signature].extend(cases) - combined_dict[ - 'FORWARDING_CALLS'] = jni_registration_generator._AddForwardingCalls( - signature_to_cases, '', '') - - return combined_dict + def _TestEndToEndGeneration(self, input_java, options, golden): + input_java_path = self._JoinScriptDir( + os.path.join(_JAVA_SRC_DIR, input_java)) + with tempfile.TemporaryDirectory() as tdir: + output_path = os.path.join(tdir, 'output.h') + jni_generator.GenerateJNIHeader(input_java_path, output_path, options) + with open(output_path, 'r') as f: + contents = f.read() + self.AssertGoldenTextEquals(contents, golden) def _TestEndToEndRegistration(self, input_java_src_files, @@ -142,15 +103,14 @@ name in name_to_goldens, f'Found {name} output, but not present in name_to_goldens map.') contents = srcjar.read(name).decode('utf-8') - self.AssertGoldenTextEquals(contents, - golden_file=name_to_goldens[name]) + self.AssertGoldenTextEquals(contents, name_to_goldens[name]) if header_golden: with open(options.header_path, 'r') as f: # Temp directory will cause some diffs each time we run if we don't # normalize. contents = f.read().replace( tdir.replace('/', '_').upper(), 'TEMP_DIR') - self.AssertGoldenTextEquals(contents, golden_file=header_golden) + self.AssertGoldenTextEquals(contents, header_golden) def _JoinScriptDir(self, path): script_dir = os.path.dirname(sys.argv[0]) @@ -166,40 +126,6 @@ with open(golden_file_name, 'r') as f: return f.read() - def _CreateJniHeaderFromFile(self, fname, qualified_clazz, options=None): - with open(self._JoinScriptDir(fname)) as f: - content = f.read() - opts = options - if opts is None: - opts = JniGeneratorOptions() - - jni_from_java = jni_generator.JNIFromJavaSource(content, qualified_clazz, - opts) - return jni_from_java.GetContent() - - def AssertObjEquals(self, first, second): - if isinstance(first, str): - return self.assertEqual(first, second) - dict_first = first.__dict__ - dict_second = second.__dict__ - self.assertEqual(dict_first.keys(), dict_second.keys()) - for key, value in dict_first.items(): - if (type(value) is list and len(value) - and isinstance(type(value[0]), object)): - self.AssertListEquals(value, second.__getattribute__(key)) - else: - actual = second.__getattribute__(key) - self.assertEqual(value, actual, - 'Key ' + key + ': ' + str(value) + '!=' + str(actual)) - - def AssertListEquals(self, first, second): - self.assertEqual(len(first), len(second)) - for i in range(len(first)): - if isinstance(first[i], object): - self.AssertObjEquals(first[i], second[i]) - else: - self.assertEqual(first[i], second[i]) - def AssertTextEquals(self, golden_text, generated_text): if not self.CompareText(golden_text, generated_text): self.fail('Golden text mismatch.') @@ -227,22 +153,14 @@ print('REBASELINE=1', sys.argv[0]) print('to regenerate the data files.') - def AssertGoldenTextEquals(self, generated_text, suffix='', golden_file=None): + def AssertGoldenTextEquals(self, generated_text, golden_file): """Compares generated text with the corresponding golden_file - By default compares generated_text with the file at - script_dir/golden/{caller_name}[suffix].golden. If the parameter - golden_file is provided it will instead compare the generated text with + It will instead compare the generated text with script_dir/golden/golden_file.""" # This is the caller test method. caller = inspect.stack()[1][3] - if golden_file is None: - self.assertTrue( - caller.startswith('test'), - 'AssertGoldenTextEquals can only be called without at golden file ' - 'from a test* method, not %s' % caller) - golden_file = '%s%s.golden' % (caller, suffix) golden_text = self._ReadGoldenFile(golden_file) if os.environ.get(_REBASELINE_ENV): if golden_text != generated_text: @@ -258,1043 +176,37 @@ @unittest.skipIf(os.name == 'nt', 'Not intended to work on Windows') -class TestGenerator(BaseTest): +class Tests(BaseTest): + def testNonProxy(self): + self._TestEndToEndGeneration('SampleNonProxy.java', JniGeneratorOptions(), + 'SampleNonProxy_jni.h.golden') - def testInspectCaller(self): + def testBirectionalNonProxy(self): + self._TestEndToEndGeneration('SampleBidirectionalNonProxy.java', + JniGeneratorOptions(), + 'SampleBidirectionalNonProxy_jni.h.golden') - def willRaise(): - # This function can only be called from a test* method. - self.AssertGoldenTextEquals('') + def testBidirectionalClass(self): + self._TestEndToEndGeneration('SampleForTests.java', JniGeneratorOptions(), + 'SampleForTests_jni.h.golden') + self._TestEndToEndRegistration( + ['SampleForTests.java'], JniRegistrationGeneratorOptions(), { + 'org/chromium/base/natives/GEN_JNI.java': + 'SampleForTestsGenJni.java.golden' + }) - self.assertRaises(AssertionError, willRaise) + def testFromClassFile(self): + self._TestEndToEndGeneration('SampleNonProxy.class', JniGeneratorOptions(), + 'SampleNonProxy_class_file_jni.h.golden') - def testNatives(self): - test_data = """" - import android.graphics.Bitmap; - import android.view.View; - - interface OnFrameAvailableListener {} - private native int nativeInit(); - private native void nativeDestroy(int nativeChromeBrowserProvider); - private native long nativeAddBookmark( - int nativeChromeBrowserProvider, - String url, String title, boolean isFolder, long parentId); - private static native String nativeGetDomainAndRegistry(String url); - private static native void nativeCreateHistoricalTabFromState( - byte[] state, int tab_index); - private native byte[] nativeGetStateAsByteArray(View view); - private static native String[] nativeGetAutofillProfileGUIDs(); - private native void nativeSetRecognitionResults( - int sessionId, String[] results); - private native long nativeAddBookmarkFromAPI( - int nativeChromeBrowserProvider, - String url, Long created, Boolean isBookmark, - Long date, byte[] favicon, String title, Integer visits); - native int nativeFindAll(String find); - private static native OnFrameAvailableListener nativeGetInnerClass(); - private native Bitmap nativeQueryBitmap( - int nativeChromeBrowserProvider, - String[] projection, String selection, - String[] selectionArgs, String sortOrder); - private native void nativeGotOrientation( - int nativeDataFetcherImplAndroid, - double alpha, double beta, double gamma); - private static native Throwable nativeMessWithJavaException(Throwable e); - """ - jni_params = jni_generator.JniParams( - 'org/chromium/example/jni_generator/SampleForTests') - jni_params.ExtractImportsAndInnerClasses(test_data) - natives = jni_generator.ExtractNatives(test_data, 'int') - golden_natives = [ - NativeMethod( - return_type='int', - static=False, - name='Init', - params=[], - java_class_name=None), - NativeMethod( - return_type='void', - static=False, - name='Destroy', - params=[Param(datatype='int', name='nativeChromeBrowserProvider')], - java_class_name=None), - NativeMethod( - return_type='long', - static=False, - name='AddBookmark', - params=[ - Param(datatype='int', name='nativeChromeBrowserProvider'), - Param(datatype='String', name='url'), - Param(datatype='String', name='title'), - Param(datatype='boolean', name='isFolder'), - Param(datatype='long', name='parentId') - ], - java_class_name=None), - NativeMethod( - return_type='String', - static=True, - name='GetDomainAndRegistry', - params=[Param(datatype='String', name='url')], - java_class_name=None), - NativeMethod( - return_type='void', - static=True, - name='CreateHistoricalTabFromState', - params=[ - Param(datatype='byte[]', name='state'), - Param(datatype='int', name='tab_index') - ], - java_class_name=None), - NativeMethod( - return_type='byte[]', - static=False, - name='GetStateAsByteArray', - params=[Param(datatype='View', name='view')], - java_class_name=None), - NativeMethod( - return_type='String[]', - static=True, - name='GetAutofillProfileGUIDs', - params=[], - java_class_name=None), - NativeMethod( - return_type='void', - static=False, - name='SetRecognitionResults', - params=[ - Param(datatype='int', name='sessionId'), - Param(datatype='String[]', name='results') - ], - java_class_name=None), - NativeMethod( - return_type='long', - static=False, - name='AddBookmarkFromAPI', - params=[ - Param(datatype='int', name='nativeChromeBrowserProvider'), - Param(datatype='String', name='url'), - Param(datatype='Long', name='created'), - Param(datatype='Boolean', name='isBookmark'), - Param(datatype='Long', name='date'), - Param(datatype='byte[]', name='favicon'), - Param(datatype='String', name='title'), - Param(datatype='Integer', name='visits') - ], - java_class_name=None), - NativeMethod( - return_type='int', - static=False, - name='FindAll', - params=[Param(datatype='String', name='find')], - java_class_name=None), - NativeMethod( - return_type='OnFrameAvailableListener', - static=True, - name='GetInnerClass', - params=[], - java_class_name=None), - NativeMethod( - return_type='Bitmap', - static=False, - name='QueryBitmap', - params=[ - Param(datatype='int', name='nativeChromeBrowserProvider'), - Param(datatype='String[]', name='projection'), - Param(datatype='String', name='selection'), - Param(datatype='String[]', name='selectionArgs'), - Param(datatype='String', name='sortOrder'), - ], - java_class_name=None), - NativeMethod( - return_type='void', - static=False, - name='GotOrientation', - params=[ - Param(datatype='int', name='nativeDataFetcherImplAndroid'), - Param(datatype='double', name='alpha'), - Param(datatype='double', name='beta'), - Param(datatype='double', name='gamma'), - ], - java_class_name=None), - NativeMethod( - return_type='Throwable', - static=True, - name='MessWithJavaException', - params=[Param(datatype='Throwable', name='e')], - java_class_name=None) - ] - self.AssertListEquals(golden_natives, natives) - h1 = jni_generator.InlHeaderFileGenerator('', '', 'org/chromium/TestJni', - natives, [], [], jni_params, - JniGeneratorOptions()) - self.AssertGoldenTextEquals(h1.GetContent()) - h2 = jni_registration_generator.DictionaryGenerator(JniGeneratorOptions(), - '', '', - 'org/chromium/TestJni', - natives, jni_params) - content = TestGenerator._MergeRegistrationForTests([h2.Generate()]) - - reg_options = JniRegistrationGeneratorOptions() - reg_options.manual_jni_registration = True - self.AssertGoldenTextEquals(jni_registration_generator.CreateFromDict( - reg_options, '', content), - suffix='Registrations') - - def testInnerClassNatives(self): - test_data = """ - class MyInnerClass { - @NativeCall("MyInnerClass") - private native int nativeInit(); - } - """ - natives = jni_generator.ExtractNatives(test_data, 'int') - golden_natives = [ - NativeMethod( - return_type='int', - static=False, - name='Init', - params=[], - java_class_name='MyInnerClass') - ] - self.AssertListEquals(golden_natives, natives) - jni_params = jni_generator.JniParams('') - h = jni_generator.InlHeaderFileGenerator('', '', 'org/chromium/TestJni', - natives, [], [], jni_params, - JniGeneratorOptions()) - self.AssertGoldenTextEquals(h.GetContent()) - - def testInnerClassNativesMultiple(self): - test_data = """ - class MyInnerClass { - @NativeCall("MyInnerClass") - private native int nativeInit(); - } - class MyOtherInnerClass { - @NativeCall("MyOtherInnerClass") - private native int nativeInit(); - } - """ - natives = jni_generator.ExtractNatives(test_data, 'int') - golden_natives = [ - NativeMethod( - return_type='int', - static=False, - name='Init', - params=[], - java_class_name='MyInnerClass'), - NativeMethod( - return_type='int', - static=False, - name='Init', - params=[], - java_class_name='MyOtherInnerClass') - ] - self.AssertListEquals(golden_natives, natives) - jni_params = jni_generator.JniParams('') - h = jni_generator.InlHeaderFileGenerator('', '', 'org/chromium/TestJni', - natives, [], [], jni_params, - JniGeneratorOptions()) - self.AssertGoldenTextEquals(h.GetContent()) - - def testInnerClassNativesBothInnerAndOuter(self): - test_data = """ - class MyOuterClass { - private native int nativeInit(); - class MyOtherInnerClass { - @NativeCall("MyOtherInnerClass") - private native int nativeInit(); - } - } - """ - natives = jni_generator.ExtractNatives(test_data, 'int') - golden_natives = [ - NativeMethod( - return_type='int', - static=False, - name='Init', - params=[], - java_class_name=None), - NativeMethod( - return_type='int', - static=False, - name='Init', - params=[], - java_class_name='MyOtherInnerClass') - ] - self.AssertListEquals(golden_natives, natives) - jni_params = jni_generator.JniParams('') - h = jni_generator.InlHeaderFileGenerator('', '', 'org/chromium/TestJni', - natives, [], [], jni_params, - JniGeneratorOptions()) - self.AssertGoldenTextEquals(h.GetContent()) - - h2 = jni_registration_generator.DictionaryGenerator(JniGeneratorOptions(), - '', '', - 'org/chromium/TestJni', - natives, jni_params) - content = TestGenerator._MergeRegistrationForTests([h2.Generate()]) - - reg_options = JniRegistrationGeneratorOptions() - reg_options.manual_jni_registration = True - self.AssertGoldenTextEquals(jni_registration_generator.CreateFromDict( - reg_options, '', content), - suffix='Registrations') - - def testCalledByNatives(self): - test_data = """" - import android.graphics.Bitmap; - import android.view.View; - import java.io.InputStream; - import java.util.List; - - class InnerClass {} - - @CalledByNative - @SomeOtherA - @SomeOtherB - public InnerClass showConfirmInfoBar(int nativeInfoBar, - String buttonOk, String buttonCancel, String title, Bitmap icon) { - InfoBar infobar = new ConfirmInfoBar(nativeInfoBar, mContext, - buttonOk, buttonCancel, - title, icon); - return infobar; - } - @CalledByNative - InnerClass showAutoLoginInfoBar(int nativeInfoBar, - String realm, String account, String args) { - AutoLoginInfoBar infobar = new AutoLoginInfoBar(nativeInfoBar, mContext, - realm, account, args); - if (infobar.displayedAccountCount() == 0) - infobar = null; - return infobar; - } - @CalledByNative("InfoBar") - void dismiss(); - @SuppressWarnings("unused") - @CalledByNative - private static boolean shouldShowAutoLogin(View view, - String realm, String account, String args) { - AccountManagerContainer accountManagerContainer = - new AccountManagerContainer((Activity)contentView.getContext(), - realm, account, args); - String[] logins = accountManagerContainer.getAccountLogins(null); - return logins.length != 0; - } - @CalledByNative - static InputStream openUrl(String url) { - return null; - } - @CalledByNative - private void activateHardwareAcceleration(final boolean activated, - final int iPid, final int iType, - final int iPrimaryID, final int iSecondaryID) { - if (!activated) { - return - } - } - @CalledByNative - public static @Status int updateStatus(@Status int status) { - return getAndUpdateStatus(status); - } - @CalledByNativeUnchecked - private void uncheckedCall(int iParam); - - @CalledByNative - public byte[] returnByteArray(); - - @CalledByNative - public boolean[] returnBooleanArray(); - - @CalledByNative - public char[] returnCharArray(); - - @CalledByNative - public short[] returnShortArray(); - - @CalledByNative - public int[] returnIntArray(); - - @CalledByNative - public long[] returnLongArray(); - - @CalledByNative - public double[] returnDoubleArray(); - - @CalledByNative - public Object[] returnObjectArray(); - - @CalledByNative - public byte[][] returnArrayOfByteArray(); - - @CalledByNative - public Bitmap.CompressFormat getCompressFormat(); - - @CalledByNative - public List<Bitmap.CompressFormat> getCompressFormatList(); - - @CalledByNativeForTesting - public int[] returnIntArrayForTesting(); - """ - jni_params = jni_generator.JniParams('org/chromium/Foo') - jni_params.ExtractImportsAndInnerClasses(test_data) - called_by_natives = jni_generator.ExtractCalledByNatives( - jni_params, test_data) - golden_called_by_natives = [ - CalledByNative( - return_type='InnerClass', - system_class=False, - static=False, - name='showConfirmInfoBar', - method_id_var_name='showConfirmInfoBar', - java_class_name='', - params=[ - Param(datatype='int', name='nativeInfoBar'), - Param(datatype='String', name='buttonOk'), - Param(datatype='String', name='buttonCancel'), - Param(datatype='String', name='title'), - Param(datatype='Bitmap', name='icon') - ], - env_call=('Object', ''), - unchecked=False, - ), - CalledByNative( - return_type='InnerClass', - system_class=False, - static=False, - name='showAutoLoginInfoBar', - method_id_var_name='showAutoLoginInfoBar', - java_class_name='', - params=[ - Param(datatype='int', name='nativeInfoBar'), - Param(datatype='String', name='realm'), - Param(datatype='String', name='account'), - Param(datatype='String', name='args') - ], - env_call=('Object', ''), - unchecked=False, - ), - CalledByNative( - return_type='void', - system_class=False, - static=False, - name='dismiss', - method_id_var_name='dismiss', - java_class_name='InfoBar', - params=[], - env_call=('Void', ''), - unchecked=False, - ), - CalledByNative( - return_type='boolean', - system_class=False, - static=True, - name='shouldShowAutoLogin', - method_id_var_name='shouldShowAutoLogin', - java_class_name='', - params=[ - Param(datatype='View', name='view'), - Param(datatype='String', name='realm'), - Param(datatype='String', name='account'), - Param(datatype='String', name='args') - ], - env_call=('Boolean', ''), - unchecked=False, - ), - CalledByNative( - return_type='InputStream', - system_class=False, - static=True, - name='openUrl', - method_id_var_name='openUrl', - java_class_name='', - params=[Param(datatype='String', name='url')], - env_call=('Object', ''), - unchecked=False, - ), - CalledByNative( - return_type='void', - system_class=False, - static=False, - name='activateHardwareAcceleration', - method_id_var_name='activateHardwareAcceleration', - java_class_name='', - params=[ - Param(datatype='boolean', name='activated'), - Param(datatype='int', name='iPid'), - Param(datatype='int', name='iType'), - Param(datatype='int', name='iPrimaryID'), - Param(datatype='int', name='iSecondaryID'), - ], - env_call=('Void', ''), - unchecked=False, - ), - CalledByNative( - return_type='int', - system_class=False, - static=True, - name='updateStatus', - method_id_var_name='updateStatus', - java_class_name='', - params=[ - Param(annotations=['@Status'], datatype='int', name='status') - ], - env_call=('Integer', ''), - unchecked=False, - ), - CalledByNative( - return_type='void', - system_class=False, - static=False, - name='uncheckedCall', - method_id_var_name='uncheckedCall', - java_class_name='', - params=[Param(datatype='int', name='iParam')], - env_call=('Void', ''), - unchecked=True, - ), - CalledByNative( - return_type='byte[]', - system_class=False, - static=False, - name='returnByteArray', - method_id_var_name='returnByteArray', - java_class_name='', - params=[], - env_call=('Void', ''), - unchecked=False, - ), - CalledByNative( - return_type='boolean[]', - system_class=False, - static=False, - name='returnBooleanArray', - method_id_var_name='returnBooleanArray', - java_class_name='', - params=[], - env_call=('Void', ''), - unchecked=False, - ), - CalledByNative( - return_type='char[]', - system_class=False, - static=False, - name='returnCharArray', - method_id_var_name='returnCharArray', - java_class_name='', - params=[], - env_call=('Void', ''), - unchecked=False, - ), - CalledByNative( - return_type='short[]', - system_class=False, - static=False, - name='returnShortArray', - method_id_var_name='returnShortArray', - java_class_name='', - params=[], - env_call=('Void', ''), - unchecked=False, - ), - CalledByNative( - return_type='int[]', - system_class=False, - static=False, - name='returnIntArray', - method_id_var_name='returnIntArray', - java_class_name='', - params=[], - env_call=('Void', ''), - unchecked=False, - ), - CalledByNative( - return_type='long[]', - system_class=False, - static=False, - name='returnLongArray', - method_id_var_name='returnLongArray', - java_class_name='', - params=[], - env_call=('Void', ''), - unchecked=False, - ), - CalledByNative( - return_type='double[]', - system_class=False, - static=False, - name='returnDoubleArray', - method_id_var_name='returnDoubleArray', - java_class_name='', - params=[], - env_call=('Void', ''), - unchecked=False, - ), - CalledByNative( - return_type='Object[]', - system_class=False, - static=False, - name='returnObjectArray', - method_id_var_name='returnObjectArray', - java_class_name='', - params=[], - env_call=('Void', ''), - unchecked=False, - ), - CalledByNative( - return_type='byte[][]', - system_class=False, - static=False, - name='returnArrayOfByteArray', - method_id_var_name='returnArrayOfByteArray', - java_class_name='', - params=[], - env_call=('Void', ''), - unchecked=False, - ), - CalledByNative( - return_type='Bitmap.CompressFormat', - system_class=False, - static=False, - name='getCompressFormat', - method_id_var_name='getCompressFormat', - java_class_name='', - params=[], - env_call=('Void', ''), - unchecked=False, - ), - CalledByNative( - return_type='List<Bitmap.CompressFormat>', - system_class=False, - static=False, - name='getCompressFormatList', - method_id_var_name='getCompressFormatList', - java_class_name='', - params=[], - env_call=('Void', ''), - unchecked=False, - ), - CalledByNative( - return_type='int[]', - system_class=False, - static=False, - name='returnIntArrayForTesting', - method_id_var_name='returnIntArrayForTesting', - java_class_name='', - params=[], - env_call=('Void', ''), - unchecked=False, - ), - ] - self.AssertListEquals(golden_called_by_natives, called_by_natives) - h = jni_generator.InlHeaderFileGenerator('', '', 'org/chromium/TestJni', [], - called_by_natives, [], jni_params, - JniGeneratorOptions()) - self.AssertGoldenTextEquals(h.GetContent()) - - def testCalledByNativeParseError(self): - try: - jni_params = jni_generator.JniParams('') - jni_generator.ExtractCalledByNatives( - jni_params, """ -@CalledByNative -public static int foo(); // This one is fine - -@CalledByNative -scooby doo -""") - self.fail('Expected a ParseError') - except jni_generator.ParseError as e: - self.assertEqual(('@CalledByNative', 'scooby doo'), e.context_lines) - - def testFullyQualifiedClassName(self): - contents = """ -// Copyright 2010 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.content.browser; - -import org.chromium.base.BuildInfo; -""" - self.assertEqual( - 'org/chromium/content/browser/Foo', - jni_generator.ExtractFullyQualifiedJavaClassName( - 'org/chromium/content/browser/Foo.java', contents)) - self.assertEqual( - 'org/chromium/content/browser/Foo', - jni_generator.ExtractFullyQualifiedJavaClassName( - 'frameworks/Foo.java', contents)) - self.assertRaises(SyntaxError, - jni_generator.ExtractFullyQualifiedJavaClassName, - 'com/foo/Bar', 'no PACKAGE line') - self.assertRaises(AssertionError, - jni_generator.ExtractFullyQualifiedJavaClassName, - 'com/foo/Bar.kt', 'Kotlin not supported') - - def testMethodNameMangling(self): - jni_params = jni_generator.JniParams('') - self.assertEqual( - 'closeV', - jni_generator.GetMangledMethodName(jni_params, 'close', [], 'void')) - self.assertEqual( - 'readI_AB_I_I', - jni_generator.GetMangledMethodName(jni_params, 'read', [ - Param(name='p1', datatype='byte[]'), - Param(name='p2', datatype='int'), - Param(name='p3', datatype='int'), - ], 'int')) - self.assertEqual( - 'openJIIS_JLS', - jni_generator.GetMangledMethodName(jni_params, 'open', [ - Param(name='p1', datatype='java/lang/String'), - ], 'java/io/InputStream')) - - def testFromJavaPGenerics(self): - contents = """ -public abstract class java.util.HashSet<T> extends java.util.AbstractSet<E> - implements java.util.Set<E>, java.lang.Cloneable, java.io.Serializable { - public void dummy(); - Signature: ()V - public java.lang.Class<?> getClass(); - Signature: ()Ljava/lang/Class<*>; - public static void overloadWithVarargs(java.lang.String...); - Signature: ([Ljava/lang/String;)V - public static void overloadWithVarargs(android.icu.text.DisplayContext...); - Signature: ([Landroid/icu/text/DisplayContext;)V -} -""" - jni_from_javap = jni_generator.JNIFromJavaP(contents.split('\n'), - JniGeneratorOptions()) - self.AssertGoldenTextEquals(jni_from_javap.GetContent()) - - def testSnippnetJavap6_7_8(self): - content_javap6 = """ -public class java.util.HashSet { -public boolean add(java.lang.Object); - Signature: (Ljava/lang/Object;)Z -} -""" - - content_javap7 = """ -public class java.util.HashSet { -public boolean add(E); - Signature: (Ljava/lang/Object;)Z -} -""" - - content_javap8 = """ -public class java.util.HashSet { - public boolean add(E); - descriptor: (Ljava/lang/Object;)Z -} -""" - - jni_from_javap6 = jni_generator.JNIFromJavaP(content_javap6.split('\n'), - JniGeneratorOptions()) - jni_from_javap7 = jni_generator.JNIFromJavaP(content_javap7.split('\n'), - JniGeneratorOptions()) - jni_from_javap8 = jni_generator.JNIFromJavaP(content_javap8.split('\n'), - JniGeneratorOptions()) - self.assertTrue(jni_from_javap6.GetContent()) - self.assertTrue(jni_from_javap7.GetContent()) - self.assertTrue(jni_from_javap8.GetContent()) - # Ensure the javap7 is correctly parsed and uses the Signature field rather - # than the "E" parameter. - self.AssertTextEquals(jni_from_javap6.GetContent(), - jni_from_javap7.GetContent()) - # Ensure the javap8 is correctly parsed and uses the descriptor field. - self.AssertTextEquals(jni_from_javap7.GetContent(), - jni_from_javap8.GetContent()) - - def testFromJavaP(self): - contents = self._ReadGoldenFile('testInputStream.javap') - jni_from_javap = jni_generator.JNIFromJavaP(contents.split('\n'), - JniGeneratorOptions()) - self.assertEqual(10, len(jni_from_javap.called_by_natives)) - self.AssertGoldenTextEquals(jni_from_javap.GetContent()) - - def testConstantsFromJavaP(self): - for f in ['testMotionEvent.javap', 'testMotionEvent.javap7']: - contents = self._ReadGoldenFile(f) - jni_from_javap = jni_generator.JNIFromJavaP(contents.split('\n'), - JniGeneratorOptions()) - self.assertEqual(86, len(jni_from_javap.called_by_natives)) - self.AssertGoldenTextEquals(jni_from_javap.GetContent()) - - def testREForNatives(self): - # We should not match "native SyncSetupFlow" inside the comment. - test_data = """ - /** - * Invoked when the setup process is complete so we can disconnect from the - * private native void nativeSyncSetupFlowHandler();. - */ - public void destroy() { - Log.v(TAG, "Destroying native SyncSetupFlow"); - if (mNativeSyncSetupFlow != 0) { - nativeSyncSetupEnded(mNativeSyncSetupFlow); - mNativeSyncSetupFlow = 0; - } - } - private native void nativeSyncSetupEnded( - int nativeAndroidSyncSetupFlowHandler); - """ - jni_from_java = jni_generator.JNIFromJavaSource(test_data, 'foo/bar', - JniGeneratorOptions()) - self.AssertGoldenTextEquals(jni_from_java.GetContent()) - - def testRaisesOnNonJNIMethod(self): - test_data = """ - class MyInnerClass { - private int Foo(int p0) { - } - } - """ - self.assertRaises(SyntaxError, jni_generator.JNIFromJavaSource, test_data, - 'foo/bar', JniGeneratorOptions()) - - def testJniSelfDocumentingExample(self): - generated_text = self._CreateJniHeaderFromFile( - os.path.join(_JAVA_SRC_DIR, 'SampleForTests.java'), - 'org/chromium/example/jni_generator/SampleForTests') - self.AssertGoldenTextEquals( - generated_text, golden_file='SampleForTests_jni.golden') - - def testNoWrappingPreprocessorLines(self): - test_data = """ - package com.google.lookhowextremelylongiam.snarf.icankeepthisupallday; - - class ReallyLongClassNamesAreAllTheRage { - private static native int nativeTest(); - } - """ - jni_from_java = jni_generator.JNIFromJavaSource( - test_data, ('com/google/lookhowextremelylongiam/snarf/' - 'icankeepthisupallday/ReallyLongClassNamesAreAllTheRage'), - JniGeneratorOptions()) - jni_lines = jni_from_java.GetContent().split('\n') - line = next( - line for line in jni_lines if line.lstrip().startswith('#ifndef')) - self.assertTrue( - len(line) > 80, ('Expected #ifndef line to be > 80 chars: ', line)) - - def testImports(self): - import_header = """ -// Copyright 2012 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.content.app; - -import android.app.Service; -import android.content.Context; -import android.content.Intent; -import android.graphics.SurfaceTexture; -import android.os.Bundle; -import android.os.IBinder; -import android.os.ParcelFileDescriptor; -import android.os.Process; -import android.os.RemoteException; -import android.util.Log; -import android.view.Surface; - -import java.util.ArrayList; - -import org.chromium.base.annotations.CalledByNative; -import org.chromium.base.annotations.JNINamespace; -import org.chromium.content.app.ContentMain; -import org.chromium.content.browser.SandboxedProcessConnection; -import org.chromium.content.common.ISandboxedProcessCallback; -import org.chromium.content.common.ISandboxedProcessService; -import org.chromium.content.common.WillNotRaise.AnException; -import org.chromium.content.common.WillRaise.AnException; - -import static org.chromium.Bar.Zoo; - -class Foo { - public static class BookmarkNode implements Parcelable { - } - public interface PasswordListObserver { - } -} - """ - jni_params = jni_generator.JniParams('org/chromium/content/app/Foo') - jni_params.ExtractImportsAndInnerClasses(import_header) - self.assertTrue('Lorg/chromium/content/common/ISandboxedProcessService' in - jni_params._imports) - self.assertTrue('Lorg/chromium/Bar/Zoo' in jni_params._imports) - self.assertTrue('Lorg/chromium/content/app/Foo$BookmarkNode' in jni_params. - _inner_classes) - self.assertTrue('Lorg/chromium/content/app/Foo$PasswordListObserver' in - jni_params._inner_classes) - self.assertEqual('Lorg/chromium/content/app/ContentMain$Inner;', - jni_params.JavaToJni('ContentMain.Inner')) - self.assertRaises(SyntaxError, jni_params.JavaToJni, 'AnException') - - def testJniParamsJavaToJni(self): - jni_params = jni_generator.JniParams('') - self.AssertTextEquals('I', jni_params.JavaToJni('int')) - self.AssertTextEquals('[B', jni_params.JavaToJni('byte[]')) - self.AssertTextEquals('[Ljava/nio/ByteBuffer;', - jni_params.JavaToJni('java/nio/ByteBuffer[]')) - - def testNativesLong(self): - test_options = JniGeneratorOptions() - test_options.ptr_type = 'long' - test_data = """" - private native void nativeDestroy(long nativeChromeBrowserProvider); - """ - jni_params = jni_generator.JniParams('') - jni_params.ExtractImportsAndInnerClasses(test_data) - natives = jni_generator.ExtractNatives(test_data, test_options.ptr_type) - golden_natives = [ - NativeMethod( - return_type='void', - static=False, - name='Destroy', - params=[Param(datatype='long', name='nativeChromeBrowserProvider')], - java_class_name=None, - ptr_type=test_options.ptr_type), - ] - self.AssertListEquals(golden_natives, natives) - h = jni_generator.InlHeaderFileGenerator('', '', 'org/chromium/TestJni', - natives, [], [], jni_params, - test_options) - self.AssertGoldenTextEquals(h.GetContent()) - - def testNativeExportsOnlyOption(self): - test_data = """ - package org.chromium.example.jni_generator; - - /** The pointer to the native Test. */ - long nativeTest; - - class Test { - private static native int nativeStaticMethod(long nativeTest, int arg1); - private native int nativeMethod(long nativeTest, int arg1); - @CalledByNative - private void testMethodWithParam(int iParam); - @CalledByNative - private String testMethodWithParamAndReturn(int iParam); - @CalledByNative - private static int testStaticMethodWithParam(int iParam); - @CalledByNative - private static double testMethodWithNoParam(); - @CalledByNative - private static String testStaticMethodWithNoParam(); - - class MyInnerClass { - @NativeCall("MyInnerClass") - private native int nativeInit(); - } - class MyOtherInnerClass { - @NativeCall("MyOtherInnerClass") - private native int nativeInit(); - } - } - """ - options = JniGeneratorOptions() - jni_from_java = jni_generator.JNIFromJavaSource( - test_data, 'org/chromium/example/jni_generator/SampleForTests', options) - self.AssertGoldenTextEquals(jni_from_java.GetContent()) - - def testOuterInnerRaises(self): - test_data = """ - package org.chromium.media; - - @CalledByNative - static int getCaptureFormatWidth(VideoCapture.CaptureFormat format) { - return format.getWidth(); - } - """ - - def willRaise(): - jni_generator.JNIFromJavaSource(test_data, - 'org/chromium/media/VideoCaptureFactory', - JniGeneratorOptions()) - - self.assertRaises(SyntaxError, willRaise) - - def testSingleJNIAdditionalImport(self): - test_data = """ - package org.chromium.foo; - - @JNIAdditionalImport(Bar.class) - class Foo { - - @CalledByNative - private static void calledByNative(Bar.Callback callback) { - } - - private static native void nativeDoSomething(Bar.Callback callback); - } - """ - jni_from_java = jni_generator.JNIFromJavaSource(test_data, - 'org/chromium/foo/Foo', - JniGeneratorOptions()) - self.AssertGoldenTextEquals(jni_from_java.GetContent()) - - def testMultipleJNIAdditionalImport(self): - test_data = """ - package org.chromium.foo; - - @JNIAdditionalImport({Bar1.class, Bar2.class}) - class Foo { - - @CalledByNative - private static void calledByNative(Bar1.Callback callback1, - Bar2.Callback callback2) { - } - - private static native void nativeDoSomething(Bar1.Callback callback1, - Bar2.Callback callback2); - } - """ - jni_from_java = jni_generator.JNIFromJavaSource(test_data, - 'org/chromium/foo/Foo', - JniGeneratorOptions()) - self.AssertGoldenTextEquals(jni_from_java.GetContent()) - - def testStaticBindingCaller(self): - test_data = """ - package org.chromium.foo; - - class Bar { - static native void nativeShouldBindCaller(Object caller); - static native void nativeShouldBindCaller(Object caller, int a); - static native void nativeFoo(long nativeNativeObject, Bar caller); - static native void nativeFoo(long nativeNativeObject, Bar caller, int a); - native void nativeCallNativeMethod(long nativePtr); - @NativeClassQualifiedName("Foo::Bar") - native void nativeCallWithQualifiedObject(long nativePtr); - } - """ - - jni_from_java = jni_generator.JNIFromJavaSource(test_data, - 'org/chromium/foo/Foo', - JniGeneratorOptions()) - self.AssertGoldenTextEquals(jni_from_java.GetContent()) + def testUniqueAnnotations(self): + self._TestEndToEndGeneration('SampleUniqueAnnotations.java', + JniGeneratorOptions(), + 'SampleUniqueAnnotations_jni.h.golden') def testSplitNameExample(self): - opts = JniGeneratorOptions() - opts.split_name = "sample" - generated_text = self._CreateJniHeaderFromFile( - os.path.join(_JAVA_SRC_DIR, 'SampleForTests.java'), - 'org/chromium/example/jni_generator/SampleForTests', opts) - self.AssertGoldenTextEquals( - generated_text, golden_file='SampleForTestsWithSplit_jni.golden') - - -@unittest.skipIf(os.name == 'nt', 'Not intended to work on Windows') -class ProxyTestGenerator(BaseTest): - - def _BuildRegDictFromSample(self): - path = self._JoinScriptDir( - os.path.join(_JAVA_SRC_DIR, 'SampleForAnnotationProcessor.java')) - reg_dict = jni_registration_generator._DictForPath( - JniRegistrationGeneratorOptions(), path) - reg_dict = self._MergeRegistrationForTests([reg_dict]) - - return reg_dict + self._TestEndToEndGeneration('SampleForTests.java', JniGeneratorOptions(), + 'SampleForTestsWithSplit_jni.h.golden') def testEndToEndProxyHashed(self): input_java_files = ['SampleForAnnotationProcessor.java'] @@ -1302,8 +214,8 @@ options.use_proxy_hash = True name_to_goldens = { 'org/chromium/base/natives/GEN_JNI.java': - 'HashedSampleForAnnotationProcessorGenJni.2.golden', - 'J/N.java': 'HashedSampleForAnnotationProcessorGenJni.golden' + 'SampleForAnnotationProcessor_proxy_GenJni.java.golden', + 'J/N.java': 'SampleForAnnotationProcessor_proxy_JN.java.golden' } self._TestEndToEndRegistration(input_java_files, options, name_to_goldens) @@ -1319,7 +231,7 @@ input_java_files, options, name_to_goldens, - header_golden='SampleForAnnotationProcessorManualJni.golden') + header_golden='SampleForAnnotationProcessor_manual.h.golden') def testEndToEndProxyJniWithModules(self): input_java_files = [ @@ -1330,436 +242,130 @@ options.module_name = 'module' name_to_goldens = { 'org/chromium/base/natives/GEN_JNI.java': - 'HashedSampleForAnnotationProcessorGenJni.2.golden', - 'J/N.java': 'HashedSampleForAnnotationProcessorGenJni.golden', - 'org/chromium/base/natives/module_GEN_JNI.java': 'ModuleGenJni.golden', - 'J/module_N.java': 'ModuleJN.golden' + 'SampleForAnnotationProcessor_proxy_GenJni.java.golden', + 'J/N.java': 'SampleForAnnotationProcessor_proxy_JN.java.golden', + 'org/chromium/base/natives/module_GEN_JNI.java': + 'SampleModuleGenJni.golden', + 'J/module_N.java': 'SampleModuleJN.golden' } self._TestEndToEndRegistration(input_java_files, options, name_to_goldens) - def testProxyNativesWithNatives(self): - test_data = """ - package org.chromium.foo; - - class Foo { - - @NativeMethods - interface Natives { - void foo(); - String bar(String s, int y, char x, short z); - String[] foobar(String[] a); - void baz(long nativePtr, BazClass caller); - void fooBar(long nativePtr); - } - - void justARegularFunction(); - - native void nativeInstanceMethod(long nativeInstance); - static native void nativeStaticMethod(); - - } - """ - options_with_tracing = JniGeneratorOptions() - jni_from_java = jni_generator.JNIFromJavaSource( - test_data, 'org/chromium/foo/Foo', options_with_tracing) - self.AssertGoldenTextEquals(jni_from_java.GetContent()) - - def testEscapingProxyNatives(self): - test_data = """ - class SampleProxyJni { - @NativeMethods - interface Natives { - void foo_bar(); - void foo__bar(); - } - } - """ - qualified_clazz = 'org/chromium/example/SampleProxyJni' - - natives, _ = jni_generator.ProxyHelpers.ExtractStaticProxyNatives( - qualified_clazz, test_data, 'long') - - golden_natives = [ - NativeMethod( - return_type='void', - static=True, - name='foo_bar', - params=[], - java_class_name=None, - is_proxy=True, - proxy_name='org_chromium_example_SampleProxyJni_foo_1bar'), - NativeMethod( - return_type='void', - static=True, - name='foo__bar', - params=[], - java_class_name=None, - is_proxy=True, - proxy_name='org_chromium_example_SampleProxyJni_foo_1_1bar'), - ] - - self.AssertListEquals(_RemoveHashedNames(natives), golden_natives) - def testForTestingKept(self): - test_data = """ - class SampleProxyJni { - @NativeMethods - interface Natives { - void fooForTesting(); - void fooForTest(); - } + input_java_file = 'SampleProxyEdgeCases.java' + gen_options = JniGeneratorOptions() + gen_options.include_test_only = True + self._TestEndToEndGeneration( + input_java_file, gen_options, + 'SampleForProxyEdgeCases_test_kept_jni.h.golden') + options = JniRegistrationGeneratorOptions() + options.use_proxy_hash = True + options.include_test_only = True + name_to_goldens = { + 'org/chromium/base/natives/GEN_JNI.java': + 'SampleForProxyEdgeCases_test_kept_GenJni.java.golden', + 'J/N.java': 'SampleForProxyEdgeCases_test_kept_JN.java.golden' } - """ - qualified_clazz = 'org/chromium/example/SampleProxyJni' - - natives, _ = jni_generator.ProxyHelpers.ExtractStaticProxyNatives( - qualified_clazz, test_data, 'long', True) - - golden_natives = [ - NativeMethod( - return_type='void', - static=True, - name='fooForTesting', - params=[], - java_class_name=None, - is_proxy=True, - proxy_name='org_chromium_example_SampleProxyJni_fooForTesting'), - NativeMethod( - return_type='void', - static=True, - name='fooForTest', - params=[], - java_class_name=None, - is_proxy=True, - proxy_name='org_chromium_example_SampleProxyJni_fooForTest'), - ] - - self.AssertListEquals(_RemoveHashedNames(natives), golden_natives) + self._TestEndToEndRegistration([input_java_file], options, name_to_goldens) def testForTestingRemoved(self): - test_data = """ - class SampleProxyJni { - @NativeMethods - interface Natives { - void fooForTesting(); - void fooForTest(); - } - } - """ - qualified_clazz = 'org/chromium/example/SampleProxyJni' - - natives, _ = jni_generator.ProxyHelpers.ExtractStaticProxyNatives( - qualified_clazz, test_data, 'long', False) - - self.AssertListEquals(_RemoveHashedNames(natives), []) - - def testProxyNatives(self): - test_data = """ - class SampleProxyJni { - private void do_not_match(); - @VisibleForTesting - @NativeMethods - @Generated("Test") - interface Natives { - @NativeClassQualifiedName("FooAndroid::BarDelegate") - void foo(long nativePtr); - int bar(int x, int y); - String foobar(String x, String y); - } - void dontmatchme(); - public static void metoo(); - public static native void this_is_a_non_proxy_native(); - } - """ - - bad_spaced_test_data = """ - class SampleProxyJni{ - @NativeMethods interface - Natives - - - { @NativeClassQualifiedName("FooAndroid::BarDelegate") void - foo(long nativePtr); - int bar(int - x, int y); String - foobar(String x, String y); - } - - } - """ - - qualified_clazz = 'org/chromium/example/SampleProxyJni' - - natives, _ = jni_generator.ProxyHelpers.ExtractStaticProxyNatives( - qualified_clazz, test_data, 'long') - bad_spacing_natives, _ = jni_generator.ProxyHelpers \ - .ExtractStaticProxyNatives(qualified_clazz, bad_spaced_test_data, 'long') - golden_natives = [ - NativeMethod( - return_type='void', - static=True, - name='foo', - native_class_name='FooAndroid::BarDelegate', - params=[Param(datatype='long', name='nativePtr')], - java_class_name=None, - is_proxy=True, - proxy_name='org_chromium_example_SampleProxyJni_foo', - ptr_type='long'), - NativeMethod( - return_type='int', - static=True, - name='bar', - params=[ - Param(datatype='int', name='x'), - Param(datatype='int', name='y') - ], - java_class_name=None, - is_proxy=True, - proxy_name='org_chromium_example_SampleProxyJni_bar'), - NativeMethod( - return_type='String', - static=True, - name='foobar', - params=[ - Param(datatype='String', name='x'), - Param(datatype='String', name='y') - ], - java_class_name=None, - is_proxy=True, - proxy_name='org_chromium_example_SampleProxyJni_foobar'), - ] - self.AssertListEquals(golden_natives, _RemoveHashedNames(natives)) - self.AssertListEquals(golden_natives, - _RemoveHashedNames(bad_spacing_natives)) - options = JniGeneratorOptions() - reg_options = JniRegistrationGeneratorOptions() - reg_options.manual_jni_registration = True - - jni_params = jni_generator.JniParams(qualified_clazz) - h1 = jni_generator.InlHeaderFileGenerator('', '', qualified_clazz, natives, - [], [], jni_params, options) - self.AssertGoldenTextEquals(h1.GetContent()) - h2 = jni_registration_generator.DictionaryGenerator(reg_options, '', '', - qualified_clazz, - natives, jni_params) - content = TestGenerator._MergeRegistrationForTests([h2.Generate()]) - - - self.AssertGoldenTextEquals( - jni_registration_generator.CreateProxyJavaFromDict( - reg_options, '', content), - suffix='Java') - - self.AssertGoldenTextEquals(jni_registration_generator.CreateFromDict( - reg_options, '', content), - suffix='Registrations') - - def testProxyHashedExample(self): - opts = JniGeneratorOptions() - opts.use_proxy_hash = True - path = os.path.join(_JAVA_SRC_DIR, 'SampleForAnnotationProcessor.java') - - generated_text = self._CreateJniHeaderFromFile( - path, 'org/chromium/example/jni_generator/SampleForAnnotationProcessor', - opts) - self.AssertGoldenTextEquals( - generated_text, - golden_file='HashedSampleForAnnotationProcessor_jni.golden') - - def testProxyJniExample(self): - generated_text = self._CreateJniHeaderFromFile( - os.path.join(_JAVA_SRC_DIR, 'SampleForAnnotationProcessor.java'), - 'org/chromium/example/jni_generator/SampleForAnnotationProcessor') - self.AssertGoldenTextEquals( - generated_text, golden_file='SampleForAnnotationProcessor_jni.golden') - - def testGenJniFlags(self): + input_java_file = 'SampleProxyEdgeCases.java' + gen_options = JniGeneratorOptions() + gen_options.include_test_only = False + self._TestEndToEndGeneration( + input_java_file, gen_options, + 'SampleForProxyEdgeCases_test_removed_jni.h.golden') options = JniRegistrationGeneratorOptions() - reg_dict = self._BuildRegDictFromSample() - content = jni_registration_generator.CreateProxyJavaFromDict( - options, '', reg_dict) - self.AssertGoldenTextEquals(content, 'Disabled') + options.use_proxy_hash = True + options.include_test_only = False + name_to_goldens = { + 'org/chromium/base/natives/GEN_JNI.java': + 'SampleForProxyEdgeCases_test_removed_GenJni.java.golden', + 'J/N.java': 'SampleForProxyEdgeCases_test_removed_JN.java.golden' + } + self._TestEndToEndRegistration([input_java_file], options, name_to_goldens) + def testProxyMocks(self): + input_java_files = ['TinySample.java'] + options = JniRegistrationGeneratorOptions() options.enable_proxy_mocks = True - content = jni_registration_generator.CreateProxyJavaFromDict( - options, '', reg_dict) - self.AssertGoldenTextEquals(content, 'MocksEnabled') - - options.require_mocks = True - content = jni_registration_generator.CreateProxyJavaFromDict( - options, '', reg_dict) - self.AssertGoldenTextEquals(content, 'MocksRequired') - - def testProxyTypeInfoPreserved(self): - test_data = """ - package org.chromium.foo; - - class Foo { - - @NativeMethods - interface Natives { - char[][] fooProxy(byte[][] b); - SomeJavaType[][] barProxy(String[][] s, short z); - String[] foobarProxy(String[] a, int[][] b); - byte[][] bazProxy(long nativePtr, BazClass caller, - SomeJavaType[][] someObjects); + name_to_goldens = { + 'org/chromium/base/natives/GEN_JNI.java': + 'TinySample_enable_mocks_GenJni.java.golden', } - """ - natives, _ = ProxyHelpers.ExtractStaticProxyNatives( - 'org/chromium/foo/FooJni', test_data, 'long') - golden_natives = [ - NativeMethod( - static=True, - java_class_name=None, - return_type='char[][]', - name='fooProxy', - params=[Param(datatype='byte[][]', name='b')], - is_proxy=True, - proxy_name='org_chromium_foo_FooJni_fooProxy'), - NativeMethod( - static=True, - java_class_name=None, - return_type='Object[][]', - name='barProxy', - params=[ - Param(datatype='String[][]', name='s'), - Param(datatype='short', name='z') - ], - is_proxy=True, - proxy_name='org_chromium_foo_FooJni_barProxy'), - NativeMethod( - static=True, - java_class_name=None, - return_type='String[]', - name='foobarProxy', - params=[ - Param(datatype='String[]', name='a'), - Param(datatype='int[][]', name='b') - ], - is_proxy=True, - proxy_name='org_chromium_foo_FooJni_foobarProxy'), - NativeMethod( - static=True, - java_class_name=None, - return_type='byte[][]', - name='bazProxy', - params=[ - Param(datatype='long', name='nativePtr'), - Param(datatype='Object', name='caller'), - Param(datatype='Object[][]', name='someObjects') - ], - is_proxy=True, - proxy_name='org_chromium_foo_FooJni_bazProxy', - ptr_type='long') - ] - self.AssertListEquals(golden_natives, _RemoveHashedNames(natives)) + self._TestEndToEndRegistration(input_java_files, options, name_to_goldens) + def testRequireProxyMocks(self): + input_java_files = ['TinySample.java'] + options = JniRegistrationGeneratorOptions() + options.enable_proxy_mocks = True + options.require_mocks = True + name_to_goldens = { + 'org/chromium/base/natives/GEN_JNI.java': + 'TinySample_require_mocks_GenJni.java.golden', + } + self._TestEndToEndRegistration(input_java_files, options, name_to_goldens) -@unittest.skipIf(os.name == 'nt', 'Not intended to work on Windows') -class PackagePrefixTestGenerator(BaseTest): - def testJniSelfDocumentingExampleWithPackagePrefix(self): + def testPackagePrefixGenerator(self): options = JniGeneratorOptions() options.package_prefix = 'this.is.a.package.prefix' - generated_text = self._CreateJniHeaderFromFile( - os.path.join(_JAVA_SRC_DIR, 'SampleForTests.java'), - 'org/chromium/example/jni_generator/SampleForTests', options) - self.AssertGoldenTextEquals( - generated_text, - golden_file='SampleForTestsWithPackagePrefix_jni.golden') + self._TestEndToEndGeneration('SampleForTests.java', options, + 'SampleForTests_package_prefix_jni.h.golden') - def testProxyPackagePrefixWithManualRegistration(self): + def testPackagePrefixWithManualRegistration(self): input_java_files = ['SampleForAnnotationProcessor.java'] options = JniRegistrationGeneratorOptions() options.package_prefix = 'this.is.a.package.prefix' options.manual_jni_registration = True name_to_goldens = { 'this/is/a/package/prefix/org/chromium/base/natives/GEN_JNI.java': - 'testProxyPackagePrefixWithManualRegistration.2.golden', + 'SampleForAnnotationProcessor_package_prefix_manual_GenJni.java.golden', } self._TestEndToEndRegistration( input_java_files, options, name_to_goldens, - 'testProxyPackagePrefixWithManualRegistrationHeader.golden') + 'SampleForAnnotationProcessor_package_prefix_manual.h.golden') - def testProxyPackagePrefixWithProxyHash(self): + def testPackagePrefixWithProxyHash(self): input_java_files = ['SampleForAnnotationProcessor.java'] options = JniRegistrationGeneratorOptions() options.package_prefix = 'this.is.a.package.prefix' options.use_proxy_hash = True name_to_goldens = { 'this/is/a/package/prefix/org/chromium/base/natives/GEN_JNI.java': - 'testProxyPackagePrefixWithProxyHash.2.golden', + 'SampleForAnnotationProcessor_package_prefix_proxy_GenJni.java.golden', 'this/is/a/package/prefix/J/N.java': - 'testProxyPackagePrefixWithProxyHash.golden', + 'SampleForAnnotationProcessor_package_prefix_proxy_JN.java.golden', } - self._TestEndToEndRegistration( - input_java_files, options, name_to_goldens, - 'testProxyPackagePrefixWithProxyHashHeader.golden') + self._TestEndToEndRegistration(input_java_files, options, name_to_goldens) - def testProxyPackagePrefixWithManualRegistrationWithProxyHash(self): + def testPackagePrefixWithManualRegistrationWithProxyHash(self): input_java_files = ['SampleForAnnotationProcessor.java'] options = JniRegistrationGeneratorOptions() options.package_prefix = 'this.is.a.package.prefix' + options.use_proxy_hash = True options.manual_jni_registration = True - options.use_proxy_hash = True name_to_goldens = { 'this/is/a/package/prefix/org/chromium/base/natives/GEN_JNI.java': - 'testProxyPackagePrefixWithManualRegistrationProxyHash.2.golden', + 'SampleForAnnotationProcessor_package_prefix_proxy_manual_GenJni.java.golden', 'this/is/a/package/prefix/J/N.java': - 'testProxyPackagePrefixWithManualRegistrationProxyHash.golden', + 'SampleForAnnotationProcessor_package_prefix_proxy_manual_JN.java.golden', } self._TestEndToEndRegistration( input_java_files, options, name_to_goldens, - 'testProxyPackagePrefixWithManualRegistrationProxyHashHeader.golden') + 'SampleForAnnotationProcessor_package_prefix_proxy_manual.h.golden') - -@unittest.skipIf(os.name == 'nt', 'Not intended to work on Windows') -class MultiplexTestGenerator(BaseTest): - options = JniRegistrationGeneratorOptions() - options.enable_jni_multiplexing = True - - def testProxyMultiplexGenJni(self): - path = os.path.join(_JAVA_SRC_DIR, 'SampleForAnnotationProcessor.java') - reg_dict = jni_registration_generator._DictForPath( - self.options, self._JoinScriptDir(path)) - reg_dict = self._MergeRegistrationForTests([reg_dict], - enable_jni_multiplexing=True) - - self.AssertGoldenTextEquals( - jni_registration_generator.CreateProxyJavaFromDict( - self.options, '', reg_dict), - golden_file='testProxyMultiplexGenJni.golden') - - self.AssertGoldenTextEquals( - jni_registration_generator.CreateProxyJavaFromDict(self.options, - '', - reg_dict, - forwarding=True), - golden_file='testProxyMultiplexGenJni.2.golden') - - def testProxyMultiplexNatives(self): - path = os.path.join(_JAVA_SRC_DIR, 'SampleForAnnotationProcessor.java') - reg_dict = jni_registration_generator._DictForPath( - self.options, self._JoinScriptDir(path)) - reg_dict = self._MergeRegistrationForTests([reg_dict], - enable_jni_multiplexing=True) - - self.AssertGoldenTextEquals(jni_registration_generator.CreateFromDict( - self.options, '', reg_dict), - golden_file='testProxyMultiplexNatives.golden') - - def testProxyMultiplexNativesRegistration(self): - path = os.path.join(_JAVA_SRC_DIR, 'SampleForAnnotationProcessor.java') - reg_dict_for_registration = jni_registration_generator._DictForPath( - self.options, self._JoinScriptDir(path)) - reg_dict_for_registration = self._MergeRegistrationForTests( - [reg_dict_for_registration], enable_jni_multiplexing=True) - - new_options = copy.copy(self.options) - new_options.manual_jni_registration = True - self.AssertGoldenTextEquals( - jni_registration_generator.CreateFromDict(new_options, '', - reg_dict_for_registration), - golden_file='testProxyMultiplexNativesRegistration.golden') + def testMultiplexing(self): + input_java_files = ['SampleForAnnotationProcessor.java'] + options = JniRegistrationGeneratorOptions() + options.enable_jni_multiplexing = True + options.use_proxy_hash = True + name_to_goldens = { + 'org/chromium/base/natives/GEN_JNI.java': + 'SampleForAnnotationProcessor_multiplexing_GenJni.java.golden', + 'J/N.java': 'SampleForAnnotationProcessor_multiplexing_JN.java.golden', + } + self._TestEndToEndRegistration( + input_java_files, options, name_to_goldens, + 'SampleForAnnotationProcessor_multiplexing.h.golden') def TouchStamp(stamp_path):
diff --git a/base/android/jni_generator/jni_registration_generator.py b/base/android/jni_generator/jni_registration_generator.py index 4cb51c2e..4ce3e4e 100755 --- a/base/android/jni_generator/jni_registration_generator.py +++ b/base/android/jni_generator/jni_registration_generator.py
@@ -534,11 +534,9 @@ (open_namespace, body, close_namespace))) def _GetKMethodsString(self, clazz): - ret = [] - for native in self.non_proxy_natives: - if (native.java_class_name == clazz - or (not native.java_class_name and clazz == self.class_name)): - ret += [self._GetKMethodArrayEntry(native)] + if clazz != self.class_name: + return '' + ret = [self._GetKMethodArrayEntry(n) for n in self.non_proxy_natives] return '\n'.join(ret) def _GetKMethodArrayEntry(self, native): @@ -887,9 +885,8 @@ help='Whether to maintain ForTesting JNI methods.') arg_parser.add_argument( '--package_prefix', - help= - 'Adds a prefix to the classes fully qualified-name. Effectively changing a class name from' - 'foo.bar -> prefix.foo.bar') + help='Adds a prefix to the classes fully qualified-name. Effectively ' + 'changing a class name from foo.bar -> prefix.foo.bar') args = arg_parser.parse_args(build_utils.ExpandFileArgs(argv[1:])) if not args.enable_proxy_mocks and args.require_mocks:
diff --git a/base/containers/span_unittest.cc b/base/containers/span_unittest.cc index d74ba605..2732d799 100644 --- a/base/containers/span_unittest.cc +++ b/base/containers/span_unittest.cc
@@ -6,6 +6,7 @@ #include <stdint.h> +#include <algorithm> #include <iterator> #include <memory> #include <string> @@ -14,7 +15,6 @@ #include "base/containers/adapters.h" #include "base/containers/checked_iterators.h" -#include "base/cxx17_backports.h" #include "base/ranges/algorithm.h" #include "base/strings/string_piece.h" #include "testing/gmock/include/gmock/gmock.h"
diff --git a/base/debug/stack_trace_posix.cc b/base/debug/stack_trace_posix.cc index 0eaad5c..d39fc492 100644 --- a/base/debug/stack_trace_posix.cc +++ b/base/debug/stack_trace_posix.cc
@@ -64,7 +64,6 @@ #endif #include "base/cfi_buildflags.h" -#include "base/cxx17_backports.h" #include "base/debug/debugger.h" #include "base/debug/stack_trace.h" #include "base/files/scoped_file.h"
diff --git a/base/message_loop/message_pump_win.cc b/base/message_loop/message_pump_win.cc index f46c03e..e1ac670 100644 --- a/base/message_loop/message_pump_win.cc +++ b/base/message_loop/message_pump_win.cc
@@ -9,7 +9,6 @@ #include <type_traits> #include "base/auto_reset.h" -#include "base/cxx17_backports.h" #include "base/debug/alias.h" #include "base/feature_list.h" #include "base/functional/bind.h" @@ -415,8 +414,8 @@ } else { // TODO(gab): ::SetTimer()'s documentation claims it does this for us. // Consider removing this safety net. - delay_msec = - clamp(delay_msec, UINT(USER_TIMER_MINIMUM), UINT(USER_TIMER_MAXIMUM)); + delay_msec = std::clamp(delay_msec, static_cast<UINT>(USER_TIMER_MINIMUM), + static_cast<UINT>(USER_TIMER_MAXIMUM)); // Tell the optimizer to retain the delay to simplify analyzing hangs. base::debug::Alias(&delay_msec);
diff --git a/base/metrics/histogram.cc b/base/metrics/histogram.cc index 88d1dc4..b1d2c57 100644 --- a/base/metrics/histogram.cc +++ b/base/metrics/histogram.cc
@@ -13,12 +13,12 @@ #include <limits.h> #include <math.h> +#include <algorithm> #include <memory> #include <string> #include <utility> #include "base/compiler_specific.h" -#include "base/cxx17_backports.h" #include "base/debug/alias.h" #include "base/logging.h" #include "base/memory/ptr_util.h" @@ -953,7 +953,7 @@ DCHECK_EQ(histogram_->GetHistogramType(), LINEAR_HISTOGRAM); LinearHistogram* histogram = static_cast<LinearHistogram*>(histogram_); const auto max_value = static_cast<Sample>(histogram->bucket_count() - 1); - value = base::clamp(value, 0, max_value); + value = std::clamp(value, 0, max_value); int64_t scaled_count = count / scale_; subtle::Atomic32 remainder = static_cast<int>(count - scaled_count * scale_);
diff --git a/base/metrics/histogram_functions.h b/base/metrics/histogram_functions.h index 22b7ea2..2717fbc 100644 --- a/base/metrics/histogram_functions.h +++ b/base/metrics/histogram_functions.h
@@ -259,7 +259,7 @@ // many distinct values to the server (across all users). Concretely, keep the // number of distinct values <= 100 ideally, definitely <= 1000. If you have no // guarantees on the range of your data, use clamping, e.g.: -// UmaHistogramSparse("My.Histogram", base::clamp(value, 0, 200)); +// UmaHistogramSparse("My.Histogram", std::clamp(value, 0, 200)); BASE_EXPORT void UmaHistogramSparse(const std::string& name, int sample); BASE_EXPORT void UmaHistogramSparse(const char* name, int sample);
diff --git a/base/process/memory.cc b/base/process/memory.cc index 8f0ed9f..b3ebf32 100644 --- a/base/process/memory.cc +++ b/base/process/memory.cc
@@ -8,7 +8,6 @@ #include "base/allocator/buildflags.h" #include "base/allocator/partition_allocator/partition_alloc_buildflags.h" -#include "base/cxx17_backports.h" #include "base/debug/alias.h" #include "base/immediate_crash.h" #include "base/logging.h"
diff --git a/base/process/process_mac.cc b/base/process/process_mac.cc index b551ec2..ce1a977 100644 --- a/base/process/process_mac.cc +++ b/base/process/process_mac.cc
@@ -14,7 +14,6 @@ #include <iterator> #include <memory> -#include "base/cxx17_backports.h" #include "base/feature_list.h" #include "base/mac/mach_logging.h" #include "base/memory/free_deleter.h"
diff --git a/base/profiler/DIR_METADATA b/base/profiler/DIR_METADATA new file mode 100644 index 0000000..659a446 --- /dev/null +++ b/base/profiler/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Internals>Metrics>SamplingProfiler" +} \ No newline at end of file
diff --git a/base/sequence_checker_impl.cc b/base/sequence_checker_impl.cc index d1c9a84..0824af5 100644 --- a/base/sequence_checker_impl.cc +++ b/base/sequence_checker_impl.cc
@@ -68,8 +68,7 @@ // SequenceChecker behaves as a ThreadChecker when it is not bound to a // valid sequence token. - return thread_checker_.CalledOnValidThreadInternal( - bound_at, ThreadLocalStorage::HasBeenDestroyed()); + return thread_checker_.CalledOnValidThreadInternal(bound_at); } void SequenceCheckerImpl::DetachFromSequence() {
diff --git a/base/task/thread_pool/initialization_util.cc b/base/task/thread_pool/initialization_util.cc index 9a8658a..edf29c9 100644 --- a/base/task/thread_pool/initialization_util.cc +++ b/base/task/thread_pool/initialization_util.cc
@@ -7,7 +7,6 @@ #include <algorithm> #include <cmath> -#include "base/cxx17_backports.h" #include "base/system/sys_info.h" namespace base { @@ -19,7 +18,7 @@ const auto num_of_cores = static_cast<size_t>(SysInfo::NumberOfProcessors()); const size_t threads = std::ceil<size_t>(num_of_cores * cores_multiplier) + offset; - return clamp(threads, min, max); + return std::clamp(threads, min, max); } } // namespace base
diff --git a/base/task/thread_pool/thread_pool_instance.cc b/base/task/thread_pool/thread_pool_instance.cc index cd0b13d..d11c385 100644 --- a/base/task/thread_pool/thread_pool_instance.cc +++ b/base/task/thread_pool/thread_pool_instance.cc
@@ -7,7 +7,6 @@ #include <algorithm> #include "base/check.h" -#include "base/cxx17_backports.h" #include "base/memory/ptr_util.h" #include "base/system/sys_info.h" #include "base/task/thread_pool/thread_pool_impl.h"
diff --git a/base/threading/thread_checker_impl.cc b/base/threading/thread_checker_impl.cc index 1d59088..eac7b4b 100644 --- a/base/threading/thread_checker_impl.cc +++ b/base/threading/thread_checker_impl.cc
@@ -70,50 +70,42 @@ bool ThreadCheckerImpl::CalledOnValidThread( std::unique_ptr<debug::StackTrace>* out_bound_at) const { - const bool has_thread_been_destroyed = ThreadLocalStorage::HasBeenDestroyed(); - AutoLock auto_lock(lock_); - return CalledOnValidThreadInternal(out_bound_at, has_thread_been_destroyed); + return CalledOnValidThreadInternal(out_bound_at); } bool ThreadCheckerImpl::CalledOnValidThreadInternal( - std::unique_ptr<debug::StackTrace>* out_bound_at, - bool has_thread_been_destroyed) const { - // TaskToken/SequenceToken access thread-local storage. During destruction - // the state of thread-local storage is not guaranteed to be in a consistent - // state. Further, task-runner only installs the tokens when running a task. - if (!has_thread_been_destroyed) { - EnsureAssigned(); + std::unique_ptr<debug::StackTrace>* out_bound_at) const { + // If we're detached, bind to current state. + EnsureAssigned(); - // Always return true when called from the task from which this - // ThreadCheckerImpl was assigned to a thread. - if (task_token_ == TaskToken::GetForCurrentThread()) - return true; - - // If this ThreadCheckerImpl is bound to a valid SequenceToken, it must be - // equal to the current SequenceToken and there must be a registered - // SingleThreadTaskRunner::CurrentDefaultHandle. Otherwise, the fact that - // the current task runs on the thread to which this ThreadCheckerImpl is - // bound is fortuitous. - if (sequence_token_.IsValid() && - (sequence_token_ != SequenceToken::GetForCurrentThread() || - !SingleThreadTaskRunner::HasCurrentDefault())) { - if (out_bound_at && bound_at_) { - *out_bound_at = std::make_unique<debug::StackTrace>(*bound_at_); - } - return false; - } - } else if (thread_id_.is_null()) { - // We're in tls destruction but the |thread_id_| hasn't been assigned yet. - // Assign it now. This doesn't call EnsureAssigned() as to do so while in - // tls destruction may result in the wrong TaskToken/SequenceToken. - if (g_log_thread_and_sequence_checker_binding) - bound_at_ = std::make_unique<debug::StackTrace>(size_t{10}); - thread_id_ = PlatformThread::CurrentRef(); + // Always return true when called from the task from which this + // ThreadCheckerImpl was assigned to a thread. + if (task_token_.IsValid() && + task_token_ == TaskToken::GetForCurrentThread()) { return true; } - if (thread_id_ != PlatformThread::CurrentRef()) { + // If this ThreadCheckerImpl is bound to a valid SequenceToken, it must be + // equal to the current SequenceToken and there must be a registered + // SingleThreadTaskRunner::CurrentDefaultHandle. Otherwise, the fact that + // the current task runs on the thread to which this ThreadCheckerImpl is + // bound is fortuitous. + // + // TODO(pbos): This preserves existing behavior that `sequence_token_` is + // ignored after TLS shutdown. It should either be documented here why that is + // necessary (shouldn't this destroy on sequence?) or + // SequenceCheckerTest.CalledOnValidSequenceFromThreadDestruction should be + // updated to reflect the expected behavior. + // + // See SequenceCheckerImpl::CalledOnValidSequence for additional context. + const bool sequence_is_invalid = + sequence_token_.IsValid() && + (sequence_token_ != SequenceToken::GetForCurrentThread() || + !SingleThreadTaskRunner::HasCurrentDefault()) && + !ThreadLocalStorage::HasBeenDestroyed(); + + if (sequence_is_invalid || thread_id_ != PlatformThread::CurrentRef()) { if (out_bound_at && bound_at_) { *out_bound_at = std::make_unique<debug::StackTrace>(*bound_at_); }
diff --git a/base/threading/thread_checker_impl.h b/base/threading/thread_checker_impl.h index 0d1d011e..b84b66e 100644 --- a/base/threading/thread_checker_impl.h +++ b/base/threading/thread_checker_impl.h
@@ -62,8 +62,8 @@ friend class SequenceCheckerImpl; [[nodiscard]] bool CalledOnValidThreadInternal( - std::unique_ptr<debug::StackTrace>* out_bound_at, - bool has_thread_been_destroyed) const EXCLUSIVE_LOCKS_REQUIRED(lock_); + std::unique_ptr<debug::StackTrace>* out_bound_at) const + EXCLUSIVE_LOCKS_REQUIRED(lock_); // Returns ownership of a pointer to StackTrace where the ThreadCheckerImpl // was bound for debug logs, or nullptr if such logging was not enabled at
diff --git a/base/timer/mock_timer.cc b/base/timer/mock_timer.cc index 1dd9d67..d15a605 100644 --- a/base/timer/mock_timer.cc +++ b/base/timer/mock_timer.cc
@@ -43,6 +43,11 @@ FlushPendingTasks(test_task_runner_.get()); } +void MockOneShotTimer::FireNow() { + DCHECK(IsRunning()); + FlushPendingTasks(test_task_runner_.get()); +} + MockRepeatingTimer::MockRepeatingTimer() : RepeatingTimer(&clock_), test_task_runner_(MakeRefCounted<TestSimpleTaskRunner>()) {
diff --git a/base/timer/mock_timer.h b/base/timer/mock_timer.h index 6d07e62..d9b7d7e 100644 --- a/base/timer/mock_timer.h +++ b/base/timer/mock_timer.h
@@ -24,6 +24,10 @@ // Testing method. void Fire(); + // OneShotTimer::FireNow requires no task runner is set. Override FireNow to + // bypass the check. + void FireNow() override; + private: // Timer implementation. // MockOneShotTimer doesn't support SetTaskRunner. Do not use this.
diff --git a/base/timer/mock_timer_unittest.cc b/base/timer/mock_timer_unittest.cc index 8524cd6..1c05bd3 100644 --- a/base/timer/mock_timer_unittest.cc +++ b/base/timer/mock_timer_unittest.cc
@@ -51,6 +51,19 @@ EXPECT_FALSE(timer.IsRunning()); } +TEST(MockOneShotTimerTest, FireNow) { + int calls = 0; + base::MockOneShotTimer timer; + base::TimeDelta delay = base::Seconds(2); + timer.Start(FROM_HERE, delay, + base::BindOnce(&CallMeMaybe, base::Unretained(&calls))); + EXPECT_EQ(delay, timer.GetCurrentDelay()); + EXPECT_TRUE(timer.IsRunning()); + timer.FireNow(); + EXPECT_FALSE(timer.IsRunning()); + EXPECT_EQ(1, calls); +} + class HasWeakPtr : public base::SupportsWeakPtr<HasWeakPtr> { public: HasWeakPtr() = default;
diff --git a/base/timer/timer.h b/base/timer/timer.h index afe8302a..b34be71 100644 --- a/base/timer/timer.h +++ b/base/timer/timer.h
@@ -250,7 +250,7 @@ // Run the scheduled task immediately, and stop the timer. The timer needs to // be running. - void FireNow(); + virtual void FireNow(); private: void OnStop() final;
diff --git a/base/values.cc b/base/values.cc index 8b338e33..62dfcdf0 100644 --- a/base/values.cc +++ b/base/values.cc
@@ -14,7 +14,6 @@ #include "base/check_op.h" #include "base/containers/checked_iterators.h" #include "base/containers/cxx20_erase_vector.h" -#include "base/cxx17_backports.h" #include "base/cxx20_to_address.h" #include "base/json/json_writer.h" #include "base/logging.h"
diff --git a/build/android/gyp/create_app_bundle.py b/build/android/gyp/create_app_bundle.py index f34f968..12826086 100755 --- a/build/android/gyp/create_app_bundle.py +++ b/build/android/gyp/create_app_bundle.py
@@ -421,10 +421,14 @@ def _GetManifestForModule(bundle_path, module_name): - return ElementTree.fromstring( - bundletool.RunBundleTool([ - 'dump', 'manifest', '--bundle', bundle_path, '--module', module_name - ])) + data = bundletool.RunBundleTool( + ['dump', 'manifest', '--bundle', bundle_path, '--module', module_name]) + try: + return ElementTree.fromstring(data) + except ElementTree.ParseError: + sys.stderr.write('Failed to parse:\n') + sys.stderr.write(data) + raise def _GetComponentNames(manifest, tag_name):
diff --git a/build/android/java/src/org/chromium/build/annotations/MainDex.java b/build/android/java/src/org/chromium/build/annotations/MainDex.java index 5eedb0b..9bb49f8 100644 --- a/build/android/java/src/org/chromium/build/annotations/MainDex.java +++ b/build/android/java/src/org/chromium/build/annotations/MainDex.java
@@ -10,12 +10,7 @@ import java.lang.annotation.Target; /** - * Classes with native methods (contain @NativeMethods interfaces) that are used within renderer - * processes must be annotated with with @MainDex in order for their native methods work. - * - * Applies only for Chrome/ChromeModern (not needed for Monochrome+). - * - * For Cronet builds, which use a default_min_sdk_version of less than 21, this annotation also + * For Cronet builds, which use a default_min_sdk_version of less than 21, this annotation * causes classes to appear in the main dex file (for "Legacy multidex"). */ @Target(ElementType.TYPE)
diff --git a/build/fuchsia/test/compatible_utils.py b/build/fuchsia/test/compatible_utils.py index 1351513..d20b419e 100644 --- a/build/fuchsia/test/compatible_utils.py +++ b/build/fuchsia/test/compatible_utils.py
@@ -171,11 +171,8 @@ """Get the prefix of a barebone ssh command.""" ssh_addr, ssh_port = parse_host_port(host_port_pair) - ssh_config_dir = os.path.expanduser('~/.fuchsia') - ssh_config = os.path.join(ssh_config_dir, 'sshconfig') + ssh_config = os.path.expanduser('~/.fuchsia/sshconfig') if not os.path.isfile(ssh_config): - if not os.path.isdir(ssh_config_dir): - os.makedirs(ssh_config_dir) with open(ssh_config, "w") as f: f.write(_SSH_CONFIG) return ['ssh', '-F', ssh_config, ssh_addr, '-p', str(ssh_port)]
diff --git a/build/fuchsia/test/test_server_unittests.py b/build/fuchsia/test/test_server_unittests.py index bba26e7..4874da6 100755 --- a/build/fuchsia/test/test_server_unittests.py +++ b/build/fuchsia/test/test_server_unittests.py
@@ -58,18 +58,15 @@ forwarder.Unmap(port_pair[0]) self.assertEqual(self._subprocess_mock.call_count, 1) - @mock.patch('os.path.isdir') @mock.patch('os.path.isfile') - def test_port_forward_exception(self, isfile_mock, isdir_mock) -> None: + def test_port_forward_exception(self, isfile_mock) -> None: """Tests that exception is raised if |port_forward| command fails.""" cmd_mock = mock.Mock() cmd_mock.returncode = 1 isfile_mock.return_value = False - isdir_mock.return_value = False self._subprocess_mock.return_value = cmd_mock with mock.patch('compatible_utils.open', mock.mock_open()), \ - mock.patch('os.makedirs'), \ self.assertRaises(Exception): test_server.port_forward(_HOST_PORT_PAIR, _HOST_PORT)
diff --git a/build/install-build-deps.py b/build/install-build-deps.py index 9409a8f..bbe3093 100755 --- a/build/install-build-deps.py +++ b/build/install-build-deps.py
@@ -146,7 +146,7 @@ return distro_id = subprocess.check_output(["lsb_release", "--id", - "--short"].decode().strip()) + "--short"]).decode().strip() supported_codenames = ["bionic", "focal", "jammy"] supported_ids = ["Debian"]
diff --git a/cc/paint/paint_record.cc b/cc/paint/paint_record.cc index 0c2c4d67..7fe25474 100644 --- a/cc/paint/paint_record.cc +++ b/cc/paint/paint_record.cc
@@ -29,7 +29,7 @@ PaintRecord::PaintRecord(sk_sp<PaintOpBuffer> buffer) : buffer_(std::move(buffer)) { - DCHECK(buffer_); + CHECK(buffer_); } // static
diff --git a/chrome/VERSION b/chrome/VERSION index b170810f..22130ab 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=115 MINOR=0 -BUILD=5759 +BUILD=5760 PATCH=0
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index 5b4f0d9..eff92014 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -1020,6 +1020,7 @@ "//chrome/browser/xsurface:java", "//chrome/test:sync_integration_test_support_java", "//chrome/test/android:chrome_java_unit_test_support", + "//components/autofill/android:autofill_features_java", "//components/autofill/android:main_autofill_java", "//components/autofill/android:prefeditor_autofill_java", "//components/background_task_scheduler:background_task_scheduler_java",
diff --git a/chrome/android/expectations/monochrome_public_bundle.proguard_flags.expected b/chrome/android/expectations/monochrome_public_bundle.proguard_flags.expected index e74319e..16e0c0b4 100644 --- a/chrome/android/expectations/monochrome_public_bundle.proguard_flags.expected +++ b/chrome/android/expectations/monochrome_public_bundle.proguard_flags.expected
@@ -919,21 +919,6 @@ java.util.logging.Logger * return _NONNULL_; } -# File: ../../third_party/android_deps/libs/com_android_support_support_annotations/support-annotations-28.0.0.jar:META-INF/proguard/androidx-annotations.pro --keep @android.support.annotation.Keep class * {*;} - --keepclasseswithmembers class * { - @android.support.annotation.Keep <methods>; -} - --keepclasseswithmembers class * { - @android.support.annotation.Keep <fields>; -} - --keepclasseswithmembers class * { - @android.support.annotation.Keep <init>(...); -} - # File: ../../third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_android/kotlinx-coroutines-android-1.6.4.jar:META-INF/com.android.tools/r8-from-1.6.0/coroutines.pro # Allow R8 to optimize away the FastServiceLoader. # Together with ServiceLoader optimization in R8
diff --git a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceOnTabletTest.java b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceOnTabletTest.java index 6995fb2..75746bc 100644 --- a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceOnTabletTest.java +++ b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceOnTabletTest.java
@@ -6,7 +6,10 @@ import static org.chromium.chrome.features.start_surface.StartSurfaceTestUtils.START_SURFACE_ON_TABLET_TEST_PARAMS; +import android.content.pm.ActivityInfo; +import android.content.res.Resources; import android.text.TextUtils; +import android.view.View; import android.view.ViewGroup; import androidx.test.filters.MediumTest; @@ -20,6 +23,7 @@ import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.Criteria; import org.chromium.base.test.util.CriteriaHelper; +import org.chromium.base.test.util.CriteriaNotSatisfiedException; import org.chromium.base.test.util.DoNotBatch; import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.Restriction; @@ -27,6 +31,7 @@ import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.ntp.NewTabPage; +import org.chromium.chrome.browser.ntp.NewTabPageLayout; import org.chromium.chrome.browser.suggestions.tile.MostVisitedTilesCarouselLayout; import org.chromium.chrome.browser.suggestions.tile.MostVisitedTilesGridLayout; import org.chromium.chrome.browser.tab.Tab; @@ -36,10 +41,12 @@ import org.chromium.chrome.test.util.browser.Features.EnableFeatures; import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.components.embedder_support.util.UrlUtilities; +import org.chromium.content_public.browser.test.util.JavaScriptUtils; import org.chromium.content_public.browser.test.util.TestThreadUtils; import org.chromium.ui.test.util.UiRestriction; import java.io.IOException; +import java.util.concurrent.TimeoutException; /** * Integration tests of showing a NTP with Start surface UI at startup. @@ -187,6 +194,128 @@ Assert.assertFalse(ntp.isSingleTabCardVisibleForTesting()); } + @Test + @MediumTest + @Feature({"StartSurface"}) + @EnableFeatures({ChromeFeatureList.SHOW_SCROLLABLE_MVT_ON_NTP_ANDROID, + ChromeFeatureList.FEED_MULTI_COLUMN, ChromeFeatureList.START_SURFACE_ON_TABLET}) + // clang-format off + public void testFakeSearchBoxWidthShortenedWith1RowMvTitlesAndMultiColumnFeeds() { + // clang-format on + mActivityTestRule.startMainActivityWithURL(UrlConstants.NTP_URL); + ChromeTabbedActivity cta = mActivityTestRule.getActivity(); + StartSurfaceTestUtils.waitForTabModel(cta); + waitForNtpLoaded(cta.getActivityTab()); + + NewTabPage ntp = (NewTabPage) cta.getActivityTab().getNativePage(); + ViewGroup mvTilesLayout = + ntp.getView().findViewById(org.chromium.chrome.test.R.id.mv_tiles_layout); + // Verifies that 1 row MV tiles are shown when "Start surface on tablet" flag is enabled. + Assert.assertTrue(mvTilesLayout instanceof MostVisitedTilesCarouselLayout); + + Resources res = cta.getResources(); + int expectedTwoSideMarginPortrait = + res.getDimensionPixelSize(org.chromium.chrome.R.dimen.tile_grid_layout_bleed); + int expectedTwoSideMarginLandscape = + res.getDimensionPixelSize(org.chromium.chrome.R.dimen.ntp_search_box_start_margin) + * 2 + + expectedTwoSideMarginPortrait; + + // Verifies there is additional margin added for the fake search box in landscape mode, + // but not in the portrait mode. + verifyFakeSearchBoxWidth( + expectedTwoSideMarginLandscape, expectedTwoSideMarginPortrait, ntp); + } + + @Test + @MediumTest + @Feature({"StartSurface"}) + @EnableFeatures({ChromeFeatureList.SHOW_SCROLLABLE_MVT_ON_NTP_ANDROID, + ChromeFeatureList.START_SURFACE_ON_TABLET}) + @DisableFeatures({ChromeFeatureList.FEED_MULTI_COLUMN}) + // clang-format off + public void testFakeSearchBoxWidthNotChangeWith1RowMvTitlesAndMultiColumnFeedsDisabled() { + // clang-format on + mActivityTestRule.startMainActivityWithURL(UrlConstants.NTP_URL); + ChromeTabbedActivity cta = mActivityTestRule.getActivity(); + StartSurfaceTestUtils.waitForTabModel(cta); + waitForNtpLoaded(cta.getActivityTab()); + + NewTabPage ntp = (NewTabPage) cta.getActivityTab().getNativePage(); + ViewGroup mvTilesLayout = + ntp.getView().findViewById(org.chromium.chrome.test.R.id.mv_tiles_layout); + // Verifies that 1 row MV tiles are shown when "Start surface on tablet" flag is enabled. + Assert.assertTrue(mvTilesLayout instanceof MostVisitedTilesCarouselLayout); + + Resources res = cta.getResources(); + int expectedMargin = + res.getDimensionPixelSize(org.chromium.chrome.R.dimen.tile_grid_layout_bleed); + + // Verifies there isn't additional margin added for the fake search box in bot landscape and + // portrait mode when multiple Column Feeds is disabled. + verifyFakeSearchBoxWidth(expectedMargin, expectedMargin, ntp); + } + + @Test + @MediumTest + @Feature({"StartSurface"}) + @DisableFeatures({ChromeFeatureList.SHOW_SCROLLABLE_MVT_ON_NTP_ANDROID}) + @EnableFeatures( + {ChromeFeatureList.START_SURFACE_ON_TABLET, ChromeFeatureList.FEED_MULTI_COLUMN}) + // clang-format off + public void testFakeSearchBoxWidthShortenedWith2RowMvTitlesAndMultiColumnFeeds() { + // clang-format on + mActivityTestRule.startMainActivityWithURL(UrlConstants.NTP_URL); + ChromeTabbedActivity cta = mActivityTestRule.getActivity(); + StartSurfaceTestUtils.waitForTabModel(cta); + waitForNtpLoaded(cta.getActivityTab()); + + NewTabPage ntp = (NewTabPage) cta.getActivityTab().getNativePage(); + ViewGroup mvTilesLayout = + ntp.getView().findViewById(org.chromium.chrome.test.R.id.mv_tiles_layout); + // Verifies that 2 row MV tiles are shown when "Start surface on tablet" flag is disabled. + Assert.assertTrue(mvTilesLayout instanceof MostVisitedTilesGridLayout); + + Resources res = cta.getResources(); + int expectedTwoSideMargin = + res.getDimensionPixelSize(org.chromium.chrome.R.dimen.ntp_search_box_start_margin) + * 2 + + res.getDimensionPixelSize(org.chromium.chrome.R.dimen.tile_grid_layout_bleed); + + // Verifies there is additional margin added for the fake search box in both landscape + // and portrait modes. + verifyFakeSearchBoxWidth(expectedTwoSideMargin, expectedTwoSideMargin, ntp); + } + + @Test + @MediumTest + @Feature({"StartSurface"}) + @DisableFeatures({ChromeFeatureList.SHOW_SCROLLABLE_MVT_ON_NTP_ANDROID, + ChromeFeatureList.FEED_MULTI_COLUMN}) + @EnableFeatures({ChromeFeatureList.START_SURFACE_ON_TABLET}) + // clang-format off + public void testFakeSearchBoxWidthNotChangeWith2RowMvTitlesAndMultiColumnFeedsDisabled() { + // clang-format on + mActivityTestRule.startMainActivityWithURL(UrlConstants.NTP_URL); + ChromeTabbedActivity cta = mActivityTestRule.getActivity(); + StartSurfaceTestUtils.waitForTabModel(cta); + waitForNtpLoaded(cta.getActivityTab()); + + NewTabPage ntp = (NewTabPage) cta.getActivityTab().getNativePage(); + ViewGroup mvTilesLayout = + ntp.getView().findViewById(org.chromium.chrome.test.R.id.mv_tiles_layout); + // Verifies that 2 row MV tiles are shown when "Start surface on tablet" flag is disabled. + Assert.assertTrue(mvTilesLayout instanceof MostVisitedTilesGridLayout); + + Resources res = cta.getResources(); + int expectedMargin = + res.getDimensionPixelSize(org.chromium.chrome.R.dimen.tile_grid_layout_bleed); + + // Verifies there isn't additional margin added for the fake search box in bot landscape and + // portrait mode when multiple Column Feeds is disabled. + verifyFakeSearchBoxWidth(expectedMargin, expectedMargin, ntp); + } + private void verifyTabCountAndActiveTabUrl( ChromeTabbedActivity cta, int tabCount, String url, Boolean expectHomeSurfaceUiShown) { Assert.assertEquals(tabCount, cta.getCurrentTabModel().getCount()); @@ -207,4 +336,42 @@ ((NewTabPage) tab.getNativePage()).isLoadedForTests(), Matchers.is(true)); }); } + + private void verifyFakeSearchBoxWidth( + int expectedLandScapeWidth, int expectedPortraitWidth, NewTabPage ntp) { + NewTabPageLayout ntpLayout = ntp.getNewTabPageLayout(); + View searchBoxLayout = ntpLayout.findViewById(org.chromium.chrome.test.R.id.search_box); + + // Start off in landscape screen orientation. + mActivityTestRule.getActivity().setRequestedOrientation( + ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + waitForScreenOrientation("\"landscape\""); + // Verifies there is additional margins added for the fake search box. + Assert.assertEquals( + expectedLandScapeWidth, ntpLayout.getWidth() - searchBoxLayout.getWidth()); + + // Start off in portrait screen orientation. + mActivityTestRule.getActivity().setRequestedOrientation( + ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + waitForScreenOrientation("\"portrait\""); + // Verifies there is additional margins added for the fake search box. + Assert.assertEquals( + expectedPortraitWidth, ntpLayout.getWidth() - searchBoxLayout.getWidth()); + } + + private void waitForScreenOrientation(String orientationValue) { + CriteriaHelper.pollInstrumentationThread(() -> { + try { + Criteria.checkThat(screenOrientation(), Matchers.is(orientationValue)); + } catch (TimeoutException ex) { + throw new CriteriaNotSatisfiedException(ex); + } + }); + } + + private String screenOrientation() throws TimeoutException { + // Returns "\"portrait\"" or "\"landscape\"" (strips the "-primary" or "-secondary" suffix). + return JavaScriptUtils.executeJavaScriptAndWaitForResult( + mActivityTestRule.getWebContents(), "screen.orientation.type.split('-')[0]"); + } }
diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res/values/dimens.xml index 44a534f..8956a7a0 100644 --- a/chrome/android/java/res/values/dimens.xml +++ b/chrome/android/java/res/values/dimens.xml
@@ -166,6 +166,7 @@ <dimen name="ntp_logo_margin_bottom">23dp</dimen> <dimen name="ntp_search_box_height">48dp</dimen> <dimen name="ntp_search_box_bottom_margin">1dp</dimen> + <dimen name="ntp_search_box_start_margin">44dp</dimen> <dimen name="ntp_search_box_transition_length">16dp</dimen> <dimen name="snippets_article_header_height">40dp</dimen> <dimen name="snippets_article_header_menu_size">48dp</dimen> @@ -402,6 +403,8 @@ <dimen name="virtual_card_enrollment_dialog_google_issuer_message_margin_top">8dp</dimen> <dimen name="virtual_card_enrollment_dialog_card_art_width">32dp</dimen> <dimen name="virtual_card_enrollment_dialog_card_art_height">20dp</dimen> + <dimen name="virtual_card_enrollment_dialog_card_art_width_new">40dp</dimen> + <dimen name="virtual_card_enrollment_dialog_card_art_height_new">24dp</dimen> <!-- Section tab dimensions --> <dimen name="section_tab_background_corner_radius">60dp</dimen>
diff --git a/chrome/android/java/res_app/layout/main.xml b/chrome/android/java/res_app/layout/main.xml index 59e797b..28305a6 100644 --- a/chrome/android/java/res_app/layout/main.xml +++ b/chrome/android/java/res_app/layout/main.xml
@@ -173,6 +173,13 @@ android:inflatedId="@+id/page_zoom_layout" android:layout="@layout/page_zoom_view" /> + <ViewStub + android:id="@+id/quick_delete_animation_stub" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout="@layout/quick_delete_animation_view" + android:inflatedId="@+id/quick_delete_animation_layout"/> + </org.chromium.components.browser_ui.widget.CoordinatorLayoutForPointer> <!-- This empty view is used as the anchor for custom menu -->
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/BrowserRestartActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/BrowserRestartActivity.java index c1d9447..d21ff2c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/BrowserRestartActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/BrowserRestartActivity.java
@@ -12,7 +12,6 @@ import org.chromium.base.ContextUtils; import org.chromium.base.IntentUtils; -import org.chromium.build.annotations.MainDex; /** * Kills and (optionally) restarts the main Chrome process, then immediately kills itself. @@ -25,7 +24,6 @@ * process' Activities. It works around an Android framework issue for alarms set via the * AlarmManager, which requires a minimum alarm duration of 5 seconds: https://crbug.com/515919. */ -@MainDex // Runs in a separate process. public class BrowserRestartActivity extends Activity { public static final String EXTRA_MAIN_PID = "org.chromium.chrome.browser.BrowserRestartActivity.main_pid";
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java index c1460a0..d174bc53 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -2269,9 +2269,12 @@ QuickDeleteMetricsDelegate.recordHistogram( QuickDeleteMetricsDelegate.QuickDeleteAction.MENU_ITEM_CLICKED); + ViewStub animationStub = findViewById(R.id.quick_delete_animation_stub); QuickDeleteController quickDeleteController = new QuickDeleteController(this, new QuickDeleteDelegateImpl(), getModalDialogManager(), getSnackbarManager(), - getLayoutManager(), mTabModelSelector); + getLayoutManager(), mTabModelSelector, + animationStub != null ? animationStub.inflate() + : findViewById(R.id.quick_delete_animation_layout)); quickDeleteController.triggerQuickDeleteFlow(); } else { return super.onMenuOrKeyboardAction(id, fromMenu);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillVirtualCardEnrollmentDialog.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillVirtualCardEnrollmentDialog.java index d3011f0..bddf9ec7 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillVirtualCardEnrollmentDialog.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillVirtualCardEnrollmentDialog.java
@@ -123,8 +123,8 @@ R.string.autofill_virtual_card_enrollment_dialog_card_container_title), mVirtualCardEnrollmentFields.getCardArtUrl(), mVirtualCardEnrollmentFields.getNetworkIconId(), - R.dimen.virtual_card_enrollment_dialog_card_art_width, - R.dimen.virtual_card_enrollment_dialog_card_art_height, + AutofillUiUtils.getVirtualCardEnrollmentDialogIconWidthId(), + AutofillUiUtils.getVirtualCardEnrollmentDialogIconHeightId(), R.dimen.virtual_card_enrollment_dialog_card_container_issuer_icon_margin_end, /* cardNameAndNumberTextAppearance= */ R.style.TextAppearance_TextLarge_Primary, /* cardLabelTextAppearance= */ R.style.TextAppearance_TextMedium_Secondary,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediator.java index 25356e5..2a23ef0 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediator.java
@@ -10,6 +10,7 @@ import androidx.annotation.IdRes; import androidx.annotation.Nullable; +import androidx.core.content.res.ResourcesCompat; import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.metrics.RecordUserAction; @@ -18,6 +19,7 @@ import org.chromium.chrome.browser.app.bookmarks.BookmarkAddEditFolderActivity; import org.chromium.chrome.browser.app.bookmarks.BookmarkFolderSelectActivity; import org.chromium.chrome.browser.bookmarks.BookmarkUiPrefs.BookmarkRowDisplayPref; +import org.chromium.chrome.browser.bookmarks.BookmarkUiPrefs.BookmarkRowSortOrder; import org.chromium.chrome.browser.bookmarks.BookmarkUiState.BookmarkUiMode; import org.chromium.components.bookmarks.BookmarkId; import org.chromium.components.bookmarks.BookmarkItem; @@ -63,10 +65,14 @@ mBookmarkOpener = bookmarkOpener; mBookmarkUiPrefs = bookmarkUiPrefs; - final @BookmarkRowDisplayPref int pref = mBookmarkUiPrefs.getBookmarkRowDisplayPref(); if (BookmarkFeatures.isAndroidImprovedBookmarksEnabled()) { mModel.set(BookmarkToolbarProperties.CHECKED_SORT_MENU_ID, - pref == BookmarkRowDisplayPref.COMPACT ? R.id.compact_view : R.id.visual_view); + getMenuIdFromSortOrder(mBookmarkUiPrefs.getBookmarkRowSortOrder())); + final @BookmarkRowDisplayPref int displayPref = + mBookmarkUiPrefs.getBookmarkRowDisplayPref(); + mModel.set(BookmarkToolbarProperties.CHECKED_VIEW_MENU_ID, + displayPref == BookmarkRowDisplayPref.COMPACT ? R.id.compact_view + : R.id.visual_view); } bookmarkDelegateSupplier.onAvailable((bookmarkDelegate) -> { mBookmarkDelegate = bookmarkDelegate; @@ -87,15 +93,19 @@ } else if (id == R.id.normal_options_submenu) { return true; } else if (id == R.id.sort_by_newest) { + mBookmarkUiPrefs.setBookmarkRowSortOrder(BookmarkRowSortOrder.REVERSE_CHRONOLOGICAL); mModel.set(BookmarkToolbarProperties.CHECKED_SORT_MENU_ID, id); return true; } else if (id == R.id.sort_by_oldest) { + mBookmarkUiPrefs.setBookmarkRowSortOrder(BookmarkRowSortOrder.CHRONOLOGICAL); mModel.set(BookmarkToolbarProperties.CHECKED_SORT_MENU_ID, id); return true; } else if (id == R.id.sort_by_alpha) { + mBookmarkUiPrefs.setBookmarkRowSortOrder(BookmarkRowSortOrder.ALPHABETICAL); mModel.set(BookmarkToolbarProperties.CHECKED_SORT_MENU_ID, id); return true; } else if (id == R.id.sort_by_reverse_alpha) { + mBookmarkUiPrefs.setBookmarkRowSortOrder(BookmarkRowSortOrder.REVERSE_ALPHABETICAL); mModel.set(BookmarkToolbarProperties.CHECKED_SORT_MENU_ID, id); return true; } else if (id == R.id.visual_view) { @@ -269,4 +279,18 @@ onFolderStateSet(mCurrentFolder); } } + + private @IdRes int getMenuIdFromSortOrder(@BookmarkRowSortOrder int sortOrder) { + switch (sortOrder) { + case BookmarkRowSortOrder.REVERSE_CHRONOLOGICAL: + return R.id.sort_by_newest; + case BookmarkRowSortOrder.CHRONOLOGICAL: + return R.id.sort_by_oldest; + case BookmarkRowSortOrder.ALPHABETICAL: + return R.id.sort_by_alpha; + case BookmarkRowSortOrder.REVERSE_ALPHABETICAL: + return R.id.sort_by_reverse_alpha; + } + return ResourcesCompat.ID_NULL; + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUiPrefs.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUiPrefs.java index 9d79bf9..02cb24e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUiPrefs.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUiPrefs.java
@@ -19,6 +19,8 @@ public class BookmarkUiPrefs { private static final @BookmarkRowDisplayPref int INITIAL_BOOKMARK_ROW_DISPLAY_PREF = BookmarkRowDisplayPref.COMPACT; + private static final @BookmarkRowSortOrder int INITIAL_BOOKMARK_ROW_SORT_ORDER = + BookmarkRowSortOrder.REVERSE_CHRONOLOGICAL; // This is persisted to preferences, entries shouldn't be reordered or removed. @IntDef({BookmarkRowDisplayPref.COMPACT, BookmarkRowDisplayPref.VISUAL}) @@ -28,10 +30,24 @@ int VISUAL = 1; } + // This is persisted to preferences, entries shouldn't be reordered or removed. + @IntDef({BookmarkRowSortOrder.CHRONOLOGICAL, BookmarkRowSortOrder.REVERSE_CHRONOLOGICAL, + BookmarkRowSortOrder.ALPHABETICAL, BookmarkRowSortOrder.REVERSE_ALPHABETICAL}) + @Retention(RetentionPolicy.SOURCE) + public @interface BookmarkRowSortOrder { + int CHRONOLOGICAL = 0; + int REVERSE_CHRONOLOGICAL = 1; + int ALPHABETICAL = 2; + int REVERSE_ALPHABETICAL = 3; + } + /** Observer for changes to prefs. */ public interface Observer { /** Called when the current {@link BookmarkRowDisplayPref} changes. */ - void onBookmarkRowDisplayPrefChanged(@BookmarkRowDisplayPref int displayPref); + default void onBookmarkRowDisplayPrefChanged(@BookmarkRowDisplayPref int displayPref) {} + + // Called when the current {@link BookmarkRowSortOrder} changes. */ + default void onBookmarkRowSortOrderChanged(@BookmarkRowSortOrder int sortOrder) {} } private final SharedPreferencesManager mPrefsManager; @@ -75,6 +91,18 @@ for (Observer obs : mObservers) obs.onBookmarkRowDisplayPrefChanged(displayPref); } + /** Returns the order bookmark rows are displayed when not showing order in parent. */ + public @BookmarkRowSortOrder int getBookmarkRowSortOrder() { + return mPrefsManager.readInt( + ChromePreferenceKeys.BOOKMARKS_SORT_ORDER, INITIAL_BOOKMARK_ROW_SORT_ORDER); + } + + /** Sets the order to sort bookmark rows. */ + public void setBookmarkRowSortOrder(@BookmarkRowSortOrder int sortOrder) { + mPrefsManager.writeInt(ChromePreferenceKeys.BOOKMARKS_SORT_ORDER, sortOrder); + for (Observer obs : mObservers) obs.onBookmarkRowSortOrderChanged(sortOrder); + } + /** * Some places use {@link BookmarkRowDisplayPref} even for legacy handling. This converts to the * new display pref from feature flags.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/crash/ChromePureJavaExceptionReporter.java b/chrome/android/java/src/org/chromium/chrome/browser/crash/ChromePureJavaExceptionReporter.java index 875c645..5ae4aec 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/crash/ChromePureJavaExceptionReporter.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/crash/ChromePureJavaExceptionReporter.java
@@ -5,7 +5,6 @@ package org.chromium.chrome.browser.crash; import org.chromium.base.ContextUtils; -import org.chromium.build.annotations.MainDex; import org.chromium.build.annotations.UsedByReflection; import org.chromium.components.crash.NativeAndJavaSmartExceptionReporter; import org.chromium.components.crash.PureJavaExceptionReporter; @@ -15,7 +14,6 @@ /** * A custom PureJavaExceptionReporter for Android Chrome's browser. */ -@MainDex @UsedByReflection("SplitCompatApplication.java") public class ChromePureJavaExceptionReporter extends PureJavaExceptionReporter { private static final String CHROME_CRASH_PRODUCT_NAME = "Chrome_Android";
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/AutofillVirtualCardEnrollmentInfoBar.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/AutofillVirtualCardEnrollmentInfoBar.java index e276e9e..0a590b1e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/infobar/AutofillVirtualCardEnrollmentInfoBar.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/AutofillVirtualCardEnrollmentInfoBar.java
@@ -213,9 +213,9 @@ // Get and resize the issuer icon. Bitmap scaledIssuerIcon = Bitmap.createScaledBitmap(mIssuerIcon, layout.getResources().getDimensionPixelSize( - R.dimen.virtual_card_enrollment_dialog_card_art_width), + AutofillUiUtils.getVirtualCardEnrollmentDialogIconWidthId()), layout.getResources().getDimensionPixelSize( - R.dimen.virtual_card_enrollment_dialog_card_art_height), + AutofillUiUtils.getVirtualCardEnrollmentDialogIconHeightId()), true); // Add the issuer icon and the card container text.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java index b449aa6..f51a7f6c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java
@@ -40,6 +40,7 @@ import org.chromium.chrome.browser.feature_guide.notifications.FeatureNotificationUtils; import org.chromium.chrome.browser.feature_guide.notifications.FeatureType; import org.chromium.chrome.browser.feed.FeedActionDelegate; +import org.chromium.chrome.browser.feed.FeedFeatures; import org.chromium.chrome.browser.feed.FeedReliabilityLogger; import org.chromium.chrome.browser.feed.FeedSurfaceCoordinator; import org.chromium.chrome.browser.feed.FeedSurfaceDelegate; @@ -85,6 +86,7 @@ import org.chromium.chrome.browser.ui.native_page.NativePageHost; import org.chromium.chrome.browser.util.BrowserUiUtils; import org.chromium.chrome.browser.xsurface.FeedLaunchReliabilityLogger.SurfaceType; +import org.chromium.chrome.features.start_surface.StartSurfaceConfiguration; import org.chromium.chrome.features.tasks.SingleTabSwitcherCoordinator; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.settings.SettingsLauncher; @@ -482,7 +484,9 @@ mSearchProviderHasLogo, mTemplateUrlService.isDefaultSearchEngineGoogle(), mFeedSurfaceProvider.getScrollDelegate(), mFeedSurfaceProvider.getTouchEnabledDelegate(), mFeedSurfaceProvider.getUiConfig(), - lifecycleDispatcher, uma, mTab.isIncognito(), windowAndroid); + lifecycleDispatcher, uma, mTab.isIncognito(), windowAndroid, + StartSurfaceConfiguration.isNtpAsHomeSurfaceEnabled(mIsTablet), + FeedFeatures.isMultiColumnFeedEnabled(mContext)); // If new NewTabPage is created via back operations, re-show the single Tab card with the // previously tracked Tab.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java index 1dca2643..644b9e2a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
@@ -7,6 +7,7 @@ import android.app.Activity; import android.content.Context; import android.content.res.ColorStateList; +import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Point; import android.graphics.Rect; @@ -47,6 +48,7 @@ import org.chromium.chrome.browser.query_tiles.QueryTileUtils; import org.chromium.chrome.browser.suggestions.tile.MostVisitedTilesCoordinator; import org.chromium.chrome.browser.suggestions.tile.TileGroup; +import org.chromium.chrome.browser.suggestions.tile.TileGroup.Delegate; import org.chromium.chrome.browser.ui.native_page.TouchEnabledDelegate; import org.chromium.chrome.browser.user_education.IPHCommandBuilder; import org.chromium.chrome.browser.user_education.UserEducationHelper; @@ -77,6 +79,7 @@ private static final int UNSET_RESOURCE_FLAG = -1; private final int mTileGridLayoutBleed; + private int mSearchBoxTwoSideMargin; private final Context mContext; private int mSearchBoxEndPadding = UNSET_RESOURCE_FLAG; @@ -124,6 +127,7 @@ private boolean mSnapshotTileGridChanged; private boolean mIsIncognito; private WindowAndroid mWindowAndroid; + private boolean mIsNtpAsHomeSurfaceEnabled; /** * Vertical inset to add to the top and bottom of the search box bounds. May be 0 if no inset @@ -172,12 +176,12 @@ * @param isIncognito Whether the new tab page is in incognito mode. * @param windowAndroid An instance of a {@link WindowAndroid} */ - public void initialize(NewTabPageManager manager, Activity activity, - TileGroup.Delegate tileGroupDelegate, boolean searchProviderHasLogo, - boolean searchProviderIsGoogle, FeedSurfaceScrollDelegate scrollDelegate, - TouchEnabledDelegate touchEnabledDelegate, UiConfig uiConfig, - ActivityLifecycleDispatcher lifecycleDispatcher, NewTabPageUma uma, boolean isIncognito, - WindowAndroid windowAndroid) { + public void initialize(NewTabPageManager manager, Activity activity, Delegate tileGroupDelegate, + boolean searchProviderHasLogo, boolean searchProviderIsGoogle, + FeedSurfaceScrollDelegate scrollDelegate, TouchEnabledDelegate touchEnabledDelegate, + UiConfig uiConfig, ActivityLifecycleDispatcher lifecycleDispatcher, NewTabPageUma uma, + boolean isIncognito, WindowAndroid windowAndroid, boolean isNtpAsHomeSurfaceEnabled, + boolean isMultiColumnFeedEnabled) { TraceEvent.begin(TAG + ".initialize()"); mScrollDelegate = scrollDelegate; mManager = manager; @@ -186,6 +190,7 @@ mNewTabPageUma = uma; mIsIncognito = isIncognito; mWindowAndroid = windowAndroid; + mIsNtpAsHomeSurfaceEnabled = isNtpAsHomeSurfaceEnabled; Profile profile = Profile.getLastUsedRegularProfile(); mSearchBoxCoordinator = new SearchBoxCoordinator(getContext(), this); @@ -195,6 +200,13 @@ R.dimen.ntp_search_box_bounds_vertical_inset_modern); } + if (isMultiColumnFeedEnabled && mIsNtpAsHomeSurfaceEnabled) { + // We add extra side margins to the fake search box when multiple column Feeds are + // shown. There is only one exception that we don't shorten the width of the fake search + // box: one row of MV tiles in portrait mode. + mSearchBoxTwoSideMargin = + getResources().getDimensionPixelSize(R.dimen.ntp_search_box_start_margin) * 2; + } initializeLogoCoordinator(searchProviderHasLogo, searchProviderIsGoogle); initializeMostVisitedTilesCoordinator(profile, lifecycleDispatcher, tileGroupDelegate, touchEnabledDelegate, isScrollableMvtEnabled(), searchProviderIsGoogle); @@ -852,11 +864,23 @@ if (mMvTilesContainerLayout.getVisibility() != GONE) { if (!isScrollableMvtEnabled()) { final int width = mMvTilesContainerLayout.getMeasuredWidth() - mTileGridLayoutBleed; - measureExactly(searchBoxView, width, searchBoxView.getMeasuredHeight()); + measureExactly(searchBoxView, width - mSearchBoxTwoSideMargin, + searchBoxView.getMeasuredHeight()); mLogoCoordinator.measureExactlyLogoView(width); } else { final int width = getMeasuredWidth() - mTileGridLayoutBleed; - measureExactly(searchBoxView, width, searchBoxView.getMeasuredHeight()); + + // We reset the extra margins of the fake search box if the scrollable MV tiles are + // showing in the portrait mode with multiple column Feeds. + int searchBoxTwoSideMargin = mSearchBoxTwoSideMargin; + if (mSearchBoxTwoSideMargin != 0 + && getResources().getConfiguration().orientation + == Configuration.ORIENTATION_PORTRAIT) { + searchBoxTwoSideMargin = 0; + } + + measureExactly(searchBoxView, width - searchBoxTwoSideMargin, + searchBoxView.getMeasuredHeight()); mLogoCoordinator.measureExactlyLogoView(width); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecoderServiceImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecoderServiceImpl.java index a8ce179..4fb3381 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecoderServiceImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecoderServiceImpl.java
@@ -13,14 +13,12 @@ import org.chromium.base.library_loader.LibraryLoader; import org.chromium.base.task.PostTask; import org.chromium.base.task.TaskTraits; -import org.chromium.build.annotations.MainDex; import org.chromium.chrome.browser.base.SplitCompatApplication; import org.chromium.components.browser_ui.photo_picker.ImageDecoder; /** * A service to accept requests to take image file contents and decode them. */ -@MainDex public class DecoderServiceImpl extends DecoderService.Impl { private static final String TAG = "DecoderService";
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SyncConsentActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SyncConsentActivity.java index 8db31be61..1a99fb7 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SyncConsentActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SyncConsentActivity.java
@@ -8,13 +8,18 @@ import android.content.Intent; import android.os.Bundle; +import androidx.annotation.CallSuper; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import org.chromium.chrome.R; import org.chromium.chrome.browser.SynchronousInitializationActivity; +import org.chromium.chrome.browser.ui.signin.SyncConsentDelegate; import org.chromium.chrome.browser.ui.signin.SyncConsentFragmentBase; import org.chromium.components.browser_ui.modaldialog.AppModalPresenter; +import org.chromium.ui.base.ActivityWindowAndroid; +import org.chromium.ui.base.IntentRequestTracker; +import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.modaldialog.ModalDialogManager.ModalDialogType; @@ -22,9 +27,12 @@ * Allows the user to pick an account, sign in and enable sync. Started from Settings and various * sign-in promos. For more details see {@link SyncConsentFragmentBase}. */ -public class SyncConsentActivity extends SynchronousInitializationActivity { +public class SyncConsentActivity + extends SynchronousInitializationActivity implements SyncConsentDelegate { private static final String ARGUMENT_FRAGMENT_ARGS = "SigninActivity.FragmentArgs"; + private WindowAndroid mWindowAndroid; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -41,6 +49,25 @@ } @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (mWindowAndroid != null) { + mWindowAndroid.getIntentRequestTracker().onActivityResult( + requestCode, resultCode, data); + } + super.onActivityResult(requestCode, resultCode, data); + } + + @CallSuper + @Override + protected void onDestroy() { + if (mWindowAndroid != null) { + mWindowAndroid.destroy(); + mWindowAndroid = null; + } + super.onDestroy(); + } + + @Override protected ModalDialogManager createModalDialogManager() { return new ModalDialogManager(new AppModalPresenter(this), ModalDialogType.APP); } @@ -55,4 +82,17 @@ intent.putExtra(ARGUMENT_FRAGMENT_ARGS, fragmentArgs); return intent; } + + /** + * @return A {@link WindowAndroid} instance. Will create one if none was previously + * created. + */ + @Override + public WindowAndroid getWindowAndroid() { + if (mWindowAndroid == null) { + mWindowAndroid = new ActivityWindowAndroid(this, /* listenToActivityState= */ true, + IntentRequestTracker.createFromActivity(this)); + } + return mWindowAndroid; + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncSettingsUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncSettingsUtils.java index 977b2b5..3db5db3 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncSettingsUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncSettingsUtils.java
@@ -3,8 +3,6 @@ // found in the LICENSE file. package org.chromium.chrome.browser.sync.settings; -import static org.chromium.chrome.browser.flags.ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_ERROR_MESSAGES; - import android.app.Activity; import android.app.PendingIntent; import android.content.Context; @@ -47,9 +45,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -/** - * Helper methods for sync settings. - */ +/** Helper methods for sync settings. */ public class SyncSettingsUtils { private static final String DASHBOARD_URL = "https://www.google.com/settings/chrome/sync"; private static final String MY_ACCOUNT_URL = "https://myaccount.google.com/smartlink/home"; @@ -82,9 +78,7 @@ int OTHER_ERRORS = 128; } - /** - * Returns the type of the sync error. - */ + /** Returns the type of the sync error. */ @SyncError public static int getSyncError() { SyncService syncService = SyncService.get(); @@ -137,15 +131,14 @@ /** * Gets hint message to resolve sync error. + * * @param context The application context. * @param error The sync error. */ public static String getSyncErrorHint(Context context, @SyncError int error) { switch (error) { case SyncError.AUTH_ERROR: - return ChromeFeatureList.isEnabled(UNIFIED_PASSWORD_MANAGER_ERROR_MESSAGES) - ? context.getString(R.string.hint_sync_auth_error_modern) - : context.getString(R.string.hint_sync_auth_error); + return context.getString(R.string.hint_sync_auth_error_modern); case SyncError.CLIENT_OUT_OF_DATE: return context.getString( R.string.hint_client_out_of_date, BuildInfo.getInstance().hostPackageLabel);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/ui/SyncErrorMessage.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/ui/SyncErrorMessage.java index 971f928..7e70741 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/ui/SyncErrorMessage.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/ui/SyncErrorMessage.java
@@ -5,7 +5,6 @@ package org.chromium.chrome.browser.sync.ui; import static org.chromium.base.ContextUtils.getApplicationContext; -import static org.chromium.chrome.browser.flags.ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_ERROR_MESSAGES; import android.app.Activity; import android.content.Context; @@ -23,7 +22,6 @@ import org.chromium.base.UnownedUserDataKey; import org.chromium.base.metrics.RecordHistogram; import org.chromium.chrome.R; -import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.settings.SettingsLauncherImpl; import org.chromium.chrome.browser.signin.services.IdentityServicesProvider; @@ -52,10 +50,9 @@ /** * A message UI that informs the current sync error and contains a button to take action to resolve - * it. - * This class is tied to a window and at most one instance per window can exist at a time. - * In practice however, because the time limit imposed between 2 displays is global, - * only one instance in the whole application will exist at a time. + * it. This class is tied to a window and at most one instance per window can exist at a time. In + * practice however, because the time limit imposed between 2 displays is global, only one instance + * in the whole application will exist at a time. */ public class SyncErrorMessage implements SyncStateChangedListener, UnownedUserData { @VisibleForTesting @@ -187,11 +184,7 @@ assert false; break; case MessageType.AUTH_ERROR: - if (ChromeFeatureList.isEnabled(UNIFIED_PASSWORD_MANAGER_ERROR_MESSAGES)) { - startUpdateCredentialsFlow(mActivity); - } else { - openSyncSettings(); - } + startUpdateCredentialsFlow(mActivity); break; case MessageType.PASSPHRASE_REQUIRED: case MessageType.SYNC_SETUP_INCOMPLETE: @@ -268,9 +261,7 @@ private static String getPrimaryButtonText(Context context, @SyncError int error) { switch (error) { case SyncError.AUTH_ERROR: - return ChromeFeatureList.isEnabled(UNIFIED_PASSWORD_MANAGER_ERROR_MESSAGES) - ? context.getString(R.string.password_error_sign_in_button_title) - : context.getString(R.string.open_settings_button); + return context.getString(R.string.password_error_sign_in_button_title); case SyncError.TRUSTED_VAULT_KEY_REQUIRED_FOR_EVERYTHING: case SyncError.TRUSTED_VAULT_KEY_REQUIRED_FOR_PASSWORDS: case SyncError.TRUSTED_VAULT_RECOVERABILITY_DEGRADED_FOR_EVERYTHING:
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/ui/SyncErrorMessageImpressionTracker.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/ui/SyncErrorMessageImpressionTracker.java index 6919e79..1fd941b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/ui/SyncErrorMessageImpressionTracker.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/ui/SyncErrorMessageImpressionTracker.java
@@ -4,13 +4,11 @@ package org.chromium.chrome.browser.sync.ui; -import static org.chromium.chrome.browser.flags.ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_ERROR_MESSAGES; import static org.chromium.chrome.browser.preferences.ChromePreferenceKeys.SYNC_ERROR_MESSAGE_SHOWN_AT_TIME; import androidx.annotation.VisibleForTesting; import org.chromium.base.TimeUtils; -import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.profiles.Profile; @@ -36,19 +34,16 @@ long lastShownTime = SharedPreferencesManager.getInstance().readLong( SYNC_ERROR_MESSAGE_SHOWN_AT_TIME, 0); - if (ChromeFeatureList.isEnabled(UNIFIED_PASSWORD_MANAGER_ERROR_MESSAGES)) { - // Since the password manager error and the sync error can be related, - // the sync error should be shown only if at least MINIMAL_DURATION_TO_PWM_ERROR_UI_MS - // have passed since the last password manager error. This condition is mirrored - // for the password manager error. - long currentTime = TimeUtils.currentTimeMillis(); - PrefService prefService = UserPrefs.get(Profile.getLastUsedRegularProfile()); - long upmErrorShownTime = - Long.valueOf(prefService.getString(Pref.UPM_ERROR_UI_SHOWN_TIMESTAMP)); - return currentTime - lastShownTime > MINIMAL_DURATION_BETWEEN_UI_MS - && currentTime - upmErrorShownTime > MINIMAL_DURATION_TO_PWM_ERROR_UI_MS; - } - return TimeUtils.currentTimeMillis() - lastShownTime > MINIMAL_DURATION_BETWEEN_UI_MS; + // Since the password manager error and the sync error can be related, + // the sync error should be shown only if at least MINIMAL_DURATION_TO_PWM_ERROR_UI_MS + // have passed since the last password manager error. This condition is mirrored + // for the password manager error. + long currentTime = TimeUtils.currentTimeMillis(); + PrefService prefService = UserPrefs.get(Profile.getLastUsedRegularProfile()); + long upmErrorShownTime = + Long.valueOf(prefService.getString(Pref.UPM_ERROR_UI_SHOWN_TIMESTAMP)); + return currentTime - lastShownTime > MINIMAL_DURATION_BETWEEN_UI_MS + && currentTime - upmErrorShownTime > MINIMAL_DURATION_TO_PWM_ERROR_UI_MS; } public static void updateLastShownTime() {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SyncConsentFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SyncConsentFragmentTest.java index 8ba9e31..aacac437 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SyncConsentFragmentTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SyncConsentFragmentTest.java
@@ -16,6 +16,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.verify; @@ -57,6 +58,7 @@ import org.chromium.chrome.browser.signin.services.IdentityServicesProvider; import org.chromium.chrome.browser.signin.services.SigninMetricsUtils.State; import org.chromium.chrome.browser.sync.SyncService; +import org.chromium.chrome.test.AutomotiveContextWrapperTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; import org.chromium.chrome.test.R; @@ -131,6 +133,9 @@ public final SigninTestRule mSigninTestRule = new SigninTestRule(); @Rule + public AutomotiveContextWrapperTestRule mAutoTestRule = new AutomotiveContextWrapperTestRule(); + + @Rule public final ChromeTabbedActivityTestRule mChromeActivityTestRule = new ChromeTabbedActivityTestRule(); @@ -974,6 +979,94 @@ addAccountStateHistogram.assertExpected(); } + @Test + @LargeTest + @DisableFeatures({ChromeFeatureList.TANGIBLE_SYNC}) + public void testAutomotiveDevice_deviceLockCreated_syncAcceptedSuccessfully() + throws IOException { + mAutoTestRule.setIsAutomotive(true); + CoreAccountInfo accountInfo = + mSigninTestRule.addAccount(AccountManagerTestRule.TEST_ACCOUNT_EMAIL); + mSyncConsentActivity = ActivityTestUtils.waitForActivity( + InstrumentationRegistry.getInstrumentation(), SyncConsentActivity.class, () -> { + SyncConsentActivityLauncherImpl.get().launchActivityForPromoDefaultFlow( + mChromeActivityTestRule.getActivity(), + SigninAccessPoint.BOOKMARK_MANAGER, accountInfo.getEmail()); + }); + + // Should display the sync page. + onView(withText(R.string.signin_accept_button)).check(matches(isDisplayed())); + onView(withText(R.string.signin_accept_button)).perform(click()); + + // Accepting the sync on an automotive device should take the user to the device lock page. + onView(withId(R.id.device_lock_title)).check(matches(isDisplayed())); + onView(withText(R.string.signin_accept_button)).check(doesNotExist()); + + // Mimic a successful device lock creation. + SyncConsentFragment syncConsentFragment = + (SyncConsentFragment) mSyncConsentActivity.getSupportFragmentManager() + .findFragmentById(R.id.fragment_container); + assertNotNull("The SyncConsentActivity should contain the SyncConsentFragment!", + syncConsentFragment); + TestThreadUtils.runOnUiThreadBlocking(() -> { + syncConsentFragment.onDeviceLockReady(); + }); + + // Wait for the sync consent to be set and the activity has finished. + CriteriaHelper.pollUiThread(() -> { + return IdentityServicesProvider.get() + .getSigninManager(Profile.getLastUsedRegularProfile()) + .getIdentityManager() + .hasPrimaryAccount(ConsentLevel.SYNC); + }); + onView(withId(R.id.device_lock_title)).check(doesNotExist()); + ApplicationTestUtils.waitForActivityState(mSyncConsentActivity, Stage.DESTROYED); + } + + @Test + @LargeTest + @DisableFeatures({ChromeFeatureList.TANGIBLE_SYNC}) + public void testAutomotiveDevice_deviceLockRefused_syncRefused() throws IOException { + mAutoTestRule.setIsAutomotive(true); + CoreAccountInfo accountInfo = + mSigninTestRule.addAccount(AccountManagerTestRule.TEST_ACCOUNT_EMAIL); + mSyncConsentActivity = ActivityTestUtils.waitForActivity( + InstrumentationRegistry.getInstrumentation(), SyncConsentActivity.class, () -> { + SyncConsentActivityLauncherImpl.get().launchActivityForPromoDefaultFlow( + mChromeActivityTestRule.getActivity(), + SigninAccessPoint.BOOKMARK_MANAGER, accountInfo.getEmail()); + }); + + // Should display the sync page. + onView(withText(R.string.signin_accept_button)).check(matches(isDisplayed())); + onView(withText(R.string.signin_accept_button)).perform(click()); + + // Accepting the sync on an automotive device should take the user to the device lock page. + onView(withId(R.id.device_lock_title)).check(matches(isDisplayed())); + onView(withText(R.string.signin_accept_button)).check(doesNotExist()); + + // Mimic a refusal of the device lock. + SyncConsentFragment syncConsentFragment = + (SyncConsentFragment) mSyncConsentActivity.getSupportFragmentManager() + .findFragmentById(R.id.fragment_container); + assertNotNull("The SyncConsentActivity should contain the SyncConsentFragment!", + syncConsentFragment); + TestThreadUtils.runOnUiThreadBlocking(() -> { + syncConsentFragment.onDeviceLockRefused(); + assertFalse(syncConsentFragment.getDeviceLockReadyForTesting()); + }); + + // Check that the user is not consented to sync and the activity has finished. + CriteriaHelper.pollUiThread(() -> { + return !IdentityServicesProvider.get() + .getSigninManager(Profile.getLastUsedRegularProfile()) + .getIdentityManager() + .hasPrimaryAccount(ConsentLevel.SYNC); + }); + onView(withId(R.id.device_lock_title)).check(doesNotExist()); + ApplicationTestUtils.waitForActivityState(mSyncConsentActivity, Stage.DESTROYED); + } + private void launchActivityWithFragment(Fragment fragment) { mActivityTestRule.launchActivity(null); TestThreadUtils.runOnUiThreadBlocking(() -> {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncErrorCardPreferenceTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncErrorCardPreferenceTest.java index 32104422..2da05f6 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncErrorCardPreferenceTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncErrorCardPreferenceTest.java
@@ -23,7 +23,6 @@ import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.Feature; -import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.night_mode.ChromeNightModeTestUtils; import org.chromium.chrome.browser.settings.SettingsActivityTestRule; @@ -33,8 +32,6 @@ import org.chromium.chrome.test.ChromeTabbedActivityTestRule; import org.chromium.chrome.test.R; import org.chromium.chrome.test.util.ChromeRenderTestRule; -import org.chromium.chrome.test.util.browser.Features.DisableFeatures; -import org.chromium.chrome.test.util.browser.Features.EnableFeatures; import org.chromium.chrome.test.util.browser.signin.SigninTestRule; import org.chromium.components.signin.base.GoogleServiceAuthError; import org.chromium.components.signin.identitymanager.AccountInfoServiceProvider; @@ -109,7 +106,6 @@ @Test @LargeTest @Feature("RenderTest") - @EnableFeatures(ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_ERROR_MESSAGES) @ParameterAnnotations.UseMethodParameter(NightModeTestUtils.NightModeParams.class) public void testSyncErrorCardForAuthErrorWithUpmEnabled(boolean nightModeEnabled) throws Exception { @@ -129,26 +125,6 @@ @Test @LargeTest @Feature("RenderTest") - @DisableFeatures(ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_ERROR_MESSAGES) - @ParameterAnnotations.UseMethodParameter(NightModeTestUtils.NightModeParams.class) - public void testSyncErrorCardForAuthErrorWithUpmDisabled(boolean nightModeEnabled) - throws Exception { - mFakeSyncServiceImpl.setAuthError(GoogleServiceAuthError.State.INVALID_GAIA_CREDENTIALS); - mSigninTestRule.addTestAccountThenSigninAndEnableSync(mFakeSyncServiceImpl); - TestThreadUtils.runOnUiThreadBlocking( - () - -> Assert.assertEquals("AUTH_ERROR SyncError should be set", - SyncSettingsUtils.SyncError.AUTH_ERROR, - SyncSettingsUtils.getSyncError())); - - mSettingsActivityTestRule.startSettingsActivity(); - mRenderTestRule.render( - getPersonalizedSyncPromoView(), "sync_error_card_auth_error_with_new_title"); - } - - @Test - @LargeTest - @Feature("RenderTest") @ParameterAnnotations.UseMethodParameter(NightModeTestUtils.NightModeParams.class) public void testSyncErrorCardForClientOutOfDate(boolean nightModeEnabled) throws Exception { mFakeSyncServiceImpl.setRequiresClientUpgrade(true);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ui/SyncErrorMessageTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ui/SyncErrorMessageTest.java index 1e48a08..9b04e667 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ui/SyncErrorMessageTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ui/SyncErrorMessageTest.java
@@ -42,7 +42,6 @@ import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.R; import org.chromium.chrome.test.util.ChromeRenderTestRule; -import org.chromium.chrome.test.util.browser.Features.DisableFeatures; import org.chromium.chrome.test.util.browser.Features.EnableFeatures; import org.chromium.chrome.test.util.browser.sync.SyncTestUtil; import org.chromium.components.embedder_support.util.UrlConstants; @@ -202,22 +201,6 @@ @Test @LargeTest @Feature("RenderTest") - @DisableFeatures({ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_ERROR_MESSAGES}) - public void testSyncErrorMessageForAuthErrorView() throws IOException { - SyncErrorMessage.setMessageDispatcherForTesting(null); - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - mFakeSyncServiceImpl.setAuthError(GoogleServiceAuthError.State.INVALID_GAIA_CREDENTIALS); - mSyncTestRule.loadUrl(UrlConstants.VERSION_URL); - ViewGroup view = mSyncTestRule.getActivity().findViewById(R.id.message_container); - // Wait until the message ui is shown. - CriteriaHelper.pollUiThread(() -> Criteria.checkThat(view.getChildCount(), Matchers.is(1))); - mRenderTestRule.render(view, "sync_error_message_auth_error"); - } - - @Test - @LargeTest - @Feature("RenderTest") - @EnableFeatures({ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_ERROR_MESSAGES}) public void testSyncErrorMessageForAuthErrorViewModern() throws IOException { SyncErrorMessage.setMessageDispatcherForTesting(null); mSyncTestRule.setUpAccountAndEnableSyncForTesting();
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/autofill/settings/AutofillVirtualCardEnrollmentDialogTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/autofill/settings/AutofillVirtualCardEnrollmentDialogTest.java index 32eedb6..418db4f 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/autofill/settings/AutofillVirtualCardEnrollmentDialogTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/autofill/settings/AutofillVirtualCardEnrollmentDialogTest.java
@@ -21,6 +21,7 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TestRule; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; @@ -32,6 +33,8 @@ import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeStringConstants; import org.chromium.chrome.browser.autofill.LegalMessageLine; +import org.chromium.chrome.test.util.browser.Features; +import org.chromium.components.autofill.AutofillFeatures; import org.chromium.components.autofill.VirtualCardEnrollmentLinkType; import org.chromium.ui.modaldialog.DialogDismissalCause; import org.chromium.ui.modaldialog.ModalDialogManager.ModalDialogType; @@ -45,6 +48,7 @@ /** Unit tests for {@link AutofillVirtualCardEnrollmentDialog}. */ @RunWith(BaseRobolectricTestRunner.class) +@Features.EnableFeatures({AutofillFeatures.AUTOFILL_ENABLE_NEW_CARD_ART_AND_NETWORK_IMAGES}) public class AutofillVirtualCardEnrollmentDialogTest { private static final String LEGAL_MESSAGE_URL = "http://www.google.com"; private static final String ACCEPT_BUTTON_TEXT = "Yes"; @@ -53,6 +57,9 @@ @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule(); + @Rule + public TestRule mProcessor = new Features.JUnitProcessor(); + @Mock private Callback<Integer> mResultHandlerMock; @Mock
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediatorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediatorTest.java index 2af82b2..dbef902 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediatorTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/bookmarks/BookmarkToolbarMediatorTest.java
@@ -21,6 +21,7 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TestRule; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; @@ -40,7 +41,11 @@ import org.chromium.chrome.browser.app.bookmarks.BookmarkEditActivity; import org.chromium.chrome.browser.app.bookmarks.BookmarkFolderSelectActivity; import org.chromium.chrome.browser.bookmarks.BookmarkUiPrefs.BookmarkRowDisplayPref; +import org.chromium.chrome.browser.bookmarks.BookmarkUiPrefs.BookmarkRowSortOrder; import org.chromium.chrome.browser.bookmarks.BookmarkUiState.BookmarkUiMode; +import org.chromium.chrome.browser.flags.ChromeFeatureList; +import org.chromium.chrome.test.util.browser.Features; +import org.chromium.chrome.test.util.browser.Features.EnableFeatures; import org.chromium.components.bookmarks.BookmarkId; import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.browser_ui.widget.dragreorder.DragReorderableRecyclerViewAdapter; @@ -59,10 +64,12 @@ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE) @LooperMode(LooperMode.Mode.LEGACY) +@EnableFeatures(ChromeFeatureList.ANDROID_IMPROVED_BOOKMARKS) public class BookmarkToolbarMediatorTest { @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule(); - + @Rule + public TestRule mProcessor = new Features.JUnitProcessor(); @Rule public ActivityScenarioRule<TestActivity> mActivityScenarios = new ActivityScenarioRule<>(TestActivity.class); @@ -91,7 +98,7 @@ BookmarkToolbarMediator mMediator; PropertyModel mModel; - OneshotSupplierImpl<BookmarkDelegate> mBookmarkDelegateSupplier = new OneshotSupplierImpl<>(); + OneshotSupplierImpl<BookmarkDelegate> mBookmarkDelegateSupplier; @Before public void setUp() { @@ -104,6 +111,10 @@ doReturn(mBookmarkItem).when(mBookmarkModel).getBookmarkById(any()); doReturn(mBookmarkId).when(mBookmarkItem).getId(); + initModelAndMediator(); + } + + private void initModelAndMediator() { mModel = new PropertyModel.Builder(BookmarkToolbarProperties.ALL_KEYS) .with(BookmarkToolbarProperties.BOOKMARK_MODEL, mBookmarkModel) .with(BookmarkToolbarProperties.BOOKMARK_OPENER, mBookmarkOpener) @@ -115,7 +126,7 @@ mOpenSearchUiRunnable) .with(BookmarkToolbarProperties.OPEN_FOLDER_CALLBACK, mOpenFolderCallback) .build(); - + mBookmarkDelegateSupplier = new OneshotSupplierImpl<>(); mMediator = new BookmarkToolbarMediator(mContext, mModel, mDragReorderableRecyclerViewAdapter, mBookmarkDelegateSupplier, mSelectionDelegate, mBookmarkModel, mBookmarkOpener, mBookmarkUiPrefs); @@ -336,4 +347,72 @@ R.id.compact_view, mModel.get(BookmarkToolbarProperties.CHECKED_VIEW_MENU_ID)); verify(mBookmarkUiPrefs).setBookmarkRowDisplayPref(BookmarkRowDisplayPref.COMPACT); } + + @Test + public void testInitialization_viewOptions() { + doReturn(BookmarkRowDisplayPref.COMPACT).when(mBookmarkUiPrefs).getBookmarkRowDisplayPref(); + initModelAndMediator(); + Assert.assertEquals( + R.id.compact_view, mModel.get(BookmarkToolbarProperties.CHECKED_VIEW_MENU_ID)); + + doReturn(BookmarkRowDisplayPref.VISUAL).when(mBookmarkUiPrefs).getBookmarkRowDisplayPref(); + initModelAndMediator(); + Assert.assertEquals( + R.id.visual_view, mModel.get(BookmarkToolbarProperties.CHECKED_VIEW_MENU_ID)); + } + + @Test + public void testOnMenuItemClick_sortOrder() { + Assert.assertTrue(mMediator.onMenuIdClick(R.id.sort_by_newest)); + Assert.assertEquals( + R.id.sort_by_newest, mModel.get(BookmarkToolbarProperties.CHECKED_SORT_MENU_ID)); + verify(mBookmarkUiPrefs) + .setBookmarkRowSortOrder(BookmarkRowSortOrder.REVERSE_CHRONOLOGICAL); + + Assert.assertTrue(mMediator.onMenuIdClick(R.id.sort_by_oldest)); + Assert.assertEquals( + R.id.sort_by_oldest, mModel.get(BookmarkToolbarProperties.CHECKED_SORT_MENU_ID)); + verify(mBookmarkUiPrefs).setBookmarkRowSortOrder(BookmarkRowSortOrder.CHRONOLOGICAL); + + Assert.assertTrue(mMediator.onMenuIdClick(R.id.sort_by_alpha)); + Assert.assertEquals( + R.id.sort_by_alpha, mModel.get(BookmarkToolbarProperties.CHECKED_SORT_MENU_ID)); + verify(mBookmarkUiPrefs).setBookmarkRowSortOrder(BookmarkRowSortOrder.ALPHABETICAL); + + Assert.assertTrue(mMediator.onMenuIdClick(R.id.sort_by_reverse_alpha)); + Assert.assertEquals(R.id.sort_by_reverse_alpha, + mModel.get(BookmarkToolbarProperties.CHECKED_SORT_MENU_ID)); + verify(mBookmarkUiPrefs).setBookmarkRowSortOrder(BookmarkRowSortOrder.REVERSE_ALPHABETICAL); + } + + @Test + public void testInitialization_sortOrder() { + doReturn(BookmarkRowSortOrder.REVERSE_CHRONOLOGICAL) + .when(mBookmarkUiPrefs) + .getBookmarkRowSortOrder(); + initModelAndMediator(); + Assert.assertEquals( + R.id.sort_by_newest, mModel.get(BookmarkToolbarProperties.CHECKED_SORT_MENU_ID)); + + doReturn(BookmarkRowSortOrder.CHRONOLOGICAL) + .when(mBookmarkUiPrefs) + .getBookmarkRowSortOrder(); + initModelAndMediator(); + Assert.assertEquals( + R.id.sort_by_oldest, mModel.get(BookmarkToolbarProperties.CHECKED_SORT_MENU_ID)); + + doReturn(BookmarkRowSortOrder.ALPHABETICAL) + .when(mBookmarkUiPrefs) + .getBookmarkRowSortOrder(); + initModelAndMediator(); + Assert.assertEquals( + R.id.sort_by_alpha, mModel.get(BookmarkToolbarProperties.CHECKED_SORT_MENU_ID)); + + doReturn(BookmarkRowSortOrder.REVERSE_ALPHABETICAL) + .when(mBookmarkUiPrefs) + .getBookmarkRowSortOrder(); + initModelAndMediator(); + Assert.assertEquals(R.id.sort_by_reverse_alpha, + mModel.get(BookmarkToolbarProperties.CHECKED_SORT_MENU_ID)); + } }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/bookmarks/BookmarkUiPrefsTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/bookmarks/BookmarkUiPrefsTest.java index 98f0b72..9d7a2e1 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/bookmarks/BookmarkUiPrefsTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/bookmarks/BookmarkUiPrefsTest.java
@@ -23,6 +23,7 @@ import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.util.Batch; import org.chromium.chrome.browser.bookmarks.BookmarkUiPrefs.BookmarkRowDisplayPref; +import org.chromium.chrome.browser.bookmarks.BookmarkUiPrefs.BookmarkRowSortOrder; import org.chromium.chrome.browser.commerce.ShoppingFeatures; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; @@ -110,4 +111,24 @@ mBookmarkUiPrefs.setBookmarkRowDisplayPref(BookmarkRowDisplayPref.COMPACT); verifyNoInteractions(mObserver); } + + @Test + public void testSortOrder() { + // Default should be REVERSE_CHRONOLOGICAL. + Assert.assertEquals(BookmarkRowSortOrder.REVERSE_CHRONOLOGICAL, + mBookmarkUiPrefs.getBookmarkRowSortOrder()); + + mBookmarkUiPrefs.addObserver(mObserver); + mBookmarkUiPrefs.setBookmarkRowSortOrder(BookmarkRowSortOrder.ALPHABETICAL); + verify(mObserver).onBookmarkRowSortOrderChanged(BookmarkRowSortOrder.ALPHABETICAL); + Assert.assertEquals( + BookmarkRowSortOrder.ALPHABETICAL, mBookmarkUiPrefs.getBookmarkRowSortOrder()); + + reset(mObserver); + mBookmarkUiPrefs.removeObserver(mObserver); + mBookmarkUiPrefs.setBookmarkRowSortOrder(BookmarkRowSortOrder.CHRONOLOGICAL); + verifyNoInteractions(mObserver); + Assert.assertEquals( + BookmarkRowSortOrder.CHRONOLOGICAL, mBookmarkUiPrefs.getBookmarkRowSortOrder()); + } }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/gsa/GSAStateUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/gsa/GSAStateUnitTest.java index d2259ee9..b72b647a 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/gsa/GSAStateUnitTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/gsa/GSAStateUnitTest.java
@@ -46,11 +46,7 @@ pm.addActivityIfNotPresent(componentName); IntentFilter intentFilter = new IntentFilter(Intent.ACTION_SEARCH); intentFilter.addCategory(Intent.CATEGORY_DEFAULT); - try { - pm.addIntentFilterForActivity(componentName, intentFilter); - } catch (NameNotFoundException e) { - throw new RuntimeException(e); - } + pm.addIntentFilterForActivity(componentName, intentFilter); } }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/settings/SettingsActivityUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/settings/SettingsActivityUnitTest.java index ccabe972..0c2335a1 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/settings/SettingsActivityUnitTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/settings/SettingsActivityUnitTest.java
@@ -30,17 +30,17 @@ import org.chromium.base.ContextUtils; import org.chromium.base.test.BaseRobolectricTestRunner; -import org.chromium.chrome.browser.flags.CachedFeatureFlags; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.init.ChromeBrowserInitializer; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.ProfileManagerUtils; import org.chromium.chrome.browser.settings.SettingsActivityUnitTest.ShadowProfileManagerUtils; +import org.chromium.chrome.test.util.browser.Features; +import org.chromium.chrome.test.util.browser.Features.EnableFeatures; import org.chromium.components.browser_ui.settings.CustomDividerFragment; import org.chromium.components.browser_ui.settings.PaddedDividerItemDecoration; import org.chromium.content_public.browser.test.util.TestThreadUtils; -import java.util.Map; import java.util.concurrent.TimeoutException; /** @@ -57,6 +57,8 @@ } @Rule + public Features.JUnitProcessor featuresRule = new Features.JUnitProcessor(); + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); private ActivityScenario<SettingsActivity> mActivityScenario; @@ -93,9 +95,8 @@ } @Test + @EnableFeatures(ChromeFeatureList.BACK_GESTURE_REFACTOR_ACTIVITY) public void testBackPress() throws TimeoutException { - CachedFeatureFlags.setFeaturesForTesting( - Map.of(ChromeFeatureList.BACK_GESTURE_REFACTOR_ACTIVITY, true)); launchSettingsActivity(TestSettingsFragment.class.getName()); assertTrue("SettingsActivity is using a wrong fragment.", mSettingsActivity.getMainFragment() instanceof TestSettingsFragment);
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/sync/ui/SyncErrorMessageImpressionTrackerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/sync/ui/SyncErrorMessageImpressionTrackerTest.java index 35ec806c..79023fac 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/sync/ui/SyncErrorMessageImpressionTrackerTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/sync/ui/SyncErrorMessageImpressionTrackerTest.java
@@ -22,10 +22,7 @@ import org.chromium.base.TimeUtils; import org.chromium.base.test.BaseRobolectricTestRunner; 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.JniMocker; -import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; @@ -34,9 +31,7 @@ import org.chromium.components.user_prefs.UserPrefs; import org.chromium.components.user_prefs.UserPrefsJni; -/** - * Unit tests for SyncErrorMessageImpressionTracker. - * */ +/** Unit tests for SyncErrorMessageImpressionTracker. */ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE) public class SyncErrorMessageImpressionTrackerTest { @@ -76,29 +71,6 @@ } @Test - @DisableFeatures(ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_ERROR_MESSAGES) - public void testNotEnoughTimeSinceLastSyncErrorUINoPwm() { - final long timeOfFirstSyncMessage = TimeUtils.currentTimeMillis(); - mSharedPrefsManager.writeLong( - ChromePreferenceKeys.SYNC_ERROR_MESSAGE_SHOWN_AT_TIME, timeOfFirstSyncMessage); - mFakeTimeTestRule.advanceMillis( - SyncErrorMessageImpressionTracker.MINIMAL_DURATION_BETWEEN_UI_MS); - assertFalse(SyncErrorMessageImpressionTracker.canShowNow()); - } - - @Test - @DisableFeatures(ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_ERROR_MESSAGES) - public void testEnoughTimeSinceLastSyncErrorUINoPwm() { - final long timeOfFirstSyncMessage = TimeUtils.currentTimeMillis(); - mSharedPrefsManager.writeLong( - ChromePreferenceKeys.SYNC_ERROR_MESSAGE_SHOWN_AT_TIME, timeOfFirstSyncMessage); - mFakeTimeTestRule.advanceMillis( - SyncErrorMessageImpressionTracker.MINIMAL_DURATION_BETWEEN_UI_MS + 1); - assertTrue(SyncErrorMessageImpressionTracker.canShowNow()); - } - - @Test - @EnableFeatures(ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_ERROR_MESSAGES) public void testNotEnoughTimeSinceLastSyncErrorUI() { final long timeOfFirstSyncMessage = TimeUtils.currentTimeMillis(); mSharedPrefsManager.writeLong( @@ -117,7 +89,6 @@ } @Test - @EnableFeatures(ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_ERROR_MESSAGES) public void testNotEnoughTimeSinceLastPwmUI() { final long timeOfFirstSyncMessage = TimeUtils.currentTimeMillis(); mSharedPrefsManager.writeLong( @@ -136,7 +107,6 @@ } @Test - @EnableFeatures(ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_ERROR_MESSAGES) public void testEnoughTimeSinceBothUis() { final long timeOfFirstSyncMessage = TimeUtils.currentTimeMillis(); mSharedPrefsManager.writeLong(
diff --git a/chrome/android/modules/stack_unwinder/internal/java/src/org/chromium/chrome/modules/stack_unwinder/StackUnwinderModuleContentsImpl.java b/chrome/android/modules/stack_unwinder/internal/java/src/org/chromium/chrome/modules/stack_unwinder/StackUnwinderModuleContentsImpl.java index fb22c6a..09682697 100644 --- a/chrome/android/modules/stack_unwinder/internal/java/src/org/chromium/chrome/modules/stack_unwinder/StackUnwinderModuleContentsImpl.java +++ b/chrome/android/modules/stack_unwinder/internal/java/src/org/chromium/chrome/modules/stack_unwinder/StackUnwinderModuleContentsImpl.java
@@ -5,12 +5,10 @@ package org.chromium.chrome.modules.stack_unwinder; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; /** * Provides access to the stack unwinder native code functions within the dynamic feature module. */ -@MainDex public class StackUnwinderModuleContentsImpl implements StackUnwinderModuleContents { /** * Returns the pointer to the CreateMemoryRegionsMap native function within the module, encoded
diff --git a/chrome/android/profiles/arm.newest.txt b/chrome/android/profiles/arm.newest.txt index ab0b9af..7fa64eb 100644 --- a/chrome/android/profiles/arm.newest.txt +++ b/chrome/android/profiles/arm.newest.txt
@@ -1 +1 @@ -chromeos-chrome-arm-115.0.5757.0_rc-r1-merged.afdo.bz2 +chromeos-chrome-arm-115.0.5758.0_rc-r1-merged.afdo.bz2
diff --git a/chrome/android/profiles/newest.txt b/chrome/android/profiles/newest.txt index b7e5578..d5aa863 100644 --- a/chrome/android/profiles/newest.txt +++ b/chrome/android/profiles/newest.txt
@@ -1 +1 @@ -chromeos-chrome-amd64-115.0.5755.0_rc-r1-merged.afdo.bz2 +chromeos-chrome-amd64-115.0.5758.0_rc-r1-merged.afdo.bz2
diff --git a/chrome/app/chromeos_strings.grdp b/chrome/app/chromeos_strings.grdp index c7d6d48..df79435 100644 --- a/chrome/app/chromeos_strings.grdp +++ b/chrome/app/chromeos_strings.grdp
@@ -3400,6 +3400,9 @@ <message name="IDS_NETWORK_UI_RESET_EUICC_LABEL" desc="Label and button text for section of the debug networking page which allows developers and QA testers to reset Euicc."> Reset eSIM </message> + <message name="IDS_NETWORK_UI_RESET_APN_MIGRATOR_LABEL" desc="Label and button text for section of the debug networking page which allows developers and QA testers to reset ApnMigrator."> + Reset ApnMigrator + </message> <message name="IDS_NETWORK_UI_ADD_NEW_WIFI_LABEL" desc="Label for section dealing with showing the 'Add new Wi-Fi network' dialog."> New Wi-Fi Network Dialog </message>
diff --git a/chrome/app/chromeos_strings_grdp/IDS_NETWORK_UI_RESET_APN_MIGRATOR_LABEL.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_NETWORK_UI_RESET_APN_MIGRATOR_LABEL.png.sha1 new file mode 100644 index 0000000..9d365e6 --- /dev/null +++ b/chrome/app/chromeos_strings_grdp/IDS_NETWORK_UI_RESET_APN_MIGRATOR_LABEL.png.sha1
@@ -0,0 +1 @@ +e5fe5270ac2fa72a01edc510118d8be59633e275 \ No newline at end of file
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 3827b0f..b87b68f 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -7534,14 +7534,20 @@ <message name="IDS_SIDE_PANEL_COMPANION_TITLE" desc="The name of the companion feature in the side panel combo box."> Google </message> + <message name="IDS_SIDE_PANEL_COMPANION_TOOLBAR_TOOLTIP" desc="The tooltip for the companion feature toolbar button."> + Google Search side panel + </message> <message name="IDS_SIDE_PANEL_CUSTOMIZE_CHROME_TITLE" desc="The name of the Customize Chrome feature in the side panel combo box."> Customize Chrome </message> <message name="IDS_SIDE_PANEL_TOOLBAR_BUTTON_CXMENU_UNPIN" desc="The label of the context menu item for unpinning a side panel toolbar button."> Unpin </message> - <message name="IDS_SIDE_PANEL_TOOLBAR_BUTTON_CXMENU_PIN" desc="The label of the context menu item for pinning a side panel toolbar button."> - Pin + <message name="IDS_SIDE_PANEL_HEADER_UNPIN_BUTTON_TOOLTIP" desc="The tooltip for unpinning a side panel toolbar button."> + Unpin from toolbar + </message> + <message name="IDS_SIDE_PANEL_HEADER_PIN_BUTTON_TOOLTIP" desc="The tooltip for pinning a side panel toolbar button."> + Pin to toolbar </message> <!-- Bookmarks strings --> @@ -7878,6 +7884,9 @@ <message name="IDS_TOOLTIP_SIDE_PANEL_HIDE" desc="The tooltip for the side panel button, when open"> Hide side panel </message> + <message name="IDS_TOOLTIP_SIDE_PANEL" desc="The tooltip for the side panel button"> + Side panel + </message> <if expr="is_macosx"> <message name="IDS_TOOLTIP_CLOSE_TAB" desc="The tooltip for the close tab button"> Close
diff --git a/chrome/app/generated_resources_grd/IDS_SIDE_PANEL_TOOLBAR_BUTTON_CXMENU_PIN.png.sha1 b/chrome/app/generated_resources_grd/IDS_SIDE_PANEL_TOOLBAR_BUTTON_CXMENU_PIN.png.sha1 deleted file mode 100644 index faf37f9a..0000000 --- a/chrome/app/generated_resources_grd/IDS_SIDE_PANEL_TOOLBAR_BUTTON_CXMENU_PIN.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -7ec2feb11fdba17c5bc24e23469fb4c31936ede5 \ No newline at end of file
diff --git a/chrome/app/vector_icons/BUILD.gn b/chrome/app/vector_icons/BUILD.gn index 5e0653e..eb275cc 100644 --- a/chrome/app/vector_icons/BUILD.gn +++ b/chrome/app/vector_icons/BUILD.gn
@@ -145,9 +145,11 @@ "read_later_add.icon", "reader_mode.icon", "reader_mode_disabled.icon", + "release_alert.icon", "reload_touch.icon", "remove.icon", "remove_box.icon", + "report.icon", "resize_handle.icon", "sad_tab.icon", "safety_check.icon",
diff --git a/chrome/app/vector_icons/release_alert.icon b/chrome/app/vector_icons/release_alert.icon new file mode 100644 index 0000000..22b0e346 --- /dev/null +++ b/chrome/app/vector_icons/release_alert.icon
@@ -0,0 +1,64 @@ +// 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. + +CANVAS_DIMENSIONS, 16, +R_MOVE_TO, 5.73f, 14.97f, +R_LINE_TO, -1.28f, -2.12f, +R_LINE_TO, -2.41f, -0.54f, +R_LINE_TO, 0.23f, -2.46f, +LINE_TO, 0.63f, 8, +R_LINE_TO, 1.64f, -1.84f, +R_LINE_TO, -0.23f, -2.46f, +R_LINE_TO, 2.41f, -0.54f, +R_LINE_TO, 1.28f, -2.12f, +LINE_TO, 8, 2, +R_LINE_TO, 2.27f, -0.98f, +R_LINE_TO, 1.28f, 2.13f, +R_LINE_TO, 2.41f, 0.54f, +R_LINE_TO, -0.23f, 2.46f, +LINE_TO, 15.38f, 8, +R_LINE_TO, -1.64f, 1.84f, +R_LINE_TO, 0.23f, 2.46f, +R_LINE_TO, -2.41f, 0.54f, +R_LINE_TO, -1.28f, 2.13f, +LINE_TO, 8, 14, +CLOSE, +R_MOVE_TO, 0.56f, -1.75f, +LINE_TO, 8, 12.5f, +R_LINE_TO, 1.72f, 0.73f, +R_LINE_TO, 0.95f, -1.6f, +R_LINE_TO, 1.81f, -0.41f, +R_LINE_TO, -0.16f, -1.84f, +LINE_TO, 13.53f, 8, +R_LINE_TO, -1.21f, -1.38f, +R_LINE_TO, 0.16f, -1.84f, +R_LINE_TO, -1.81f, -0.41f, +R_LINE_TO, -0.95f, -1.6f, +LINE_TO, 8, 3.5f, +R_LINE_TO, -1.71f, -0.73f, +R_LINE_TO, -0.95f, 1.6f, +R_LINE_TO, -1.81f, 0.39f, +R_LINE_TO, 0.16f, 1.85f, +LINE_TO, 2.47f, 8, +R_LINE_TO, 1.23f, 1.38f, +R_LINE_TO, -0.18f, 1.85f, +R_LINE_TO, 1.81f, 0.41f, +CLOSE, +MOVE_TO, 8, 8, +CLOSE, +R_MOVE_TO, 0, 3.34f, +R_CUBIC_TO, 0.2f, 0, 0.37f, -0.07f, 0.51f, -0.21f, +R_ARC_TO, 0.69f, 0.69f, 0, 0, 0, 0.21f, -0.5f, +R_ARC_TO, 0.71f, 0.71f, 0, 0, 0, -0.21f, -0.51f, +ARC_TO, 0.69f, 0.69f, 0, 0, 0, 8, 9.9f, +R_ARC_TO, 0.69f, 0.69f, 0, 0, 0, -0.51f, 0.21f, +R_ARC_TO, 0.71f, 0.71f, 0, 0, 0, -0.21f, 0.51f, +R_CUBIC_TO, 0, 0.2f, 0.07f, 0.37f, 0.21f, 0.5f, +R_CUBIC_TO, 0.14f, 0.14f, 0.31f, 0.21f, 0.51f, 0.21f, +CLOSE, +R_MOVE_TO, -0.69f, -2.53f, +H_LINE_TO, 8.69f, +V_LINE_TO, 4.72f, +H_LINE_TO, 7.31f, +CLOSE
diff --git a/chrome/app/vector_icons/report.icon b/chrome/app/vector_icons/report.icon new file mode 100644 index 0000000..e6246ae4 --- /dev/null +++ b/chrome/app/vector_icons/report.icon
@@ -0,0 +1,38 @@ +// 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. + +CANVAS_DIMENSIONS, 16, +MOVE_TO, 8, 11.09f, +R_CUBIC_TO, 0.18f, 0, 0.34f, -0.06f, 0.47f, -0.19f, +R_ARC_TO, 0.63f, 0.63f, 0, 0, 0, 0.19f, -0.46f, +R_ARC_TO, 0.64f, 0.64f, 0, 0, 0, -0.19f, -0.47f, +ARC_TO, 0.63f, 0.63f, 0, 0, 0, 8, 9.77f, +R_ARC_TO, 0.63f, 0.63f, 0, 0, 0, -0.47f, 0.2f, +R_ARC_TO, 0.64f, 0.64f, 0, 0, 0, -0.19f, 0.47f, +R_CUBIC_TO, 0, 0.18f, 0.06f, 0.34f, 0.19f, 0.46f, +ARC_TO, 0.64f, 0.64f, 0, 0, 0, 8, 11.09f, +CLOSE, +R_MOVE_TO, -0.63f, -2.18f, +R_H_LINE_TO, 1.27f, +V_LINE_TO, 4.73f, +H_LINE_TO, 7.37f, +CLOSE, +MOVE_TO, 5.63f, 13.73f, +R_LINE_TO, -3.36f, -3.38f, +V_LINE_TO, 5.63f, +R_LINE_TO, 3.36f, -3.36f, +R_H_LINE_TO, 4.75f, +R_LINE_TO, 3.36f, 3.36f, +R_V_LINE_TO, 4.75f, +R_LINE_TO, -3.38f, 3.36f, +CLOSE, +R_MOVE_TO, 0.57f, -1.38f, +R_H_LINE_TO, 3.59f, +R_LINE_TO, 2.56f, -2.56f, +V_LINE_TO, 6.2f, +R_LINE_TO, -2.57f, -2.56f, +H_LINE_TO, 6.2f, +LINE_TO, 3.65f, 6.2f, +R_V_LINE_TO, 3.59f, +CLOSE
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 7cc0bedc..2a68faf 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -487,6 +487,8 @@ "enterprise/connectors/interstitials/enterprise_warn_controller_client.h", "enterprise/connectors/interstitials/enterprise_warn_page.cc", "enterprise/connectors/interstitials/enterprise_warn_page.h", + "enterprise/reporting/legacy_tech/legacy_tech_report_policy_handler.cc", + "enterprise/reporting/legacy_tech/legacy_tech_report_policy_handler.h", "enterprise/reporting/prefs.cc", "enterprise/reporting/prefs.h", "enterprise/reporting/profile_report_generator_delegate_base.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index f0fe52f..aa3c201 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -3107,13 +3107,6 @@ std::size(kUpmAndroidEnableForAllUsers), nullptr}, }; -constexpr FeatureEntry::FeatureParam kIgnoreUPMAuthErrorMessageTimeouts[] = { - {"ignore_auth_error_message_timeouts", "true"}}; -constexpr FeatureEntry::FeatureVariation - kUnifiedPasswordManagerErrorMessagesVariations[] = { - {"Ignore timeouts", kIgnoreUPMAuthErrorMessageTimeouts, - std::size(kIgnoreUPMAuthErrorMessageTimeouts), nullptr}}; - #endif // BUILDFLAG(IS_ANDROID) #if !BUILDFLAG(IS_ANDROID) && BUILDFLAG(GOOGLE_CHROME_BRANDING) @@ -8221,7 +8214,7 @@ #if BUILDFLAG(ENABLE_PDF) #if !BUILDFLAG(IS_ANDROID) - // TODO(https://crbug.com/1278249): Add Windows once library supports it. + // TODO(https://crbug.com/1443341): Add Windows once library supports it. {"pdf-ocr", flag_descriptions::kPdfOcrName, flag_descriptions::kPdfOcrDescription, kOsMac | kOsLinux | kOsCrOS | kOsLacros, @@ -8679,15 +8672,6 @@ password_manager::features::kUnifiedPasswordManagerAndroid, kUnifiedPasswordManagerAndroidVariations, "UnifiedPasswordManagerAndroid")}, - - {"google-mobile-services-passwords-error-messages", - flag_descriptions::kUnifiedPasswordManagerErrorMessagesName, - flag_descriptions::kUnifiedPasswordManagerErrorMessagesDescription, - kOsAndroid, - FEATURE_WITH_PARAMS_VALUE_TYPE( - password_manager::features::kUnifiedPasswordManagerErrorMessages, - kUnifiedPasswordManagerErrorMessagesVariations, - "UnifiedPasswordManagerErrorMessages")}, #endif {"tab-search-fuzzy-search", flag_descriptions::kTabSearchFuzzySearchName, @@ -9045,7 +9029,7 @@ #endif #if !BUILDFLAG(IS_ANDROID) - // TODO(https://crbug.com/1278249): Add Windows once library supports it. + // TODO(https://crbug.com/1443349): Add Windows once library supports it. {"layout-extraction", flag_descriptions::kLayoutExtractionName, flag_descriptions::kLayoutExtractionDescription, kOsMac | kOsLinux | kOsCrOS | kOsLacros,
diff --git a/chrome/browser/accessibility/accessibility_extension_api_chromeos.cc b/chrome/browser/accessibility/accessibility_extension_api_chromeos.cc index 90859e1..3ff7c70 100644 --- a/chrome/browser/accessibility/accessibility_extension_api_chromeos.cc +++ b/chrome/browser/accessibility/accessibility_extension_api_chromeos.cc
@@ -335,10 +335,10 @@ ash::AcceleratorAction accelerator_action; switch (params->accelerator_action) { case accessibility_private::ACCELERATOR_ACTION_FOCUSPREVIOUSPANE: - accelerator_action = ash::FOCUS_PREVIOUS_PANE; + accelerator_action = ash::AcceleratorAction::kFocusPreviousPane; break; case accessibility_private::ACCELERATOR_ACTION_FOCUSNEXTPANE: - accelerator_action = ash::FOCUS_NEXT_PANE; + accelerator_action = ash::AcceleratorAction::kFocusNextPane; break; case accessibility_private::ACCELERATOR_ACTION_NONE: NOTREACHED();
diff --git a/chrome/browser/accessibility/ax_screen_ai_annotator.cc b/chrome/browser/accessibility/ax_screen_ai_annotator.cc index 1964155f..79cfa6b0 100644 --- a/chrome/browser/accessibility/ax_screen_ai_annotator.cc +++ b/chrome/browser/accessibility/ax_screen_ai_annotator.cc
@@ -92,7 +92,7 @@ base::TimeTicks start_time = base::TimeTicks::Now(); #if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) - // TODO(https://crbug.com/1278249): Need to run GrabViewSnapshot() in a + // TODO(https://crbug.com/1443349): Need to run GrabViewSnapshot() in a // thread that is not the main UI thread. base::SequencedTaskRunner::GetCurrentDefault()->PostTaskAndReplyWithResult( FROM_HERE, base::BindOnce(&GrabViewSnapshot, web_contents->GetWeakPtr()), @@ -137,7 +137,7 @@ VLOG(2) << base::StrCat({"AXScreenAIAnnotator received tree ids: parent: ", parent_tree_id.ToString().c_str(), ", ScreenAI: ", screen_ai_tree_id.ToString().c_str()}); - // TODO(https://crbug.com/1278249): Use! + // TODO(https://crbug.com/1443349): Use! NOTIMPLEMENTED(); }
diff --git a/chrome/browser/accessibility/screen_ai_service_browsertest.cc b/chrome/browser/accessibility/screen_ai_service_browsertest.cc index 963b66b..e362265c 100644 --- a/chrome/browser/accessibility/screen_ai_service_browsertest.cc +++ b/chrome/browser/accessibility/screen_ai_service_browsertest.cc
@@ -21,7 +21,7 @@ explicit MockAXScreenAIAnnotator(content::BrowserContext* context) : AXScreenAIAnnotator(context) {} - // TODO(https://1278249): Consider making Screen AI component available for + // TODO(crbug.com/1443345): Consider making Screen AI component available for // tests. The test should refrain from trying to bind to it while it is not // available. MOCK_METHOD(void, @@ -41,14 +41,14 @@ using ScreenAIServiceTest = InProcessBrowserTest; -// TODO(https://crbug.com/1278249): Test is disabled as it requires delayed +// TODO(crbug.com/1443345): Test is disabled as it requires delayed // connection to the service, but for PDF use case we need immediate connection // or adding extra boilerplate code to trigger it. Since PDF is the primary // goal, the test is disabled until the issue is fixed. IN_PROC_BROWSER_TEST_F(ScreenAIServiceTest, DISABLED_ScreenshotTest) { MockAXScreenAIAnnotator* annotator = new MockAXScreenAIAnnotator(browser()->profile()); - // TODO(https://crbug.com/1278249): Pass |annotator| to + // TODO(crbug.com/1443345): Pass |annotator| to // AXScreenAIAnnotatorFactory to be used for test. base::RunLoop run_loop; @@ -67,7 +67,7 @@ browser()->RunScreenAIAnnotator(); run_loop.Run(); - // TODO(https://crbug.com/1278249): Add a test that mocks + // TODO(crbug.com/1443345): Add a test that mocks // |OnScreenshotReceived| and returns the expected proto, and observe its // application on the accessibility tree(s). }
diff --git a/chrome/browser/ash/accessibility/spoken_feedback_app_list_browsertest.cc b/chrome/browser/ash/accessibility/spoken_feedback_app_list_browsertest.cc index 0644f11..ae7b2361 100644 --- a/chrome/browser/ash/accessibility/spoken_feedback_app_list_browsertest.cc +++ b/chrome/browser/ash/accessibility/spoken_feedback_app_list_browsertest.cc
@@ -205,7 +205,7 @@ int MoveToFirstTestApp() { // Focus the shelf. This selects the launcher button. sm_.Call([this]() { - EXPECT_TRUE(PerformAcceleratorAction(AcceleratorAction::FOCUS_SHELF)); + EXPECT_TRUE(PerformAcceleratorAction(AcceleratorAction::kFocusShelf)); }); sm_.ExpectSpeechPattern("Launcher"); sm_.ExpectSpeech("Button"); @@ -340,7 +340,7 @@ } else { // Focus the home button and press it to open the bubble launcher. sm_.Call([this]() { - EXPECT_TRUE(PerformAcceleratorAction(AcceleratorAction::FOCUS_SHELF)); + EXPECT_TRUE(PerformAcceleratorAction(AcceleratorAction::kFocusShelf)); }); sm_.ExpectSpeechPattern("Launcher"); sm_.ExpectSpeech("Button"); @@ -381,7 +381,7 @@ // Focus the shelf. This selects the launcher button. sm_.Call([this]() { - EXPECT_TRUE(PerformAcceleratorAction(AcceleratorAction::FOCUS_SHELF)); + EXPECT_TRUE(PerformAcceleratorAction(AcceleratorAction::kFocusShelf)); }); sm_.ExpectSpeechPattern("Launcher"); sm_.ExpectSpeech("Button"); @@ -420,7 +420,7 @@ // Focus the shelf. This selects the launcher button. sm_.Call([this]() { - EXPECT_TRUE(PerformAcceleratorAction(AcceleratorAction::FOCUS_SHELF)); + EXPECT_TRUE(PerformAcceleratorAction(AcceleratorAction::kFocusShelf)); }); sm_.ExpectSpeechPattern("Launcher"); sm_.ExpectSpeech("Button"); @@ -460,7 +460,7 @@ // Focus the shelf. This selects the launcher button. sm_.Call([this]() { - EXPECT_TRUE(PerformAcceleratorAction(AcceleratorAction::FOCUS_SHELF)); + EXPECT_TRUE(PerformAcceleratorAction(AcceleratorAction::kFocusShelf)); }); sm_.ExpectSpeechPattern("Launcher"); sm_.ExpectSpeech("Button"); @@ -541,7 +541,7 @@ // Focus the shelf. This selects the launcher button. sm_.Call([this]() { - EXPECT_TRUE(PerformAcceleratorAction(AcceleratorAction::FOCUS_SHELF)); + EXPECT_TRUE(PerformAcceleratorAction(AcceleratorAction::kFocusShelf)); }); sm_.ExpectSpeechPattern("Launcher"); sm_.ExpectSpeech("Button");
diff --git a/chrome/browser/ash/accessibility/spoken_feedback_browsertest.cc b/chrome/browser/ash/accessibility/spoken_feedback_browsertest.cc index 67aa2387..f718b0d 100644 --- a/chrome/browser/ash/accessibility/spoken_feedback_browsertest.cc +++ b/chrome/browser/ash/accessibility/spoken_feedback_browsertest.cc
@@ -387,7 +387,7 @@ // Press the accelerator that toggles the notification center. sm_.Call([this]() { EXPECT_TRUE(PerformAcceleratorAction( - AcceleratorAction::TOGGLE_MESSAGE_CENTER_BUBBLE)); + AcceleratorAction::kToggleMessageCenterBubble)); }); // Verify the spoken feedback text. @@ -398,7 +398,7 @@ sm_.Call([this]() { EXPECT_TRUE(PerformAcceleratorAction( - AcceleratorAction::TOGGLE_MESSAGE_CENTER_BUBBLE)); + AcceleratorAction::kToggleMessageCenterBubble)); }); sm_.ExpectSpeech( "Quick Settings, Press search plus left to access the notification " @@ -524,7 +524,7 @@ EnableChromeVox(); sm_.Call([this]() { - EXPECT_TRUE(PerformAcceleratorAction(AcceleratorAction::FOCUS_SHELF)); + EXPECT_TRUE(PerformAcceleratorAction(AcceleratorAction::kFocusShelf)); }); sm_.ExpectSpeechPattern("Launcher"); sm_.ExpectSpeech("Button"); @@ -601,7 +601,7 @@ // Focus on the shelf. sm_.Call( - [this]() { PerformAcceleratorAction(AcceleratorAction::FOCUS_SHELF); }); + [this]() { PerformAcceleratorAction(AcceleratorAction::kFocusShelf); }); sm_.ExpectSpeech("Launcher"); sm_.ExpectSpeech("Button"); sm_.ExpectSpeech("Shelf"); @@ -709,7 +709,7 @@ // Focus on the Shelf because voice text for focusing on Shelf is fixed. // Wait until voice announcements are finished. - EXPECT_TRUE(PerformAcceleratorAction(AcceleratorAction::FOCUS_SHELF)); + EXPECT_TRUE(PerformAcceleratorAction(AcceleratorAction::kFocusShelf)); }); sm_.ExpectSpeechPattern("Launcher"); @@ -751,7 +751,7 @@ // Focus on the shelf. sm_.Call( - [this]() { PerformAcceleratorAction(AcceleratorAction::FOCUS_SHELF); }); + [this]() { PerformAcceleratorAction(AcceleratorAction::kFocusShelf); }); sm_.ExpectSpeech("Launcher"); sm_.ExpectSpeech("Button"); sm_.ExpectSpeech("Shelf"); @@ -803,7 +803,7 @@ // Focus on the shelf. sm_.Call( - [this]() { PerformAcceleratorAction(AcceleratorAction::FOCUS_SHELF); }); + [this]() { PerformAcceleratorAction(AcceleratorAction::kFocusShelf); }); sm_.ExpectSpeech("Launcher"); sm_.ExpectSpeech("Button"); sm_.ExpectSpeech("Shelf"); @@ -891,7 +891,7 @@ // Focus on the shelf. sm_.Call( - [this]() { PerformAcceleratorAction(AcceleratorAction::FOCUS_SHELF); }); + [this]() { PerformAcceleratorAction(AcceleratorAction::kFocusShelf); }); sm_.ExpectSpeech("Launcher"); sm_.ExpectSpeech("Button"); sm_.ExpectSpeech("Shelf"); @@ -938,7 +938,7 @@ sm_.Call([this]() { EXPECT_TRUE( - PerformAcceleratorAction(AcceleratorAction::TOGGLE_SYSTEM_TRAY_BUBBLE)); + PerformAcceleratorAction(AcceleratorAction::kToggleSystemTrayBubble)); }); sm_.ExpectSpeech( "Quick Settings, Press search plus left to access the notification " @@ -953,7 +953,7 @@ EnableChromeVox(); sm_.Call([this]() { - (PerformAcceleratorAction(AcceleratorAction::TOGGLE_SYSTEM_TRAY_BUBBLE)); + (PerformAcceleratorAction(AcceleratorAction::kToggleSystemTrayBubble)); }); sm_.ExpectSpeech( "Quick Settings, Press search plus left to access the notification " @@ -1009,12 +1009,12 @@ EnableChromeVox(); sm_.Call([this]() { - (PerformAcceleratorAction(AcceleratorAction::BRIGHTNESS_UP)); + (PerformAcceleratorAction(AcceleratorAction::kBrightnessUp)); }); sm_.ExpectSpeechPattern("Brightness * percent"); sm_.Call([this]() { - (PerformAcceleratorAction(AcceleratorAction::BRIGHTNESS_DOWN)); + (PerformAcceleratorAction(AcceleratorAction::kBrightnessDown)); }); sm_.ExpectSpeechPattern("Brightness * percent"); @@ -1027,8 +1027,8 @@ sm_.Call([this]() { // Volume slider does not fire valueChanged event on first key press because // it has no widget. - PerformAcceleratorAction(AcceleratorAction::VOLUME_UP); - PerformAcceleratorAction(AcceleratorAction::VOLUME_UP); + PerformAcceleratorAction(AcceleratorAction::kVolumeUp); + PerformAcceleratorAction(AcceleratorAction::kVolumeUp); }); sm_.ExpectSpeechPattern("* percent*"); sm_.Replay(); @@ -1121,7 +1121,7 @@ sm_.ExpectSpeech("Click me"); sm_.Call([this]() { - (PerformAcceleratorAction(AcceleratorAction::TOGGLE_OVERVIEW)); + (PerformAcceleratorAction(AcceleratorAction::kToggleOverview)); }); sm_.ExpectSpeech( @@ -1171,7 +1171,7 @@ }); sm_.Call([this]() { - (PerformAcceleratorAction(AcceleratorAction::TOGGLE_OVERVIEW)); + (PerformAcceleratorAction(AcceleratorAction::kToggleOverview)); }); EnableChromeVox(); @@ -2186,7 +2186,7 @@ // Enter overview first. This is how we reach the desk templates UI. sm_.Call([this]() { - (PerformAcceleratorAction(AcceleratorAction::TOGGLE_OVERVIEW)); + (PerformAcceleratorAction(AcceleratorAction::kToggleOverview)); }); sm_.ExpectSpeech(
diff --git a/chrome/browser/ash/app_list/app_list_sort_browsertest.cc b/chrome/browser/ash/app_list/app_list_sort_browsertest.cc index 9c612dc..55a30089 100644 --- a/chrome/browser/ash/app_list/app_list_sort_browsertest.cc +++ b/chrome/browser/ash/app_list/app_list_sort_browsertest.cc
@@ -45,6 +45,7 @@ namespace { +using AcceleratorAction = ash::AcceleratorAction; using MenuType = ash::AppListTestApi::MenuType; using ReorderAnimationEndState = ash::AppListTestApi::ReorderAnimationEndState; @@ -183,7 +184,7 @@ // Shows the app list which is initially behind a window in tablet mode. ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); const int default_app_count = app_list_test_api_.GetTopListItemCount(); @@ -251,7 +252,7 @@ ash::ShellTestApi().SetTabletModeEnabledForTest(false); WaitForAppListTransitionAnimation(); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); base::HistogramTester histograms; @@ -278,7 +279,7 @@ ash::ShellTestApi().SetTabletModeEnabledForTest(false); WaitForAppListTransitionAnimation(); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); ReorderTopLevelAppsGridAndWaitForCompletion( ash::AppListSortOrder::kNameAlphabetical, MenuType::kAppListPageMenu); @@ -315,7 +316,7 @@ ash::ShellTestApi().SetTabletModeEnabledForTest(false); WaitForAppListTransitionAnimation(); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); // Move apps to one folder. @@ -343,7 +344,7 @@ ash::ShellTestApi().SetTabletModeEnabledForTest(false); WaitForAppListTransitionAnimation(); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); ReorderTopLevelAppsGridAndWaitForCompletion( @@ -368,7 +369,7 @@ ash::ShellTestApi().SetTabletModeEnabledForTest(false); WaitForAppListTransitionAnimation(); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); // Move apps to one folder. @@ -395,7 +396,7 @@ ash::ShellTestApi().SetTabletModeEnabledForTest(false); WaitForAppListTransitionAnimation(); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); // Move apps to one folder. @@ -419,7 +420,7 @@ ash::ShellTestApi().SetTabletModeEnabledForTest(false); WaitForAppListTransitionAnimation(); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); // Create an app list folder. @@ -458,7 +459,7 @@ ash::ShellTestApi().SetTabletModeEnabledForTest(false); WaitForAppListTransitionAnimation(); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); // Create an app list folder. @@ -507,7 +508,7 @@ SortUsingContextMenuOnFolderChildViewTablet) { ash::ShellTestApi().SetTabletModeEnabledForTest(true); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForAppListShowAnimation(/*is_bubble_window=*/false); // Create an app list folder. @@ -545,7 +546,7 @@ FolderNotClosedIfTemporarySortIsCommittedTablet) { ash::ShellTestApi().SetTabletModeEnabledForTest(true); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForAppListShowAnimation(/*is_bubble_window=*/false); // Create an app list folder. @@ -600,7 +601,7 @@ ash::ShellTestApi().SetTabletModeEnabledForTest(false); WaitForAppListTransitionAnimation(); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); // Verify the default app order. @@ -636,7 +637,7 @@ ash::ShellTestApi().SetTabletModeEnabledForTest(false); WaitForAppListTransitionAnimation(); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); // Verify the default app order. @@ -682,7 +683,7 @@ WaitForAppListTransitionAnimation(); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); // Verify the default app order. @@ -736,7 +737,7 @@ ash::ShellTestApi().SetTabletModeEnabledForTest(true); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForAppListShowAnimation(/*is_bubble_window=*/false); // Verify the default app order. @@ -789,7 +790,7 @@ WaitForAppListTransitionAnimation(); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); // Verify the default app order. @@ -814,7 +815,7 @@ ash::ShellTestApi().SetTabletModeEnabledForTest(true); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForAppListShowAnimation(/*is_bubble_window=*/false); EXPECT_EQ(ash::AppListToastType::kNone, app_list_test_api_.GetToastType()); EXPECT_EQ(GetAppIdsInOrdinalOrder(), @@ -825,7 +826,7 @@ ash::ShellTestApi().SetTabletModeEnabledForTest(false); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); EXPECT_EQ(ash::AppListToastType::kNone, app_list_test_api_.GetToastType()); @@ -838,7 +839,7 @@ ash::ShellTestApi().SetTabletModeEnabledForTest(true); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForAppListShowAnimation(/*is_bubble_window=*/false); // Verify the default app order. @@ -861,7 +862,7 @@ WaitForAppListTransitionAnimation(); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); EXPECT_EQ(ash::AppListToastType::kNone, app_list_test_api_.GetToastType()); @@ -872,7 +873,7 @@ // toast is now hidden. ash::ShellTestApi().SetTabletModeEnabledForTest(true); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForAppListShowAnimation(/*is_bubble_window=*/false); EXPECT_EQ(ash::AppListToastType::kNone, app_list_test_api_.GetToastType()); @@ -886,7 +887,7 @@ DISABLED_TransitionToTabletModeDuringFadeOutAnimation) { ash::ShellTestApi().SetTabletModeEnabledForTest(false); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); // Verify the default app order. @@ -902,7 +903,7 @@ &actual_state); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForAppListShowAnimation(/*is_bubble_window=*/false); // Verify that the reorder animation is aborted. @@ -932,7 +933,7 @@ ash::ShellTestApi().SetTabletModeEnabledForTest(true); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForAppListShowAnimation(/*is_bubble_window=*/false); // Verify the default app order. @@ -948,7 +949,7 @@ &actual_state); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); // Verify that the reorder animation is aborted. @@ -973,7 +974,7 @@ ash::ShellTestApi().SetTabletModeEnabledForTest(false); WaitForAppListTransitionAnimation(); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); // Verify the default app order. @@ -995,7 +996,7 @@ ash::ShellTestApi().SetTabletModeEnabledForTest(true); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForAppListShowAnimation(/*is_bubble_window=*/false); // Verify that the reorder animation is aborted. @@ -1020,7 +1021,7 @@ ash::ShellTestApi().SetTabletModeEnabledForTest(false); WaitForAppListTransitionAnimation(); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); // Verify the default app order. @@ -1055,7 +1056,7 @@ ash::ShellTestApi().SetTabletModeEnabledForTest(true); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForAppListShowAnimation(/*is_bubble_window=*/false); // Verify the default app order. @@ -1080,7 +1081,7 @@ EXPECT_NE(ReorderAnimationEndState::kFadeOutAborted, actual_state); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); // When switching out of the tablet mode, the tablet mode app list gets @@ -1111,7 +1112,7 @@ ash::ShellTestApi().SetTabletModeEnabledForTest(true); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForAppListShowAnimation(/*is_bubble_window=*/false); // Verify the default app order. @@ -1139,7 +1140,7 @@ EXPECT_EQ(ReorderAnimationEndState::kFadeInAborted, actual_state); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); // When switching out of the tablet mode, the tablet mode app list gets @@ -1161,7 +1162,7 @@ WaitForAppListTransitionAnimation(); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); // Verify the default app order. @@ -1199,7 +1200,7 @@ ash::ShellTestApi().SetTabletModeEnabledForTest(true); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForAppListShowAnimation(/*is_bubble_window=*/false); // Verify the default app order. @@ -1238,7 +1239,7 @@ WaitForAppListTransitionAnimation(); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); // Verify the default app order. @@ -1275,7 +1276,7 @@ ash::ShellTestApi().SetTabletModeEnabledForTest(true); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForAppListShowAnimation(/*is_bubble_window=*/false); // Verify the default app order. @@ -1311,7 +1312,7 @@ WaitForAppListTransitionAnimation(); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); ReorderTopLevelAppsGridAndWaitForCompletion( @@ -1447,7 +1448,7 @@ WaitForAppListTransitionAnimation(); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow(/*wait_for_opening_animation=*/true); ReorderTopLevelAppsGridAndWaitForCompletion( @@ -1524,7 +1525,7 @@ LoginUser(account_id1_); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); const bool is_in_tablet = GetParam(); ash::AppListTestApi app_list_test_api; if (is_in_tablet)
diff --git a/chrome/browser/ash/app_list/app_service/app_service_app_item_browsertest.cc b/chrome/browser/ash/app_list/app_service/app_service_app_item_browsertest.cc index 63d78b47..7ce3eb08 100644 --- a/chrome/browser/ash/app_list/app_service/app_service_app_item_browsertest.cc +++ b/chrome/browser/ash/app_list/app_service/app_service_app_item_browsertest.cc
@@ -197,7 +197,7 @@ ASSERT_TRUE(extension_app); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + ash::AcceleratorAction::kToggleAppList, {}); ash::AppListTestApi app_list_test_api; app_list_test_api.WaitForBubbleWindow(/*wait_for_opening_animation=*/false);
diff --git a/chrome/browser/ash/app_list/chrome_app_list_item_browsertest.cc b/chrome/browser/ash/app_list/chrome_app_list_item_browsertest.cc index 72eee2b..aa2b7e5 100644 --- a/chrome/browser/ash/app_list/chrome_app_list_item_browsertest.cc +++ b/chrome/browser/ash/app_list/chrome_app_list_item_browsertest.cc
@@ -65,7 +65,7 @@ void ShowLauncherAppsGrid() { EXPECT_FALSE(client_->GetAppListWindow()); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + ash::AcceleratorAction::kToggleAppList, {}); ash::AppListTestApi().WaitForBubbleWindow( /*wait_for_opening_animation=*/false); EXPECT_TRUE(client_->GetAppListWindow());
diff --git a/chrome/browser/ash/app_list/chrome_app_list_model_updater_browsertest.cc b/chrome/browser/ash/app_list/chrome_app_list_model_updater_browsertest.cc index 5da3c31..400bf5f 100644 --- a/chrome/browser/ash/app_list/chrome_app_list_model_updater_browsertest.cc +++ b/chrome/browser/ash/app_list/chrome_app_list_model_updater_browsertest.cc
@@ -115,7 +115,7 @@ void ShowAppList() { ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + ash::AcceleratorAction::kToggleAppList, {}); app_list_test_api_.WaitForBubbleWindow( /*wait_for_opening_animation=*/false); }
diff --git a/chrome/browser/ash/app_list/launcher_search_iph_browsertest.cc b/chrome/browser/ash/app_list/launcher_search_iph_browsertest.cc index 81d812c..4dadf9f9 100644 --- a/chrome/browser/ash/app_list/launcher_search_iph_browsertest.cc +++ b/chrome/browser/ash/app_list/launcher_search_iph_browsertest.cc
@@ -166,7 +166,7 @@ /*wait_for_opening_animation=*/true); } else { ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + ash::AcceleratorAction::kToggleAppList, {}); // We dispatch mouse events to interact with UI. Wait animation completion // to reliably dispatch those events.
diff --git a/chrome/browser/ash/app_restore/full_restore_service.cc b/chrome/browser/ash/app_restore/full_restore_service.cc index 2c825a09..bb43d567 100644 --- a/chrome/browser/ash/app_restore/full_restore_service.cc +++ b/chrome/browser/ash/app_restore/full_restore_service.cc
@@ -346,12 +346,12 @@ void FullRestoreService::OnActionPerformed(AcceleratorAction action) { switch (action) { - case NEW_INCOGNITO_WINDOW: - case NEW_TAB: - case NEW_WINDOW: - case OPEN_CROSH: - case OPEN_DIAGNOSTICS: - case RESTORE_TAB: + case AcceleratorAction::kNewIncognitoWindow: + case AcceleratorAction::kNewTab: + case AcceleratorAction::kNewWindow: + case AcceleratorAction::kOpenCrosh: + case AcceleratorAction::kOpenDiagnostics: + case AcceleratorAction::kRestoreTab: MaybeCloseNotification(); return; default:
diff --git a/chrome/browser/ash/crosapi/BUILD.gn b/chrome/browser/ash/crosapi/BUILD.gn index f5d42da..63740c7 100644 --- a/chrome/browser/ash/crosapi/BUILD.gn +++ b/chrome/browser/ash/crosapi/BUILD.gn
@@ -288,6 +288,7 @@ "//chrome/common:channel_info", "//chrome/common:constants", "//chromeos/ash/components/account_manager", + "//chromeos/ash/components/browser_context_helper:browser_context_helper", "//chromeos/ash/components/cryptohome", "//chromeos/ash/components/dbus", "//chromeos/ash/components/dbus/cros_disks",
diff --git a/chrome/browser/ash/crosapi/network_settings_service_ash.cc b/chrome/browser/ash/crosapi/network_settings_service_ash.cc index 9449e8c..b50a26f 100644 --- a/chrome/browser/ash/crosapi/network_settings_service_ash.cc +++ b/chrome/browser/ash/crosapi/network_settings_service_ash.cc
@@ -13,6 +13,7 @@ #include "chrome/browser/ash/profiles/profile_helper.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/profiles/profile_manager.h" +#include "chromeos/ash/components/browser_context_helper/browser_context_helper.h" #include "chromeos/ash/components/network/network_handler.h" #include "chromeos/ash/components/network/network_state.h" #include "chromeos/ash/components/network/network_state_handler.h" @@ -35,11 +36,21 @@ PrefService* GetPrimaryLoggedInUserProfilePrefs() { // Check login state first. if (!user_manager::UserManager::IsInitialized() || - !user_manager::UserManager::Get()->IsUserLoggedIn() || - ProfileManager::GetPrimaryUserProfile() == nullptr) { + !user_manager::UserManager::Get()->IsUserLoggedIn()) { return nullptr; } - return ProfileManager::GetPrimaryUserProfile()->GetPrefs(); + + auto* primary_user = user_manager::UserManager::Get()->GetPrimaryUser(); + if (!primary_user) { + return nullptr; + } + + auto* profile = Profile::FromBrowserContext( + ash::BrowserContextHelper::Get()->GetBrowserContextByUser(primary_user)); + if (!profile) { + return nullptr; + } + return profile->GetPrefs(); } } // namespace
diff --git a/chrome/browser/ash/login/oobe_quick_start/connectivity/connection.h b/chrome/browser/ash/login/oobe_quick_start/connectivity/connection.h index 531c698..0a08dcf 100644 --- a/chrome/browser/ash/login/oobe_quick_start/connectivity/connection.h +++ b/chrome/browser/ash/login/oobe_quick_start/connectivity/connection.h
@@ -92,8 +92,9 @@ // Get the state of the connection (open, closing, or closed) State GetState(); - // Close the connection. - void Close(TargetDeviceConnectionBroker::ConnectionClosedReason reason); + // TargetDeviceConnectionBroker::AuthenticatedConnection: + void Close( + TargetDeviceConnectionBroker::ConnectionClosedReason reason) override; // Changes the connection state to authenticated and invokes the // ConnectionAuthenticatedCallback. The caller must ensure that the connection @@ -117,7 +118,7 @@ using PayloadResponseCallback = base::OnceCallback<void(absl::optional<std::vector<uint8_t>>)>; - // TargetDeviceConnectionBroker::AuthenticatedConnection + // TargetDeviceConnectionBroker::AuthenticatedConnection: void RequestWifiCredentials(int32_t session_id, RequestWifiCredentialsCallback callback) override; void NotifySourceOfUpdate(int32_t session_id,
diff --git a/chrome/browser/ash/login/oobe_quick_start/connectivity/fake_target_device_connection_broker.cc b/chrome/browser/ash/login/oobe_quick_start/connectivity/fake_target_device_connection_broker.cc index f1638a0..ff7a868 100644 --- a/chrome/browser/ash/login/oobe_quick_start/connectivity/fake_target_device_connection_broker.cc +++ b/chrome/browser/ash/login/oobe_quick_start/connectivity/fake_target_device_connection_broker.cc
@@ -107,7 +107,8 @@ nearby_connection, session_context, mojo::SharedRemote<ash::quick_start::mojom::QuickStartDecoder>( fake_quick_start_decoder_->GetRemote()), - base::DoNothing(), + base::BindOnce(&FakeTargetDeviceConnectionBroker::OnConnectionClosed, + weak_ptr_factory_.GetWeakPtr()), base::BindOnce( &FakeTargetDeviceConnectionBroker::OnConnectionAuthenticated, weak_ptr_factory_.GetWeakPtr()));
diff --git a/chrome/browser/ash/login/oobe_quick_start/connectivity/target_device_connection_broker.h b/chrome/browser/ash/login/oobe_quick_start/connectivity/target_device_connection_broker.h index 28982fe..3e40346 100644 --- a/chrome/browser/ash/login/oobe_quick_start/connectivity/target_device_connection_broker.h +++ b/chrome/browser/ash/login/oobe_quick_start/connectivity/target_device_connection_broker.h
@@ -43,6 +43,7 @@ kAuthenticationFailed, kConnectionLost, kRequestTimedOut, + kTargetDeviceUpdate, kUnknownError, }; @@ -58,6 +59,10 @@ using RequestAccountTransferAssertionCallback = base::OnceCallback<void(absl::optional<FidoAssertionInfo>)>; + // Close the connection. + virtual void Close( + TargetDeviceConnectionBroker::ConnectionClosedReason reason) = 0; + // Request wifi credentials from target Android device. The session_id is // used to identify this QuickStart session and is distinct from the // RandomSessionId.
diff --git a/chrome/browser/ash/login/oobe_quick_start/target_device_bootstrap_controller.cc b/chrome/browser/ash/login/oobe_quick_start/target_device_bootstrap_controller.cc index 241ce21c..44cf8ae 100644 --- a/chrome/browser/ash/login/oobe_quick_start/target_device_bootstrap_controller.cc +++ b/chrome/browser/ash/login/oobe_quick_start/target_device_bootstrap_controller.cc
@@ -106,20 +106,13 @@ return; } - // TODO(b/280308026): Implement NotifySourceOfUpdateCallback and pass as - // argument here. This callback persists the connection info to local disk if - // the success param it receives is 'true' and then drops the connection. - authenticated_connection_->NotifySourceOfUpdate(session_id_, - base::DoNothing()); - - // TODO(b/234655072): Implement timeout for connection to close. - // If the source device successfully receives this message, it drops the - // connection. The target device waits 1-3 seconds for the connection to close - // in order to confirm the source device is prepared to re-connect after the - // target device reboots. If the connection isn't closed within the timeout, - // the target device reboots like normal and will not automatically resume - // Quick Start after the update. - prepare_for_update_on_connection_closed_ = true; + // TODO(b/234655072): Implement 3 second timeout for invocation of + // OnNotifySourceOfUpdateResponse() callback. + authenticated_connection_->NotifySourceOfUpdate( + session_id_, + base::BindOnce( + &TargetDeviceBootstrapController::OnNotifySourceOfUpdateResponse, + weak_ptr_factory_.GetWeakPtr())); } void TargetDeviceBootstrapController::OnPinVerificationRequested( @@ -175,13 +168,6 @@ status_.step = Step::ERROR; status_.payload = ErrorCode::CONNECTION_CLOSED; NotifyObservers(); - - if (prepare_for_update_on_connection_closed_) { - PrefService* prefs = g_browser_process->local_state(); - prefs->SetBoolean(prefs::kShouldResumeQuickStartAfterReboot, true); - base::Value::Dict info = connection_broker_->GetPrepareForUpdateInfo(); - prefs->SetDict(prefs::kResumeQuickStartAfterRebootInfo, std::move(info)); - } } void TargetDeviceBootstrapController::NotifyObservers() { @@ -207,4 +193,20 @@ NotifyObservers(); } +void TargetDeviceBootstrapController::OnNotifySourceOfUpdateResponse( + bool ack_successful) { + CHECK(authenticated_connection_); + + if (ack_successful) { + PrefService* prefs = g_browser_process->local_state(); + prefs->SetBoolean(prefs::kShouldResumeQuickStartAfterReboot, true); + base::Value::Dict info = connection_broker_->GetPrepareForUpdateInfo(); + prefs->SetDict(prefs::kResumeQuickStartAfterRebootInfo, std::move(info)); + } + + authenticated_connection_->Close( + TargetDeviceConnectionBroker::ConnectionClosedReason:: + kTargetDeviceUpdate); +} + } // namespace ash::quick_start
diff --git a/chrome/browser/ash/login/oobe_quick_start/target_device_bootstrap_controller.h b/chrome/browser/ash/login/oobe_quick_start/target_device_bootstrap_controller.h index 913758c..ae6991d 100644 --- a/chrome/browser/ash/login/oobe_quick_start/target_device_bootstrap_controller.h +++ b/chrome/browser/ash/login/oobe_quick_start/target_device_bootstrap_controller.h
@@ -97,15 +97,24 @@ TargetDeviceConnectionBroker::ConnectionClosedReason reason) override; private: + friend class TargetDeviceBootstrapControllerTest; + void NotifyObservers(); void OnStartAdvertisingResult(bool success); void OnStopAdvertising(); + + // If the target device successfully receives an ack message within a + // specified timeout, it prepares to automatically resume Quick Start after + // the update and closes the connection. If ack_successful is 'false', it + // closes the connection without preparing to automatically resume Quick Start + // after the update. + void OnNotifySourceOfUpdateResponse(bool ack_successful); + std::unique_ptr<TargetDeviceConnectionBroker> connection_broker_; std::string pin_; // TODO: Should we enforce one observer at a time here too? base::ObserverList<Observer> observers_; - bool prepare_for_update_on_connection_closed_ = false; Status status_;
diff --git a/chrome/browser/ash/login/oobe_quick_start/target_device_bootstrap_controller_unittest.cc b/chrome/browser/ash/login/oobe_quick_start/target_device_bootstrap_controller_unittest.cc index 343d0d3..0a14d8c4 100644 --- a/chrome/browser/ash/login/oobe_quick_start/target_device_bootstrap_controller_unittest.cc +++ b/chrome/browser/ash/login/oobe_quick_start/target_device_bootstrap_controller_unittest.cc
@@ -82,6 +82,10 @@ bootstrap_controller_->AddObserver(fake_observer_.get()); } + void NotifySourceOfUpdateResponse(bool ack_successful) { + bootstrap_controller_->OnNotifySourceOfUpdateResponse(ack_successful); + } + PrefService* GetLocalState() { return local_state_.Get(); } protected: @@ -235,29 +239,8 @@ ASSERT_TRUE(bootstrap_controller_->GetPhoneInstanceId().empty()); } -TEST_F(TargetDeviceBootstrapControllerTest, PrepareForUpdate_NotConnected) { - ASSERT_FALSE( - GetLocalState()->GetBoolean(prefs::kShouldResumeQuickStartAfterReboot)); - ASSERT_TRUE(GetLocalState() - ->GetDict(prefs::kResumeQuickStartAfterRebootInfo) - .empty()); - - // PrepareForUpdate() shouldn't do anything if the connection is not - // established. - bootstrap_controller_->StartAdvertising(); - fake_target_device_connection_broker_->on_start_advertising_callback().Run( - /*success=*/true); - ASSERT_NE(fake_observer_->last_status.step, Step::CONNECTED); - - bootstrap_controller_->PrepareForUpdate(); - EXPECT_FALSE( - GetLocalState()->GetBoolean(prefs::kShouldResumeQuickStartAfterReboot)); - EXPECT_TRUE(GetLocalState() - ->GetDict(prefs::kResumeQuickStartAfterRebootInfo) - .empty()); -} - -TEST_F(TargetDeviceBootstrapControllerTest, PrepareForUpdate) { +TEST_F(TargetDeviceBootstrapControllerTest, + OnNotifySourceOfUpdateResponse_AckSuccessful) { ASSERT_FALSE( GetLocalState()->GetBoolean(prefs::kShouldResumeQuickStartAfterReboot)); ASSERT_TRUE(GetLocalState() @@ -272,22 +255,46 @@ kSourceDeviceId); ASSERT_EQ(fake_observer_->last_status.step, Step::CONNECTED); - bootstrap_controller_->PrepareForUpdate(); - // Pref shouldn't change until the connection is closed. - EXPECT_FALSE( - GetLocalState()->GetBoolean(prefs::kShouldResumeQuickStartAfterReboot)); - EXPECT_TRUE(GetLocalState() - ->GetDict(prefs::kResumeQuickStartAfterRebootInfo) - .empty()); - fake_target_device_connection_broker_->CloseConnection( - ConnectionClosedReason::kConnectionLost); + NotifySourceOfUpdateResponse(/*ack_successful=*/true); + + ASSERT_TRUE( + absl::holds_alternative<ErrorCode>(fake_observer_->last_status.payload)); + EXPECT_EQ(absl::get<ErrorCode>(fake_observer_->last_status.payload), + ErrorCode::CONNECTION_CLOSED); EXPECT_TRUE( GetLocalState()->GetBoolean(prefs::kShouldResumeQuickStartAfterReboot)); EXPECT_FALSE(GetLocalState() ->GetDict(prefs::kResumeQuickStartAfterRebootInfo) .empty()); - GetLocalState()->ClearPref(prefs::kShouldResumeQuickStartAfterReboot); - GetLocalState()->ClearPref(prefs::kResumeQuickStartAfterRebootInfo); +} + +TEST_F(TargetDeviceBootstrapControllerTest, + OnNotifySourceOfUpdateResponse_AckUnsuccessful) { + ASSERT_FALSE( + GetLocalState()->GetBoolean(prefs::kShouldResumeQuickStartAfterReboot)); + ASSERT_TRUE(GetLocalState() + ->GetDict(prefs::kResumeQuickStartAfterRebootInfo) + .empty()); + + bootstrap_controller_->StartAdvertising(); + fake_target_device_connection_broker_->on_start_advertising_callback().Run( + /*success=*/true); + fake_target_device_connection_broker_->InitiateConnection(kSourceDeviceId); + fake_target_device_connection_broker_->AuthenticateConnection( + kSourceDeviceId); + ASSERT_EQ(fake_observer_->last_status.step, Step::CONNECTED); + + NotifySourceOfUpdateResponse(/*ack_successful=*/false); + + ASSERT_TRUE( + absl::holds_alternative<ErrorCode>(fake_observer_->last_status.payload)); + EXPECT_EQ(absl::get<ErrorCode>(fake_observer_->last_status.payload), + ErrorCode::CONNECTION_CLOSED); + EXPECT_FALSE( + GetLocalState()->GetBoolean(prefs::kShouldResumeQuickStartAfterReboot)); + EXPECT_TRUE(GetLocalState() + ->GetDict(prefs::kResumeQuickStartAfterRebootInfo) + .empty()); } } // namespace ash::quick_start
diff --git a/chrome/browser/ash/login/screens/device_disabled_screen.cc b/chrome/browser/ash/login/screens/device_disabled_screen.cc index 6224faf4..d84eb18 100644 --- a/chrome/browser/ash/login/screens/device_disabled_screen.cc +++ b/chrome/browser/ash/login/screens/device_disabled_screen.cc
@@ -36,13 +36,12 @@ return; } - const bool is_disabled_ad_device = - InstallAttributes::Get()->IsActiveDirectoryManaged(); - - view_->Show(DeviceDisablingManager()->serial_number(), - DeviceDisablingManager()->enrollment_domain(), - DeviceDisablingManager()->disabled_message(), - is_disabled_ad_device); + view_->Show( + DeviceDisablingManager()->serial_number(), + DeviceDisablingManager()->enrollment_domain(), + DeviceDisablingManager()->disabled_message(), + // TODO() remove this parameter from DeviceDisabledScreenHandler::Show. + /*is_disabled_ad_device=*/false); DeviceDisablingManager()->AddObserver(this); }
diff --git a/chrome/browser/ash/login/ui/login_display_host_common.cc b/chrome/browser/ash/login/ui/login_display_host_common.cc index 5330f08..645712b 100644 --- a/chrome/browser/ash/login/ui/login_display_host_common.cc +++ b/chrome/browser/ash/login/ui/login_display_host_common.cc
@@ -22,6 +22,7 @@ #include "chrome/browser/ash/login/existing_user_controller.h" #include "chrome/browser/ash/login/lock_screen_utils.h" #include "chrome/browser/ash/login/oobe_quick_start/connectivity/target_device_connection_broker_factory.h" +#include "chrome/browser/ash/login/oobe_quick_start/oobe_quick_start_pref_names.h" #include "chrome/browser/ash/login/oobe_quick_start/target_device_bootstrap_controller.h" #include "chrome/browser/ash/login/screens/encryption_migration_screen.h" #include "chrome/browser/ash/login/screens/gaia_screen.h" @@ -721,11 +722,13 @@ profile); DCHECK(service); + bool is_resume_after_update = g_browser_process->local_state()->GetBoolean( + quick_start::prefs::kShouldResumeQuickStartAfterReboot); bootstrap_controller_ = std::make_unique<ash::quick_start::TargetDeviceBootstrapController>( quick_start::TargetDeviceConnectionBrokerFactory::Create( service->GetNearbyConnectionsManager(), - service->GetQuickStartDecoder(), false)); + service->GetQuickStartDecoder(), is_resume_after_update)); } return bootstrap_controller_->GetAsWeakPtrForClient(); }
diff --git a/chrome/browser/ash/policy/handlers/configuration_policy_handler_ash.cc b/chrome/browser/ash/policy/handlers/configuration_policy_handler_ash.cc index ad1f543..8cc0579 100644 --- a/chrome/browser/ash/policy/handlers/configuration_policy_handler_ash.cc +++ b/chrome/browser/ash/policy/handlers/configuration_policy_handler_ash.cc
@@ -348,11 +348,10 @@ return apps_util::IsSupportedAppTypePolicyId(policy_id); } -void PinnedLauncherAppsPolicyHandler::ApplyList(base::Value filtered_list, +void PinnedLauncherAppsPolicyHandler::ApplyList(base::Value::List filtered_list, PrefValueMap* prefs) { - DCHECK(filtered_list.is_list()); base::Value::List pinned_apps_list; - for (base::Value& entry : filtered_list.GetList()) { + for (base::Value& entry : filtered_list) { base::Value::Dict app_dict; app_dict.Set(ChromeShelfPrefs::kPinnedAppsPrefAppIDKey, std::move(entry)); pinned_apps_list.Append(std::move(app_dict));
diff --git a/chrome/browser/ash/policy/handlers/configuration_policy_handler_ash.h b/chrome/browser/ash/policy/handlers/configuration_policy_handler_ash.h index 9996a9b..a1e7197 100644 --- a/chrome/browser/ash/policy/handlers/configuration_policy_handler_ash.h +++ b/chrome/browser/ash/policy/handlers/configuration_policy_handler_ash.h
@@ -105,7 +105,7 @@ // Converts the list of strings |filtered_list| to a list of dictionaries and // sets the pref. - void ApplyList(base::Value filtered_list, PrefValueMap* prefs) override; + void ApplyList(base::Value::List filtered_list, PrefValueMap* prefs) override; }; // Maps the DefaultHandlersForFileExtensions policy to the corresponding pref.
diff --git a/chrome/browser/ash/policy/remote_commands/device_command_reset_euicc_job.cc b/chrome/browser/ash/policy/remote_commands/device_command_reset_euicc_job.cc index c48510cf..8d22909 100644 --- a/chrome/browser/ash/policy/remote_commands/device_command_reset_euicc_job.cc +++ b/chrome/browser/ash/policy/remote_commands/device_command_reset_euicc_job.cc
@@ -54,7 +54,8 @@ } void DeviceCommandResetEuiccJob::RunImpl(CallbackWithResult result_callback) { - absl::optional<dbus::ObjectPath> euicc_path = ash::GetCurrentEuiccPath(); + absl::optional<dbus::ObjectPath> euicc_path = + ash::cellular_utils::GetCurrentEuiccPath(); if (!euicc_path) { SYSLOG(ERROR) << "No current EUICC. Unable to reset EUICC"; RunResultCallback(std::move(result_callback), ResultType::kFailure);
diff --git a/chrome/browser/ash/remote_apps/remote_apps_manager_browsertest.cc b/chrome/browser/ash/remote_apps/remote_apps_manager_browsertest.cc index 31267b63..ae4a2db 100644 --- a/chrome/browser/ash/remote_apps/remote_apps_manager_browsertest.cc +++ b/chrome/browser/ash/remote_apps/remote_apps_manager_browsertest.cc
@@ -315,7 +315,7 @@ AppListClientImpl* client = AppListClientImpl::GetInstance(); EXPECT_FALSE(client->GetAppListWindow()); ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + AcceleratorAction::kToggleAppList, {}); ash::AppListTestApi().WaitForBubbleWindow(wait_for_opening_animation); EXPECT_TRUE(client->GetAppListWindow()); }
diff --git a/chrome/browser/ash/system/device_disabling_manager.cc b/chrome/browser/ash/system/device_disabling_manager.cc index ac0dd0a..d9e0c085 100644 --- a/chrome/browser/ash/system/device_disabling_manager.cc +++ b/chrome/browser/ash/system/device_disabling_manager.cc
@@ -154,13 +154,6 @@ return false; } - // If the device is AD managed, force disable the device (b/259180126). - if (g_browser_process->platform_part() - ->browser_policy_connector_ash() - ->IsActiveDirectoryManaged()) { - return true; - } - bool device_disabled = false; CrosSettings::Get()->GetBoolean(kDeviceDisabled, &device_disabled); return device_disabled;
diff --git a/chrome/browser/ash/system/device_disabling_manager_unittest.cc b/chrome/browser/ash/system/device_disabling_manager_unittest.cc index ea629b4..13033f05 100644 --- a/chrome/browser/ash/system/device_disabling_manager_unittest.cc +++ b/chrome/browser/ash/system/device_disabling_manager_unittest.cc
@@ -79,7 +79,6 @@ // Configure install attributes. void SetUnowned(); void SetEnterpriseCloudOwned(); - void SetEnterpriseActiveDirectoryOwned(); void SetConsumerOwned(); private: @@ -121,11 +120,6 @@ kEnrollmentDomain, kDeviceId); } -void DeviceDisablingManagerTestBase::SetEnterpriseActiveDirectoryOwned() { - cros_settings_test_helper_.InstallAttributes()->SetActiveDirectoryManaged( - kEnrollmentDomain, kDeviceId); -} - void DeviceDisablingManagerTestBase::SetConsumerOwned() { cros_settings_test_helper_.InstallAttributes()->SetConsumerOwned(); } @@ -236,17 +230,6 @@ } // Verifies that the device is not considered disabled during OOBE when it is -// enrolled in AD mode, even if the device is marked as disabled. -TEST_F(DeviceDisablingManagerOOBETest, NotDisabledWhenAdOwned) { - SetEnterpriseActiveDirectoryOwned(); - SetDeviceDisabled(true); - - CheckWhetherDeviceDisabledDuringOOBE(); - - EXPECT_FALSE(device_disabled()); -} - -// Verifies that the device is not considered disabled during OOBE when it is // already owned by a consumer, even if the device is marked as disabled. TEST_F(DeviceDisablingManagerOOBETest, NotDisabledWhenConsumerOwned) { SetConsumerOwned(); @@ -393,21 +376,6 @@ CreateDeviceDisablingManager(); } -// Verifies that the device is not considered disabled when device disabling is -// turned off by switch, even if the device is AD managed. -TEST_F(DeviceDisablingManagerTest, NotDisabledWhenTurnedOffBySwitchAdManaged) { - base::CommandLine::ForCurrentProcess()->AppendSwitch( - switches::kDisableDeviceDisabling); - SetEnterpriseActiveDirectoryOwned(); - MakeCrosSettingsTrusted(); - SetDeviceDisabled(true); - - EXPECT_CALL(*this, RestartToLoginScreen()).Times(0); - EXPECT_CALL(*this, ShowDeviceDisabledScreen()).Times(0); - EXPECT_CALL(*this, OnDisabledMessageChanged(_)).Times(0); - CreateDeviceDisablingManager(); -} - // Verifies that the device is not considered disabled when it is owned by a // consumer, even if the device is marked as disabled. TEST_F(DeviceDisablingManagerTest, NotDisabledWhenConsumerOwned) { @@ -421,21 +389,6 @@ CreateDeviceDisablingManager(); } -// Verifies that AD device is considered disabled, even when it is explicitly -// marked as not disabled (as per b/259180126). -TEST_F(DeviceDisablingManagerTest, DisabledWhenAdManagedAndChromadDisabled) { - SetEnterpriseActiveDirectoryOwned(); - MakeCrosSettingsTrusted(); - SetDisabledMessage(""); - SetDeviceDisabled(false); - - EXPECT_CALL(*this, RestartToLoginScreen()).Times(0); - EXPECT_CALL(*this, ShowDeviceDisabledScreen()).Times(1); - EXPECT_CALL(*this, OnDisabledMessageChanged(_)).Times(0); - CreateDeviceDisablingManager(); - EXPECT_TRUE(GetDeviceDisablingManager()->disabled_message().empty()); -} - // Verifies that the device disabled screen is shown immediately when the device // is already marked as disabled on start-up. TEST_F(DeviceDisablingManagerTest, DisabledOnLoginScreen) { @@ -562,10 +515,6 @@ // Enterprise cloud owned. SetEnterpriseCloudOwned(); EXPECT_FALSE(DeviceDisablingManager::IsDeviceDisabledDuringNormalOperation()); - - // Enterprise AD owned. - SetEnterpriseActiveDirectoryOwned(); - EXPECT_FALSE(DeviceDisablingManager::IsDeviceDisabledDuringNormalOperation()); } // Tests the IsDeviceDisabledDuringNormalOperation() method, when device @@ -592,16 +541,5 @@ EXPECT_TRUE(DeviceDisablingManager::IsDeviceDisabledDuringNormalOperation()); } -// Tests that IsDeviceDisabledDuringNormalOperation() is always true, when -// device is enterprise AD owned (as per b/259180126). -TEST_F(DeviceDisablingManagerTest, IsDeviceDisabledAdOwner) { - // Enterprise AD owned. - SetEnterpriseActiveDirectoryOwned(); - MakeCrosSettingsTrusted(); - SetDeviceDisabled(false); - - EXPECT_TRUE(DeviceDisablingManager::IsDeviceDisabledDuringNormalOperation()); -} - } // namespace system } // namespace ash
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 4663971..5a7d38d 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
@@ -527,6 +527,22 @@ return R.dimen.card_unmask_dialog_credit_card_icon_height; } + public static int getVirtualCardEnrollmentDialogIconWidthId() { + if (ChromeFeatureList.isEnabled( + ChromeFeatureList.AUTOFILL_ENABLE_NEW_CARD_ART_AND_NETWORK_IMAGES)) { + return R.dimen.virtual_card_enrollment_dialog_card_art_width_new; + } + return R.dimen.virtual_card_enrollment_dialog_card_art_width; + } + + public static int getVirtualCardEnrollmentDialogIconHeightId() { + if (ChromeFeatureList.isEnabled( + ChromeFeatureList.AUTOFILL_ENABLE_NEW_CARD_ART_AND_NETWORK_IMAGES)) { + return R.dimen.virtual_card_enrollment_dialog_card_art_height_new; + } + return R.dimen.virtual_card_enrollment_dialog_card_art_height; + } + /** * Resize the bitmap to the required specs, round corners, and add grey border. * @param bitmap to be updated.
diff --git a/chrome/browser/chromeos/extensions/smart_card_provider_private/smart_card_provider_private_apitest.cc b/chrome/browser/chromeos/extensions/smart_card_provider_private/smart_card_provider_private_apitest.cc index f3012c5..9f97d162 100644 --- a/chrome/browser/chromeos/extensions/smart_card_provider_private/smart_card_provider_private_apitest.cc +++ b/chrome/browser/chromeos/extensions/smart_card_provider_private/smart_card_provider_private_apitest.cc
@@ -15,6 +15,8 @@ #include "extensions/common/switches.h" #include "extensions/test/result_catcher.h" #include "extensions/test/test_extension_dir.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" namespace scard_api = extensions::api::smart_card_provider_private; @@ -24,6 +26,19 @@ using device::mojom::SmartCardSuccess; using testing::ElementsAre; +MATCHER_P(IsError, expected_error, "") { + if (!arg->is_error()) { + *result_listener << "is not an error"; + return false; + } + if (arg->get_error() != expected_error) { + *result_listener << "expected " << expected_error << ", got " + << arg->get_error(); + return false; + } + return true; +} + namespace extensions { class SmartCardProviderPrivateApiTest : public ExtensionApiTest { @@ -210,9 +225,7 @@ IN_PROC_BROWSER_TEST_F(SmartCardProviderPrivateApiTest, EstablishContextNoProvider) { - auto context_result = CreateContext(); - ASSERT_TRUE(context_result->is_error()); - EXPECT_EQ(context_result->get_error(), SmartCardError::kNoService); + EXPECT_THAT(CreateContext(), IsError(SmartCardError::kNoService)); } IN_PROC_BROWSER_TEST_F(SmartCardProviderPrivateApiTest, @@ -224,9 +237,7 @@ function(requestId){}); )"); - auto context_result = CreateContext(); - ASSERT_TRUE(context_result->is_error()); - EXPECT_EQ(context_result->get_error(), SmartCardError::kNoService); + EXPECT_THAT(CreateContext(), IsError(SmartCardError::kNoService)); } IN_PROC_BROWSER_TEST_F(SmartCardProviderPrivateApiTest, CreateContext) { @@ -246,9 +257,7 @@ } )"); - auto context_result = CreateContext(); - ASSERT_TRUE(context_result->is_error()); - EXPECT_EQ(context_result->get_error(), SmartCardError::kInternalError); + EXPECT_THAT(CreateContext(), IsError(SmartCardError::kInternalError)); } // Tests that smartCardProviderPrivate.onReleaseContextRequested is emitted @@ -356,9 +365,7 @@ } )"); - auto context_result = CreateContext(); - ASSERT_TRUE(context_result->is_error()); - EXPECT_EQ(context_result->get_error(), SmartCardError::kInternalError); + EXPECT_THAT(CreateContext(), IsError(SmartCardError::kInternalError)); } IN_PROC_BROWSER_TEST_F(SmartCardProviderPrivateApiTest, ListReaders) { @@ -412,9 +419,7 @@ context->ListReaders(result_future.GetCallback()); - device::mojom::SmartCardListReadersResultPtr result = result_future.Take(); - ASSERT_TRUE(result->is_error()); - EXPECT_EQ(result->get_error(), SmartCardError::kNoService); + EXPECT_THAT(result_future.Take(), IsError(SmartCardError::kNoService)); } IN_PROC_BROWSER_TEST_F(SmartCardProviderPrivateApiTest, @@ -437,9 +442,7 @@ context->ListReaders(result_future.GetCallback()); - device::mojom::SmartCardListReadersResultPtr result = result_future.Take(); - ASSERT_TRUE(result->is_error()); - EXPECT_EQ(result->get_error(), SmartCardError::kNoService); + EXPECT_THAT(result_future.Take(), IsError(SmartCardError::kNoService)); } IN_PROC_BROWSER_TEST_F(SmartCardProviderPrivateApiTest, GetStatusChange) { @@ -512,9 +515,7 @@ GetStatusChangeNoProvider) { LoadFakeProviderExtension(kEstablishContextJs); - device::mojom::SmartCardStatusChangeResultPtr result = GetStatusChange(); - ASSERT_TRUE(result->is_error()); - EXPECT_EQ(result->get_error(), SmartCardError::kNoService); + EXPECT_THAT(GetStatusChange(), IsError(SmartCardError::kNoService)); } IN_PROC_BROWSER_TEST_F(SmartCardProviderPrivateApiTest, @@ -527,9 +528,7 @@ function (requestId, scardContext, timeout, readerStatesIn) {}); )"}); - device::mojom::SmartCardStatusChangeResultPtr result = GetStatusChange(); - ASSERT_TRUE(result->is_error()); - EXPECT_EQ(result->get_error(), SmartCardError::kNoService); + EXPECT_THAT(GetStatusChange(), IsError(SmartCardError::kNoService)); } IN_PROC_BROWSER_TEST_F(SmartCardProviderPrivateApiTest, Connect) { @@ -601,9 +600,7 @@ context->Connect("foo-reader", device::mojom::SmartCardShareMode::kShared, std::move(preferred_protocols), result_future.GetCallback()); - device::mojom::SmartCardConnectResultPtr result = result_future.Take(); - ASSERT_TRUE(result->is_error()); - EXPECT_EQ(result->get_error(), SmartCardError::kNoService); + EXPECT_THAT(result_future.Take(), IsError(SmartCardError::kNoService)); } IN_PROC_BROWSER_TEST_F(SmartCardProviderPrivateApiTest, @@ -631,9 +628,7 @@ context->Connect("foo-reader", device::mojom::SmartCardShareMode::kShared, std::move(preferred_protocols), result_future.GetCallback()); - device::mojom::SmartCardConnectResultPtr result = result_future.Take(); - ASSERT_TRUE(result->is_error()); - EXPECT_EQ(result->get_error(), SmartCardError::kNoService); + EXPECT_THAT(result_future.Take(), IsError(SmartCardError::kNoService)); } IN_PROC_BROWSER_TEST_F(SmartCardProviderPrivateApiTest, Disconnect) { @@ -689,9 +684,7 @@ connection->Disconnect(device::mojom::SmartCardDisposition::kUnpower, result_future.GetCallback()); - SmartCardResultPtr result = result_future.Take(); - ASSERT_TRUE(result->is_error()); - EXPECT_EQ(result->get_error(), SmartCardError::kNoService); + EXPECT_THAT(result_future.Take(), IsError(SmartCardError::kNoService)); } IN_PROC_BROWSER_TEST_F(SmartCardProviderPrivateApiTest, DisconnectTimeout) { @@ -719,9 +712,7 @@ connection->Disconnect(device::mojom::SmartCardDisposition::kUnpower, result_future.GetCallback()); - SmartCardResultPtr result = result_future.Take(); - ASSERT_TRUE(result->is_error()); - EXPECT_EQ(result->get_error(), SmartCardError::kNoService); + EXPECT_THAT(result_future.Take(), IsError(SmartCardError::kNoService)); } // Tests that smartCardProviderPrivate.onDisconnectRequested is emitted @@ -804,9 +795,7 @@ context->Cancel(result_future.GetCallback()); - device::mojom::SmartCardResultPtr result = result_future.Take(); - ASSERT_TRUE(result->is_error()); - EXPECT_EQ(result->get_error(), SmartCardError::kNoService); + EXPECT_THAT(result_future.Take(), IsError(SmartCardError::kNoService)); } IN_PROC_BROWSER_TEST_F(SmartCardProviderPrivateApiTest, CancelResponseTimeout) { @@ -826,9 +815,7 @@ context->Cancel(result_future.GetCallback()); - device::mojom::SmartCardResultPtr result = result_future.Take(); - ASSERT_TRUE(result->is_error()); - EXPECT_EQ(result->get_error(), SmartCardError::kNoService); + EXPECT_THAT(result_future.Take(), IsError(SmartCardError::kNoService)); } // A mojo::SmartCardContext receives a call while there's still another call @@ -1147,9 +1134,7 @@ std::vector<uint8_t>({3u, 2u, 1u}), result_future.GetCallback()); - auto result = result_future.Take(); - ASSERT_TRUE(result->is_error()); - EXPECT_EQ(result->get_error(), SmartCardError::kNoService); + EXPECT_THAT(result_future.Take(), IsError(SmartCardError::kNoService)); } } // namespace extensions
diff --git a/chrome/browser/chromeos/kcer_nss/kcer_nss_unittest.cc b/chrome/browser/chromeos/kcer_nss/kcer_nss_unittest.cc index 5cc5f48..8187a5f2 100644 --- a/chrome/browser/chromeos/kcer_nss/kcer_nss_unittest.cc +++ b/chrome/browser/chromeos/kcer_nss/kcer_nss_unittest.cc
@@ -288,6 +288,9 @@ base::test::TestFuture<base::expected<bool, Error>> does_key_exist_waiter; kcer->DoesPrivateKeyExist(PrivateKeyHandle(PublicKeySpki()), does_key_exist_waiter.GetCallback()); + base::test::TestFuture<base::expected<void, Error>> set_nickname_waiter; + kcer->SetKeyNickname(PrivateKeyHandle(PublicKeySpki()), "new_nickname", + set_nickname_waiter.GetCallback()); // Close the list with one more GenerateRsaKey, so all methods are tested // with other methods before and after them. base::test::TestFuture<base::expected<PublicKey, Error>> @@ -322,6 +325,9 @@ ASSERT_FALSE(does_key_exist_waiter.Get().has_value()); EXPECT_EQ(does_key_exist_waiter.Get().error(), Error::kTokenInitializationFailed); + ASSERT_FALSE(set_nickname_waiter.Get().has_value()); + EXPECT_EQ(set_nickname_waiter.Get().error(), + Error::kTokenInitializationFailed); ASSERT_FALSE(generate_rsa_waiter_2.Get().has_value()); EXPECT_EQ(generate_rsa_waiter_2.Get().error(), Error::kTokenInitializationFailed);
diff --git a/chrome/browser/chromeos/kcer_nss/kcer_token_impl_nss.cc b/chrome/browser/chromeos/kcer_nss/kcer_token_impl_nss.cc index e443965c..cbb688cc 100644 --- a/chrome/browser/chromeos/kcer_nss/kcer_token_impl_nss.cc +++ b/chrome/browser/chromeos/kcer_nss/kcer_token_impl_nss.cc
@@ -295,6 +295,24 @@ std::move(callback).Run({}); } +void SetKeyNicknameOnWorkerThread(crypto::ScopedPK11Slot slot, + PrivateKeyHandle key, + std::string nickname, + Kcer::StatusCallback callback) { + base::expected<crypto::ScopedSECKEYPrivateKey, Error> private_key = + GetSECKEYPrivateKey(slot, key); + if (!private_key.has_value()) { + return std::move(callback).Run(base::unexpected(private_key.error())); + } + + if (PK11_SetPrivateKeyNickname(private_key.value().get(), nickname.c_str()) != + SECSuccess) { + return std::move(callback).Run( + base::unexpected(Error::kFailedToWriteAttribute)); + } + return std::move(callback).Run({}); +} + scoped_refptr<const Cert> BuildKcerCert( Token token, const net::ScopedCERTCertificate& nss_cert) { @@ -570,7 +588,25 @@ std::string nickname, Kcer::StatusCallback callback) { DCHECK_CURRENTLY_ON(content::BrowserThread::IO); - // TODO(244408716): Implement. + + if (UNLIKELY(state_ == State::kInitializationFailed)) { + return HandleInitializationFailed(std::move(callback)); + } else if (is_blocked_) { + return task_queue_.push(base::BindOnce( + &KcerTokenImplNss::SetKeyNickname, weak_factory_.GetWeakPtr(), + std::move(key), std::move(nickname), std::move(callback))); + } + + // Block task queue, attach unblocking task to the callback. + auto unblocking_callback = std::move(callback).Then(BlockQueueGetUnblocker()); + + base::ThreadPool::PostTask( + FROM_HERE, + {base::MayBlock(), base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, + base::BindOnce(&SetKeyNicknameOnWorkerThread, + crypto::ScopedPK11Slot(PK11_ReferenceSlot(slot_.get())), + std::move(key), std::move(nickname), + std::move(unblocking_callback))); } void KcerTokenImplNss::SetKeyPermissions(PrivateKeyHandle key,
diff --git a/chrome/browser/device_reauth/android/BUILD.gn b/chrome/browser/device_reauth/android/BUILD.gn index 5a33660..3aed35e 100644 --- a/chrome/browser/device_reauth/android/BUILD.gn +++ b/chrome/browser/device_reauth/android/BUILD.gn
@@ -14,7 +14,6 @@ "//components/browser_ui/strings/android:browser_ui_strings_grd", "//components/device_reauth:device_reauth_java_enums", "//content/public/android:content_main_dex_java", - "//third_party/android_deps:com_android_support_support_annotations_java", "//third_party/androidx:androidx_annotation_annotation_java", "//ui/android:ui_no_recycler_view_java", ]
diff --git a/chrome/browser/device_reauth/android/java/src/org/chromium/chrome/browser/device_reauth/DeviceAuthenticatorBridge.java b/chrome/browser/device_reauth/android/java/src/org/chromium/chrome/browser/device_reauth/DeviceAuthenticatorBridge.java index c1bb500..e9fd188 100644 --- a/chrome/browser/device_reauth/android/java/src/org/chromium/chrome/browser/device_reauth/DeviceAuthenticatorBridge.java +++ b/chrome/browser/device_reauth/android/java/src/org/chromium/chrome/browser/device_reauth/DeviceAuthenticatorBridge.java
@@ -16,8 +16,8 @@ import android.hardware.biometrics.BiometricPrompt; import android.os.Build; import android.os.CancellationSignal; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; import org.chromium.base.ContextUtils;
diff --git a/chrome/browser/devtools/devtools_browsertest.cc b/chrome/browser/devtools/devtools_browsertest.cc index 7ce8d85a..451ce4e 100644 --- a/chrome/browser/devtools/devtools_browsertest.cc +++ b/chrome/browser/devtools/devtools_browsertest.cc
@@ -2683,7 +2683,16 @@ // This tests checks that window is correctly initialized when DevTools is // opened while navigation through history with forward and back actions. // (crbug.com/627407) -IN_PROC_BROWSER_TEST_F(DevToolsTest, TestWindowInitializedOnNavigateBack) { +#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_CHROMEOS_LACROS) +// Flaky on MAC and lacros https://crbug.com/1443360 +#define MAYBE_TestWindowInitializedOnNavigateBack \ + DISABLED_TestWindowInitializedOnNavigateBack +#else +#define MAYBE_TestWindowInitializedOnNavigateBack \ + TestWindowInitializedOnNavigateBack +#endif +IN_PROC_BROWSER_TEST_F(DevToolsTest, + MAYBE_TestWindowInitializedOnNavigateBack) { TestChromeWebUIControllerFactory test_factory; content::ScopedWebUIControllerFactoryRegistration factory_registration( &test_factory);
diff --git a/chrome/browser/dips/dips_bounce_detector_unittest.cc b/chrome/browser/dips/dips_bounce_detector_unittest.cc index b4836bf..77178ca 100644 --- a/chrome/browser/dips/dips_bounce_detector_unittest.cc +++ b/chrome/browser/dips/dips_bounce_detector_unittest.cc
@@ -145,7 +145,11 @@ const std::vector<std::string>& redirects() const { return redirects_; } private: - void RecordBounce(const GURL& url, base::Time time, bool stateful) { + void RecordBounce(const GURL& url, + const GURL& initial_url, + const GURL& final_url, + base::Time time, + bool stateful) { recorded_bounces_.insert(std::make_tuple(url, time, stateful)); }
diff --git a/chrome/browser/dips/dips_helper_browsertest.cc b/chrome/browser/dips/dips_helper_browsertest.cc index d2c3b3d..0e4e10b2 100644 --- a/chrome/browser/dips/dips_helper_browsertest.cc +++ b/chrome/browser/dips/dips_helper_browsertest.cc
@@ -25,6 +25,7 @@ #include "chrome/browser/dips/dips_utils.h" #include "chrome/test/base/chrome_test_utils.h" #include "components/content_settings/core/browser/host_content_settings_map.h" +#include "components/content_settings/core/common/content_settings_pattern.h" #include "components/ukm/test_ukm_recorder.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/web_contents.h" @@ -95,6 +96,21 @@ DIPSService* dips_service = DIPSServiceFactory::GetForBrowserContext( GetActiveWebContents()->GetBrowserContext()); dips_service->WaitForInitCompleteForTesting(); + + // Initialize exceptions for 1P sites with embedded 3P cookies. Block 3PC by + // default on a.test and d.test, since those are used as the initial and + // final URL in the redirect chains. This avoids trimming bounces due to 1P + // exceptions (e.g. Chrome Guard). + map_ = HostContentSettingsMapFactory::GetForProfile( + chrome_test_utils::GetActiveWebContents(this)->GetBrowserContext()); + map_->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), + ContentSettingsPattern::FromString("[*.]a.test"), + ContentSettingsType::COOKIES, ContentSetting::CONTENT_SETTING_BLOCK); + map_->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), + ContentSettingsPattern::FromString("[*.]d.test"), + ContentSettingsType::COOKIES, ContentSetting::CONTENT_SETTING_BLOCK); } WebContents* GetActiveWebContents() { @@ -175,6 +191,7 @@ raw_ptr<WebContents, DanglingUntriaged> web_contents_ = nullptr; base::SimpleTestClock test_clock_; base::test::ScopedFeatureList scoped_feature_list_; + raw_ptr<HostContentSettingsMap> map_; }; IN_PROC_BROWSER_TEST_P(DIPSTabHelperBrowserTest, @@ -385,7 +402,7 @@ } IN_PROC_BROWSER_TEST_P(DIPSTabHelperBrowserTest, MultipleSiteStoragesRecorded) { - GURL url = embedded_test_server()->GetURL("a.test", "/set-cookie?foo=bar"); + GURL url = embedded_test_server()->GetURL("b.test", "/set-cookie?foo=bar"); base::Time time = base::Time::FromDoubleT(1); SetDIPSTime(time); @@ -418,7 +435,7 @@ IN_PROC_BROWSER_TEST_P(DIPSTabHelperBrowserTest, Histograms_StorageThenClick) { base::HistogramTester histograms; - GURL url = embedded_test_server()->GetURL("a.test", "/set-cookie?foo=bar"); + GURL url = embedded_test_server()->GetURL("b.test", "/set-cookie?foo=bar"); base::Time time = base::Time::FromDoubleT(1); content::WebContents* web_contents = GetActiveWebContents(); @@ -450,7 +467,7 @@ // create an Incognito browser without regard to platform is public. #if !BUILDFLAG(IS_ANDROID) base::HistogramTester histograms; - GURL url = embedded_test_server()->GetURL("a.test", "/set-cookie?foo=bar"); + GURL url = embedded_test_server()->GetURL("b.test", "/set-cookie?foo=bar"); base::Time time = base::Time::FromDoubleT(1); Browser* browser = CreateIncognitoBrowser(); content::WebContents* web_contents = @@ -492,7 +509,7 @@ content::WebContents* web_contents = GetActiveWebContents(); ASSERT_TRUE(content::NavigateToURL( - web_contents, embedded_test_server()->GetURL("a.test", "/title1.html"))); + web_contents, embedded_test_server()->GetURL("b.test", "/title1.html"))); content::RenderFrameHost* frame = web_contents->GetPrimaryMainFrame(); content::WaitForHitTestData(frame); // wait until we can click. SetDIPSTime(time); @@ -521,7 +538,7 @@ IN_PROC_BROWSER_TEST_P(DIPSTabHelperBrowserTest, Histograms_MultipleStoragesThenClick) { base::HistogramTester histograms; - GURL url = embedded_test_server()->GetURL("a.test", "/set-cookie?foo=bar"); + GURL url = embedded_test_server()->GetURL("b.test", "/set-cookie?foo=bar"); base::Time time = base::Time::FromDoubleT(1); content::WebContents* web_contents = GetActiveWebContents(); @@ -568,7 +585,7 @@ IN_PROC_BROWSER_TEST_P(DIPSTabHelperBrowserTest, Histograms_MultipleClicksThenStorage) { base::HistogramTester histograms; - GURL url = embedded_test_server()->GetURL("a.test", "/title1.html"); + GURL url = embedded_test_server()->GetURL("b.test", "/title1.html"); base::Time time = base::Time::FromDoubleT(1); content::WebContents* web_contents = GetActiveWebContents(); @@ -804,10 +821,10 @@ "b.test/cross-site-with-cookie/b.test/cross-site-with-cookie/" "b.test/cross-site-with-cookie/b.test/cross-site-with-cookie/" "b.test/cross-site-with-cookie/b.test/cross-site-with-cookie/" - "b.test/cross-site-with-cookie/b.test/cross-site-with-cookie/c.test"; + "b.test/cross-site-with-cookie/b.test/cross-site-with-cookie/d.test"; redirect_path += final_dest; return std::make_pair(server->GetURL("b.test", redirect_path), - server->GetURL("c.test", final_dest)); + server->GetURL("d.test", final_dest)); } // Attempt to detect flakiness in waiting for DIPS storage by repeatedly @@ -871,14 +888,14 @@ base::Time recent_bounce_time = base::Time::Now() - base::Minutes(10); SetDIPSTime(old_bounce_time); - // Make b.test statefully bounce to c.test. + // Make b.test statefully bounce to d.test. ASSERT_TRUE(content::NavigateToURL( web_contents, embedded_test_server()->GetURL("a.test", "/title1.html"))); ASSERT_TRUE(content::NavigateToURLFromRenderer( web_contents, embedded_test_server()->GetURL( - "b.test", "/cross-site-with-cookie/c.test/title1.html"), - embedded_test_server()->GetURL("c.test", "/title1.html"))); + "b.test", "/cross-site-with-cookie/d.test/title1.html"), + embedded_test_server()->GetURL("d.test", "/title1.html"))); // End the chain so the bounce is recorded. ASSERT_TRUE(content::NavigateToURL( web_contents, embedded_test_server()->GetURL("a.test", "/title1.html")));
diff --git a/chrome/browser/dips/dips_service.cc b/chrome/browser/dips/dips_service.cc index f03ddc8c..cb260522 100644 --- a/chrome/browser/dips/dips_service.cc +++ b/chrome/browser/dips/dips_service.cc
@@ -237,27 +237,20 @@ return cookie_settings_->ShouldBlockThirdPartyCookies(); } -bool DIPSService::HasCookieException(const std::string& site) const { +bool DIPSService::Has3PCExceptionAs3P(const std::string& site) const { DCHECK(!IsShuttingDown()); GURL url("https://" + site); - // Checks whether there is an exception allowing all third-parties embedded - // under |site| to use cookies. - if (cookie_settings_->IsFullCookieAccessAllowed( - GURL(), net::SiteForCookies::FromUrl(url), url::Origin::Create(url), - net::CookieSettingOverrides())) { - return true; - } + return cookie_settings_->IsFullCookieAccessAllowed( + url, net::SiteForCookies(), absl::nullopt, net::CookieSettingOverrides()); +} - // Checks whether there is an exception allowing |site| to use cookies when - // embedded by any other site. - if (cookie_settings_->IsFullCookieAccessAllowed( - url, net::SiteForCookies(), absl::nullopt, - net::CookieSettingOverrides())) { - return true; - } +bool DIPSService::Has3PCExceptionAs1P(const GURL& url) const { + DCHECK(!IsShuttingDown()); - return false; + return cookie_settings_->IsFullCookieAccessAllowed( + GURL(), net::SiteForCookies::FromUrl(url), url::Origin::Create(url), + net::CookieSettingOverrides()); } DIPSCookieMode DIPSService::GetCookieMode() const { @@ -347,8 +340,24 @@ } void DIPSService::RecordBounce(const GURL& url, + const GURL& initial_url, + const GURL& final_url, base::Time time, bool stateful) { + // If the initial or final URL has a 1P exception for all embedded 3PCs (e.g. + // Chrome Guard) then clear the tracking site from the DIPS DB, to avoid + // deleting its storage. The exemption overrides any bounces from non-exempted + // sites. + if (Has3PCExceptionAs1P(initial_url) || Has3PCExceptionAs1P(final_url)) { + const std::set<std::string> site_to_clear{GetSiteForDIPS(url)}; + // Don't clear the row if the tracker has interaction history, since we + // should preserve that context for future bounces. + storage_.AsyncCall(&DIPSStorage::RemoveRowsWithoutInteraction) + .WithArgs(site_to_clear); + + return; + } + storage_.AsyncCall(&DIPSStorage::RecordBounce).WithArgs(url, time, stateful); } @@ -386,7 +395,7 @@ // Record this bounce in the DIPS database. if (redirect.access_type != SiteDataAccessType::kUnknown) { record_bounce.Run( - redirect.url, redirect.time, + redirect.url, chain.initial_url, chain.final_url, redirect.time, /*stateful=*/redirect.access_type > SiteDataAccessType::kRead); } @@ -449,7 +458,7 @@ std::vector<std::string> non_excepted_sites; for (const auto& site : sites_to_clear) { - if (HasCookieException(site)) { + if (Has3PCExceptionAs3P(site)) { excepted_sites.push_back(site); } else { non_excepted_sites.push_back(site);
diff --git a/chrome/browser/dips/dips_service.h b/chrome/browser/dips/dips_service.h index 67a0abb..442a8da 100644 --- a/chrome/browser/dips/dips_service.h +++ b/chrome/browser/dips/dips_service.h
@@ -36,8 +36,12 @@ class DIPSService : public KeyedService { public: - using RecordBounceCallback = base::RepeatingCallback< - void(const GURL& url, base::Time time, bool stateful)>; + using RecordBounceCallback = + base::RepeatingCallback<void(const GURL& url, + const GURL& initial_url, + const GURL& final_url, + base::Time time, + bool stateful)>; using DeletedSitesCallback = base::OnceCallback<void(const std::vector<std::string>& sites)>; @@ -51,6 +55,13 @@ static DIPSService* Get(content::BrowserContext* context); base::SequenceBound<DIPSStorage>* storage() { return &storage_; } + void RecordBounceForTesting(const GURL& url, + const GURL& initial_url, + const GURL& final_url, + base::Time time, + bool stateful) { + RecordBounce(url, initial_url, final_url, time, stateful); + } DIPSCookieMode GetCookieMode() const; @@ -101,7 +112,11 @@ DIPSRedirectChainInfoPtr chain, size_t index, const DIPSState url_state); - void RecordBounce(const GURL& url, base::Time time, bool stateful); + void RecordBounce(const GURL& url, + const GURL& initial_url, + const GURL& final_url, + base::Time time, + bool stateful); static void HandleRedirect(const DIPSRedirectInfo& redirect, const DIPSRedirectChainInfo& chain, RecordBounceCallback callback); @@ -124,7 +139,13 @@ base::OnceClosure callback); bool ShouldBlockThirdPartyCookies() const; - bool HasCookieException(const std::string& site) const; + + // Checks whether there is an exception allowing |site| to use cookies when + // embedded by any other site. + bool Has3PCExceptionAs3P(const std::string& site) const; + // Checks whether there is an exception allowing all third-parties embedded + // under |url| to use cookies. + bool Has3PCExceptionAs1P(const GURL& url) const; base::RunLoop wait_for_file_deletion_; base::RunLoop wait_for_prepopulating_;
diff --git a/chrome/browser/dips/dips_service_unittest.cc b/chrome/browser/dips/dips_service_unittest.cc index 81fad41..25a6eb08 100644 --- a/chrome/browser/dips/dips_service_unittest.cc +++ b/chrome/browser/dips/dips_service_unittest.cc
@@ -242,10 +242,9 @@ // Record a bounce. GURL url("https://example.com"); base::Time bounce = base::Time::FromDoubleT(2); - GetService() - ->storage() - ->AsyncCall(&DIPSStorage::RecordBounce) - .WithArgs(url, bounce, false); + GetService()->RecordBounceForTesting(url, GURL("https://initial.com"), + GURL("https://final.com"), bounce, + false); WaitOnStorage(); EXPECT_TRUE(GetDIPSState(url).has_value()); @@ -293,10 +292,9 @@ // Record a bounce. GURL url("https://example.com"); base::Time bounce = base::Time::FromDoubleT(2); - GetService() - ->storage() - ->AsyncCall(&DIPSStorage::RecordBounce) - .WithArgs(url, bounce, false); + GetService()->RecordBounceForTesting(url, GURL("https://initial.com"), + GURL("https://final.com"), bounce, + false); WaitOnStorage(); EXPECT_TRUE(GetDIPSState(url).has_value()); @@ -326,14 +324,13 @@ } TEST_F(DIPSServiceStateRemovalTest, - BrowsingDataDeletion_Respects3PCExceptions) { + BrowsingDataDeletion_Respects3PExceptionsFor3PC) { ukm::TestAutoSetUkmRecorder ukm_recorder; base::test::ScopedFeatureList feature_list; feature_list.InitAndEnableFeatureWithParameters( dips::kFeature, {{"delete", "true"}, {"triggering_action", "bounce"}}); GURL excepted_3p_url("https://excepted-as-3p.com"); - GURL excepted_1p_url("https://excepted-as-1p.com"); GURL non_excepted_url("https://not-excepted.com"); HostContentSettingsMap* map = @@ -346,13 +343,6 @@ ContentSettingsPattern::Wildcard(), ContentSettingsType::COOKIES, ContentSetting::CONTENT_SETTING_ALLOW); - // Add exception to third-party cookie blocking rule for third-parties - // embedded by 'excepted_1p_url'. - map->SetContentSettingCustomScope( - ContentSettingsPattern::Wildcard(), - ContentSettingsPattern::FromString("[*.]" + excepted_1p_url.host()), - ContentSettingsType::COOKIES, ContentSetting::CONTENT_SETTING_ALLOW); - // Verify settings. EXPECT_EQ(CONTENT_SETTING_ALLOW, GetCookieSettings()->GetCookieSetting( excepted_3p_url, GURL(), @@ -361,30 +351,16 @@ GURL(), excepted_3p_url, net::CookieSettingOverrides(), nullptr)); - EXPECT_EQ(CONTENT_SETTING_BLOCK, GetCookieSettings()->GetCookieSetting( - excepted_1p_url, GURL(), - net::CookieSettingOverrides(), nullptr)); - EXPECT_EQ(CONTENT_SETTING_ALLOW, GetCookieSettings()->GetCookieSetting( - GURL(), excepted_1p_url, - net::CookieSettingOverrides(), nullptr)); - // Record bounces for sites. base::Time bounce = base::Time::FromDoubleT(2); - GetService() - ->storage() - ->AsyncCall(&DIPSStorage::RecordBounce) - .WithArgs(excepted_3p_url, bounce, false); - GetService() - ->storage() - ->AsyncCall(&DIPSStorage::RecordBounce) - .WithArgs(excepted_1p_url, bounce, false); - GetService() - ->storage() - ->AsyncCall(&DIPSStorage::RecordBounce) - .WithArgs(non_excepted_url, bounce, false); + GetService()->RecordBounceForTesting( + excepted_3p_url, GURL("https://initial.com"), GURL("https://final.com"), + bounce, false); + GetService()->RecordBounceForTesting( + non_excepted_url, GURL("https://initial.com"), GURL("https://final.com"), + bounce, false); WaitOnStorage(); EXPECT_TRUE(GetDIPSState(excepted_3p_url).has_value()); - EXPECT_TRUE(GetDIPSState(excepted_1p_url).has_value()); EXPECT_TRUE(GetDIPSState(non_excepted_url).has_value()); auto filter_builder = content::BrowsingDataFilterBuilder::Create( @@ -409,21 +385,92 @@ // Because this test fixture uses a MockBrowsingDataRemoverDelegate the DIPS // entry should not actually be removed. However, in practice it would be. EXPECT_TRUE(GetDIPSState(non_excepted_url).has_value()); - // The DIPS entries for 'excepted_3p_url' and 'excepted_1p_url' should be + // The DIPS entries for 'excepted_3p_url' should be // removed, since only DIPS state is cleared for sites with a cookie exception // and the BrowsingDataRemover(Delegate) isn't relied on for that kind of // deletion. EXPECT_FALSE(GetDIPSState(excepted_3p_url).has_value()); - EXPECT_FALSE(GetDIPSState(excepted_1p_url).has_value()); // All 3 sites should be reported to UKM. It doesn't matter whether the URL // was excepted or not. EXPECT_THAT(ukm_recorder, EntryUrlsAre("DIPS.Deletion", {"http://excepted-as-3p.com/", - "http://excepted-as-1p.com/", "http://not-excepted.com/"})); } +TEST_F(DIPSServiceStateRemovalTest, + BrowsingDataDeletion_Respects1PExceptionsFor3PC) { + ukm::TestAutoSetUkmRecorder ukm_recorder; + base::test::ScopedFeatureList feature_list; + feature_list.InitAndEnableFeatureWithParameters( + dips::kFeature, {{"delete", "true"}, {"triggering_action", "bounce"}}); + + GURL excepted_1p_url("https://excepted-as-1p.com"); + GURL non_excepted_url("https://not-excepted.com"); + GURL redirect_url_1("https://redirect-1.com"); + GURL redirect_url_2("https://redirect-2.com"); + GURL redirect_url_3("https://redirect-3.com"); + + HostContentSettingsMap* map = + HostContentSettingsMapFactory::GetForProfile(GetProfile()); + + // Add exception to third-party cookie blocking rule for third-parties + // embedded by 'excepted_1p_url'. + map->SetContentSettingCustomScope( + ContentSettingsPattern::Wildcard(), + ContentSettingsPattern::FromString("[*.]" + excepted_1p_url.host()), + ContentSettingsType::COOKIES, ContentSetting::CONTENT_SETTING_ALLOW); + + EXPECT_EQ(CONTENT_SETTING_BLOCK, GetCookieSettings()->GetCookieSetting( + excepted_1p_url, GURL(), + net::CookieSettingOverrides(), nullptr)); + EXPECT_EQ(CONTENT_SETTING_ALLOW, GetCookieSettings()->GetCookieSetting( + GURL(), excepted_1p_url, + net::CookieSettingOverrides(), nullptr)); + + base::Time bounce = base::Time::FromDoubleT(2); + // Record a bounce through redirect_url_1 that starts on an excepted + // URL. + GetService()->RecordBounceForTesting(redirect_url_1, excepted_1p_url, + non_excepted_url, bounce, false); + // Record a bounce through redirect_url_1 that ends on an excepted + // URL. + GetService()->RecordBounceForTesting(redirect_url_1, non_excepted_url, + excepted_1p_url, bounce, false); + // Record a bounce through redirect_url_2 that does not start or + // end on an excepted URL. + GetService()->RecordBounceForTesting(redirect_url_2, non_excepted_url, + non_excepted_url, bounce, false); + // Record a bounce through redirect_url_3 that does not start or + // end on an excepted URL. Record an interaction on this URL as well. + GetService()->RecordBounceForTesting(redirect_url_3, non_excepted_url, + non_excepted_url, bounce, false); + GetService() + ->storage() + ->AsyncCall(&DIPSStorage::RecordInteraction) + .WithArgs(redirect_url_3, bounce, GetService()->GetCookieMode()); + WaitOnStorage(); + + // Expect no recorded DIPSState for redirect_url_1, since every + // recorded bounce started or ended on an excepted site. + EXPECT_FALSE(GetDIPSState(redirect_url_1).has_value()); + EXPECT_TRUE(GetDIPSState(redirect_url_2).has_value()); + EXPECT_TRUE(GetDIPSState(redirect_url_3).has_value()); + + // Record a bounce through redirect_url_2 that starts on an + // excepted URL. This should clear the DB entry for redirect_url_2. + GetService()->RecordBounceForTesting(redirect_url_2, excepted_1p_url, + non_excepted_url, bounce, false); + EXPECT_FALSE(GetDIPSState(redirect_url_2).has_value()); + + // Record a bounce through redirect_url_3 that starts on an + // excepted URL. This should not clear the DB entry for redirect_url_3 as it + // has a recorded interaction. + GetService()->RecordBounceForTesting(redirect_url_3, excepted_1p_url, + non_excepted_url, bounce, false); + EXPECT_TRUE(GetDIPSState(redirect_url_3).has_value()); +} + TEST_F(DIPSServiceStateRemovalTest, ImmediateEnforcement) { base::test::ScopedFeatureList feature_list; feature_list.InitAndEnableFeatureWithParameters( @@ -433,10 +480,9 @@ // Record a bounce. GURL url("https://example.com"); base::Time bounce = Now(); - GetService() - ->storage() - ->AsyncCall(&DIPSStorage::RecordBounce) - .WithArgs(url, bounce, false); + GetService()->RecordBounceForTesting(url, GURL("https://initial.com"), + GURL("https://final.com"), bounce, + false); WaitOnStorage(); EXPECT_TRUE(GetDIPSState(url).has_value()); @@ -502,10 +548,9 @@ // Record a bounce. GURL url("https://example.com"); base::Time bounce = base::Time::FromDoubleT(2); - GetService() - ->storage() - ->AsyncCall(&DIPSStorage::RecordBounce) - .WithArgs(url, bounce, false); + GetService()->RecordBounceForTesting(url, GURL("https://initial.com"), + GURL("https://final.com"), bounce, + false); WaitOnStorage(); // Set the current time to just after the bounce happened.
diff --git a/chrome/browser/dips/dips_storage.cc b/chrome/browser/dips/dips_storage.cc index a80348f..32183705 100644 --- a/chrome/browser/dips/dips_storage.cc +++ b/chrome/browser/dips/dips_storage.cc
@@ -149,6 +149,17 @@ db_->RemoveRows(sites); } +void DIPSStorage::RemoveRowsWithoutInteraction( + const std::set<std::string>& sites) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(db_); + + std::set<std::string> filtered_sites = FilterSitesWithoutInteraction(sites); + + RemoveRows( + std::vector<std::string>(filtered_sites.begin(), filtered_sites.end())); +} + // DIPSTabHelper Function Impls ------------------------------------------------ void DIPSStorage::RecordStorage(const GURL& url,
diff --git a/chrome/browser/dips/dips_storage.h b/chrome/browser/dips/dips_storage.h index e1f67cd..54c7794d 100644 --- a/chrome/browser/dips/dips_storage.h +++ b/chrome/browser/dips/dips_storage.h
@@ -36,7 +36,10 @@ network::mojom::ClearDataFilterPtr filter, const DIPSEventRemovalType type); + // Delete all DB rows for |sites|. void RemoveRows(const std::vector<std::string>& sites); + // Delete all DB rows for |sites| without eligible user interactions. + void RemoveRowsWithoutInteraction(const std::set<std::string>& sites); // DIPS Helper Method Impls --------------------------------------------------
diff --git a/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate.cc b/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate.cc index a968caab..2ee6a55 100644 --- a/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate.cc +++ b/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate.cc
@@ -636,6 +636,7 @@ PrepareRequest(enterprise_connectors::PRINT, request.get()); request->set_filename(title_); + request->set_printer_name(data_.printer_name); if (!page_content_type_.empty()) { request->set_content_type(page_content_type_); }
diff --git a/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate.h b/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate.h index e38dca4..248f147 100644 --- a/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate.h +++ b/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate.h
@@ -111,6 +111,11 @@ // Page to be printed to scan. base::ReadOnlySharedMemoryRegion page; + // TODO(b/280457160): Set printer name once scan after printer preview + // is done. + // Printer name of the page being sent to, empty for non-print actions. + std::string printer_name; + // The settings to use for the analysis of the data in this struct. enterprise_connectors::AnalysisSettings settings; };
diff --git a/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.cc b/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.cc index 97d2850b..d1d6e16a 100644 --- a/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.cc +++ b/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.cc
@@ -234,7 +234,7 @@ data = std::move(data_arg); })); - // Increment request canalysis_ount. + // Increment total analysis request count. total_analysis_requests_count_++; // Simulate a response. @@ -262,7 +262,7 @@ data = std::move(data_arg); })); - // Increment request canalysis_ount. + // Increment total analysis request count. total_analysis_requests_count_++; // Simulate a response. @@ -285,7 +285,7 @@ DCHECK_EQ(dm_token_, request->device_token()); } - // Increment request canalysis_ount. + // Increment total analysis request count. total_analysis_requests_count_++; // Simulate a response. @@ -304,7 +304,7 @@ DCHECK_EQ(dm_token_, request->device_token()); } - // Increment request coanalysis_unt. + // Increment total analysis request count. total_analysis_requests_count_++; // Simulate a response.
diff --git a/chrome/browser/enterprise/reporting/legacy_tech/legacy_tech_report_policy_handler.cc b/chrome/browser/enterprise/reporting/legacy_tech/legacy_tech_report_policy_handler.cc new file mode 100644 index 0000000..8707818 --- /dev/null +++ b/chrome/browser/enterprise/reporting/legacy_tech/legacy_tech_report_policy_handler.cc
@@ -0,0 +1,84 @@ +// 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. + +#include "chrome/browser/enterprise/reporting/legacy_tech/legacy_tech_report_policy_handler.h" + +#include "base/values.h" +#include "build/build_config.h" +#include "chrome/browser/enterprise/reporting/prefs.h" +#include "chrome/common/pref_names.h" +#include "components/policy/core/browser/policy_error_map.h" +#include "components/policy/core/common/policy_map.h" +#include "components/policy/core/common/policy_types.h" +#include "components/policy/policy_constants.h" +#include "components/prefs/pref_value_map.h" +#include "components/strings/grit/components_strings.h" +#include "components/url_matcher/url_util.h" +#include "url/gurl.h" + +namespace enterprise_reporting { + +LegacyTechReportPolicyHandler::LegacyTechReportPolicyHandler() + : policy::URLSchemeListPolicyHandler( + policy::key::kLegacyTechReportAllowlist, + kCloudLegacyTechReportAllowlist) {} + +LegacyTechReportPolicyHandler::~LegacyTechReportPolicyHandler() = default; + +bool LegacyTechReportPolicyHandler::CheckPolicySettings( + const policy::PolicyMap& policies, + policy::PolicyErrorMap* errors) { + if (!policies.IsPolicySet(policy_name())) { + return true; + } + if (!URLSchemeListPolicyHandler::CheckPolicySettings(policies, errors)) { + return false; + } + + const policy::PolicyMap::Entry* policy = policies.Get(policy_name()); + if (policy->source != policy::POLICY_SOURCE_CLOUD) { + errors->AddError(policy_name(), IDS_POLICY_CLOUD_SOURCE_ONLY_ERROR); + return false; + } + +#if !BUILDFLAG(IS_CHROMEOS) + // If policy is set with the signed in account, it must be affiliated. + if (policy->scope == policy::POLICY_SCOPE_USER && + !policies.IsUserAffiliated()) { + errors->AddError(policy_name(), IDS_POLICY_USER_IS_NOT_AFFILIATED_ERROR); + return false; + } +#endif + + return true; +} + +size_t LegacyTechReportPolicyHandler::max_items() { + return 100; +} + +bool LegacyTechReportPolicyHandler::ValidatePolicyEntry( + const std::string* policy) { + url_matcher::util::FilterComponents components; + if (!policy) { + return false; + } + + if (!url_matcher::util::FilterToComponents( + *policy, &components.scheme, &components.host, + &components.match_subdomains, &components.port, &components.path, + &components.query)) { + return false; + } + + // Wildcard URL '*' and Wildcard host is not allowed. + if (components.IsWildcard() || components.host == "") { + return false; + } + + // Scheme, port, query will be ignored without warning. + return true; +} + +} // namespace enterprise_reporting
diff --git a/chrome/browser/enterprise/reporting/legacy_tech/legacy_tech_report_policy_handler.h b/chrome/browser/enterprise/reporting/legacy_tech/legacy_tech_report_policy_handler.h new file mode 100644 index 0000000..36c0d21 --- /dev/null +++ b/chrome/browser/enterprise/reporting/legacy_tech/legacy_tech_report_policy_handler.h
@@ -0,0 +1,32 @@ +// 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 CHROME_BROWSER_ENTERPRISE_REPORTING_LEGACY_TECH_LEGACY_TECH_REPORT_POLICY_HANDLER_H_ +#define CHROME_BROWSER_ENTERPRISE_REPORTING_LEGACY_TECH_LEGACY_TECH_REPORT_POLICY_HANDLER_H_ + +#include "components/policy/core/browser/url_scheme_list_policy_handler.h" + +namespace enterprise_reporting { + +class LegacyTechReportPolicyHandler + : public policy::URLSchemeListPolicyHandler { + public: + LegacyTechReportPolicyHandler(); + LegacyTechReportPolicyHandler(const LegacyTechReportPolicyHandler&) = delete; + LegacyTechReportPolicyHandler& operator=( + const LegacyTechReportPolicyHandler&) = delete; + ~LegacyTechReportPolicyHandler() override; + + // policy::URLSchemeListPolicyHandler + bool CheckPolicySettings(const policy::PolicyMap& policies, + policy::PolicyErrorMap* errors) override; + + protected: + size_t max_items() override; + bool ValidatePolicyEntry(const std::string* policy) override; +}; + +} // namespace enterprise_reporting + +#endif // CHROME_BROWSER_ENTERPRISE_REPORTING_LEGACY_TECH_LEGACY_TECH_REPORT_POLICY_HANDLER_H_
diff --git a/chrome/browser/enterprise/reporting/prefs.cc b/chrome/browser/enterprise/reporting/prefs.cc index f0679d74..ca091e1b 100644 --- a/chrome/browser/enterprise/reporting/prefs.cc +++ b/chrome/browser/enterprise/reporting/prefs.cc
@@ -20,6 +20,9 @@ const char kCloudExtensionRequestUploadedIds[] = "enterprise_reporting.extension_request.pending.ids"; +const char kCloudLegacyTechReportAllowlist[] = + "enterprise_reporting.legachy_tech.urls"; + const base::TimeDelta kDefaultReportFrequency = base::Hours(24); void RegisterLocalStatePrefs(PrefRegistrySimple* registry) { @@ -47,6 +50,8 @@ registry->RegisterDictionaryPref(prefs::kCloudExtensionRequestIds); registry->RegisterDictionaryPref(kCloudExtensionRequestUploadedIds); #endif // !BUILDFLAG(IS_ANDROID) + + registry->RegisterListPref(kCloudLegacyTechReportAllowlist); } } // namespace enterprise_reporting
diff --git a/chrome/browser/enterprise/reporting/prefs.h b/chrome/browser/enterprise/reporting/prefs.h index 783b489..62852b3 100644 --- a/chrome/browser/enterprise/reporting/prefs.h +++ b/chrome/browser/enterprise/reporting/prefs.h
@@ -16,6 +16,8 @@ extern const char kLastUploadVersion[]; extern const char kCloudExtensionRequestUploadedIds[]; +extern const char kCloudLegacyTechReportAllowlist[]; + void RegisterLocalStatePrefs(PrefRegistrySimple* registry); void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
diff --git a/chrome/browser/enterprise/signals/user_delegate_impl.cc b/chrome/browser/enterprise/signals/user_delegate_impl.cc index f1365ad..2498c72 100644 --- a/chrome/browser/enterprise/signals/user_delegate_impl.cc +++ b/chrome/browser/enterprise/signals/user_delegate_impl.cc
@@ -4,10 +4,13 @@ #include "chrome/browser/enterprise/signals/user_delegate_impl.h" +#include <set> + #include "base/check.h" #include "chrome/browser/enterprise/util/affiliation.h" #include "chrome/browser/policy/profile_policy_connector.h" #include "chrome/browser/profiles/profile.h" +#include "components/policy/core/common/policy_types.h" #include "components/signin/public/base/consent_level.h" #include "components/signin/public/identity_manager/identity_manager.h" @@ -26,7 +29,7 @@ return chrome::enterprise_util::IsProfileAffiliated(profile_); } -bool UserDelegateImpl::IsManaged() const { +bool UserDelegateImpl::IsManagedUser() const { const auto* profile_policy_connector = profile_->GetProfilePolicyConnector(); if (!profile_policy_connector) { @@ -42,4 +45,10 @@ identity_manager_->FindExtendedAccountInfoByGaiaId(gaia_id).account_id; } +std::set<policy::PolicyScope> UserDelegateImpl::GetPolicyScopesNeedingSignals() + const { + // TODO(b:279060607): Add actual policy scopes. + return std::set<policy::PolicyScope>(); +} + } // namespace enterprise_signals
diff --git a/chrome/browser/enterprise/signals/user_delegate_impl.h b/chrome/browser/enterprise/signals/user_delegate_impl.h index ed623ac..7eb74c2 100644 --- a/chrome/browser/enterprise/signals/user_delegate_impl.h +++ b/chrome/browser/enterprise/signals/user_delegate_impl.h
@@ -26,8 +26,9 @@ // UserDelegate: bool IsAffiliated() const override; - bool IsManaged() const override; + bool IsManagedUser() const override; bool IsSameUser(const std::string& gaia_id) const override; + std::set<policy::PolicyScope> GetPolicyScopesNeedingSignals() const override; private: const raw_ptr<Profile> profile_;
diff --git a/chrome/browser/enterprise/signals/user_delegate_impl_unittest.cc b/chrome/browser/enterprise/signals/user_delegate_impl_unittest.cc index cf35e62e..a7ee91d 100644 --- a/chrome/browser/enterprise/signals/user_delegate_impl_unittest.cc +++ b/chrome/browser/enterprise/signals/user_delegate_impl_unittest.cc
@@ -4,7 +4,10 @@ #include "chrome/browser/enterprise/signals/user_delegate_impl.h" +#include <set> + #include "chrome/test/base/testing_profile.h" +#include "components/policy/core/common/policy_types.h" #include "components/signin/public/base/consent_level.h" #include "components/signin/public/identity_manager/account_info.h" #include "components/signin/public/identity_manager/identity_manager.h" @@ -32,22 +35,22 @@ signin::IdentityTestEnvironment identity_test_env_; }; -// Tests that IsManaged returns false when the user is not managed. -TEST_F(UserDelegateImplTest, IsManaged_False) { +// Tests that IsManagedUser returns false when the user is not managed. +TEST_F(UserDelegateImplTest, IsManagedUser_False) { auto test_profile = CreateProfile(/*is_managed=*/false); UserDelegateImpl user_delegate(test_profile.get(), identity_test_env_.identity_manager()); - EXPECT_FALSE(user_delegate.IsManaged()); + EXPECT_FALSE(user_delegate.IsManagedUser()); } -// Tests that IsManaged returns true when the user is managed. -TEST_F(UserDelegateImplTest, IsManaged_True) { +// Tests that IsManagedUser returns true when the user is managed. +TEST_F(UserDelegateImplTest, IsManagedUser_True) { auto test_profile = CreateProfile(/*is_managed=*/true); UserDelegateImpl user_delegate(test_profile.get(), identity_test_env_.identity_manager()); - EXPECT_TRUE(user_delegate.IsManaged()); + EXPECT_TRUE(user_delegate.IsManagedUser()); } // Tests that IsSameUser returns false when given a different user. @@ -98,4 +101,14 @@ EXPECT_TRUE(user_delegate.IsSameUser(account.gaia)); } +// Tests that GetPolicyScopesNeedingSignals only returns an empty set +// for now. +TEST_F(UserDelegateImplTest, GetPolicyScopesNeedingSignals_Empty) { + auto test_profile = CreateProfile(/*is_managed=*/true); + UserDelegateImpl user_delegate(test_profile.get(), + identity_test_env_.identity_manager()); + EXPECT_EQ(user_delegate.GetPolicyScopesNeedingSignals(), + std::set<policy::PolicyScope>()); +} + } // namespace enterprise_signals
diff --git a/chrome/browser/extensions/api/automation/automation_apitest.cc b/chrome/browser/extensions/api/automation/automation_apitest.cc index 75decfb..a7ed23f5 100644 --- a/chrome/browser/extensions/api/automation/automation_apitest.cc +++ b/chrome/browser/extensions/api/automation/automation_apitest.cc
@@ -487,8 +487,8 @@ IN_PROC_BROWSER_TEST_F(AutomationApiTest, DesktopFocusViews) { AutomationManagerAura::GetInstance()->Enable(); // Trigger the shelf subtree to be computed. - ash::AcceleratorController::Get()->PerformActionIfEnabled(ash::FOCUS_SHELF, - {}); + ash::AcceleratorController::Get()->PerformActionIfEnabled( + ash::AcceleratorAction::kFocusShelf, {}); ASSERT_TRUE(RunExtensionTest("automation/tests/desktop", {.extension_url = "focus_views.html"})) @@ -512,8 +512,8 @@ IN_PROC_BROWSER_TEST_F(AutomationApiTest, DesktopActions) { AutomationManagerAura::GetInstance()->Enable(); // Trigger the shelf subtree to be computed. - ash::AcceleratorController::Get()->PerformActionIfEnabled(ash::FOCUS_SHELF, - {}); + ash::AcceleratorController::Get()->PerformActionIfEnabled( + ash::AcceleratorAction::kFocusShelf, {}); ASSERT_TRUE(RunExtensionTest("automation/tests/desktop", {.extension_url = "actions.html"}))
diff --git a/chrome/browser/extensions/api/content_settings/content_settings_api.cc b/chrome/browser/extensions/api/content_settings/content_settings_api.cc index a99e703a..9d3cff2 100644 --- a/chrome/browser/extensions/api/content_settings/content_settings_api.cc +++ b/chrome/browser/extensions/api/content_settings/content_settings_api.cc
@@ -266,16 +266,13 @@ readable_type_name.c_str()))); } - size_t num_values = 0; - int histogram_value = - ContentSettingTypeToHistogramValue(content_type, &num_values); if (primary_pattern != secondary_pattern && secondary_pattern != ContentSettingsPattern::Wildcard()) { - UMA_HISTOGRAM_EXACT_LINEAR("ContentSettings.ExtensionEmbeddedSettingSet", - histogram_value, num_values); + RecordContentSettingsHistogram( + "ContentSettings.ExtensionEmbeddedSettingSet", content_type); } else { - UMA_HISTOGRAM_EXACT_LINEAR("ContentSettings.ExtensionNonEmbeddedSettingSet", - histogram_value, num_values); + RecordContentSettingsHistogram( + "ContentSettings.ExtensionNonEmbeddedSettingSet", content_type); } if (primary_pattern != secondary_pattern &&
diff --git a/chrome/browser/extensions/api/content_settings/content_settings_apitest.cc b/chrome/browser/extensions/api/content_settings/content_settings_apitest.cc index fca8048..3a4f89d 100644 --- a/chrome/browser/extensions/api/content_settings/content_settings_apitest.cc +++ b/chrome/browser/extensions/api/content_settings/content_settings_apitest.cc
@@ -356,13 +356,12 @@ const char kExtensionPath[] = "content_settings/embeddedsettingsmetric"; EXPECT_TRUE(RunExtensionTest(kExtensionPath)) << message_; - size_t num_values = 0; - int images_type = ContentSettingTypeToHistogramValue( - ContentSettingsType::IMAGES, &num_values); - int geolocation_type = ContentSettingTypeToHistogramValue( - ContentSettingsType::GEOLOCATION, &num_values); - int cookies_type = ContentSettingTypeToHistogramValue( - ContentSettingsType::COOKIES, &num_values); + int images_type = + ContentSettingTypeToHistogramValue(ContentSettingsType::IMAGES); + int geolocation_type = + ContentSettingTypeToHistogramValue(ContentSettingsType::GEOLOCATION); + int cookies_type = + ContentSettingTypeToHistogramValue(ContentSettingsType::COOKIES); histogram_tester.ExpectBucketCount( "ContentSettings.ExtensionEmbeddedSettingSet", images_type, 1);
diff --git a/chrome/browser/extensions/api/messaging/native_messaging_policy_handler.cc b/chrome/browser/extensions/api/messaging/native_messaging_policy_handler.cc index 8be4e3c..1223270 100644 --- a/chrome/browser/extensions/api/messaging/native_messaging_policy_handler.cc +++ b/chrome/browser/extensions/api/messaging/native_messaging_policy_handler.cc
@@ -28,10 +28,10 @@ return NativeMessagingHostManifest::IsValidName(str); } -void NativeMessagingHostListPolicyHandler::ApplyList(base::Value filtered_list, - PrefValueMap* prefs) { - DCHECK(filtered_list.is_list()); - prefs->SetValue(pref_path_, std::move(filtered_list)); +void NativeMessagingHostListPolicyHandler::ApplyList( + base::Value::List filtered_list, + PrefValueMap* prefs) { + prefs->SetValue(pref_path_, base::Value(std::move(filtered_list))); } } // namespace extensions
diff --git a/chrome/browser/extensions/api/messaging/native_messaging_policy_handler.h b/chrome/browser/extensions/api/messaging/native_messaging_policy_handler.h index 280c581..559b60cd 100644 --- a/chrome/browser/extensions/api/messaging/native_messaging_policy_handler.h +++ b/chrome/browser/extensions/api/messaging/native_messaging_policy_handler.h
@@ -32,7 +32,7 @@ bool CheckListEntry(const base::Value& value) override; // Sets |prefs| at pref_path() to |filtered_list|. - void ApplyList(base::Value filtered_list, PrefValueMap* prefs) override; + void ApplyList(base::Value::List filtered_list, PrefValueMap* prefs) override; private: const char* pref_path_;
diff --git a/chrome/browser/extensions/policy_handlers.cc b/chrome/browser/extensions/policy_handlers.cc index eec22173..b31c9653 100644 --- a/chrome/browser/extensions/policy_handlers.cc +++ b/chrome/browser/extensions/policy_handlers.cc
@@ -71,10 +71,9 @@ return crx_file::id_util::IdIsValid(str); } -void ExtensionListPolicyHandler::ApplyList(base::Value filtered_list, +void ExtensionListPolicyHandler::ApplyList(base::Value::List filtered_list, PrefValueMap* prefs) { - DCHECK(filtered_list.is_list()); - prefs->SetValue(pref_path_, std::move(filtered_list)); + prefs->SetValue(pref_path_, base::Value(std::move(filtered_list))); } // ExtensionInstallForceListPolicyHandler implementation -----------------------
diff --git a/chrome/browser/extensions/policy_handlers.h b/chrome/browser/extensions/policy_handlers.h index acddaab..add5dda 100644 --- a/chrome/browser/extensions/policy_handlers.h +++ b/chrome/browser/extensions/policy_handlers.h
@@ -36,7 +36,7 @@ bool CheckListEntry(const base::Value& value) override; // Sets |prefs| at pref_path() to |filtered_list|. - void ApplyList(base::Value filtered_list, PrefValueMap* prefs) override; + void ApplyList(base::Value::List filtered_list, PrefValueMap* prefs) override; private: const char* pref_path_;
diff --git a/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc b/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc index ddaf009..c390d950 100644 --- a/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc +++ b/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc
@@ -309,9 +309,13 @@ // https://crbug.com/984641#c22. {base::DIR_HOME, FILE_PATH_LITERAL("Library/Containers"), kDontBlockChildren}, - // Allow access to iCloud files. + // Allow access to iCloud files... {base::DIR_HOME, FILE_PATH_LITERAL("Library/Mobile Documents"), kDontBlockChildren}, + // ... which may also appear at this directory. + {base::DIR_HOME, + FILE_PATH_LITERAL("Library/Mobile Documents/com~apple~CloudDocs"), + kDontBlockChildren}, #endif #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) // On Linux also block access to devices via /dev.
diff --git a/chrome/browser/file_system_access/chrome_file_system_access_permission_context_unittest.cc b/chrome/browser/file_system_access/chrome_file_system_access_permission_context_unittest.cc index eca014eb..13d95541 100644 --- a/chrome/browser/file_system_access/chrome_file_system_access_permission_context_unittest.cc +++ b/chrome/browser/file_system_access/chrome_file_system_access_permission_context_unittest.cc
@@ -423,6 +423,54 @@ #endif } +#if BUILDFLAG(IS_MAC) +TEST_F(ChromeFileSystemAccessPermissionContextTest, + ConfirmSensitiveEntryAccess_DontBlockAllChildren_Overlapping) { + base::FilePath home_dir = temp_dir_.GetPath().AppendASCII("home"); + base::ScopedPathOverride home_override(base::DIR_HOME, home_dir, true, true); + + // Home directory itself should not be allowed. + EXPECT_EQ(SensitiveDirectoryResult::kAbort, + ConfirmSensitiveEntryAccessSync( + permission_context(), PathType::kLocal, home_dir, + HandleType::kDirectory, UserAction::kOpen)); + // $HOME/Library should be blocked. + EXPECT_EQ(SensitiveDirectoryResult::kAbort, + ConfirmSensitiveEntryAccessSync( + permission_context(), PathType::kLocal, + home_dir.AppendASCII("Library"), HandleType::kDirectory, + UserAction::kOpen)); + // $HOME/Library/Mobile Documents should be blocked. + EXPECT_EQ(SensitiveDirectoryResult::kAbort, + ConfirmSensitiveEntryAccessSync( + permission_context(), PathType::kLocal, + home_dir.AppendASCII("Library/Mobile Documents"), + HandleType::kDirectory, UserAction::kOpen)); + // Paths within $HOME/Library/Mobile Documents should not be blocked. + EXPECT_EQ(SensitiveDirectoryResult::kAllowed, + ConfirmSensitiveEntryAccessSync( + permission_context(), PathType::kLocal, + home_dir.AppendASCII("Library/Mobile Documents/foo"), + HandleType::kDirectory, UserAction::kOpen)); + // Except for $HOME/Library/Mobile Documents/com~apple~CloudDocs, which should + // be blocked. + EXPECT_EQ( + SensitiveDirectoryResult::kAbort, + ConfirmSensitiveEntryAccessSync( + permission_context(), PathType::kLocal, + home_dir.AppendASCII("Library/Mobile Documents/com~apple~CloudDocs"), + HandleType::kDirectory, UserAction::kOpen)); + // Paths within $HOME/Library/Mobile Documents/com~apple~CloudDocs should not + // be blocked. + EXPECT_EQ(SensitiveDirectoryResult::kAllowed, + ConfirmSensitiveEntryAccessSync( + permission_context(), PathType::kLocal, + home_dir.AppendASCII( + "Library/Mobile Documents/com~apple~CloudDocs/foo"), + HandleType::kDirectory, UserAction::kOpen)); +} +#endif // BUILDFLAG(IS_MAC) + #if BUILDFLAG(IS_WIN) TEST_F(ChromeFileSystemAccessPermissionContextTest, ConfirmSensitiveEntryAccess_UNCPath) {
diff --git a/chrome/browser/first_run/first_run_internal_linux.cc b/chrome/browser/first_run/first_run_internal_linux.cc index 4c1ff7c..33fd5790 100644 --- a/chrome/browser/first_run/first_run_internal_linux.cc +++ b/chrome/browser/first_run/first_run_internal_linux.cc
@@ -20,15 +20,12 @@ base::FilePath InitialPrefsPath() { // The standard location of the initial prefs is next to the chrome binary. - base::FilePath initial_prefs; - if (!base::PathService::Get(base::DIR_EXE, &initial_prefs)) + base::FilePath dir_exe; + if (!base::PathService::Get(base::DIR_EXE, &dir_exe)) { return base::FilePath(); + } - base::FilePath new_path = initial_prefs.AppendASCII(installer::kInitialPrefs); - if (base::PathIsReadable(new_path)) - return new_path; - - return initial_prefs.AppendASCII(installer::kLegacyInitialPrefs); + return installer::InitialPreferences::Path(dir_exe); } } // namespace internal
diff --git a/chrome/browser/first_run/first_run_internal_win.cc b/chrome/browser/first_run/first_run_internal_win.cc index 034379df..b86746a 100644 --- a/chrome/browser/first_run/first_run_internal_win.cc +++ b/chrome/browser/first_run/first_run_internal_win.cc
@@ -158,11 +158,7 @@ if (!base::PathService::Get(base::DIR_EXE, &dir_exe)) return base::FilePath(); - base::FilePath initial_prefs = dir_exe.AppendASCII(installer::kInitialPrefs); - if (base::PathIsReadable(initial_prefs)) - return initial_prefs; - - return dir_exe.AppendASCII(installer::kLegacyInitialPrefs); + return installer::InitialPreferences::Path(dir_exe); } } // namespace internal
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 24fe530..cb7ed27 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -3211,12 +3211,6 @@ "Warning: Highly experimental. May lead to loss of passwords and " "impact performance."; -const char kUnifiedPasswordManagerErrorMessagesName[] = - "Error Messages when using Google Mobile Services for passwords"; -const char kUnifiedPasswordManagerErrorMessagesDescription[] = - "Enables showing error messages that offer signing in again to fix the " - "auth errors."; - const char kUnifiedPasswordManagerAndroidReenrollmentName[] = "Automatic reenrollement of users who were evicted from using Google " "Mobile Services after experiencing errors.";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 7ec9d4e..16de394 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -1843,9 +1843,6 @@ extern const char kUnifiedPasswordManagerAndroidName[]; extern const char kUnifiedPasswordManagerAndroidDescription[]; -extern const char kUnifiedPasswordManagerErrorMessagesName[]; -extern const char kUnifiedPasswordManagerErrorMessagesDescription[]; - extern const char kUnifiedPasswordManagerAndroidReenrollmentName[]; extern const char kUnifiedPasswordManagerAndroidReenrollmentDescription[];
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc index 470a771..aed0593 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -376,7 +376,6 @@ &password_manager::features::kUnifiedCredentialManagerDryRun, &password_manager::features::kUnifiedPasswordManagerAndroid, &password_manager::features::kUnifiedPasswordManagerAndroidBranding, - &password_manager::features::kUnifiedPasswordManagerErrorMessages, &password_manager::features::kPasswordEditDialogWithDetails, &privacy_sandbox::kPrivacySandboxFirstPartySetsUI, &privacy_sandbox::kPrivacySandboxSettings3,
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 8976392..6b1a85f 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
@@ -7,7 +7,6 @@ import org.chromium.base.FeatureList; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; import java.util.HashMap; import java.util.Map; @@ -23,7 +22,6 @@ * flags. */ @JNINamespace("chrome::android") -@MainDex public abstract class ChromeFeatureList { /** Prevent instantiation. */ private ChromeFeatureList() {} @@ -518,8 +516,6 @@ public static final String UNIFIED_PASSWORD_MANAGER_ANDROID = "UnifiedPasswordManagerAndroid"; public static final String UNIFIED_PASSWORD_MANAGER_ANDROID_BRANDING = "UnifiedPasswordManagerAndroidBranding"; - public static final String UNIFIED_PASSWORD_MANAGER_ERROR_MESSAGES = - "UnifiedPasswordManagerErrorMessages"; public static final String USE_CHIME_ANDROID_SDK = "UseChimeAndroidSdk"; public static final String USE_LIBUNWINDSTACK_NATIVE_UNWINDER_ANDROID = "UseLibunwindstackNativeUnwinderAndroid";
diff --git a/chrome/browser/history_clusters/BUILD.gn b/chrome/browser/history_clusters/BUILD.gn index 1d086a2..41f210e 100644 --- a/chrome/browser/history_clusters/BUILD.gn +++ b/chrome/browser/history_clusters/BUILD.gn
@@ -66,7 +66,6 @@ "//components/strings:components_strings_grd", "//content/public/android:content_java", "//content/public/android:content_java_resources", - "//third_party/android_deps:com_android_support_support_annotations_java", "//third_party/androidx:androidx_annotation_annotation_java", "//third_party/androidx:androidx_appcompat_appcompat_java", "//third_party/androidx:androidx_appcompat_appcompat_resources_java",
diff --git a/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClusterView.java b/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClusterView.java index 086958b..6b1670e 100644 --- a/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClusterView.java +++ b/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClusterView.java
@@ -8,12 +8,12 @@ import android.content.Context; import android.content.res.ColorStateList; import android.graphics.drawable.Drawable; -import android.support.annotation.DrawableRes; import android.util.AttributeSet; import android.view.View; import android.view.accessibility.AccessibilityNodeInfo; import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction; +import androidx.annotation.DrawableRes; import androidx.annotation.IntDef; import androidx.annotation.Nullable; import androidx.core.widget.ImageViewCompat;
diff --git a/chrome/browser/net/explicitly_allowed_network_ports_policy_handler.cc b/chrome/browser/net/explicitly_allowed_network_ports_policy_handler.cc index 5452209..ecd74da 100644 --- a/chrome/browser/net/explicitly_allowed_network_ports_policy_handler.cc +++ b/chrome/browser/net/explicitly_allowed_network_ports_policy_handler.cc
@@ -42,10 +42,10 @@ } void ExplicitlyAllowedNetworkPortsPolicyHandler::ApplyList( - base::Value filtered_list, + base::Value::List filtered_list, PrefValueMap* prefs) { base::Value::List integer_list; - for (const base::Value& value : filtered_list.GetList()) { + for (const base::Value& value : filtered_list) { const std::string& as_string = value.GetString(); int as_int; const bool success = base::StringToInt(as_string, &as_int);
diff --git a/chrome/browser/net/explicitly_allowed_network_ports_policy_handler.h b/chrome/browser/net/explicitly_allowed_network_ports_policy_handler.h index 088381a..e94bc2ac 100644 --- a/chrome/browser/net/explicitly_allowed_network_ports_policy_handler.h +++ b/chrome/browser/net/explicitly_allowed_network_ports_policy_handler.h
@@ -25,7 +25,7 @@ bool CheckListEntry(const base::Value& value) override; // Converts the values to integers. - void ApplyList(base::Value filtered_list, PrefValueMap* prefs) override; + void ApplyList(base::Value::List filtered_list, PrefValueMap* prefs) override; }; } // namespace policy
diff --git a/chrome/browser/notifications/notification_interactive_uitest.cc b/chrome/browser/notifications/notification_interactive_uitest.cc index 28e3c7f..73790cc 100644 --- a/chrome/browser/notifications/notification_interactive_uitest.cc +++ b/chrome/browser/notifications/notification_interactive_uitest.cc
@@ -414,10 +414,9 @@ EXPECT_EQ( *ukm_recorder.GetEntryMetric(entry, "Source"), static_cast<int64_t>(permissions::PermissionSourceUI::INLINE_SETTINGS)); - size_t num_values = 0; - EXPECT_EQ(*ukm_recorder.GetEntryMetric(entry, "PermissionType"), - ContentSettingTypeToHistogramValue( - ContentSettingsType::NOTIFICATIONS, &num_values)); + EXPECT_EQ( + *ukm_recorder.GetEntryMetric(entry, "PermissionType"), + ContentSettingTypeToHistogramValue(ContentSettingsType::NOTIFICATIONS)); EXPECT_EQ(*ukm_recorder.GetEntryMetric(entry, "Action"), static_cast<int64_t>(permissions::PermissionAction::REVOKED)); }
diff --git a/chrome/browser/password_manager/android/BUILD.gn b/chrome/browser/password_manager/android/BUILD.gn index 4b881dd..32e5f0ee5 100644 --- a/chrome/browser/password_manager/android/BUILD.gn +++ b/chrome/browser/password_manager/android/BUILD.gn
@@ -218,6 +218,7 @@ ":test_support_java", "$google_play_services_package:google_play_services_base_java", "$google_play_services_package:google_play_services_basement_java", + "pwd_migration:junit", "//base:base_java", "//base:base_java_test_support", "//base:base_java_test_support_uncommon",
diff --git a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerErrorMessageHelperBridge.java b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerErrorMessageHelperBridge.java index 6e3f871..7065757 100644 --- a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerErrorMessageHelperBridge.java +++ b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerErrorMessageHelperBridge.java
@@ -5,13 +5,10 @@ package org.chromium.chrome.browser.password_manager; import android.app.Activity; - import androidx.annotation.VisibleForTesting; - import org.chromium.base.TimeUtils; import org.chromium.base.annotations.CalledByNative; import org.chromium.base.metrics.RecordHistogram; -import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; @@ -26,29 +23,27 @@ import java.util.concurrent.TimeUnit; -/** - * The bridge provides a way to interact with the Android sign in flow. - */ +/** The bridge provides a way to interact with the Android sign in flow. */ public class PasswordManagerErrorMessageHelperBridge { @VisibleForTesting static final long MINIMAL_INTERVAL_BETWEEN_PROMPTS_MS = TimeUnit.MILLISECONDS.convert(24, TimeUnit.HOURS); + @VisibleForTesting static final long MINIMAL_INTERVAL_TO_SYNC_ERROR_MS = TimeUnit.MILLISECONDS.convert(30, TimeUnit.MINUTES); - /** - * Checks whether the right amount of time has passed since the last error UI messages - * were shown. - * - * The error UI should be shown at least {@link #MINIMAL_INTERVAL_BETWEEN_PROMPTS_MS} from the - * previous one and at least {@link #MINIMAL_INTERVAL_TO_SYNC_ERROR_MS} from the last sync error - * UI. - * - * @return whether the UI can be shown given the conditions above. - */ - @CalledByNative - static boolean shouldShowErrorUi() { + /** + * Checks whether the right amount of time has passed since the last error UI messages were shown. + * + * <p>The error UI should be shown at least {@link #MINIMAL_INTERVAL_BETWEEN_PROMPTS_MS} from the + * previous one and at least {@link #MINIMAL_INTERVAL_TO_SYNC_ERROR_MS} from the last sync error + * UI. + * + * @return whether the UI can be shown given the conditions above. + */ + @CalledByNative + static boolean shouldShowErrorUi() { Profile profile = Profile.getLastUsedRegularProfile(); final CoreAccountInfo primaryAccountInfo = IdentityServicesProvider.get().getIdentityManager(profile).getPrimaryAccountInfo( @@ -58,12 +53,6 @@ // case, the error is no longer relevant/fixable. if (primaryAccountInfo == null) return false; - if (ChromeFeatureList.getFieldTrialParamByFeatureAsBoolean( - ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_ERROR_MESSAGES, - "ignore_auth_error_message_timeouts", false)) { - return true; - } - PrefService prefService = UserPrefs.get(Profile.getLastUsedRegularProfile()); long lastShownTimestamp = Long.valueOf(prefService.getString(Pref.UPM_ERROR_UI_SHOWN_TIMESTAMP));
diff --git a/chrome/browser/password_manager/android/junit/src/org/chromium/chrome/browser/password_manager/PasswordManagerErrorMessageHelperBridgeTest.java b/chrome/browser/password_manager/android/junit/src/org/chromium/chrome/browser/password_manager/PasswordManagerErrorMessageHelperBridgeTest.java index 9a14fd1..c79334e 100644 --- a/chrome/browser/password_manager/android/junit/src/org/chromium/chrome/browser/password_manager/PasswordManagerErrorMessageHelperBridgeTest.java +++ b/chrome/browser/password_manager/android/junit/src/org/chromium/chrome/browser/password_manager/PasswordManagerErrorMessageHelperBridgeTest.java
@@ -53,9 +53,7 @@ import java.lang.ref.WeakReference; -/** - * Unit tests for the error message helper bridge. - * */ +/** Unit tests for the error message helper bridge. */ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE) public class PasswordManagerErrorMessageHelperBridgeTest {
diff --git a/chrome/browser/password_manager/android/password_manager_settings_service_android_impl.cc b/chrome/browser/password_manager/android/password_manager_settings_service_android_impl.cc index 3bcfb0f..ed5c70a 100644 --- a/chrome/browser/password_manager/android/password_manager_settings_service_android_impl.cc +++ b/chrome/browser/password_manager/android/password_manager_settings_service_android_impl.cc
@@ -83,12 +83,9 @@ // pref to temporarily prevent password saves. If the user doesn't use GMS, // saving keeps working and only the syncing of changes is delayed. bool ShouldSuspendPasswordSavingDueToError(PrefService* pref_service) { - // The messages feature is a subset of UPM. The actual feature is irrelevant. - if (!base::FeatureList::IsEnabled( - password_manager::features::kUnifiedPasswordManagerErrorMessages)) { - return false; // Non-UPM users can still save. - } // Ensure the user is still enrolled. Evicted users can still save normally. + // TODO(crbug.com/1443356): possibly auth error disables password saving + // after pwd sync is turned off. return !IsUnenrolledFromUPM(pref_service) && pref_service->GetBoolean( password_manager::prefs::kSavePasswordsSuspendedByError);
diff --git a/chrome/browser/password_manager/android/password_manager_settings_service_android_impl_unittest.cc b/chrome/browser/password_manager/android/password_manager_settings_service_android_impl_unittest.cc index 4d991004..4e48334 100644 --- a/chrome/browser/password_manager/android/password_manager_settings_service_android_impl_unittest.cc +++ b/chrome/browser/password_manager/android/password_manager_settings_service_android_impl_unittest.cc
@@ -1052,8 +1052,7 @@ base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitWithFeatures( /*enabled_features=*/ - {password_manager::features::kUnifiedPasswordManagerAndroid, - password_manager::features::kUnifiedPasswordManagerErrorMessages}, + {password_manager::features::kUnifiedPasswordManagerAndroid}, /*disabled_features=*/{}); InitializeSettingsService(/*password_sync_enabled=*/true, /*setting_sync_enabled=*/true); @@ -1074,8 +1073,7 @@ base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitWithFeatures( /*enabled_features=*/ - {password_manager::features::kUnifiedPasswordManagerAndroid, - password_manager::features::kUnifiedPasswordManagerErrorMessages}, + {password_manager::features::kUnifiedPasswordManagerAndroid}, /*disabled_features=*/{}); InitializeSettingsService(/*password_sync_enabled=*/false, /*setting_sync_enabled=*/true); @@ -1095,8 +1093,7 @@ base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitWithFeatures( /*enabled_features=*/ - {password_manager::features::kUnifiedPasswordManagerAndroid, - password_manager::features::kUnifiedPasswordManagerErrorMessages}, + {password_manager::features::kUnifiedPasswordManagerAndroid}, /*disabled_features=*/{}); InitializeSettingsService(/*password_sync_enabled=*/false, /*setting_sync_enabled=*/true); @@ -1119,8 +1116,7 @@ base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitWithFeatures( /*enabled_features=*/ - {password_manager::features::kUnifiedPasswordManagerAndroid, - password_manager::features::kUnifiedPasswordManagerErrorMessages}, + {password_manager::features::kUnifiedPasswordManagerAndroid}, /*disabled_features=*/{}); InitializeSettingsService(/*password_sync_enabled=*/false, /*setting_sync_enabled=*/true); @@ -1139,27 +1135,6 @@ } TEST_F(PasswordManagerSettingsServiceAndroidImplTest, - IgnoreOverriddenValueForOfferToSaveWithoutFeature) { - base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitWithFeatures( - /*enabled_features=*/{password_manager::features:: - kUnifiedPasswordManagerAndroid}, - /*disabled_features=*/{ - password_manager::features::kUnifiedPasswordManagerErrorMessages}); - InitializeSettingsService(/*password_sync_enabled=*/true, - /*setting_sync_enabled=*/true); - pref_service()->SetUserPref( - password_manager::prefs::kCredentialsEnableService, base::Value(true)); - pref_service()->SetUserPref( - password_manager::prefs::kOfferToSavePasswordsEnabledGMS, - base::Value(true)); - pref_service()->SetBoolean( - password_manager::prefs::kSavePasswordsSuspendedByError, true); - EXPECT_TRUE(settings_service()->IsSettingEnabled( - PasswordManagerSetting::kOfferToSavePasswords)); -} - -TEST_F(PasswordManagerSettingsServiceAndroidImplTest, TestMigrateSettingsOnReenrollingIntoUPM) { SetPasswordsSync(true);
diff --git a/chrome/browser/password_manager/android/password_store_android_backend.cc b/chrome/browser/password_manager/android/password_store_android_backend.cc index df4204b..f323793 100644 --- a/chrome/browser/password_manager/android/password_store_android_backend.cc +++ b/chrome/browser/password_manager/android/password_store_android_backend.cc
@@ -349,31 +349,6 @@ attempt, kMaxReportedRetryAttempts); } -bool HasPromptedTooManyAuthErrors(PrefService* pref_service) { - DCHECK(pref_service); - // This question only makes sense if auth error prompts are enabled. - DCHECK(base::FeatureList::IsEnabled( - password_manager::features::kUnifiedPasswordManagerErrorMessages)); - - // If there is no limit on how many times an auth error can be shown, - // there is no such thing as too many auth error prompts. - int max_auth_error_prompts = - password_manager::features::kMaxShownUPMErrorsBeforeEviction.Get(); - if (max_auth_error_prompts < 0) { - return false; - } - - if (pref_service->GetInteger( - password_manager::prefs::kTimesUPMAuthErrorShown) < - max_auth_error_prompts) { - return false; - } - - LOG(ERROR) << "Auth error prompts exceeds limit of " - << max_auth_error_prompts; - return true; -} - bool IsUnrecoverableBackendError(AndroidBackendAPIErrorCode api_error_code, PasswordStoreOperation operation, PrefService* pref_service) { @@ -394,17 +369,6 @@ return true; } - // Auth errors require explicit handling and are not recoverable if this - // handling is disabled. They are also considered unrecoverable if the client - // has been in a broke auth state for too long, verified by the number of auth - // error prompts that were shown. - if (IsAuthenticationError(api_error_code) && - (!base::FeatureList::IsEnabled( - password_manager::features::kUnifiedPasswordManagerErrorMessages) || - HasPromptedTooManyAuthErrors(pref_service))) { - return true; - } - return false; } @@ -1074,10 +1038,7 @@ } password_manager_upm_eviction::EvictCurrentUser(api_error, prefs_); } - } else if (IsAuthenticationError(api_error_code) && - base::FeatureList::IsEnabled( - password_manager::features:: - kUnifiedPasswordManagerErrorMessages)) { + } else if (IsAuthenticationError(api_error_code)) { // Auth error specific handling is only triggered if the error is // considered recoverable. prefs_->SetBoolean(prefs::kSavePasswordsSuspendedByError, true);
diff --git a/chrome/browser/password_manager/android/password_store_android_backend_unittest.cc b/chrome/browser/password_manager/android/password_store_android_backend_unittest.cc index a3bce6c..0ec3e5c 100644 --- a/chrome/browser/password_manager/android/password_store_android_backend_unittest.cc +++ b/chrome/browser/password_manager/android/password_store_android_backend_unittest.cc
@@ -697,8 +697,7 @@ OnExternalIgnoredErrorNotCausingExperimentUnenrollment) { base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitWithFeaturesAndParameters( - {{password_manager::features::kUnifiedPasswordManagerErrorMessages, {}}, - {password_manager::features::kUnifiedPasswordManagerAndroid, + {{password_manager::features::kUnifiedPasswordManagerAndroid, {// INTERNAL_ERROR=8 {password_manager::features::kIgnoredGmsApiErrors.name, "8"}, {password_manager::features::kRetriableGmsApiErrors.name, ""}}}}, @@ -750,8 +749,7 @@ OnUnretriableOperationWithExternalRetriableErrorOnCausesExperimentUnenrollment) { base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitWithFeaturesAndParameters( - {{password_manager::features::kUnifiedPasswordManagerErrorMessages, {}}, - {password_manager::features::kUnifiedPasswordManagerAndroid, + {{password_manager::features::kUnifiedPasswordManagerAndroid, {// DEVELOPER_ERROR=10, BAD_REQUEST=11008 {password_manager::features::kIgnoredGmsApiErrors.name, "10,11008"}, // NETWORK_ERROR=7 @@ -914,8 +912,7 @@ OnNetworkErrorRetriableStopsRetryingAfterSuccess) { base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitWithFeaturesAndParameters( - {{password_manager::features::kUnifiedPasswordManagerErrorMessages, {}}, - {password_manager::features::kUnifiedPasswordManagerAndroid, + {{password_manager::features::kUnifiedPasswordManagerAndroid, {// NETWORK_ERROR = 7 {password_manager::features::kIgnoredGmsApiErrors.name, ""}, {password_manager::features::kRetriableGmsApiErrors.name, "7"}}}}, @@ -980,44 +977,10 @@ } TEST_F(PasswordStoreAndroidBackendTest, - OnExternalAuthErrorKeepSavingWithoutErrorMessageFeature) { - base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitWithFeaturesAndParameters( - {{password_manager::features::kUnifiedPasswordManagerAndroid, - {// AUTH_ERROR_UNRESOLVABLE=11006 - {password_manager::features::kIgnoredGmsApiErrors.name, "11006"}}}}, - {password_manager::features::kUnifiedPasswordManagerErrorMessages}); - - backend().InitBackend(PasswordStoreAndroidBackend::RemoteChangesReceived(), - base::RepeatingClosure(), base::DoNothing()); - backend().OnSyncServiceInitialized(sync_service()); - EXPECT_FALSE(prefs()->GetBoolean(prefs::kSavePasswordsSuspendedByError)); - - base::MockCallback<LoginsOrErrorReply> mock_reply; - EXPECT_CALL(*bridge_helper(), GetAllLogins).WillOnce(Return(kJobId)); - backend().GetAllLoginsAsync(mock_reply.Get()); - - EXPECT_CALL( - mock_reply, - Run(ExpectError(PasswordStoreBackendErrorType::kAuthErrorUnresolvable, - PasswordStoreBackendErrorRecoveryType::kUnrecoverable))); - AndroidBackendError error{AndroidBackendErrorType::kExternalError}; - // Simulate receiving AUTH_ERROR_UNRESOLVABLE code. - int kUnresolvableAuthErrorCode = - static_cast<int>(AndroidBackendAPIErrorCode::kAuthErrorUnresolvable); - error.api_error_code = absl::optional<int>(kUnresolvableAuthErrorCode); - consumer().OnError(kJobId, std::move(error)); - RunUntilIdle(); - - EXPECT_FALSE(prefs()->GetBoolean(prefs::kSavePasswordsSuspendedByError)); -} - -TEST_F(PasswordStoreAndroidBackendTest, OnExternalAuthErrorNotCausingExperimentUnenrollmentButSuspendsSaving) { base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitWithFeaturesAndParameters( - {{password_manager::features::kUnifiedPasswordManagerErrorMessages, {}}, - {password_manager::features::kUnifiedPasswordManagerAndroid, + {{password_manager::features::kUnifiedPasswordManagerAndroid, {// AUTH_ERROR_UNRESOLVABLE=11006 {password_manager::features::kIgnoredGmsApiErrors.name, "11006"}}}}, {}); @@ -1052,8 +1015,7 @@ OnExternalAuthErrorKeepSavingIfErrorNotIgnorable) { base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitWithFeaturesAndParameters( - {{password_manager::features::kUnifiedPasswordManagerErrorMessages, {}}, - {password_manager::features::kUnifiedPasswordManagerAndroid, + {{password_manager::features::kUnifiedPasswordManagerAndroid, {// DEVELOPER_ERROR=10, BAD_REQUEST=11008 {password_manager::features::kIgnoredGmsApiErrors.name, "10,11008"}}}}, {}); @@ -1084,8 +1046,6 @@ TEST_F(PasswordStoreAndroidBackendTest, ResetTemporarySavingSuspensionAfterSuccessfulLogin) { - base::test::ScopedFeatureList scoped_feature_list( - password_manager::features::kUnifiedPasswordManagerErrorMessages); backend().InitBackend(PasswordStoreAndroidBackend::RemoteChangesReceived(), base::RepeatingClosure(), base::DoNothing()); backend().OnSyncServiceInitialized(sync_service()); @@ -1566,55 +1526,13 @@ UnifiedPasswordManagerActiveStatus::kInactiveUnenrolledDueToErrors, 1); } -TEST_F(PasswordStoreAndroidBackendTest, AuthErrorUnrecoverableAfterMaxPrompts) { - base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitWithFeaturesAndParameters( - {{password_manager::features::kUnifiedPasswordManagerErrorMessages, - {{password_manager::features::kMaxShownUPMErrorsBeforeEviction.name, - "3"}}}, - {password_manager::features::kUnifiedPasswordManagerAndroid, - { - // AUTH_ERROR_RESOLVABLE = "11005" - {password_manager::features::kIgnoredGmsApiErrors.name, "11005"}, - }}}, - {}); - ASSERT_FALSE(prefs()->GetBoolean( - prefs::kUnenrolledFromGoogleMobileServicesDueToErrors)); - backend().InitBackend(PasswordStoreAndroidBackend::RemoteChangesReceived(), - base::RepeatingClosure(), base::DoNothing()); - backend().OnSyncServiceInitialized(sync_service()); - - base::MockCallback<LoginsOrErrorReply> mock_reply; - EXPECT_CALL(*bridge_helper(), GetAllLogins).WillOnce(Return(kJobId)); - backend().GetAllLoginsAsync(mock_reply.Get()); - AndroidBackendError error{AndroidBackendErrorType::kExternalError}; - // Simulate receiving AUTH_ERROR_RESOLVABLE code. - int kAuthErrorResolvableCode = - static_cast<int>(AndroidBackendAPIErrorCode::kAuthErrorResolvable); - error.api_error_code = absl::optional<int>(kAuthErrorResolvableCode); - - // Pretend 3 prompts were already shown. - prefs()->SetInteger(prefs::kTimesUPMAuthErrorShown, 3); - EXPECT_CALL( - mock_reply, - Run(ExpectError(PasswordStoreBackendErrorType::kAuthErrorResolvable, - PasswordStoreBackendErrorRecoveryType::kUnrecoverable))); - consumer().OnError(kJobId, std::move(error)); - RunUntilIdle(); - EXPECT_TRUE(prefs()->GetBoolean( - prefs::kUnenrolledFromGoogleMobileServicesDueToErrors)); -} - TEST_F(PasswordStoreAndroidBackendTest, AuthErrorStillRecoverableUnderMaxPrompts) { base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitWithFeaturesAndParameters( - {{password_manager::features::kUnifiedPasswordManagerErrorMessages, {}}, - {password_manager::features::kUnifiedPasswordManagerAndroid, + {{password_manager::features::kUnifiedPasswordManagerAndroid, {// AUTH_ERROR_RESOLVABLE = "11005" - {password_manager::features::kIgnoredGmsApiErrors.name, "11005"}, - {password_manager::features::kMaxShownUPMErrorsBeforeEviction.name, - "3"}}}}, + {password_manager::features::kIgnoredGmsApiErrors.name, "11005"}}}}, {}); ASSERT_FALSE(prefs()->GetBoolean( prefs::kUnenrolledFromGoogleMobileServicesDueToErrors)); @@ -1646,12 +1564,9 @@ TEST_F(PasswordStoreAndroidBackendTest, ResetAuthErrorCounterOnSuccessfulGet) { base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitWithFeaturesAndParameters( - {{password_manager::features::kUnifiedPasswordManagerErrorMessages, {}}, - {password_manager::features::kUnifiedPasswordManagerAndroid, + {{password_manager::features::kUnifiedPasswordManagerAndroid, {// AUTH_ERROR_RESOLVABLE = "11005" - {password_manager::features::kIgnoredGmsApiErrors.name, "11005"}, - {password_manager::features::kMaxShownUPMErrorsBeforeEviction.name, - "3"}}}}, + {password_manager::features::kIgnoredGmsApiErrors.name, "11005"}}}}, {}); ASSERT_FALSE(prefs()->GetBoolean( prefs::kUnenrolledFromGoogleMobileServicesDueToErrors)); @@ -1679,12 +1594,9 @@ ResetAuthErrorCounterOnSuccessfulModification) { base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitWithFeaturesAndParameters( - {{password_manager::features::kUnifiedPasswordManagerErrorMessages, {}}, - {password_manager::features::kUnifiedPasswordManagerAndroid, + {{password_manager::features::kUnifiedPasswordManagerAndroid, {// AUTH_ERROR_RESOLVABLE = "11005" - {password_manager::features::kIgnoredGmsApiErrors.name, "11005"}, - {password_manager::features::kMaxShownUPMErrorsBeforeEviction.name, - "3"}}}}, + {password_manager::features::kIgnoredGmsApiErrors.name, "11005"}}}}, {}); ASSERT_FALSE(prefs()->GetBoolean( prefs::kUnenrolledFromGoogleMobileServicesDueToErrors));
diff --git a/chrome/browser/password_manager/android/pwd_migration/BUILD.gn b/chrome/browser/password_manager/android/pwd_migration/BUILD.gn index 303b833..e7c740f 100644 --- a/chrome/browser/password_manager/android/pwd_migration/BUILD.gn +++ b/chrome/browser/password_manager/android/pwd_migration/BUILD.gn
@@ -39,5 +39,25 @@ sources = [ "java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningBridge.java", "java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningCoordinator.java", + "java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningMediator.java", + "java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningProperties.java", + ] +} + +robolectric_library("junit") { + testonly = true + + sources = [ "java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningControllerRobolectricTest.java" ] + + deps = [ + ":java", + "//base:base_java_test_support", + "//base:base_junit_test_support", + "//chrome/test/android:chrome_java_test_support_common", + "//components/browser_ui/bottomsheet/android:java", + "//third_party/hamcrest:hamcrest_library_java", + "//third_party/junit:junit", + "//third_party/mockito:mockito_java", + "//ui/android:ui_java", ] }
diff --git a/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningControllerRobolectricTest.java b/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningControllerRobolectricTest.java new file mode 100644 index 0000000..de5352e --- /dev/null +++ b/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningControllerRobolectricTest.java
@@ -0,0 +1,72 @@ +// 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. + +package org.chromium.chrome.browser.pwd_migration; + +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; + +import static org.chromium.chrome.browser.pwd_migration.PasswordMigrationWarningProperties.DISMISS_HANDLER; +import static org.chromium.chrome.browser.pwd_migration.PasswordMigrationWarningProperties.VISIBLE; + +import android.app.Activity; +import android.content.Context; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TestRule; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; +import org.mockito.quality.Strictness; +import org.robolectric.Robolectric; + +import org.chromium.base.test.BaseRobolectricTestRunner; +import org.chromium.base.test.util.Batch; +import org.chromium.chrome.test.util.browser.Features; +import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; +import org.chromium.ui.modelutil.PropertyModel; + +/** + * Tests for {@link PasswordMigrationWarningCoordinator} and {@link + * PasswordMigrationWarningMediator} + */ +@RunWith(BaseRobolectricTestRunner.class) +@Batch(Batch.PER_CLASS) +public class PasswordMigrationWarningControllerRobolectricTest { + @Rule + public MockitoRule mMockitoRule = MockitoJUnit.rule().strictness(Strictness.STRICT_STUBS); + + @Rule + public TestRule mProcessor = new Features.JUnitProcessor(); + + private final Context mContext = Robolectric.buildActivity(Activity.class).get(); + private PasswordMigrationWarningCoordinator mCoordinator; + + @Mock + private BottomSheetController mBottomSheetController; + + public PasswordMigrationWarningControllerRobolectricTest() {} + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mCoordinator = new PasswordMigrationWarningCoordinator(mContext, mBottomSheetController); + } + + @Test + public void testShowWarningUpdatesModel() { + PropertyModel model = mCoordinator.getModelForTesting(); + assertNotNull(model.get(DISMISS_HANDLER)); + assertThat(model.get(VISIBLE), is(false)); + + mCoordinator.showWarning(); + + assertThat(model.get(VISIBLE), is(true)); + } +}
diff --git a/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningCoordinator.java b/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningCoordinator.java index 6f26040..a4044d27 100644 --- a/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningCoordinator.java +++ b/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningCoordinator.java
@@ -7,15 +7,28 @@ import android.content.Context; import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; +import org.chromium.ui.modelutil.PropertyModel; /** The coordinator of the password migration warning. */ -class PasswordMigrationWarningCoordinator { +public class PasswordMigrationWarningCoordinator { + private final PasswordMigrationWarningMediator mMediator = + new PasswordMigrationWarningMediator(); + public PasswordMigrationWarningCoordinator( - @Nullable Context context, BottomSheetController sheetController) {} + @Nullable Context context, BottomSheetController sheetController) { + mMediator.initialize( + PasswordMigrationWarningProperties.createDefaultModel(mMediator::onDismissed)); + } public void showWarning() { - // TODO(crbug.com/1439761): Implement. + mMediator.showWarning(); + } + + @VisibleForTesting + PropertyModel getModelForTesting() { + return mMediator.getModel(); } }
diff --git a/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningMediator.java b/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningMediator.java new file mode 100644 index 0000000..67f9297 --- /dev/null +++ b/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningMediator.java
@@ -0,0 +1,35 @@ +// 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. + +package org.chromium.chrome.browser.pwd_migration; + +import static org.chromium.chrome.browser.pwd_migration.PasswordMigrationWarningProperties.VISIBLE; + +import org.chromium.components.browser_ui.bottomsheet.BottomSheetController.StateChangeReason; +import org.chromium.ui.modelutil.PropertyModel; + +/** + * Contains the logic for the local passwords migration warning. It sets the state of the model and + * reacts to events. + */ +class PasswordMigrationWarningMediator { + private PropertyModel mModel; + + void initialize(PropertyModel model) { + mModel = model; + } + + void showWarning() { + mModel.set(VISIBLE, true); + } + + void onDismissed(@StateChangeReason int reason) { + if (!mModel.get(VISIBLE)) return; // Dismiss only if not dismissed yet. + mModel.set(VISIBLE, false); + } + + PropertyModel getModel() { + return mModel; + } +}
diff --git a/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningProperties.java b/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningProperties.java new file mode 100644 index 0000000..7e9d2f90 --- /dev/null +++ b/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningProperties.java
@@ -0,0 +1,27 @@ +// 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. + +package org.chromium.chrome.browser.pwd_migration; + +import org.chromium.base.Callback; +import org.chromium.ui.modelutil.PropertyModel; + +/** + * Properties defined here reflect the visible state of the local passwords migration warning. + */ +class PasswordMigrationWarningProperties { + static final PropertyModel.WritableBooleanPropertyKey VISIBLE = + new PropertyModel.WritableBooleanPropertyKey("visible"); + static final PropertyModel.ReadableObjectPropertyKey<Callback<Integer>> DISMISS_HANDLER = + new PropertyModel.ReadableObjectPropertyKey<>("dismiss_handler"); + + static PropertyModel createDefaultModel(Callback<Integer> dismissHandler) { + return new PropertyModel.Builder(VISIBLE, DISMISS_HANDLER) + .with(VISIBLE, false) + .with(DISMISS_HANDLER, dismissHandler) + .build(); + } + + private PasswordMigrationWarningProperties() {} +}
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.cc b/chrome/browser/password_manager/chrome_password_manager_client.cc index 83ce76b..1190405 100644 --- a/chrome/browser/password_manager/chrome_password_manager_client.cc +++ b/chrome/browser/password_manager/chrome_password_manager_client.cc
@@ -351,13 +351,8 @@ if (web_contents()->GetFocusedFrame()) { bool manual_generation_available = - password_manager_util::ManualPasswordGenerationEnabled(driver); - if (base::FeatureList::IsEnabled( - password_manager::features::kUnifiedPasswordManagerErrorMessages)) { - manual_generation_available = - manual_generation_available && - password_manager_.HaveFormManagersReceivedData(driver); - } + password_manager_util::ManualPasswordGenerationEnabled(driver) && + password_manager_.HaveFormManagersReceivedData(driver); GetOrCreatePasswordAccessory()->RefreshSuggestionsForField( focused_field_type, manual_generation_available); }
diff --git a/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc b/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc index 9a832be1..8ad85828 100644 --- a/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc +++ b/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc
@@ -1153,8 +1153,6 @@ TEST_F(ChromePasswordManagerClientAndroidTest, FocusedInputChangedFormsFetched) { - base::test::ScopedFeatureList scoped_feature_list( - {password_manager::features::kUnifiedPasswordManagerErrorMessages}); FormData observed_form_data = MakePasswordFormData(); SetUpGenerationPreconditions(observed_form_data.url);
diff --git a/chrome/browser/policy/BUILD.gn b/chrome/browser/policy/BUILD.gn index 46e9563..da1cefe 100644 --- a/chrome/browser/policy/BUILD.gn +++ b/chrome/browser/policy/BUILD.gn
@@ -28,6 +28,7 @@ ] if (is_mac) { + configs += [ "//build/config/compiler:enable_arc" ] deps += [ "//build:branding_buildflags" ] } else if (is_win) { deps += [ "//chrome/install_static:install_static_util" ] @@ -385,6 +386,7 @@ "cloud/chrome_browser_cloud_management_browsertest_mac_util.h", "cloud/chrome_browser_cloud_management_browsertest_mac_util.mm", ] + configs += [ "//build/config/compiler:enable_arc" ] } if (is_win) {
diff --git a/chrome/browser/policy/cloud/chrome_browser_cloud_management_browsertest_mac_util.mm b/chrome/browser/policy/cloud/chrome_browser_cloud_management_browsertest_mac_util.mm index 6a1d517..b9be039 100644 --- a/chrome/browser/policy/cloud/chrome_browser_cloud_management_browsertest_mac_util.mm +++ b/chrome/browser/policy/cloud/chrome_browser_cloud_management_browsertest_mac_util.mm
@@ -6,20 +6,24 @@ #import <Cocoa/Cocoa.h> +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + namespace policy { void PostAppControllerNSNotifications() { // Simulate the user clicking a window other than the dialog. // The Profile is not ready when the dialog is displayed, so it can't be // accessed. - [[NSNotificationCenter defaultCenter] + [NSNotificationCenter.defaultCenter postNotificationName:NSWindowDidResignMainNotification object:nil]; - // Simulate the user hiding Chrome via Cmd+h when the dialog is displayed. + // Simulate the user hiding Chrome via Cmd+H when the dialog is displayed. // The AppShimManager hasn't been created when the dialog is // displayed, so it must be skipped. - [[NSNotificationCenter defaultCenter] + [NSNotificationCenter.defaultCenter postNotificationName:NSApplicationWillHideNotification object:nil]; }
diff --git a/chrome/browser/policy/configuration_policy_handler_list_factory.cc b/chrome/browser/policy/configuration_policy_handler_list_factory.cc index 96a6672..fdf44dd 100644 --- a/chrome/browser/policy/configuration_policy_handler_list_factory.cc +++ b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
@@ -21,6 +21,7 @@ #include "chrome/browser/browsing_data/browsing_data_lifetime_policy_handler.h" #include "chrome/browser/enterprise/connectors/device_trust/prefs.h" #include "chrome/browser/enterprise/idle/idle_timeout_policy_handler.h" +#include "chrome/browser/enterprise/reporting/legacy_tech/legacy_tech_report_policy_handler.h" #include "chrome/browser/first_party_sets/first_party_sets_overrides_policy_handler.h" #include "chrome/browser/net/disk_cache_dir_policy_handler.h" #include "chrome/browser/net/explicitly_allowed_network_ports_policy_handler.h" @@ -1951,6 +1952,8 @@ handlers->AddHandler( std::make_unique< enterprise_reporting::CloudReportingFrequencyPolicyHandler>()); + handlers->AddHandler( + std::make_unique<enterprise_reporting::LegacyTechReportPolicyHandler>()); handlers->AddHandler(std::make_unique<DefaultSearchPolicyHandler>()); handlers->AddHandler(std::make_unique<IncognitoModePolicyHandler>()); handlers->AddHandler(
diff --git a/chrome/browser/policy/policy_path_parser_mac.mm b/chrome/browser/policy/policy_path_parser_mac.mm index 8eecdf9..50da7547 100644 --- a/chrome/browser/policy/policy_path_parser_mac.mm +++ b/chrome/browser/policy/policy_path_parser_mac.mm
@@ -5,10 +5,8 @@ #include "chrome/browser/policy/policy_path_parser.h" #import <Cocoa/Cocoa.h> -#include <stddef.h> -#import <SystemConfiguration/SCDynamicStore.h> -#import <SystemConfiguration/SCDynamicStoreCopySpecific.h> #import <SystemConfiguration/SystemConfiguration.h> +#include <stddef.h> #include <string> @@ -20,9 +18,11 @@ #include "build/branding_buildflags.h" #include "components/policy/policy_constants.h" -namespace policy { +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif -namespace path_parser { +namespace policy::path_parser { const char kUserNamePolicyVarName[] = "${user_name}"; const char kMachineNamePolicyVarName[] = "${machine_name}"; @@ -31,7 +31,7 @@ struct MacFolderNamesToSPDMapping { const char* name; - NSSearchPathDirectory id; + NSSearchPathDirectory search_path_directory; }; // Mapping from variable names to MacOS NSSearchPathDirectory ids. @@ -57,10 +57,10 @@ for (const auto& mapping : mac_folder_mapping) { size_t position = result.find(mapping.name); if (position != std::string::npos) { - NSArray* searchpaths = NSSearchPathForDirectoriesInDomains( - mapping.id, NSAllDomainsMask, true); - if ([searchpaths count] > 0) { - NSString* variable_value = searchpaths[0]; + NSArray<NSString*>* search_paths = NSSearchPathForDirectoriesInDomains( + mapping.search_path_directory, NSAllDomainsMask, true); + if (search_paths.count > 0) { + NSString* variable_value = search_paths[0]; result.replace(position, strlen(mapping.name), base::SysNSStringToUTF8(variable_value)); } @@ -82,11 +82,11 @@ SCDynamicStoreContext context = {0, nullptr, nullptr, nullptr}; base::ScopedCFTypeRef<SCDynamicStoreRef> store(SCDynamicStoreCreate( kCFAllocatorDefault, CFSTR("policy_subsystem"), nullptr, &context)); - base::ScopedCFTypeRef<CFStringRef> machinename( + base::ScopedCFTypeRef<CFStringRef> machine_name( SCDynamicStoreCopyLocalHostName(store)); - if (machinename) { + if (machine_name) { result.replace(position, strlen(kMachineNamePolicyVarName), - base::SysCFStringRefToUTF8(machinename)); + base::SysCFStringRefToUTF8(machine_name)); } else { int error = SCError(); LOG(ERROR) << "Machine name variable can not be resolved. Error: " @@ -128,6 +128,4 @@ *user_data_dir = base::FilePath(string_value); } -} // namespace path_parser - -} // namespace policy +} // namespace policy::path_parser
diff --git a/chrome/browser/policy/system_features_disable_list_policy_handler.cc b/chrome/browser/policy/system_features_disable_list_policy_handler.cc index 654534f..a90f6c9c 100644 --- a/chrome/browser/policy/system_features_disable_list_policy_handler.cc +++ b/chrome/browser/policy/system_features_disable_list_policy_handler.cc
@@ -70,15 +70,13 @@ } void SystemFeaturesDisableListPolicyHandler::ApplyList( - base::Value filtered_list, + base::Value::List filtered_list, PrefValueMap* prefs) { - DCHECK(filtered_list.is_list()); - base::Value::List enums_list; base::Value* old_list = nullptr; prefs->GetValue(policy_prefs::kSystemFeaturesDisableList, &old_list); - for (const auto& element : filtered_list.GetList()) { + for (const auto& element : filtered_list) { SystemFeature feature = ConvertToEnum(element.GetString()); enums_list.Append(static_cast<int>(feature));
diff --git a/chrome/browser/policy/system_features_disable_list_policy_handler.h b/chrome/browser/policy/system_features_disable_list_policy_handler.h index b5d3491..b600c09 100644 --- a/chrome/browser/policy/system_features_disable_list_policy_handler.h +++ b/chrome/browser/policy/system_features_disable_list_policy_handler.h
@@ -69,7 +69,7 @@ protected: // ListPolicyHandler: - void ApplyList(base::Value filtered_list, PrefValueMap* prefs) override; + void ApplyList(base::Value::List filtered_list, PrefValueMap* prefs) override; private: SystemFeature ConvertToEnum(const std::string& system_feature);
diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java index fa21e9d..456d0f3 100644 --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
@@ -106,6 +106,7 @@ public static final String BOOKMARKS_LAST_USED_URL = "enhanced_bookmark_last_used_url"; public static final String BOOKMARKS_LAST_USED_PARENT = "enhanced_bookmark_last_used_parent_folder"; + public static final String BOOKMARKS_SORT_ORDER = "Chrome.Bookmarks.BookmarkRowSortOrder"; public static final String BOOKMARKS_VISUALS_PREF = "Chrome.Bookmarks.BookmarkRowDisplay"; /** @@ -999,6 +1000,7 @@ APP_LAUNCH_SEARCH_ENGINE_HAD_LOGO, APPLICATION_OVERRIDE_LANGUAGE, BLUETOOTH_NOTIFICATION_IDS, + BOOKMARKS_SORT_ORDER, BOOKMARKS_VISUALS_PREF, CHROME_SURVEY_DOWNLOAD_ATTEMPTS.pattern(), CHROME_SURVEY_PROMPT_DISPLAYED_TIMESTAMP.pattern(),
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc index dcc96a9..e056747 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc
@@ -463,7 +463,8 @@ #include "components/os_crypt/sync/os_crypt.h" #endif -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ + BUILDFLAG(IS_CHROMEOS_ASH) #include "components/device_signals/core/browser/pref_names.h" // nogncheck due to crbug.com/1125897 #endif @@ -1700,9 +1701,11 @@ safe_browsing::PostCleanupSettingsResetter::RegisterProfilePrefs(registry); #endif -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ + BUILDFLAG(IS_CHROMEOS_ASH) device_signals::RegisterProfilePrefs(registry); -#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) +#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || + // BUILDFLAG(IS_CHROMEOS_ASH) #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) browser_switcher::BrowserSwitcherPrefs::RegisterProfilePrefs(registry);
diff --git a/chrome/browser/quick_delete/BUILD.gn b/chrome/browser/quick_delete/BUILD.gn index 723c4c8..bf6f6e8 100644 --- a/chrome/browser/quick_delete/BUILD.gn +++ b/chrome/browser/quick_delete/BUILD.gn
@@ -1,5 +1,5 @@ # Copyright 2023 The Chromium Authors -# Use of this source code is governed by a BSD-style license that can be +# Use of this source code is governed by a BSD - style license that can be # found in the LICENSE file. import("//build/config/android/rules.gni") @@ -35,7 +35,9 @@ android_resources("java_resources") { sources = [ + "android/java/res/drawable/quick_delete_animation.xml", "android/java/res/drawable/quick_delete_trash_bin_icon_24dp.xml", + "android/java/res/layout/quick_delete_animation_view.xml", "android/java/res/layout/quick_delete_dialog.xml", ] deps = [
diff --git a/chrome/browser/quick_delete/android/java/res/drawable/quick_delete_animation.xml b/chrome/browser/quick_delete/android/java/res/drawable/quick_delete_animation.xml new file mode 100644 index 0000000..40beb34 --- /dev/null +++ b/chrome/browser/quick_delete/android/java/res/drawable/quick_delete_animation.xml
@@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +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. +--> + +<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:aapt="http://schemas.android.com/aapt" > + + <aapt:attr name="android:drawable"> + <vector + android:width="96dp" + android:height="96dp" + android:viewportHeight="100" + android:viewportWidth="100"> + <group + android:name="gradientGroup" + android:translateY="0" + > + <path + android:name="gradientPath" + android:pathData="M1,1 H99 V99 H1Z"> + <aapt:attr name="android:fillColor"> + <!-- TODO(crbug.com/1412087): Add proper colors for light and dark mode. --> + <gradient + android:startColor="#FFFFFFFF" + android:startX="50" + android:startY="0" + android:endColor="#00000000" + android:endX="50" + android:endY="50" + android:type="linear" /> + </aapt:attr> + </path> + </group> + </vector> + </aapt:attr> + + <target android:name="gradientGroup"> + <aapt:attr name="android:animation"> + <set> + <objectAnimator + android:duration="1200" + android:propertyName="translateY" + android:valueFrom="150" + android:valueTo="-150" /> + </set> + </aapt:attr> + </target> +</animated-vector>
diff --git a/chrome/browser/quick_delete/android/java/res/layout/quick_delete_animation_view.xml b/chrome/browser/quick_delete/android/java/res/layout/quick_delete_animation_view.xml new file mode 100644 index 0000000..d21ff7b --- /dev/null +++ b/chrome/browser/quick_delete/android/java/res/layout/quick_delete_animation_view.xml
@@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +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. +--> + +<View + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="gone"/>
diff --git a/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteController.java b/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteController.java index 4215874..174bc8a 100644 --- a/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteController.java +++ b/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteController.java
@@ -5,9 +5,13 @@ package org.chromium.chrome.browser.quick_delete; import android.content.Context; +import android.graphics.drawable.Animatable2; +import android.graphics.drawable.AnimatedVectorDrawable; +import android.graphics.drawable.Drawable; import android.os.Build; import android.os.VibrationEffect; import android.os.Vibrator; +import android.view.View; import androidx.annotation.NonNull; @@ -33,6 +37,7 @@ private final @NonNull QuickDeleteDialogDelegate mDialogDelegate; private final @NonNull SnackbarManager mSnackbarManager; private final @NonNull LayoutManager mLayoutManager; + private final @NonNull View mAnimationView; /** * Constructor for the QuickDeleteController with a dialog and confirmation snackbar. @@ -44,17 +49,20 @@ * @param layoutManager {@link LayoutManager} to use for showing the regular overview mode. * @param tabModelSelector {@link TabModelSelector} to use for opening the links in search * history disambiguation notice. + * @param animationView The {@link View} to use to show the quick delete animation. */ public QuickDeleteController(@NonNull Context context, @NonNull QuickDeleteDelegate delegate, @NonNull ModalDialogManager modalDialogManager, @NonNull SnackbarManager snackbarManager, @NonNull LayoutManager layoutManager, - @NonNull TabModelSelector tabModelSelector) { + @NonNull TabModelSelector tabModelSelector, @NonNull View animationView) { mContext = context; mDelegate = delegate; mSnackbarManager = snackbarManager; mLayoutManager = layoutManager; mDialogDelegate = new QuickDeleteDialogDelegate( context, modalDialogManager, this::onDialogDismissed, tabModelSelector); + mAnimationView = animationView; + mAnimationView.setBackgroundResource(R.drawable.quick_delete_animation); } /** @@ -73,8 +81,6 @@ /** * A method called when the user confirms or cancels the dialog. - * - * TODO(crbug.com/1412087): Add implementation logic for the deletion. */ private void onDialogDismissed(@DialogDismissalCause int dismissalCause) { switch (dismissalCause) { @@ -97,8 +103,7 @@ private void onQuickDeleteFinished() { navigateToTabSwitcher(); triggerHapticFeedback(); - // TODO(crbug.com/1412087): Show post-delete animation. - showSnackbar(); + showDeleteAnimation(this::showSnackbar); } /** @@ -130,4 +135,20 @@ mSnackbarManager.showSnackbar(snackbar); } + + private void showDeleteAnimation(@NonNull Runnable onAnimationEnd) { + AnimatedVectorDrawable deleteAnimation = + (AnimatedVectorDrawable) mAnimationView.getBackground(); + mAnimationView.setVisibility(View.VISIBLE); + deleteAnimation.registerAnimationCallback(new Animatable2.AnimationCallback() { + @Override + public void onAnimationEnd(Drawable drawable) { + super.onAnimationEnd(drawable); + ((AnimatedVectorDrawable) drawable).unregisterAnimationCallback(this); + mAnimationView.setVisibility(View.GONE); + onAnimationEnd.run(); + } + }); + deleteAnimation.start(); + } }
diff --git a/chrome/browser/resources/chromeos/login/login_ui_tools.js b/chrome/browser/resources/chromeos/login/login_ui_tools.js index cb87dfd..5ccd9ed 100644 --- a/chrome/browser/resources/chromeos/login/login_ui_tools.js +++ b/chrome/browser/resources/chromeos/login/login_ui_tools.js
@@ -2,6 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import {assert} from '//resources/ash/common/assert.js'; +import { loadTimeData } from './i18n_setup.js'; +import { $ } from '//resources/ash/common/util.js'; + /** * @fileoverview JS helpers used on login. */ @@ -19,3 +23,36 @@ callback(); }).bind(undefined, callback)); } + +/** + * Add screens from the given list into the main screen container. + * Screens are added with the following properties: + * - Classes: "step hidden" + any extra classes the screen may have + * - Attribute: "hidden" + * + * If a screen should be added only under some certain conditions, it must have + * the `condition` property associated with a boolean flag. If the condition + * yields true it will be added, otherwise it is skipped. + * @param {!Array<{tag: string, id: string}>} screenList + */ +export function addScreensToMainContainer(screenList) { + const screenContainer = ($('inner-container')); + for (const screen of screenList) { + if (screen.condition) { + if (!loadTimeData.getBoolean(screen.condition)) { + continue; + } + } + + const screenElement = document.createElement(screen.tag); + screenElement.id = screen.id; + screenElement.classList.add('step', 'hidden'); + screenElement.setAttribute('hidden', ''); + if (screen.extra_classes) { + screenElement.classList.add(...screen.extra_classes); + } + screenContainer.appendChild(screenElement); + assert( + !!$(screen.id).shadowRoot, `Error! No shadow root in <${screen.tag}>`); + } +}
diff --git a/chrome/browser/resources/chromeos/login/oobe.js b/chrome/browser/resources/chromeos/login/oobe.js index 0b8084c..0ede0c7d3 100644 --- a/chrome/browser/resources/chromeos/login/oobe.js +++ b/chrome/browser/resources/chromeos/login/oobe.js
@@ -17,46 +17,14 @@ import {Oobe} from './cr_ui.js'; import * as OobeDebugger from './debug/debug.js'; import {loadTimeData} from './i18n_setup.js'; +import { addScreensToMainContainer } from './login_ui_tools.js'; import {MultiTapDetector} from './multi_tap_detector.js'; -import {TraceEvent, traceExecution} from './oobe_trace.js'; +import { TraceEvent, traceExecution } from './oobe_trace.js'; import {commonScreensList, loginScreensList, oobeScreensList} from './screens.js'; // Everything has been imported at this point. traceExecution(TraceEvent.FIRST_LINE_AFTER_IMPORTS); -/** - * Add screens from the given list into the main screen container. - * Screens are added with the following properties: - * - Classes: "step hidden" + any extra classes the screen may have - * - Attribute: "hidden" - * - * If a screen should be added only under some certain conditions, it must have - * the `condition` property associated with a boolean flag. If the condition - * yields true it will be added, otherwise it is skipped. - * @param {Array<{tag: string, id: string}>} - */ -function addScreensToMainContainer(screenList) { - const screenContainer = $('inner-container'); - for (const screen of screenList) { - if (screen.condition) { - if (!loadTimeData.getBoolean(screen.condition)) { - continue; - } - } - - const screenElement = document.createElement(screen.tag); - screenElement.id = screen.id; - screenElement.classList.add('step', 'hidden'); - screenElement.setAttribute('hidden', ''); - if (screen.extra_classes) { - screenElement.classList.add(...screen.extra_classes); - } - screenContainer.appendChild(screenElement); - assert( - !!$(screen.id).shadowRoot, `Error! No shadow root in <${screen.tag}>`); - } -} - // Create the global values attached to `window` that are used // for accessing OOBE controls from the browser side. function prepareGlobalValues() {
diff --git a/chrome/browser/resources/chromeos/network_ui/network_ui.html b/chrome/browser/resources/chromeos/network_ui/network_ui.html index 72301bd..be73cc1 100644 --- a/chrome/browser/resources/chromeos/network_ui/network_ui.html +++ b/chrome/browser/resources/chromeos/network_ui/network_ui.html
@@ -97,6 +97,14 @@ </template> <div> + <h2>$i18n{resetApnMigratorLabel}</h2> + <cr-button class="action-button" + on-click="onResetApnMigratorClick_"> + $i18n{resetApnMigratorLabel} + </cr-button> + </div> + + <div> <h2>$i18n{addNewWifiLabel}</h2> <cr-button class="action-button" id="add-new-wifi-button" on-click="showAddNewWifi_">
diff --git a/chrome/browser/resources/chromeos/network_ui/network_ui.js b/chrome/browser/resources/chromeos/network_ui/network_ui.js index e2dcef3..4c2b88256 100644 --- a/chrome/browser/resources/chromeos/network_ui/network_ui.js +++ b/chrome/browser/resources/chromeos/network_ui/network_ui.js
@@ -194,6 +194,11 @@ }, /** @private */ + onResetApnMigratorClick_() { + this.browserProxy_.resetApnMigrator(); + }, + + /** @private */ showAddNewWifi_() { this.browserProxy_.showAddNewWifi(); },
diff --git a/chrome/browser/resources/chromeos/network_ui/network_ui_browser_proxy.js b/chrome/browser/resources/chromeos/network_ui/network_ui_browser_proxy.js index 269a188..5cd54947 100644 --- a/chrome/browser/resources/chromeos/network_ui/network_ui_browser_proxy.js +++ b/chrome/browser/resources/chromeos/network_ui/network_ui_browser_proxy.js
@@ -79,6 +79,8 @@ resetEuicc() {} + resetApnMigrator() {} + /** * @return {Promise<string>} */ @@ -205,6 +207,11 @@ chrome.send('resetEuicc'); } + /** @override */ + resetApnMigrator() { + chrome.send('resetApnMigrator'); + } + /** * @return {Promise<string>} */
diff --git a/chrome/browser/resources/settings/autofill_page/autofill_section.ts b/chrome/browser/resources/settings/autofill_page/autofill_section.ts index 5f4d079..d6a6e311 100644 --- a/chrome/browser/resources/settings/autofill_page/autofill_section.ts +++ b/chrome/browser/resources/settings/autofill_page/autofill_section.ts
@@ -27,7 +27,6 @@ import {SettingsToggleButtonElement} from '/shared/settings/controls/settings_toggle_button.js'; import {CrActionMenuElement} from 'chrome://resources/cr_elements/cr_action_menu/cr_action_menu.js'; import {CrButtonElement} from 'chrome://resources/cr_elements/cr_button/cr_button.js'; -import {assert} from 'chrome://resources/js/assert_ts.js'; import {focusWithoutInk} from 'chrome://resources/js/focus_without_ink.js'; import {DomRepeatEvent, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; @@ -85,21 +84,10 @@ private accountInfo_?: chrome.autofillPrivate.AccountInfo; private showAddressDialog_: boolean; private showAddressRemoveConfirmationDialog_: boolean; - private activeDialogAnchor_: HTMLElement|null; private autofillManager_: AutofillManagerProxy = AutofillManagerImpl.getInstance(); private setPersonalDataListener_: PersonalDataChangedListener|null = null; - constructor() { - super(); - - /** - * The element to return focus to, when the currently active dialog is - * closed. - */ - this.activeDialogAnchor_ = null; - } - override ready() { super.ready(); this.addEventListener('save-address', this.saveAddress_); @@ -158,7 +146,6 @@ const dotsButton = e.target as HTMLElement; this.$.addressSharedMenu.showAt(dotsButton); - this.activeDialogAnchor_ = dotsButton; } /** @@ -168,14 +155,10 @@ e.preventDefault(); this.activeAddress = {}; this.showAddressDialog_ = true; - this.activeDialogAnchor_ = this.$.addAddress; } private onAddressDialogClose_() { this.showAddressDialog_ = false; - assert(this.activeDialogAnchor_); - focusWithoutInk(this.activeDialogAnchor_); - this.activeDialogAnchor_ = null; } /** @@ -192,10 +175,19 @@ if (this.shadowRoot! .querySelector('settings-address-remove-confirmation-dialog')! .wasConfirmed()) { + // Two corner cases are handled: + // 1. removing the only address: the focus goes to the Add button + // 2. removing the last address: the focus goes to the previous address + // In other cases the focus remaining on the same node (reused in + // subsequently updated address list), but the next address, works fine. if (this.addresses.length === 1) { - // When user removes the last address, move focus to the Add Address - // button when the dialog closes. Otherwise, focus gets lost. - this.activeDialogAnchor_ = this.$.addAddress; + focusWithoutInk(this.$.addAddress); + } else { + const lastIndex = this.addresses.length - 1; + if (this.activeAddress!.guid === this.addresses[lastIndex]!.guid) { + focusWithoutInk(this.$.addressList.querySelectorAll<HTMLElement>( + '.address-menu')[lastIndex - 1]); + } } this.autofillManager_.removeAddress(this.activeAddress!.guid as string); @@ -203,9 +195,6 @@ loadTimeData.getString('addressRemovedMessage')); } this.showAddressRemoveConfirmationDialog_ = false; - assert(this.activeDialogAnchor_); - focusWithoutInk(this.activeDialogAnchor_); - this.activeDialogAnchor_ = null; } /**
diff --git a/chrome/browser/resources/settings/autofill_page/credit_card_list_entry.ts b/chrome/browser/resources/settings/autofill_page/credit_card_list_entry.ts index 8420fb61..7b4f964 100644 --- a/chrome/browser/resources/settings/autofill_page/credit_card_list_entry.ts +++ b/chrome/browser/resources/settings/autofill_page/credit_card_list_entry.ts
@@ -23,7 +23,7 @@ const SettingsCreditCardListEntryElementBase = I18nMixin(PolymerElement); -class SettingsCreditCardListEntryElement extends +export class SettingsCreditCardListEntryElement extends SettingsCreditCardListEntryElementBase { static get is() { return 'settings-credit-card-list-entry'; @@ -66,6 +66,10 @@ private readonly showExpirationAsSecondaryLabelEnabled_: boolean; private readonly virtualCardEnrollmentEnabled_: boolean; + get dotsMenu(): HTMLElement|null { + return this.shadowRoot!.getElementById('creditCardMenu'); + } + /** * Opens the credit card action menu. */
diff --git a/chrome/browser/resources/settings/autofill_page/iban_list_entry.ts b/chrome/browser/resources/settings/autofill_page/iban_list_entry.ts index 8ebc35c..8bc3558 100644 --- a/chrome/browser/resources/settings/autofill_page/iban_list_entry.ts +++ b/chrome/browser/resources/settings/autofill_page/iban_list_entry.ts
@@ -56,6 +56,10 @@ iban: chrome.autofillPrivate.IbanEntry; + get dotsMenu(): HTMLElement { + return this.$.ibanMenu; + } + /** * Opens the IBAN action menu. */
diff --git a/chrome/browser/resources/settings/autofill_page/payments_list.html b/chrome/browser/resources/settings/autofill_page/payments_list.html index 8075a84..cf965a2 100644 --- a/chrome/browser/resources/settings/autofill_page/payments_list.html +++ b/chrome/browser/resources/settings/autofill_page/payments_list.html
@@ -27,7 +27,8 @@ </div> <div class="vertical-list list-with-header" role="rowgroup"> <template is="dom-repeat" items="[[creditCards]]"> - <settings-credit-card-list-entry credit-card="[[item]]"> + <settings-credit-card-list-entry id="[[getCreditCardId_(index)]]" + class="payment-method" credit-card="[[item]]"> </settings-credit-card-list-entry> </template> </div> @@ -35,7 +36,8 @@ </div> <div class="vertical-list list-with-header" role="rowgroup"> <template is="dom-repeat" items="[[ibans]]"> - <settings-iban-list-entry iban="[[item]]"> + <settings-iban-list-entry id="[[getIbanId_(index)]]" + class="payment-method" iban="[[item]]"> </settings-iban-list-entry> </template> </div>
diff --git a/chrome/browser/resources/settings/autofill_page/payments_list.ts b/chrome/browser/resources/settings/autofill_page/payments_list.ts index b4668e0..4135795 100644 --- a/chrome/browser/resources/settings/autofill_page/payments_list.ts +++ b/chrome/browser/resources/settings/autofill_page/payments_list.ts
@@ -14,13 +14,16 @@ import './passwords_shared.css.js'; import './upi_id_list_entry.js'; +import {focusWithoutInk} from 'chrome://resources/js/focus_without_ink.js'; import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {loadTimeData} from '../i18n_setup.js'; +import {SettingsCreditCardListEntryElement} from './credit_card_list_entry.js'; +import {SettingsIbanListEntryElement} from './iban_list_entry.js'; import {getTemplate} from './payments_list.html.js'; -class SettingsPaymentsListElement extends PolymerElement { +export class SettingsPaymentsListElement extends PolymerElement { static get is() { return 'settings-payments-list'; } @@ -122,6 +125,71 @@ private showAnyPaymentMethods_: boolean; /** + * Focuses the next most appropriate element after removing a specific + * credit card. Returns `false` if it could not find such an element, + * in this case the focus is supposed to be handled by someone else. + */ + updateFocusBeforeCreditCardRemoval(cardIndex: number): boolean { + // The focused element is to be reset only if the last element is deleted, + // when the number of "dom-repeat" nodes changes and the focus get lost. + if (cardIndex === this.creditCards.length - 1) { + return this.updateFocusBeforeRemoval_(this.getCreditCardId_(cardIndex)); + } else { + return true; + } + } + + /** + * Focuses the next most appropriate element after removing a specific + * iban. Returns `false` if it could not find such an element, + * in this case the focus is supposed to be handled by someone else. + */ + updateFocusBeforeIbanRemoval(ibanIndex: number): boolean { + // The focused element is to be reset only if the last element is deleted, + // when the number of "dom-repeat" nodes changes and the focus get lost. + if (ibanIndex === this.ibans.length - 1) { + return this.updateFocusBeforeRemoval_(this.getIbanId_(ibanIndex)); + } else { + return true; + } + } + + /** + * Handles focus resetting across all payment method lists. Returns `false` + * only when the last payment method is removed, in other cases sets the focus + * to either the next or previous payment method. + */ + private updateFocusBeforeRemoval_(id: string): boolean { + const paymentMethods = + this.shadowRoot!.querySelectorAll<SettingsCreditCardListEntryElement| + SettingsIbanListEntryElement>( + '.payment-method'); + + if (paymentMethods.length <= 1) { + return false; + } + + const index = [...paymentMethods].findIndex((element) => element.id === id); + const isLastItem = index === paymentMethods.length - 1; + const indexToFocus = index + (isLastItem ? -1 : +1); + const menu = paymentMethods[indexToFocus].dotsMenu; + if (menu) { + focusWithoutInk(menu); + return true; + } + + return false; + } + + private getCreditCardId_(index: number): string { + return `card-${index}`; + } + + private getIbanId_(index: number): string { + return `iban-${index}`; + } + + /** * @return Whether the list exists and has items. */ private hasSome_(list: any[]): boolean {
diff --git a/chrome/browser/resources/settings/autofill_page/payments_section.ts b/chrome/browser/resources/settings/autofill_page/payments_section.ts index 38f94d4..d3d448e5 100644 --- a/chrome/browser/resources/settings/autofill_page/payments_section.ts +++ b/chrome/browser/resources/settings/autofill_page/payments_section.ts
@@ -25,7 +25,6 @@ import {SettingsToggleButtonElement} from '/shared/settings/controls/settings_toggle_button.js'; import {AnchorAlignment, CrActionMenuElement} from 'chrome://resources/cr_elements/cr_action_menu/cr_action_menu.js'; -import {CrButtonElement} from 'chrome://resources/cr_elements/cr_button/cr_button.js'; import {CrLazyRenderElement} from 'chrome://resources/cr_elements/cr_lazy_render/cr_lazy_render.js'; import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js'; import {assert} from 'chrome://resources/js/assert_ts.js'; @@ -38,6 +37,7 @@ import {PersonalDataChangedListener} from './autofill_manager_proxy.js'; import {DotsIbanMenuClickEvent} from './iban_list_entry.js'; +import {SettingsPaymentsListElement} from './payments_list.js'; import {PaymentsManagerImpl, PaymentsManagerProxy} from './payments_manager_proxy.js'; import {getTemplate} from './payments_section.html.js'; @@ -65,7 +65,7 @@ menuAddVirtualCard: HTMLElement, menuRemoveVirtualCard: HTMLElement, migrateCreditCards: HTMLElement, - paymentsList: HTMLElement, + paymentsList: SettingsPaymentsListElement, }; } @@ -214,7 +214,6 @@ private removeCardExpirationAndTypeTitlesEnabled_: boolean; private virtualCardEnrollmentEnabled_: boolean; private deviceAuthAvailable_: boolean; - private activeDialogAnchor_: HTMLElement|null = null; private paymentsManager_: PaymentsManagerProxy = PaymentsManagerImpl.getInstance(); private setPersonalDataListener_: PersonalDataChangedListener|null = null; @@ -319,7 +318,6 @@ this.activeCreditCard_ = e.detail.creditCard; this.$.creditCardSharedMenu.showAt(e.detail.anchorElement); - this.activeDialogAnchor_ = e.detail.anchorElement; } /** @@ -328,7 +326,6 @@ private onDotsIbanMenuClick_(e: DotsIbanMenuClickEvent) { // Copy item so dialog won't update model on cancel. this.activeIban_ = e.detail.iban; - this.activeDialogAnchor_ = e.detail.anchorElement; this.$.ibanSharedActionMenu.get().showAt(e.detail.anchorElement); } @@ -345,9 +342,6 @@ expirationYear: date.getFullYear().toString(), }; this.showCreditCardDialog_ = true; - this.activeDialogAnchor_ = this.shadowRoot!.querySelector<CrButtonElement>( - this.showIbanSettingsEnabled_ ? '#addPaymentMethods' : - '#addCreditCard'); if (this.showIbanSettingsEnabled_) { const menu = this.shadowRoot! .querySelector<CrLazyRenderElement<CrActionMenuElement>>( @@ -359,9 +353,6 @@ private onCreditCardDialogClose_() { this.showCreditCardDialog_ = false; - assert(this.activeDialogAnchor_); - focusWithoutInk(this.activeDialogAnchor_); - this.activeDialogAnchor_ = null; this.activeCreditCard_ = null; } @@ -371,8 +362,6 @@ private onAddIbanClick_(e: Event) { e.preventDefault(); this.showIbanDialog_ = true; - this.activeDialogAnchor_ = - this.shadowRoot!.querySelector<CrButtonElement>('#addPaymentMethods'); const menu = this.shadowRoot! .querySelector<CrLazyRenderElement<CrActionMenuElement>>( '#paymentMethodsActionMenu')!.get(); @@ -382,9 +371,6 @@ private onIbanDialogClose_() { this.showIbanDialog_ = false; - assert(this.activeDialogAnchor_); - focusWithoutInk(this.activeDialogAnchor_); - this.activeDialogAnchor_ = null; this.activeIban_ = null; } @@ -418,14 +404,16 @@ if (confirmationDialog.wasConfirmed()) { assert(this.activeCreditCard_); assert(this.activeCreditCard_.guid); + const index = this.creditCards.findIndex( + (card) => card.guid === this.activeCreditCard_!.guid); + if (!this.$.paymentsList.updateFocusBeforeCreditCardRemoval(index)) { + this.focusHeaderControls_(); + } this.paymentsManager_.removeCreditCard(this.activeCreditCard_.guid); this.activeCreditCard_ = null; } this.showLocalCreditCardRemoveConfirmationDialog_ = false; - assert(this.activeDialogAnchor_); - focusWithoutInk(this.activeDialogAnchor_); - this.activeDialogAnchor_ = null; } /** @@ -455,14 +443,16 @@ if (confirmationDialog.wasConfirmed()) { assert(this.activeIban_); assert(this.activeIban_.guid); + const index = + this.ibans.findIndex((iban) => iban.guid === this.activeIban_!.guid); + if (!this.$.paymentsList.updateFocusBeforeIbanRemoval(index)) { + this.focusHeaderControls_(); + } this.paymentsManager_.removeIban(this.activeIban_.guid); this.activeIban_ = null; } this.showLocalIbanRemoveConfirmationDialog_ = false; - assert(this.activeDialogAnchor_); - focusWithoutInk(this.activeDialogAnchor_); - this.activeDialogAnchor_ = null; } /** @@ -497,9 +487,6 @@ private onVirtualCardUnenrollDialogClose_() { this.showVirtualCardUnenrollDialog_ = false; - assert(this.activeDialogAnchor_); - focusWithoutInk(this.activeDialogAnchor_); - this.activeDialogAnchor_ = null; this.activeCreditCard_ = null; } @@ -625,6 +612,14 @@ return creditCardEnabled && (deviceAuthAvailable || mandatoryReauthToggleEnabled); } + + private focusHeaderControls_(): void { + const element = + this.shadowRoot!.querySelector<HTMLElement>('.header-aligned-button'); + if (element) { + focusWithoutInk(element); + } + } } declare global {
diff --git a/chrome/browser/resources/settings/chromeos/os_page_availability.ts b/chrome/browser/resources/settings/chromeos/os_page_availability.ts index bf1434c..5e677cb 100644 --- a/chrome/browser/resources/settings/chromeos/os_page_availability.ts +++ b/chrome/browser/resources/settings/chromeos/os_page_availability.ts
@@ -19,44 +19,26 @@ export interface OsPageAvailability { a11y: boolean; - advancedSettings: boolean; - appearance: { - bookmarksBar: boolean, - homeButton: boolean, - pageZoom: boolean, - setTheme: boolean, - setWallpaper: boolean, - }; - autofill: boolean; + apps: boolean; bluetooth: boolean; + crostini: boolean; dateTime: boolean; device: boolean; - downloads: { - googleDrive: boolean, - smbShares: boolean, - }; - extensions: boolean; + files: boolean; internet: boolean; kerberos: boolean; - languages: { - manageInputMethods: boolean, - inputMethodsList: boolean, - }; + languages: boolean; multidevice: boolean; onStartup: boolean; people: boolean|{ googleAccounts: boolean, lockScreen: boolean, - manageUsers: boolean, }; + personalization: boolean; printing: boolean; - privacy: { - contentProtectionAttestation: boolean, - networkPrediction: boolean, - searchPrediction: boolean, - wakeOnWifi: boolean, - }; + privacy: boolean; reset: boolean; + search: boolean; } const isGuestMode = loadTimeData.getBoolean('isGuest'); @@ -66,87 +48,50 @@ const isKerberosEnabled = loadTimeData.valueExists('isKerberosEnabled') && loadTimeData.getBoolean('isKerberosEnabled'); -let osPageAvailability: OsPageAvailability; +export let osPageAvailability: OsPageAvailability; if (isGuestMode) { osPageAvailability = { a11y: true, - advancedSettings: true, - appearance: { - setWallpaper: false, - setTheme: false, - homeButton: false, - bookmarksBar: false, - pageZoom: false, - }, - autofill: false, + apps: true, bluetooth: true, + crostini: true, dateTime: true, device: true, - downloads: { - googleDrive: false, - smbShares: false, - }, - extensions: false, + files: false, internet: true, kerberos: isKerberosEnabled, - languages: { - manageInputMethods: true, - inputMethodsList: true, - }, + languages: true, multidevice: false, onStartup: false, people: false, + personalization: false, printing: true, - privacy: { - contentProtectionAttestation: true, - searchPrediction: false, - networkPrediction: false, - wakeOnWifi: true, - }, + privacy: true, reset: false, + search: true, }; } else { osPageAvailability = { a11y: true, - advancedSettings: true, - appearance: { - setWallpaper: true, - setTheme: true, - homeButton: true, - bookmarksBar: true, - pageZoom: true, - }, - autofill: true, + apps: true, bluetooth: true, + crostini: true, dateTime: true, device: true, - downloads: { - googleDrive: true, - smbShares: true, - }, - extensions: true, + files: true, internet: true, kerberos: isKerberosEnabled, - languages: { - manageInputMethods: true, - inputMethodsList: true, - }, + languages: true, multidevice: true, onStartup: true, people: { - lockScreen: true, googleAccounts: isAccountManagerEnabled, - manageUsers: true, + lockScreen: true, }, + personalization: true, printing: true, - privacy: { - contentProtectionAttestation: true, - searchPrediction: true, - networkPrediction: true, - wakeOnWifi: true, - }, + privacy: true, reset: true, + search: true, }; } - -export {osPageAvailability};
diff --git a/chrome/browser/resources/settings/chromeos/os_printing_page/cups_printers.html b/chrome/browser/resources/settings/chromeos/os_printing_page/cups_printers.html index ebb35b3..bc47b72 100644 --- a/chrome/browser/resources/settings/chromeos/os_printing_page/cups_printers.html +++ b/chrome/browser/resources/settings/chromeos/os_printing_page/cups_printers.html
@@ -135,14 +135,14 @@ <template is="dom-if" if="[[doesAccountHaveSavedPrinters_(savedPrinters_)]]" restamp> <div id="savedPrintersContainer"> - <div class="padded first"> + <div class="settings-box first"> <div class="start"> <span aria-label$="[[savedPrintersAriaLabel_]]"> $i18n{savedPrintersTitle} </span> - </div> - <div class="secondary" hidden="[[!isPrinterSettingsRevampEnabled_]]"> - $i18n{savedPrintersSubtext} + <div class="secondary" hidden="[[!isPrinterSettingsRevampEnabled_]]"> + $i18n{savedPrintersSubtext} + </div> </div> </div>
diff --git a/chrome/browser/resources/settings/lazy_load.ts b/chrome/browser/resources/settings/lazy_load.ts index 8ff4736..d5f7be28 100644 --- a/chrome/browser/resources/settings/lazy_load.ts +++ b/chrome/browser/resources/settings/lazy_load.ts
@@ -117,7 +117,9 @@ export {BlockingRequestManager} from './autofill_page/blocking_request_manager.js'; // </if> export {SettingsCreditCardEditDialogElement} from './autofill_page/credit_card_edit_dialog.js'; +export {SettingsCreditCardListEntryElement} from './autofill_page/credit_card_list_entry.js'; export {SettingsIbanEditDialogElement} from './autofill_page/iban_edit_dialog.js'; +export {SettingsIbanListEntryElement} from './autofill_page/iban_list_entry.js'; // <if expr="is_win or is_macosx"> export {Passkey, PasskeysBrowserProxy, PasskeysBrowserProxyImpl} from './autofill_page/passkeys_browser_proxy.js'; export {SettingsPasskeysSubpageElement} from './autofill_page/passkeys_subpage.js';
diff --git a/chrome/browser/resources/settings/site_settings/review_notification_permissions.html b/chrome/browser/resources/settings/site_settings/review_notification_permissions.html index 211da7e7..9efb58ea 100644 --- a/chrome/browser/resources/settings/site_settings/review_notification_permissions.html +++ b/chrome/browser/resources/settings/site_settings/review_notification_permissions.html
@@ -16,7 +16,7 @@ <iron-collapse class="site-list" opened="[[notificationPermissionReviewListExpanded_]]"> <template is="dom-repeat" items="[[sites_]]"> - <div class="cr-row site-entry"> + <div class="list-item site-entry"> <site-favicon url="[[item.origin]]"></site-favicon> <div class="display-name cr-padded-text"> <div class="site-representation">[[item.origin]]</div> @@ -35,7 +35,7 @@ </cr-icon-button> </div> </template> - <div class="cr-row first"> + <div class="list-item first"> <cr-button id="blockAllButton" on-click="onBlockAllClick_" class="bulk-action-button"> $i18n{safetyCheckNotificationPermissionReviewBlockAllLabel}
diff --git a/chrome/browser/resources/settings/site_settings_page/site_review_shared.css b/chrome/browser/resources/settings/site_settings_page/site_review_shared.css index 23247a05..3bbafe39 100644 --- a/chrome/browser/resources/settings/site_settings_page/site_review_shared.css +++ b/chrome/browser/resources/settings/site_settings_page/site_review_shared.css
@@ -50,13 +50,11 @@ } .site-list { - margin-inline-start: 32px; + margin-inline-start: 48px; } -/* TODO(crbug.com/1392710): Use a .list-item instead of .cr-row. */ -.site-list .cr-row { - border-top-width: 0; - padding-inline-end: 0; +.site-list .list-item { + --cr-icon-button-margin-end: initial; } iron-icon[icon='cr:check'] {
diff --git a/chrome/browser/resources/settings/site_settings_page/unused_site_permissions.html b/chrome/browser/resources/settings/site_settings_page/unused_site_permissions.html index d95ac5e..805cc9d 100644 --- a/chrome/browser/resources/settings/site_settings_page/unused_site_permissions.html +++ b/chrome/browser/resources/settings/site_settings_page/unused_site_permissions.html
@@ -17,7 +17,7 @@ <iron-collapse class="site-list" opened="[[unusedSitePermissionsReviewListExpanded_]]"> <template is="dom-repeat" items="[[sites_]]"> - <div class$="cr-row site-entry [[getRowClass_(item.visible)]]"> + <div class$="list-item site-entry [[getRowClass_(item.visible)]]"> <site-favicon url="[[item.origin]]"></site-favicon> <div class="display-name cr-padded-text"> <div class="site-representation">[[item.origin]]</div> @@ -30,7 +30,7 @@ </cr-icon-button> </div> </template> - <div class="cr-row first"> + <div class="list-item first"> <cr-button class="action-button bulk-action-button" on-click="onGotItClick_"> $i18n{safetyCheckUnusedSitePermissionsGotItLabel}
diff --git a/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.cc b/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.cc index 75eae9e..a0e5629 100644 --- a/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.cc +++ b/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.cc
@@ -206,6 +206,13 @@ content_analysis_request_.mutable_request_data()->set_tab_url(tab_url.spec()); } +void BinaryUploadService::Request::set_printer_name( + const std::string& printer_name) { + content_analysis_request_.mutable_request_data() + ->mutable_print_metadata() + ->set_printer_name(printer_name); +} + std::string BinaryUploadService::Request::SetRandomRequestToken() { DCHECK(request_token().empty());
diff --git a/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h b/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h index e48ddd1d..7c3ccb911 100644 --- a/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h +++ b/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h
@@ -168,6 +168,7 @@ void set_user_action_id(const std::string& user_action_id); void set_user_action_requests_count(uint64_t user_action_requests_count); void set_tab_url(const GURL& tab_url); + void set_printer_name(const std::string& printer_name); std::string SetRandomRequestToken();
diff --git a/chrome/browser/sync/sync_ui_util.cc b/chrome/browser/sync/sync_ui_util.cc index 32f43a0..8ed8ec8 100644 --- a/chrome/browser/sync/sync_ui_util.cc +++ b/chrome/browser/sync/sync_ui_util.cc
@@ -103,7 +103,7 @@ // Check to see if sync has been disabled via the dashboard and needs to be // set up once again. - if (service->GetDisableReasons().Has( + if (service->HasDisableReason( syncer::SyncService::DISABLE_REASON_USER_CHOICE)) { return {SyncStatusMessageType::kSyncError, IDS_SIGNED_IN_WITH_SYNC_STOPPED_VIA_DASHBOARD,
diff --git a/chrome/browser/tab/BUILD.gn b/chrome/browser/tab/BUILD.gn index 22b5fa7..06c5d71 100644 --- a/chrome/browser/tab/BUILD.gn +++ b/chrome/browser/tab/BUILD.gn
@@ -100,7 +100,6 @@ "//components/strings:components_strings_grd", "//content/public/android:content_java", "//net/android:net_java", - "//third_party/android_deps:com_android_support_support_annotations_java", "//third_party/android_deps:guava_android_java", "//third_party/android_deps:protobuf_lite_runtime_java", "//third_party/androidx:androidx_annotation_annotation_java",
diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TabStateAttributes.java b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TabStateAttributes.java index 738c280f..b98cb43 100644 --- a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TabStateAttributes.java +++ b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TabStateAttributes.java
@@ -4,10 +4,9 @@ package org.chromium.chrome.browser.tab; -import android.support.annotation.VisibleForTesting; - import androidx.annotation.IntDef; import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; import org.chromium.base.ObserverList; import org.chromium.base.UserDataHost;
diff --git a/chrome/browser/ui/android/quickactionsearchwidget/BUILD.gn b/chrome/browser/ui/android/quickactionsearchwidget/BUILD.gn index 2656905..f850bb2 100644 --- a/chrome/browser/ui/android/quickactionsearchwidget/BUILD.gn +++ b/chrome/browser/ui/android/quickactionsearchwidget/BUILD.gn
@@ -13,7 +13,6 @@ "//chrome/browser/android/browserservices/intents:java", "//chrome/browser/ui/android/searchactivityutils:java", "//components/embedder_support/android:util_java", - "//third_party/android_deps:com_android_support_support_annotations_java", "//third_party/androidx:androidx_annotation_annotation_java", "//third_party/androidx:androidx_core_core_java", ]
diff --git a/chrome/browser/ui/android/signin/BUILD.gn b/chrome/browser/ui/android/signin/BUILD.gn index b243651..7ec91f9 100644 --- a/chrome/browser/ui/android/signin/BUILD.gn +++ b/chrome/browser/ui/android/signin/BUILD.gn
@@ -18,6 +18,7 @@ "//chrome/browser/signin/services/android:java", "//chrome/browser/sync/android:java", "//chrome/browser/tab:java", + "//chrome/browser/ui/android/device_lock:java", "//chrome/browser/version:java", "//components/browser_ui/bottomsheet/android:java", "//components/browser_ui/modaldialog/android:java", @@ -36,6 +37,7 @@ "//third_party/androidx:androidx_appcompat_appcompat_resources_java", "//third_party/androidx:androidx_core_core_java", "//third_party/androidx:androidx_fragment_fragment_java", + "//third_party/androidx:androidx_lifecycle_lifecycle_common_java", "//third_party/androidx:androidx_recyclerview_recyclerview_java", "//ui/android:ui_no_recycler_view_java", "//ui/android:ui_recycler_view_java", @@ -55,6 +57,7 @@ "java/src/org/chromium/chrome/browser/ui/signin/SigninUtils.java", "java/src/org/chromium/chrome/browser/ui/signin/SigninView.java", "java/src/org/chromium/chrome/browser/ui/signin/SyncConsentActivityLauncher.java", + "java/src/org/chromium/chrome/browser/ui/signin/SyncConsentDelegate.java", "java/src/org/chromium/chrome/browser/ui/signin/SyncConsentFragmentBase.java", "java/src/org/chromium/chrome/browser/ui/signin/SyncConsentView.java", "java/src/org/chromium/chrome/browser/ui/signin/SyncPromoController.java",
diff --git a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/SyncConsentDelegate.java b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/SyncConsentDelegate.java new file mode 100644 index 0000000..3af3b2a --- /dev/null +++ b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/SyncConsentDelegate.java
@@ -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. + +package org.chromium.chrome.browser.ui.signin; + +import org.chromium.ui.base.WindowAndroid; + +/** + * Defines the host interface for Sync Consent page. + */ +public interface SyncConsentDelegate { + /** + * Return the {@link WindowAndroid} for the host activity. + */ + WindowAndroid getWindowAndroid(); +}
diff --git a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/SyncConsentFragmentBase.java b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/SyncConsentFragmentBase.java index 3ca2a593..74bd36e1 100644 --- a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/SyncConsentFragmentBase.java +++ b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/SyncConsentFragmentBase.java
@@ -16,13 +16,17 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.FrameLayout; import android.widget.TextView; import androidx.annotation.IntDef; import androidx.annotation.Nullable; import androidx.annotation.StringRes; +import androidx.annotation.VisibleForTesting; import androidx.fragment.app.Fragment; +import androidx.lifecycle.Lifecycle; +import org.chromium.base.BuildInfo; import org.chromium.base.metrics.RecordUserAction; import org.chromium.chrome.browser.SyncFirstSetupCompleteSource; import org.chromium.chrome.browser.consent_auditor.ConsentAuditorFeature; @@ -37,6 +41,7 @@ import org.chromium.chrome.browser.signin.services.SigninMetricsUtils.State; import org.chromium.chrome.browser.signin.services.UnifiedConsentServiceBridge; import org.chromium.chrome.browser.sync.SyncService; +import org.chromium.chrome.browser.ui.device_lock.DeviceLockCoordinator; import org.chromium.chrome.browser.ui.signin.account_picker.AccountPickerCoordinator; import org.chromium.chrome.browser.ui.signin.account_picker.AccountPickerDialogCoordinator; import org.chromium.components.externalauth.ExternalAuthUtils; @@ -51,6 +56,7 @@ import org.chromium.components.signin.metrics.SigninAccessPoint; import org.chromium.components.sync.UserSelectableType; import org.chromium.components.user_prefs.UserPrefs; +import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.modaldialog.ModalDialogManagerHolder; import org.chromium.ui.text.NoUnderlineClickableSpan; @@ -69,9 +75,9 @@ * Derived classes must implement {@link #onSyncAccepted}/{@link #onSyncRefused} to define * what happens after the signin flow. */ -public abstract class SyncConsentFragmentBase - extends Fragment implements AccountPickerCoordinator.Listener, AccountsChangeObserver, - SigninManager.SignInStateObserver { +public abstract class SyncConsentFragmentBase extends Fragment + implements AccountPickerCoordinator.Listener, AccountsChangeObserver, + SigninManager.SignInStateObserver, DeviceLockCoordinator.Delegate { private static final String ARGUMENT_ACCESS_POINT = "SyncConsentFragmentBase.AccessPoint"; private static final String ARGUMENT_ACCOUNT_NAME = "SyncConsentFragmentBase.AccountName"; private static final String ARGUMENT_SHOW_TANGIBLE_SYNC_CONSENT_VIEW = @@ -117,6 +123,7 @@ private final AccountManagerFacade mAccountManagerFacade; protected boolean mIsChild; + private FrameLayout mFrameLayout; private SigninView mSigninView; private SyncConsentView mSyncConsentView; private ConsentTextTracker mConsentTextTracker; @@ -143,6 +150,11 @@ private ModalDialogManager mModalDialogManager; private ConfirmSyncDataStateMachine mConfirmSyncDataStateMachine; private @Nullable AccountPickerDialogCoordinator mAccountPickerDialogCoordinator; + private @Nullable WindowAndroid mWindowAndroid; + private @Nullable DeviceLockCoordinator mDeviceLockCoordinator; + + private Runnable mDeviceLockPageCallback; + private boolean mDeviceLockReady; /** * Creates an argument bundle for the default {@link SyncConsentFragment} flow. @@ -374,6 +386,7 @@ @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + mFrameLayout = new FrameLayout(getContext()); if (mShowTangibleSyncConsentView) { createSyncConsentView(inflater, container); } else { @@ -381,8 +394,35 @@ } updateConsentText(); + displaySignInOrSyncView(); + return mFrameLayout; + } - return mSyncConsentView != null ? mSyncConsentView : mSigninView; + private void displaySignInOrSyncView() { + mFrameLayout.removeAllViews(); + mFrameLayout.addView(mSyncConsentView != null ? mSyncConsentView : mSigninView); + } + + private void displayDeviceLockPage(Runnable onSuccess) { + mDeviceLockPageCallback = onSuccess; + mAccountManagerFacade.getAccounts().then((accounts) -> { + Account selectedAccount = + AccountUtils.findAccountByName(accounts, mSelectedAccountName); + assert selectedAccount != null; + + mDeviceLockCoordinator = new DeviceLockCoordinator( + true, this, getWindowAndroid(), getActivity(), selectedAccount); + }); + } + + @VisibleForTesting + public Runnable getDeviceLockPageCallbackForTesting() { + return mDeviceLockPageCallback; + } + + @VisibleForTesting + public boolean getDeviceLockReadyForTesting() { + return mDeviceLockReady; } private void createSyncConsentView(LayoutInflater inflater, ViewGroup container) { @@ -433,6 +473,38 @@ setHasAccounts(true); } + private WindowAndroid getWindowAndroid() { + return getDelegate().getWindowAndroid(); + } + + private SyncConsentDelegate getDelegate() { + return (SyncConsentDelegate) getActivity(); + } + + @Override + public void setView(View view) { + mFrameLayout.removeAllViews(); + mFrameLayout.addView(view); + } + + @Override + public void onDeviceLockReady() { + mDeviceLockCoordinator.destroy(); + mDeviceLockCoordinator = null; + + // Run the callback, or wait until #onResume if the fragment is not yet RESUMED. + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) { + mDeviceLockPageCallback.run(); + } else { + mDeviceLockReady = true; + } + } + + @Override + public void onDeviceLockRefused() { + refuseSignIn(); + } + @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); @@ -660,12 +732,24 @@ } private void onRefuseButtonClicked(View button) { + refuseSignIn(); + } + + private void refuseSignIn() { RecordUserAction.record("Signin_Undo_Signin"); mRecordUndoSignin = false; onSyncRefused(); } private void onAcceptButtonClicked(View button) { + if (BuildInfo.getInstance().isAutomotive) { + displayDeviceLockPage(() -> { initiateSignIn(button); }); + return; + } + initiateSignIn(button); + } + + private void initiateSignIn(View button) { if (!areControlsEnabled()) return; mIsSigninInProgress = true; mRecordUndoSignin = false; @@ -836,6 +920,9 @@ AccountUtils.getAccountsIfFulfilledOrEmpty(mAccountManagerFacade.getAccounts())); if (mSigninView != null) mSigninView.startAnimations(); + if (mDeviceLockReady) { + mDeviceLockPageCallback.run(); + } } @Override
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd index 5bd68ec..29bec5e7 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -2260,9 +2260,6 @@ <message name="IDS_SYNC_NEEDS_VERIFICATION_TITLE" desc="Title of the error message shown when sync needs to verify the user."> Sync needs to verify it's you </message> - <message name="IDS_HINT_SYNC_AUTH_ERROR" desc="Hint message to resolve sync auth error."> - Sign in again to start sync - </message> <message name="IDS_HINT_SYNC_AUTH_ERROR_MODERN" desc="Hint message to resolve sync auth error updated to align with the UPM error message."> Sign back in to start sync </message>
diff --git a/chrome/browser/ui/ash/app_list/apps_grid_drag_browsertest.cc b/chrome/browser/ui/ash/app_list/apps_grid_drag_browsertest.cc index 2614e06..ae31eeb2 100644 --- a/chrome/browser/ui/ash/app_list/apps_grid_drag_browsertest.cc +++ b/chrome/browser/ui/ash/app_list/apps_grid_drag_browsertest.cc
@@ -33,7 +33,7 @@ // Show the bubble launcher. ash::AcceleratorController::Get()->PerformActionIfEnabled( - ash::TOGGLE_APP_LIST, {}); + ash::AcceleratorAction::kToggleAppList, {}); app_list_test_api()->WaitForBubbleWindow( /*wait_for_opening_animation=*/true);
diff --git a/chrome/browser/ui/ash/ash_web_view_impl.cc b/chrome/browser/ui/ash/ash_web_view_impl.cc index a3add3e3..75330f6 100644 --- a/chrome/browser/ui/ash/ash_web_view_impl.cc +++ b/chrome/browser/ui/ash/ash_web_view_impl.cc
@@ -219,9 +219,10 @@ } void AshWebViewImpl::InitWebContents(Profile* profile) { - web_contents_ = - content::WebContents::Create(content::WebContents::CreateParams( - profile, content::SiteInstance::Create(profile))); + auto web_contents_params = content::WebContents::CreateParams( + profile, content::SiteInstance::Create(profile)); + web_contents_params.enable_wake_locks = params_.enable_wake_locks; + web_contents_ = content::WebContents::Create(web_contents_params); web_contents_->SetDelegate(this); Observe(web_contents_.get());
diff --git a/chrome/browser/ui/ash/system_tray_client_impl.cc b/chrome/browser/ui/ash/system_tray_client_impl.cc index 710b363..a12552b8 100644 --- a/chrome/browser/ui/ash/system_tray_client_impl.cc +++ b/chrome/browser/ui/ash/system_tray_client_impl.cc
@@ -904,8 +904,7 @@ ash::DeviceEnterpriseInfo device_enterprise_info; device_enterprise_info.enterprise_domain_manager = connector->GetEnterpriseDomainManager(); - device_enterprise_info.active_directory_managed = - connector->IsActiveDirectoryManaged(); + device_enterprise_info.active_directory_managed = false; device_enterprise_info.management_device_mode = GetManagementDeviceMode(connector); if (!last_device_enterprise_info_) {
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc index 0fcb029..a462353 100644 --- a/chrome/browser/ui/browser.cc +++ b/chrome/browser/ui/browser.cc
@@ -3219,7 +3219,7 @@ } #if BUILDFLAG(ENABLE_SCREEN_AI_SERVICE) -// TODO(https://1278249): Update function name (and trigger chain) when usage +// TODO(crbug.com/1443349): Update function name (and trigger chain) when usage // is finalized. void Browser::RunScreenAIAnnotator() { screen_ai::AXScreenAIAnnotatorFactory::GetForBrowserContext(profile())
diff --git a/chrome/browser/ui/color/chrome_color_id.h b/chrome/browser/ui/color/chrome_color_id.h index 518ef80..a485ea3 100644 --- a/chrome/browser/ui/color/chrome_color_id.h +++ b/chrome/browser/ui/color/chrome_color_id.h
@@ -20,6 +20,8 @@ kChromeColorsStart) \ E_CPONLY(kColorAppMenuHighlightSeverityHigh) \ E_CPONLY(kColorAppMenuHighlightSeverityMedium) \ + E_CPONLY(kColorAppMenuHighlightDefault) \ + E_CPONLY(kColorAppMenuExpandedForegroundDefault) \ /* Avatar colors. */ \ E_CPONLY(kColorAvatarButtonHighlightNormal) \ E_CPONLY(kColorAvatarButtonHighlightSyncError) \
diff --git a/chrome/browser/ui/color/material_chrome_color_mixer.cc b/chrome/browser/ui/color/material_chrome_color_mixer.cc index 3906f884..64f3e1fc 100644 --- a/chrome/browser/ui/color/material_chrome_color_mixer.cc +++ b/chrome/browser/ui/color/material_chrome_color_mixer.cc
@@ -24,6 +24,12 @@ // overriding when required to do so according to the new material spec. // TODO(crbug.com/1408542): Update color recipes to match UX mocks. ui::ColorMixer& mixer = provider->AddMixer(); + mixer[kColorAppMenuHighlightDefault] = {ui::kColorSysTonalContainer}; + mixer[kColorAppMenuHighlightSeverityLow] = {kColorAppMenuHighlightDefault}; + mixer[kColorAppMenuHighlightSeverityMedium] = {kColorAppMenuHighlightDefault}; + mixer[kColorAppMenuHighlightSeverityHigh] = {kColorAppMenuHighlightDefault}; + mixer[kColorAppMenuExpandedForegroundDefault] = { + ui::kColorSysOnTonalContainer}; mixer[kColorAvatarButtonHighlightNormal] = AdjustHighlightColorForContrast(ui::kColorSysPrimary, kColorToolbar); mixer[kColorBookmarkBarBackground] = {ui::kColorSysBase};
diff --git a/chrome/browser/ui/managed_ui.cc b/chrome/browser/ui/managed_ui.cc index 12ada086..fb213d6 100644 --- a/chrome/browser/ui/managed_ui.cc +++ b/chrome/browser/ui/managed_ui.cc
@@ -153,9 +153,7 @@ #if BUILDFLAG(IS_CHROMEOS_ASH) policy::BrowserPolicyConnectorAsh* connector = g_browser_process->platform_part()->browser_policy_connector_ash(); - return connector->IsActiveDirectoryManaged() - ? connector->GetRealm() - : connector->GetEnterpriseDomainManager(); + return connector->GetEnterpriseDomainManager(); #else // The device is managed as // `policy::ManagementServiceFactory::GetForPlatform()->IsManaged()` returned
diff --git a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_keyed_service.cc b/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_keyed_service.cc index 857e36c..d127276 100644 --- a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_keyed_service.cc +++ b/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_keyed_service.cc
@@ -6,12 +6,16 @@ #include <memory> +#include "base/metrics/histogram_functions.h" #include "base/notreached.h" +#include "base/time/time.h" +#include "base/timer/timer.h" #include "chrome/browser/bookmarks/url_and_id.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/sync/model_type_store_service_factory.h" #include "chrome/browser/ui/bookmarks/bookmark_utils_desktop.h" #include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_model_listener.h" #include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_utils.h" #include "chrome/browser/ui/tabs/tab_group.h" @@ -29,6 +33,7 @@ #include "content/public/browser/web_contents.h" namespace { +constexpr base::TimeDelta kDelayBeforeMetricsLogged = base::Hours(1); std::unique_ptr<syncer::ClientTagBasedModelTypeProcessor> CreateChangeProcessor() { @@ -45,6 +50,11 @@ listener_(model(), profile), bridge_(model(), GetStoreFactory(), CreateChangeProcessor()) { model()->AddObserver(this); + + metrics_timer_.Start( + FROM_HERE, kDelayBeforeMetricsLogged, + base::BindRepeating(&SavedTabGroupKeyedService::RecordMetrics, + base::Unretained(this))); } SavedTabGroupKeyedService::~SavedTabGroupKeyedService() { @@ -357,3 +367,55 @@ /*is_collapsed=*/false); tab_group->SetVisualData(visual_data, /*is_customized=*/true); } + +void SavedTabGroupKeyedService::RecordMetrics() { + RecordSavedTabGroupMetrics(); + RecordTabGroupMetrics(); + metrics_timer_.Reset(); +} + +void SavedTabGroupKeyedService::RecordSavedTabGroupMetrics() { + base::UmaHistogramCounts10000("TabGroups.SavedTabGroupCount", + model()->Count()); + + for (const SavedTabGroup& group : model()->saved_tab_groups()) { + base::UmaHistogramCounts10000("TabGroups.SavedTabGroupTabCount", + group.saved_tabs().size()); + } +} + +void SavedTabGroupKeyedService::RecordTabGroupMetrics() { + int total_unsaved_groups = 0; + + for (Browser* browser : *BrowserList::GetInstance()) { + if (profile_ != browser->profile()) { + continue; + } + + const TabStripModel* const tab_strip_model = browser->tab_strip_model(); + if (!tab_strip_model->SupportsTabGroups()) { + return; + } + + const TabGroupModel* group_model = tab_strip_model->group_model(); + CHECK(group_model); + + std::vector<tab_groups::TabGroupId> group_ids = + group_model->ListTabGroups(); + + for (tab_groups::TabGroupId group_id : group_ids) { + if (model()->Contains(group_id)) { + continue; + } + + const TabGroup* const group = group_model->GetTabGroup(group_id); + base::UmaHistogramCounts10000("TabGroups.UnsavedTabGroupTabCount", + group->tab_count()); + ++total_unsaved_groups; + } + } + + // Record total number of non-saved tab groups in all browsers. + base::UmaHistogramCounts10000("TabGroups.UnsavedTabGroupCount", + total_unsaved_groups); +}
diff --git a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_keyed_service.h b/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_keyed_service.h index 652de2d..77612a4 100644 --- a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_keyed_service.h +++ b/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_keyed_service.h
@@ -6,6 +6,7 @@ #define CHROME_BROWSER_UI_TABS_SAVED_TAB_GROUPS_SAVED_TAB_GROUP_KEYED_SERVICE_H_ #include "base/memory/raw_ptr.h" +#include "base/timer/timer.h" #include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_controller.h" #include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_model_listener.h" #include "components/keyed_service/core/keyed_service.h" @@ -72,6 +73,15 @@ void UpdateGroupVisualData(base::Uuid saved_group_guid, tab_groups::TabGroupId group_id); + // Wrapper function that calls all metric recording functions. + void RecordMetrics(); + + // Records the SavedTabGroup count and Tab count per SavedTabGroup. + void RecordSavedTabGroupMetrics(); + + // Records the Unsaved TabGroup count and the Tab count per Unsaved TabGroup. + void RecordTabGroupMetrics(); + // The profile used to instantiate the keyed service. raw_ptr<Profile> profile_ = nullptr; @@ -85,6 +95,10 @@ // Stores SavedTabGroup data to the disk and to sync if enabled. SavedTabGroupSyncBridge bridge_; + // Timer used to record periodic metrics about the state of the TabGroups + // (saved and unsaved). + base::RepeatingTimer metrics_timer_; + // Keeps track of the ids of session restored tab groups that were once saved // in order to link them together again once the SavedTabGroupModelLoaded is // called. After the model is loaded, this variable is emptied to conserve
diff --git a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_model_listener.cc b/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_model_listener.cc index d771b02..ab34aa3 100644 --- a/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_model_listener.cc +++ b/chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_model_listener.cc
@@ -20,6 +20,27 @@ class WebContents; } +SavedTabGroupModelListener::SavedTabGroupModelListener() = default; + +SavedTabGroupModelListener::SavedTabGroupModelListener( + SavedTabGroupModel* model, + Profile* profile) + : model_(model), profile_(profile) { + DCHECK(model); + DCHECK(profile); + for (Browser* browser : *BrowserList::GetInstance()) { + OnBrowserAdded(browser); + } + BrowserList::GetInstance()->AddObserver(this); +} + +SavedTabGroupModelListener::~SavedTabGroupModelListener() { + BrowserList::GetInstance()->RemoveObserver(this); + for (Browser* browser : *BrowserList::GetInstance()) { + OnBrowserRemoved(browser); + } +} + void SavedTabGroupModelListener::OnTabGroupChanged( const TabGroupChange& change) { const TabStripModel* tab_strip_model = change.model; @@ -104,27 +125,6 @@ } } -SavedTabGroupModelListener::SavedTabGroupModelListener() = default; - -SavedTabGroupModelListener::SavedTabGroupModelListener( - SavedTabGroupModel* model, - Profile* profile) - : model_(model), profile_(profile) { - DCHECK(model); - DCHECK(profile); - for (Browser* browser : *BrowserList::GetInstance()) { - OnBrowserAdded(browser); - } - BrowserList::GetInstance()->AddObserver(this); -} - -SavedTabGroupModelListener::~SavedTabGroupModelListener() { - BrowserList::GetInstance()->RemoveObserver(this); - for (Browser* browser : *BrowserList::GetInstance()) { - OnBrowserRemoved(browser); - } -} - void SavedTabGroupModelListener::ConnectToLocalTabGroup( const SavedTabGroup& saved_tab_group, std::vector<std::pair<content::WebContents*, base::Uuid>> mapping) {
diff --git a/chrome/browser/ui/tabs/tab_group_model.cc b/chrome/browser/ui/tabs/tab_group_model.cc index bcace10..6565a00 100644 --- a/chrome/browser/ui/tabs/tab_group_model.cc +++ b/chrome/browser/ui/tabs/tab_group_model.cc
@@ -20,7 +20,7 @@ TabGroupModel::TabGroupModel(TabGroupController* controller) : controller_(controller) {} -TabGroupModel::~TabGroupModel() {} +TabGroupModel::~TabGroupModel() = default; TabGroup* TabGroupModel::AddTabGroup( const tab_groups::TabGroupId& id,
diff --git a/chrome/browser/ui/toolbar/app_menu_model.cc b/chrome/browser/ui/toolbar/app_menu_model.cc index 6df969e..28aedc40 100644 --- a/chrome/browser/ui/toolbar/app_menu_model.cc +++ b/chrome/browser/ui/toolbar/app_menu_model.cc
@@ -223,11 +223,21 @@ #else int help_string_id = IDS_HELP_PAGE; #endif - AddItem(IDC_ABOUT, l10n_util::GetStringUTF16(IDS_ABOUT)); + AddItemWithStringId(IDC_ABOUT, IDS_ABOUT); + if (features::IsChromeRefresh2023()) { + SetIcon( + GetIndexOfCommandId(IDC_ABOUT).value(), + ui::ImageModel::FromVectorIcon(vector_icons::kInfoRefreshIcon, + ui::kColorMenuIcon, kDefaultIconSize)); + } #if BUILDFLAG(GOOGLE_CHROME_BRANDING) if (base::FeatureList::IsEnabled(features::kChromeWhatsNewUI)) { - AddItem(IDC_CHROME_WHATS_NEW, - l10n_util::GetStringUTF16(IDS_CHROME_WHATS_NEW)); + AddItemWithStringId(IDC_CHROME_WHATS_NEW, IDS_CHROME_WHATS_NEW); + if (features::IsChromeRefresh2023()) { + SetIcon(GetIndexOfCommandId(IDC_CHROME_WHATS_NEW).value(), + ui::ImageModel::FromVectorIcon( + kReleaseAlertIcon, ui::kColorMenuIcon, kDefaultIconSize)); + } } #endif // BUILDFLAG(GOOGLE_CHROME_BRANDING) AddItemWithStringId(IDC_HELP_PAGE_VIA_MENU, help_string_id); @@ -235,9 +245,20 @@ ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); SetIcon(GetIndexOfCommandId(IDC_HELP_PAGE_VIA_MENU).value(), ui::ImageModel::FromImage(rb.GetNativeImageNamed(IDR_HELP_MENU))); + } else if (features::IsChromeRefresh2023()) { + SetIcon(GetIndexOfCommandId(IDC_HELP_PAGE_VIA_MENU).value(), + ui::ImageModel::FromVectorIcon(kHelpMenuIcon, ui::kColorMenuIcon, + kDefaultIconSize)); } - if (browser->profile()->GetPrefs()->GetBoolean(prefs::kUserFeedbackAllowed)) + if (browser->profile()->GetPrefs()->GetBoolean( + prefs::kUserFeedbackAllowed)) { AddItemWithStringId(IDC_FEEDBACK, IDS_FEEDBACK); + if (features::IsChromeRefresh2023()) { + SetIcon(GetIndexOfCommandId(IDC_FEEDBACK).value(), + ui::ImageModel::FromVectorIcon(kReportIcon, ui::kColorMenuIcon, + kDefaultIconSize)); + } + } } };
diff --git a/chrome/browser/ui/user_education/OWNERS b/chrome/browser/ui/user_education/OWNERS index 54d8e0f..afaaa13 100644 --- a/chrome/browser/ui/user_education/OWNERS +++ b/chrome/browser/ui/user_education/OWNERS
@@ -1,7 +1,7 @@ # Primary dfried@chromium.org +mickeyburks@chromium.org # Backup -bsep@chromium.org -pbos@chromium.org dpenning@chromium.org +emshack@chromium.org \ No newline at end of file
diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc index 5e95be5..1a1471f 100644 --- a/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc +++ b/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc
@@ -499,10 +499,9 @@ ukm_recorder.ExpectEntrySourceHasUrl(entry, origin_url); EXPECT_EQ(*ukm_recorder.GetEntryMetric(entry, "Source"), static_cast<int64_t>(permissions::PermissionSourceUI::OIB)); - size_t num_values = 0; - EXPECT_EQ(*ukm_recorder.GetEntryMetric(entry, "PermissionType"), - ContentSettingTypeToHistogramValue( - ContentSettingsType::NOTIFICATIONS, &num_values)); + EXPECT_EQ( + *ukm_recorder.GetEntryMetric(entry, "PermissionType"), + ContentSettingTypeToHistogramValue(ContentSettingsType::NOTIFICATIONS)); EXPECT_EQ(*ukm_recorder.GetEntryMetric(entry, "Action"), static_cast<int64_t>(permissions::PermissionAction::REVOKED)); }
diff --git a/chrome/browser/ui/views/performance_controls/high_efficiency_interactive_ui_test.cc b/chrome/browser/ui/views/performance_controls/high_efficiency_interactive_ui_test.cc index 29ca9093..5ed22b5c 100644 --- a/chrome/browser/ui/views/performance_controls/high_efficiency_interactive_ui_test.cc +++ b/chrome/browser/ui/views/performance_controls/high_efficiency_interactive_ui_test.cc
@@ -21,6 +21,7 @@ #include "chrome/browser/ui/views/page_action/page_action_icon_controller.h" #include "chrome/browser/ui/views/performance_controls/high_efficiency_bubble_view.h" #include "chrome/browser/ui/views/performance_controls/high_efficiency_chip_view.h" +#include "chrome/browser/ui/views/performance_controls/high_efficiency_resource_view.h" #include "chrome/browser/ui/views/tabs/tab_icon.h" #include "chrome/browser/ui/views/tabs/tab_strip.h" #include "chrome/common/webui_url_constants.h" @@ -130,6 +131,33 @@ })); } + auto ForceRefreshMemoryMetrics() { + return Do(base::BindLambdaForTesting([]() { + performance_manager::user_tuning::UserPerformanceTuningManager* manager = + performance_manager::user_tuning::UserPerformanceTuningManager:: + GetInstance(); + + base::RunLoop run_loop(base::RunLoop::Type::kNestableTasksAllowed); + QuitRunLoopOnMemoryMetricsRefreshObserver observer( + run_loop.QuitClosure()); + base::ScopedObservation< + performance_manager::user_tuning::UserPerformanceTuningManager, + QuitRunLoopOnMemoryMetricsRefreshObserver> + memory_metrics_observer(&observer); + memory_metrics_observer.Observe(manager); + + performance_manager::PerformanceManager::CallOnGraph( + FROM_HERE, + base::BindLambdaForTesting([](performance_manager::Graph* graph) { + auto* metrics_decorator = graph->GetRegisteredObjectAs< + performance_manager::ProcessMetricsDecorator>(); + metrics_decorator->RefreshMetricsForTesting(); + })); + + run_loop.Run(); + })); + } + // Attempts to discard the tab at discard_tab_index and navigates to that // tab and waits for it to reload auto DiscardAndSelectTab(int discard_tab_index, @@ -351,33 +379,6 @@ index)); } - auto ForceRefreshMemoryMetrics() { - return Do(base::BindLambdaForTesting([]() { - performance_manager::user_tuning::UserPerformanceTuningManager* manager = - performance_manager::user_tuning::UserPerformanceTuningManager:: - GetInstance(); - - base::RunLoop run_loop(base::RunLoop::Type::kNestableTasksAllowed); - QuitRunLoopOnMemoryMetricsRefreshObserver observer( - run_loop.QuitClosure()); - base::ScopedObservation< - performance_manager::user_tuning::UserPerformanceTuningManager, - QuitRunLoopOnMemoryMetricsRefreshObserver> - memory_metrics_observer(&observer); - memory_metrics_observer.Observe(manager); - - performance_manager::PerformanceManager::CallOnGraph( - FROM_HERE, - base::BindLambdaForTesting([](performance_manager::Graph* graph) { - auto* metrics_decorator = graph->GetRegisteredObjectAs< - performance_manager::ProcessMetricsDecorator>(); - metrics_decorator->RefreshMetricsForTesting(); - })); - - run_loop.Run(); - })); - } - private: base::test::ScopedFeatureList scoped_feature_list_; }; @@ -751,3 +752,44 @@ INSTANTIATE_TEST_SUITE_P(All, HighEfficiencyFaviconTreatmentTest, testing::ValuesIn(HighEfficiencyTestConfig())); + +// Tests the new memory savings reporting improvements on the high efficiency +// dialog. +class HighEfficiencyMemorySavingsReportingImprovmentsTest + : public HighEfficiencyInteractiveTest { + public: + HighEfficiencyMemorySavingsReportingImprovmentsTest() = default; + ~HighEfficiencyMemorySavingsReportingImprovmentsTest() override = default; + + void SetUp() override { + scoped_feature_list_.InitAndEnableFeature( + performance_manager::features::kMemorySavingsReportingImprovements); + + animation_mode_reset_ = gfx::AnimationTestApi::SetRichAnimationRenderMode( + gfx::Animation::RichAnimationRenderMode::FORCE_DISABLED); + + HighEfficiencyInteractiveTest::SetUp(); + } + + private: + base::test::ScopedFeatureList scoped_feature_list_; + std::unique_ptr<base::AutoReset<gfx::Animation::RichAnimationRenderMode>> + animation_mode_reset_; +}; + +// The high efficiency chip dialog renders a gauge style visualization that +// must be rendered correctly. +IN_PROC_BROWSER_TEST_F(HighEfficiencyMemorySavingsReportingImprovmentsTest, + RenderVisualizationInDialog) { + RunTestSequence( + SetOnIncompatibleAction(OnIncompatibleAction::kSkipTest, + kSkipPixelTestsReason), + InstrumentTab(kFirstTabContents, 0), + NavigateWebContents(kFirstTabContents, GetURL("/title1.html")), + AddInstrumentedTab(kSecondTabContents, GURL(chrome::kChromeUINewTabURL)), + ForceRefreshMemoryMetrics(), DiscardAndSelectTab(0, kFirstTabContents), + PressButton(kHighEfficiencyChipElementId), + WaitForShow(HighEfficiencyBubbleView::kHighEfficiencyDialogBodyElementId), + Screenshot(HighEfficiencyBubbleView::kHighEfficiencyDialogBodyElementId, + "HighEfficiencyResourceView", "4497874")); +}
diff --git a/chrome/browser/ui/views/performance_controls/high_efficiency_resource_view.cc b/chrome/browser/ui/views/performance_controls/high_efficiency_resource_view.cc index 8a2faf0..4c6229c8 100644 --- a/chrome/browser/ui/views/performance_controls/high_efficiency_resource_view.cc +++ b/chrome/browser/ui/views/performance_controls/high_efficiency_resource_view.cc
@@ -4,23 +4,158 @@ #include "chrome/browser/ui/views/performance_controls/high_efficiency_resource_view.h" +#include "base/numerics/math_constants.h" #include "chrome/grit/generated_resources.h" +#include "components/performance_manager/public/features.h" #include "ui/base/l10n/l10n_util.h" +#include "ui/base/metadata/metadata_header_macros.h" +#include "ui/base/metadata/metadata_impl_macros.h" #include "ui/base/text/bytes_formatting.h" +#include "ui/color/color_id.h" +#include "ui/color/color_provider.h" +#include "ui/gfx/canvas.h" +#include "ui/gfx/geometry/point_f.h" +#include "ui/gfx/geometry/size.h" +#include "ui/gfx/geometry/vector2d_f.h" #include "ui/views/controls/label.h" +#include "ui/views/layout/flex_layout_view.h" +#include "ui/views/layout/layout_types.h" DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE( HighEfficiencyResourceView, kHighEfficiencyResourceViewMemorySavingsElementId); +namespace { + +constexpr int kMemoryLabelSizeDelta = 12; +constexpr int kGaugeRadius = 80; +constexpr int kStrokeWidth = 8; +constexpr int kTickStrokeWidth = 2; +constexpr int kBucketCount = 4; +constexpr double kBucketWidthDegrees = 180 / kBucketCount; + +class GaugeView : public views::FlexLayoutView { + public: + METADATA_HEADER(GaugeView); + + explicit GaugeView(const int memory_savings_bytes) + : memory_savings_bytes_(memory_savings_bytes) { + SetOrientation(views::LayoutOrientation::kVertical); + SetMainAxisAlignment(views::LayoutAlignment::kEnd); + SetCrossAxisAlignment(views::LayoutAlignment::kCenter); + } + + ~GaugeView() override = default; + + gfx::Size CalculatePreferredSize() const override { + return gfx::Size((kGaugeRadius + kStrokeWidth) * 2, + kGaugeRadius + kStrokeWidth); + } + + void OnPaint(gfx::Canvas* canvas) override { + const gfx::PointF center = gfx::RectF(GetLocalBounds()).bottom_center(); + + DrawArc(canvas, center, 180, + GetColorProvider()->GetColor(ui::kColorMidground)); + + // Map the memory savings to which of the 4 buckets it falls into and then + // draw an arc to the middle of the corresponding bucket. This is why the + // 0.5 parts of the multipliers are needed. + int memory_angle; + if (memory_savings_bytes_ < + performance_manager::features::kHighEfficiencyChartPmf25PercentileBytes + .Get()) { + memory_angle = 0.5 * kBucketWidthDegrees; + } else if (memory_savings_bytes_ < + performance_manager::features:: + kHighEfficiencyChartPmf50PercentileBytes.Get()) { + memory_angle = 1.5 * kBucketWidthDegrees; + } else if (memory_savings_bytes_ < + performance_manager::features:: + kHighEfficiencyChartPmf75PercentileBytes.Get()) { + memory_angle = 2.5 * kBucketWidthDegrees; + } else { + memory_angle = 3.5 * kBucketWidthDegrees; + } + + DrawArc(canvas, center, memory_angle, + GetColorProvider()->GetColor(ui::kColorAccent)); + + const SkColor tick_color = + GetColorProvider()->GetColor(ui::kColorDialogBackground); + for (int i = 1; i < kBucketCount; i++) { + double angle = i * 180 / kBucketCount; + DrawTick(canvas, center, angle, tick_color); + } + } + + private: + const int memory_savings_bytes_; + + // Draws an arc starting at the far left, with the specified center point and + // angle (in degrees). + void DrawArc(gfx::Canvas* canvas, + const gfx::PointF center, + const int angle_degrees, + const SkColor color) { + SkPath arc_path; + arc_path.addArc( + SkRect::MakeXYWH(center.x() - kGaugeRadius, center.y() - kGaugeRadius, + 2 * kGaugeRadius, 2 * kGaugeRadius), + 180, angle_degrees); + + cc::PaintFlags flags; + flags.setStyle(cc::PaintFlags::kStroke_Style); + flags.setStrokeWidth(kStrokeWidth); + flags.setColor(color); + flags.setAntiAlias(true); + + canvas->DrawPath(arc_path, flags); + } + + // Draw a tick mark over the arc, that is `angle_degrees` from the far left. + void DrawTick(gfx::Canvas* canvas, + const gfx::PointF center, + const double angle_degrees, + const SkColor color) { + cc::PaintFlags flags; + flags.setStyle(cc::PaintFlags::kStroke_Style); + flags.setStrokeWidth(kTickStrokeWidth); + flags.setColor(color); + flags.setAntiAlias(true); + + // Vector of length 1 in the direction of the tick mark. + gfx::Vector2dF unit_vector( + std::cos(-angle_degrees * base::kPiDouble / 180), + std::sin(-angle_degrees * base::kPiDouble / 180)); + + // Draw a line from the inner edge of the arc to the outer edge of the arc. + canvas->DrawLine( + center + ScaleVector2d(unit_vector, kGaugeRadius - kStrokeWidth / 2), + center + ScaleVector2d(unit_vector, kGaugeRadius + kStrokeWidth / 2), + flags); + } +}; + +BEGIN_METADATA(GaugeView, views::View) +END_METADATA + +} // namespace + HighEfficiencyResourceView::HighEfficiencyResourceView( const int memory_savings_bytes) { SetOrientation(views::LayoutOrientation::kVertical); - auto* memory_label = AddChildView( + auto* gauge_view = + AddChildView(std::make_unique<GaugeView>(memory_savings_bytes)); + + auto* memory_label = gauge_view->AddChildView( std::make_unique<views::Label>(ui::FormatBytes(memory_savings_bytes))); memory_label->SetProperty(views::kElementIdentifierKey, kHighEfficiencyResourceViewMemorySavingsElementId); + memory_label->SetFontList( + memory_label->font_list().DeriveWithSizeDelta(kMemoryLabelSizeDelta)); + AddChildView(std::make_unique<views::Label>( l10n_util::GetStringUTF16(IDS_HIGH_EFFICIENCY_DIALOG_SAVINGS_LABEL), views::style::CONTEXT_LABEL, views::style::STYLE_SECONDARY));
diff --git a/chrome/browser/ui/views/side_panel/search_companion/search_companion_side_panel_coordinator.cc b/chrome/browser/ui/views/side_panel/search_companion/search_companion_side_panel_coordinator.cc index 78b1cefe..e1d55f0 100644 --- a/chrome/browser/ui/views/side_panel/search_companion/search_companion_side_panel_coordinator.cc +++ b/chrome/browser/ui/views/side_panel/search_companion/search_companion_side_panel_coordinator.cc
@@ -102,6 +102,11 @@ return BrowserView::GetBrowserViewForBrowser(&GetBrowser()); } +std::u16string +SearchCompanionSidePanelCoordinator::GetTooltipForToolbarButton() { + return l10n_util::GetStringUTF16(IDS_SIDE_PANEL_COMPANION_TOOLBAR_TOOLTIP); +} + void SearchCompanionSidePanelCoordinator::OnTabStripModelChanged( TabStripModel* tab_strip_model, const TabStripModelChange& change,
diff --git a/chrome/browser/ui/views/side_panel/search_companion/search_companion_side_panel_coordinator.h b/chrome/browser/ui/views/side_panel/search_companion/search_companion_side_panel_coordinator.h index f80fd42..24b434a 100644 --- a/chrome/browser/ui/views/side_panel/search_companion/search_companion_side_panel_coordinator.h +++ b/chrome/browser/ui/views/side_panel/search_companion/search_companion_side_panel_coordinator.h
@@ -44,6 +44,7 @@ bool Show(); BrowserView* GetBrowserView(); + std::u16string GetTooltipForToolbarButton(); std::u16string name() { return name_; } const gfx::VectorIcon& icon() { return *icon_; }
diff --git a/chrome/browser/ui/views/side_panel/side_panel_coordinator.cc b/chrome/browser/ui/views/side_panel/side_panel_coordinator.cc index f024ddc..ed07d3f 100644 --- a/chrome/browser/ui/views/side_panel/side_panel_coordinator.cc +++ b/chrome/browser/ui/views/side_panel/side_panel_coordinator.cc
@@ -18,6 +18,7 @@ #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_element_identifiers.h" #include "chrome/browser/ui/color/chrome_color_id.h" +#include "chrome/browser/ui/side_panel/companion/companion_utils.h" #include "chrome/browser/ui/ui_features.h" #include "chrome/browser/ui/views/chrome_layout_provider.h" #include "chrome/browser/ui/views/frame/browser_view.h" @@ -89,9 +90,9 @@ views::ConfigureVectorImageButton(button.get()); ConfigureControlButton(button.get()); button->SetTooltipText( - l10n_util::GetStringUTF16(IDS_SIDE_PANEL_TOOLBAR_BUTTON_CXMENU_PIN)); + l10n_util::GetStringUTF16(IDS_SIDE_PANEL_HEADER_PIN_BUTTON_TOOLTIP)); button->SetToggledTooltipText( - l10n_util::GetStringUTF16(IDS_SIDE_PANEL_TOOLBAR_BUTTON_CXMENU_UNPIN)); + l10n_util::GetStringUTF16(IDS_SIDE_PANEL_HEADER_UNPIN_BUTTON_TOOLTIP)); int dip_size = ChromeLayoutProvider::Get()->GetDistanceMetric( ChromeDistanceMetric::DISTANCE_SIDE_PANEL_HEADER_VECTOR_ICON_SIZE); @@ -294,8 +295,10 @@ ClearCachedEntryViews(); // TODO(pbos): Make this button observe panel-visibility state instead. - SetSidePanelButtonTooltipText( - l10n_util::GetStringUTF16(IDS_TOOLTIP_SIDE_PANEL_SHOW)); + if (!companion::IsCompanionFeatureEnabled()) { + SetSidePanelButtonTooltipText( + l10n_util::GetStringUTF16(IDS_TOOLTIP_SIDE_PANEL_SHOW)); + } // `OnEntryWillDeregister` (triggered by calling `OnEntryHidden`) may already // have deleted the content view, so check that it still exists. @@ -485,8 +488,10 @@ void SidePanelCoordinator::InitializeSidePanel() { // TODO(pbos): Make this button observe panel-visibility state instead. - SetSidePanelButtonTooltipText( - l10n_util::GetStringUTF16(IDS_TOOLTIP_SIDE_PANEL_HIDE)); + if (!companion::IsCompanionFeatureEnabled()) { + SetSidePanelButtonTooltipText( + l10n_util::GetStringUTF16(IDS_TOOLTIP_SIDE_PANEL_HIDE)); + } auto container = std::make_unique<views::FlexLayoutView>(); // Align views vertically top to bottom.
diff --git a/chrome/browser/ui/views/side_panel/side_panel_toolbar_container.cc b/chrome/browser/ui/views/side_panel/side_panel_toolbar_container.cc index a2b4f5d2..065519a6 100644 --- a/chrome/browser/ui/views/side_panel/side_panel_toolbar_container.cc +++ b/chrome/browser/ui/views/side_panel/side_panel_toolbar_container.cc
@@ -181,9 +181,10 @@ auto* search_companion_coordinator = SearchCompanionSidePanelCoordinator::GetOrCreateForBrowser( browser_view_->browser()); - AddPinnedEntryButtonFor(SidePanelEntry::Id::kSearchCompanion, - search_companion_coordinator->name(), - search_companion_coordinator->icon()); + AddPinnedEntryButtonFor( + SidePanelEntry::Id::kSearchCompanion, + search_companion_coordinator->GetTooltipForToolbarButton(), + search_companion_coordinator->icon()); } void SidePanelToolbarContainer::AddPinnedEntryButtonFor( @@ -246,12 +247,7 @@ pinned_button->SetHighlighted(false); } } - // TODO(corising): Update tooltip for case when pinned button is highlighted - // once provided by UX. GetSidePanelButton()->SetHighlighted(side_panel_button_highlighted); - GetSidePanelButton()->SetTooltipText(l10n_util::GetStringUTF16( - side_panel_visible ? IDS_TOOLTIP_SIDE_PANEL_HIDE - : IDS_TOOLTIP_SIDE_PANEL_SHOW)); } bool SidePanelToolbarContainer::HasPinnedEntryButtonFor(SidePanelEntry::Id id) {
diff --git a/chrome/browser/ui/views/side_panel/side_panel_toolbar_container_unittest.cc b/chrome/browser/ui/views/side_panel/side_panel_toolbar_container_unittest.cc index 93f2b0a..7cc42f7 100644 --- a/chrome/browser/ui/views/side_panel/side_panel_toolbar_container_unittest.cc +++ b/chrome/browser/ui/views/side_panel/side_panel_toolbar_container_unittest.cc
@@ -97,7 +97,7 @@ SearchCompanionSidePanelCoordinator::GetOrCreateForBrowser( browser_view()->browser()); ASSERT_EQ(pinned_buttons[0]->GetTooltipText(gfx::Point()), - search_companion_coordinator->name()); + search_companion_coordinator->GetTooltipForToolbarButton()); } TEST_F(SidePanelToolbarContainerTest, ClickingPinnedEntryOpensSidePanel) {
diff --git a/chrome/browser/ui/views/toolbar/browser_app_menu_button.cc b/chrome/browser/ui/views/toolbar/browser_app_menu_button.cc index 64da8b20..60ed735d 100644 --- a/chrome/browser/ui/views/toolbar/browser_app_menu_button.cc +++ b/chrome/browser/ui/views/toolbar/browser_app_menu_button.cc
@@ -22,6 +22,7 @@ #include "chrome/browser/ui/ui_features.h" #include "chrome/browser/ui/views/chrome_layout_provider.h" #include "chrome/browser/ui/views/toolbar/app_menu.h" +#include "chrome/browser/ui/views/toolbar/toolbar_button.h" #include "chrome/browser/ui/views/toolbar/toolbar_ink_drop_util.h" #include "chrome/browser/ui/views/toolbar/toolbar_view.h" #include "chrome/grit/chromium_strings.h" @@ -66,9 +67,7 @@ void BrowserAppMenuButton::SetTypeAndSeverity( AppMenuIconController::TypeAndSeverity type_and_severity) { type_and_severity_ = type_and_severity; - - UpdateIcon(); - UpdateTextAndHighlightColor(); + UpdateColors(); } void BrowserAppMenuButton::ShowMenu(int run_types) { @@ -120,10 +119,17 @@ } void BrowserAppMenuButton::OnThemeChanged() { - UpdateTextAndHighlightColor(); + UpdateColors(); AppMenuButton::OnThemeChanged(); } +void BrowserAppMenuButton::UpdateColors() { + UpdateTextAndHighlightColor(); + // Call `UpdateIcon()` after `UpdateTextAndHighlightColor()` as the icon color + // depends on if the container is in an expanded state. + UpdateIcon(); +} + void BrowserAppMenuButton::UpdateIcon() { const gfx::VectorIcon& icon = ui::TouchUiController::Get()->touch_ui() @@ -138,6 +144,22 @@ } } +bool BrowserAppMenuButton::IsLabelPresentAndVisible() const { + if (!label()) { + return false; + } + return label()->GetVisible() && !label()->GetText().empty(); +} + +SkColor BrowserAppMenuButton::GetForegroundColor(ButtonState state) const { + if (features::IsChromeRefresh2023() && IsLabelPresentAndVisible()) { + const auto* const color_provider = GetColorProvider(); + return color_provider->GetColor(kColorAppMenuExpandedForegroundDefault); + } + + return ToolbarButton::GetForegroundColor(state); +} + void BrowserAppMenuButton::HandleMenuClosed() { // If we were showing a promo in the menu, drop the handle to notify // FeaturePromoController we're done. This is a no-op if we weren't @@ -194,6 +216,18 @@ SetHighlight(text, color); } +bool BrowserAppMenuButton::ShouldPaintBorder() const { + return !features::IsChromeRefresh2023(); +} + +absl::optional<SkColor> BrowserAppMenuButton::GetHighlightTextColor() const { + if (features::IsChromeRefresh2023() && IsLabelPresentAndVisible()) { + const auto* const color_provider = GetColorProvider(); + return color_provider->GetColor(kColorAppMenuExpandedForegroundDefault); + } + return absl::nullopt; +} + void BrowserAppMenuButton::OnTouchUiChanged() { UpdateColorsAndInsets(); PreferredSizeChanged();
diff --git a/chrome/browser/ui/views/toolbar/browser_app_menu_button.h b/chrome/browser/ui/views/toolbar/browser_app_menu_button.h index 25528e0..9f13b2f8 100644 --- a/chrome/browser/ui/views/toolbar/browser_app_menu_button.h +++ b/chrome/browser/ui/views/toolbar/browser_app_menu_button.h
@@ -41,6 +41,8 @@ // Used only in testing. static bool g_open_app_immediately_for_testing; + void UpdateColors(); + // AppMenuButton: void OnThemeChanged() override; // Updates the presentation according to |severity_| and the theme provider. @@ -54,6 +56,11 @@ void UpdateTextAndHighlightColor(); + bool ShouldPaintBorder() const override; + absl::optional<SkColor> GetHighlightTextColor() const override; + + bool IsLabelPresentAndVisible() const; + SkColor GetForegroundColor(ButtonState state) const override; void SetHasInProductHelpPromo(bool has_in_product_help_promo); // Closes and continue the flow of an in-product help promo; Returns
diff --git a/chrome/browser/ui/views/toolbar/side_panel_toolbar_button.cc b/chrome/browser/ui/views/toolbar/side_panel_toolbar_button.cc index 2e0bcc2e..5dbff5d 100644 --- a/chrome/browser/ui/views/toolbar/side_panel_toolbar_button.cc +++ b/chrome/browser/ui/views/toolbar/side_panel_toolbar_button.cc
@@ -12,6 +12,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_element_identifiers.h" +#include "chrome/browser/ui/side_panel/companion/companion_utils.h" #include "chrome/browser/ui/ui_features.h" #include "chrome/browser/ui/views/frame/browser_view.h" #include "chrome/browser/ui/views/side_panel/side_panel.h" @@ -36,7 +37,9 @@ base::Unretained(this))); UpdateToolbarButtonIcon(); - SetTooltipText(l10n_util::GetStringUTF16(IDS_TOOLTIP_SIDE_PANEL_SHOW)); + SetTooltipText(l10n_util::GetStringUTF16( + companion::IsCompanionFeatureEnabled() ? IDS_TOOLTIP_SIDE_PANEL + : IDS_TOOLTIP_SIDE_PANEL_SHOW)); button_controller()->set_notify_action( views::ButtonController::NotifyAction::kOnPress); GetViewAccessibility().OverrideHasPopup(ax::mojom::HasPopup::kMenu);
diff --git a/chrome/browser/ui/views/toolbar/toolbar_button.cc b/chrome/browser/ui/views/toolbar/toolbar_button.cc index 1340622..ecb74e5c 100644 --- a/chrome/browser/ui/views/toolbar/toolbar_button.cc +++ b/chrome/browser/ui/views/toolbar/toolbar_button.cc
@@ -285,7 +285,7 @@ if (!GetBorder() || target_insets != current_insets || last_border_color_ != border_color || last_paint_insets_ != paint_insets) { - if (border_color) { + if (ShouldPaintBorder() && border_color) { int border_thickness_dp = GetText().empty() ? kBorderThicknessDpWithoutLabel : kBorderThicknessDpWithLabel; @@ -351,6 +351,14 @@ : kDefaultIconSize; } +bool ToolbarButton::ShouldPaintBorder() const { + return true; +} + +absl::optional<SkColor> ToolbarButton::GetHighlightTextColor() const { + return absl::nullopt; +} + void ToolbarButton::SetVectorIcon(const gfx::VectorIcon& icon) { SetVectorIcons(icon, icon); } @@ -722,8 +730,15 @@ const { if (!IsShown() || !parent_->GetColorProvider()) return absl::nullopt; + + // Use the overriden value is supplied by the button + const absl::optional<SkColor> text_color_overriden = + parent_->GetHighlightTextColor(); SkColor text_color; - if (highlight_color_) { + + if (text_color_overriden.has_value()) { + text_color = *text_color_overriden; + } else if (highlight_color_) { text_color = *highlight_color_; } else { text_color = parent_->GetColorProvider()->GetColor(kColorToolbarButtonText); @@ -755,9 +770,13 @@ SkColor bg_color = color_provider->GetColor(kColorToolbarButtonBackgroundHighlightedDefault); if (highlight_color_) { - bg_color = color_utils::AlphaBlend(*highlight_color_, - color_provider->GetColor(kColorToolbar), - kToolbarInkDropHighlightVisibleAlpha); + if (features::IsChromeRefresh2023()) { + bg_color = *highlight_color_; + } else { + bg_color = color_utils::AlphaBlend( + *highlight_color_, color_provider->GetColor(kColorToolbar), + kToolbarInkDropHighlightVisibleAlpha); + } } return FadeWithAnimation(bg_color, highlight_color_animation_); }
diff --git a/chrome/browser/ui/views/toolbar/toolbar_button.h b/chrome/browser/ui/views/toolbar/toolbar_button.h index c079cba..84d24422 100644 --- a/chrome/browser/ui/views/toolbar/toolbar_button.h +++ b/chrome/browser/ui/views/toolbar/toolbar_button.h
@@ -151,6 +151,13 @@ // Returns the icon size of the toolbar button virtual int GetIconSize() const; + // Retuns true if a non-empty border should be painted. + virtual bool ShouldPaintBorder() const; + + // Virtual method to explicitly set the highlighted text color instead of the + // default behavior of the HighlightColorAnimation. + virtual absl::optional<SkColor> GetHighlightTextColor() const; + // Updates the images using the given icons and specific colors. void UpdateIconsWithColors(const gfx::VectorIcon& icon, SkColor normal_color,
diff --git a/chrome/browser/ui/views/user_education/OWNERS b/chrome/browser/ui/views/user_education/OWNERS index 3878830f..850489a 100644 --- a/chrome/browser/ui/views/user_education/OWNERS +++ b/chrome/browser/ui/views/user_education/OWNERS
@@ -1,6 +1,7 @@ # Primary dfried@chromium.org +mickeyburks@chromium.org # Backup -robliao@chromium.org dpenning@chromium.org +emshack@chromium.org
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc index d9712d1..1d6ef51e 100644 --- a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc +++ b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc
@@ -451,7 +451,9 @@ class PageLoadWaiter final : public content::WebContentsObserver { public: explicit PageLoadWaiter(content::WebContents* web_contents) - : WebContentsObserver(web_contents) {} + : WebContentsObserver(web_contents) { + CHECK(web_contents); + } ~PageLoadWaiter() override = default; void Wait() { run_loop_.Run(); } @@ -3535,16 +3537,28 @@ FlushShortcutTasks(); provider()->command_manager().AwaitAllCommandsCompleteForTesting(); AwaitManifestSystemIdle(); - auto* browser_list = BrowserList::GetInstance(); - for (Browser* browser : *browser_list) { - for (int i = 0; i < browser->tab_strip_model()->GetTabCount(); i++) { - content::WebContents* web_contents = - browser->tab_strip_model()->GetWebContentsAt(i); - if (!web_contents->IsDocumentOnLoadCompletedInPrimaryMainFrame()) { - PageLoadWaiter page_load_waiter(web_contents); - page_load_waiter.Wait(); + + auto get_first_loading_web_contents = []() -> content::WebContents* { + for (Browser* browser : *BrowserList::GetInstance()) { + for (int i = 0; i < browser->tab_strip_model()->GetTabCount(); i++) { + content::WebContents* web_contents = + browser->tab_strip_model()->GetWebContentsAt(i); + if (!web_contents->IsDocumentOnLoadCompletedInPrimaryMainFrame()) { + return web_contents; + } } } + return nullptr; + }; + + // In some circumstances, this loop could hang forever (if pages never + // complete loading, or if they cause reloads, etc). However, these + // tests only use static test pages that don't do that, so this should + // be safe. + while (content::WebContents* loading_web_content = + get_first_loading_web_contents()) { + PageLoadWaiter page_load_waiter(loading_web_content); + page_load_waiter.Wait(); } after_state_change_action_state_ = ConstructStateSnapshot(); }
diff --git a/chrome/browser/ui/web_applications/web_app_browser_controller.cc b/chrome/browser/ui/web_applications/web_app_browser_controller.cc index 513ba45b..9e7a448 100644 --- a/chrome/browser/ui/web_applications/web_app_browser_controller.cc +++ b/chrome/browser/ui/web_applications/web_app_browser_controller.cc
@@ -539,6 +539,12 @@ } #endif // BUILDFLAG(IS_CHROMEOS) + size_t app_extended_scope_score = + registrar().GetAppExtendedScopeScore(url, app_id()); + if (app_extended_scope_score > 0) { + return true; + } + GURL app_scope = registrar().GetAppScope(app_id()); if (!app_scope.is_valid()) return false;
diff --git a/chrome/browser/ui/webui/ash/login/gaia_screen_handler.cc b/chrome/browser/ui/webui/ash/login/gaia_screen_handler.cc index 0d04c93a..4226632 100644 --- a/chrome/browser/ui/webui/ash/login/gaia_screen_handler.cc +++ b/chrome/browser/ui/webui/ash/login/gaia_screen_handler.cc
@@ -229,12 +229,6 @@ return connector->GetSSOProfile(); } -std::string GetRealm() { - policy::BrowserPolicyConnectorAsh* connector = - g_browser_process->platform_part()->browser_policy_connector_ash(); - return connector->GetRealm(); -} - std::string GetChromeType() { switch (chromeos::GetDeviceType()) { case chromeos::DeviceType::kChromebox: @@ -435,11 +429,6 @@ if (!app_locale.empty()) params.Set("hl", app_locale); - std::string realm(GetRealm()); - if (!realm.empty()) { - params.Set("realm", realm); - } - const std::string enterprise_enrollment_domain( GetEnterpriseEnrollmentDomain()); const std::string enterprise_domain_manager(GetEnterpriseDomainManager());
diff --git a/chrome/browser/ui/webui/ash/login/oobe_ui.cc b/chrome/browser/ui/webui/ash/login/oobe_ui.cc index 0385f63e..1566f24 100644 --- a/chrome/browser/ui/webui/ash/login/oobe_ui.cc +++ b/chrome/browser/ui/webui/ash/login/oobe_ui.cc
@@ -306,7 +306,9 @@ // Configure shared resources AddProductLogoResources(source); - AddProjectSimonResources(source); + if (ash::features::IsOobeSimonEnabled()) { + AddProjectSimonResources(source); + } quick_unlock::AddFingerprintResources(source); AddSyncConsentResources(source);
diff --git a/chrome/browser/ui/webui/ash/network_ui.cc b/chrome/browser/ui/webui/ash/network_ui.cc index f01700a..03bad90 100644 --- a/chrome/browser/ui/webui/ash/network_ui.cc +++ b/chrome/browser/ui/webui/ash/network_ui.cc
@@ -9,6 +9,7 @@ #include <utility> #include "ash/constants/ash_features.h" +#include "ash/constants/ash_pref_names.h" #include "ash/public/cpp/connectivity_services.h" #include "ash/public/cpp/esim_manager.h" #include "ash/public/cpp/network_config_service.h" @@ -21,6 +22,7 @@ #include "base/strings/string_number_conversions.h" #include "base/values.h" #include "chrome/browser/ash/net/network_health/network_health_manager.h" +#include "chrome/browser/browser_process.h" #include "chrome/browser/extensions/tab_helper.h" #include "chrome/browser/ui/ash/system_tray_client_impl.h" #include "chrome/browser/ui/chrome_pages.h" @@ -78,6 +80,7 @@ constexpr char kOpenCellularActivationUi[] = "openCellularActivationUi"; constexpr char kResetESimCache[] = "resetESimCache"; constexpr char kResetEuicc[] = "resetEuicc"; +constexpr char kResetApnMigrator[] = "resetApnMigrator"; constexpr char kShowNetworkDetails[] = "showNetworkDetails"; constexpr char kShowNetworkConfig[] = "showNetworkConfig"; constexpr char kShowAddNewWifiNetworkDialog[] = "showAddNewWifi"; @@ -137,7 +140,8 @@ NET_LOG(ERROR) << "Couldn't reset EUICC in guest mode."; return absl::nullopt; } - absl::optional<dbus::ObjectPath> euicc_path = GetCurrentEuiccPath(); + absl::optional<dbus::ObjectPath> euicc_path = + cellular_utils::GetCurrentEuiccPath(); if (!euicc_path) { NET_LOG(ERROR) << "No current EUICC. Unable to reset EUICC"; return absl::nullopt; @@ -266,6 +270,10 @@ base::BindRepeating(&NetworkConfigMessageHandler::ResetEuicc, base::Unretained(this))); web_ui()->RegisterMessageCallback( + kResetApnMigrator, + base::BindRepeating(&NetworkConfigMessageHandler::ResetApnMigrator, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( kShowNetworkDetails, base::BindRepeating(&NetworkConfigMessageHandler::ShowNetworkDetails, base::Unretained(this))); @@ -440,6 +448,11 @@ base::Unretained(this))); } + void ResetApnMigrator(const base::Value::List& arg_list) { + NET_LOG(EVENT) << "Executing reset ApnMigrator"; + g_browser_process->local_state()->ClearPref(prefs::kApnMigratedIccids); + } + void OnEuiccReset(bool success) { if (!success) { NET_LOG(ERROR) << "Error occurred when resetting EUICC."; @@ -821,6 +834,9 @@ localized_strings.Set( "resetEuiccLabel", l10n_util::GetStringUTF16(IDS_NETWORK_UI_RESET_EUICC_LABEL)); + localized_strings.Set( + "resetApnMigratorLabel", + l10n_util::GetStringUTF16(IDS_NETWORK_UI_RESET_APN_MIGRATOR_LABEL)); localized_strings.Set( "addNewWifiLabel",
diff --git a/chrome/browser/ui/webui/settings/performance_settings_interactive_uitest.cc b/chrome/browser/ui/webui/settings/performance_settings_interactive_uitest.cc index 6fd4f54..65db1218 100644 --- a/chrome/browser/ui/webui/settings/performance_settings_interactive_uitest.cc +++ b/chrome/browser/ui/webui/settings/performance_settings_interactive_uitest.cc
@@ -317,8 +317,9 @@ } #if BUILDFLAG(GOOGLE_CHROME_BRANDING) +// TODO(http://b/281528238): reenable the test. IN_PROC_BROWSER_TEST_F(PerformanceSettingsInteractiveTest, - HighEfficiencySendFeedbackDialogOpens) { + DISABLED_HighEfficiencySendFeedbackDialogOpens) { const DeepQuery high_efficiency_feedback = { "settings-ui", "settings-main", "settings-basic-page", "settings-section#performanceSettingsSection", "cr-icon-button#feedback"}; @@ -331,8 +332,9 @@ InAnyContext(WaitForShow(FeedbackDialog::kFeedbackDialogForTesting))); } +// TODO(http://b/281528238): reenable the test. IN_PROC_BROWSER_TEST_F(PerformanceSettingsInteractiveTest, - BatterySaverSendFeedbackDialogOpens) { + DISABLED_BatterySaverSendFeedbackDialogOpens) { const DeepQuery battery_saver_feedback = { "settings-ui", "settings-main", "settings-basic-page", "settings-section#batterySettingsSection", "cr-icon-button#feedback"};
diff --git a/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc b/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc index dfa635a..8a97742 100644 --- a/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc +++ b/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc
@@ -239,6 +239,9 @@ "History.ClearBrowsingData.UserDeletedCookieOrCacheFromDialog", choice, content::BrowsingDataRemover::MAX_CHOICE_VALUE); + browsing_data::RecordDeleteBrowsingDataAction( + browsing_data::DeleteBrowsingDataAction::kClearBrowsingDataDialog); + // Record the circumstances under which passwords are deleted. if (data_types.find(BrowsingDataType::PASSWORDS) != data_types.end()) { static const BrowsingDataType other_types[] = {
diff --git a/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler_unittest.cc b/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler_unittest.cc index 66e5260..6b6e875 100644 --- a/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler_unittest.cc
@@ -6,6 +6,7 @@ #include "base/memory/raw_ptr.h" #include "base/strings/utf_string_conversions.h" +#include "base/test/metrics/histogram_tester.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_factory_test_util.h" @@ -64,6 +65,10 @@ std::unique_ptr<TestingClearBrowsingDataHandler> handler_; std::unique_ptr<TemplateURLServiceFactoryTestUtil> dse_factory_util_; raw_ptr<TemplateURLService> template_url_service; + + const content::TestWebUI::CallData& GetCallData() { + return *test_web_ui_.call_data().back(); + } }; void ClearBrowsingDataHandlerUnitTest::SetUp() { @@ -85,6 +90,7 @@ handler_ = std::make_unique<TestingClearBrowsingDataHandler>(&test_web_ui_, profile_.get()); handler_->set_web_ui(&test_web_ui_); + handler_->RegisterMessages(); handler_->AllowJavascript(); browser_task_environment_.RunUntilIdle(); @@ -144,6 +150,25 @@ return url; } +TEST_F(ClearBrowsingDataHandlerUnitTest, + ClearBrowsingData_EmmitsDeleteMetrics) { + base::HistogramTester histogram_tester; + base::Value::List args; + + args.Append("fooCallback"); + args.Append(base::Value::List()); + args.Append(1); + + test_web_ui_.HandleReceivedMessage("clearBrowsingData", args); + + const content::TestWebUI::CallData& call_data = GetCallData(); + ASSERT_EQ(3u, call_data.args().size()); + + histogram_tester.ExpectBucketCount( + "Privacy.DeleteBrowsingData.Action", + browsing_data::DeleteBrowsingDataAction::kClearBrowsingDataDialog, 1); +} + TEST_F(ClearBrowsingDataHandlerUnitTest, UpdateSyncState_GoogleDse) { handler_->UpdateSyncState(); VerifySearchHistoryWebUIUpdate(false, u"");
diff --git a/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc b/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc index 2a56e06fd..b7ca779 100644 --- a/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc
@@ -1865,10 +1865,10 @@ EXPECT_EQ( *ukm_recorder.GetEntryMetric(entry, "Source"), static_cast<int64_t>(permissions::PermissionSourceUI::SITE_SETTINGS)); - size_t num_values = 0; - EXPECT_EQ(*ukm_recorder.GetEntryMetric(entry, "PermissionType"), - ContentSettingTypeToHistogramValue( - ContentSettingsType::NOTIFICATIONS, &num_values)); + + EXPECT_EQ( + *ukm_recorder.GetEntryMetric(entry, "PermissionType"), + ContentSettingTypeToHistogramValue(ContentSettingsType::NOTIFICATIONS)); EXPECT_EQ(*ukm_recorder.GetEntryMetric(entry, "Action"), static_cast<int64_t>(permissions::PermissionAction::REVOKED)); }
diff --git a/chrome/browser/web_applications/web_app_registrar.cc b/chrome/browser/web_applications/web_app_registrar.cc index b764ab3..3df64e6 100644 --- a/chrome/browser/web_applications/web_app_registrar.cc +++ b/chrome/browser/web_applications/web_app_registrar.cc
@@ -17,6 +17,8 @@ #include "base/functional/callback_helpers.h" #include "base/metrics/histogram_functions.h" #include "base/observer_list.h" +#include "base/strings/strcat.h" +#include "base/strings/string_util.h" #include "base/strings/to_string.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/browser_process.h" @@ -325,6 +327,53 @@ return GetAppStartUrl(app_id).GetWithoutFilename(); } +size_t WebAppRegistrar::GetAppExtendedScopeScore(const GURL& url, + const AppId& app_id) const { + if (!base::FeatureList::IsEnabled( + blink::features::kWebAppEnableScopeExtensions)) { + return 0; + } + + if (!url.is_valid()) { + return 0; + } + + size_t app_scope = GetUrlInAppScopeScore(url.spec(), app_id); + if (app_scope > 0) { + return app_scope; + } + + url::Origin origin = url::Origin::Create(url); + if (origin.opaque() || origin.scheme() != url::kHttpsScheme) { + return 0; + } + + absl::optional<std::string> origin_str; + + for (const auto& scope_extension : GetValidatedScopeExtensions(app_id)) { + if (origin.IsSameOriginWith(scope_extension.origin)) { + return origin.host().size(); + } + + // Origins with wildcard e.g. *.foo are saved as https://foo. + // Ensure while matching that the origin ends with '.foo' and not 'foo'. + if (scope_extension.has_origin_wildcard) { + if (!origin_str.has_value()) { + origin_str = origin.Serialize(); + } + + if (base::EndsWith(origin_str.value(), scope_extension.origin.host(), + base::CompareCase::SENSITIVE) && + origin_str.value().size() > scope_extension.origin.host().size() && + origin_str.value()[origin_str.value().size() - + scope_extension.origin.host().size() - 1] == '.') { + return scope_extension.origin.host().size(); + } + } + } + return 0; +} + bool WebAppRegistrar::IsUrlInAppScope(const GURL& url, const AppId& app_id) const { return GetUrlInAppScopeScore(url.spec(), app_id) > 0;
diff --git a/chrome/browser/web_applications/web_app_registrar.h b/chrome/browser/web_applications/web_app_registrar.h index 684a91f..7b5094f 100644 --- a/chrome/browser/web_applications/web_app_registrar.h +++ b/chrome/browser/web_applications/web_app_registrar.h
@@ -285,6 +285,10 @@ // Returns whether |url| is in the scope of |app_id|. bool IsUrlInAppScope(const GURL& url, const AppId& app_id) const; + // Returns the strength of matching |url| to the extended & regular scope of + // |app_id|. Returns 0 if not in extended scope. + size_t GetAppExtendedScopeScore(const GURL& url, const AppId& app_id) const; + // Returns the strength of matching |url_spec| to the scope of |app_id|, // returns 0 if not in scope. size_t GetUrlInAppScopeScore(const std::string& url_spec,
diff --git a/chrome/browser/web_applications/web_app_registrar_unittest.cc b/chrome/browser/web_applications/web_app_registrar_unittest.cc index 04eedf6..59b1216 100644 --- a/chrome/browser/web_applications/web_app_registrar_unittest.cc +++ b/chrome/browser/web_applications/web_app_registrar_unittest.cc
@@ -46,6 +46,7 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/abseil-cpp/absl/types/optional.h" +#include "third_party/blink/public/common/features.h" #include "url/gurl.h" #include "url/url_constants.h" @@ -1235,6 +1236,75 @@ EXPECT_FALSE(registrar().IsActivelyInstalled(app_id)); } +class WebAppRegistrarTest_ScopeExtensions : public WebAppRegistrarTest { + public: + WebAppRegistrarTest_ScopeExtensions() = default; + + private: + base::test::ScopedFeatureList scoped_feature_list_{ + blink::features::kWebAppEnableScopeExtensions}; +}; + +TEST_F(WebAppRegistrarTest_ScopeExtensions, IsUrlInAppExtendedScope) { + InitSyncBridge(); + + auto web_app = test::CreateWebApp(GURL("https://example.com/start")); + AppId app_id = web_app->app_id(); + + auto extended_scope_url = GURL("https://example.app"); + auto extended_scope_origin = url::Origin::Create(extended_scope_url); + + // Manifest entry {"origin": "https://*.example.co"}. + auto extended_scope_url2 = GURL("https://example.co"); + auto extended_scope_origin2 = url::Origin::Create(extended_scope_url2); + + web_app->SetValidatedScopeExtensions( + {ScopeExtensionInfo(extended_scope_origin), + ScopeExtensionInfo(extended_scope_origin2, + /*has_origin_wildcard=*/true)}); + RegisterApp(std::move(web_app)); + + EXPECT_EQ( + registrar().GetAppExtendedScopeScore(GURL("https://test.com"), app_id), + 0u); + + EXPECT_GT(registrar().GetAppExtendedScopeScore( + GURL("https://example.com/path"), app_id), + 0u); + + // Scope is extended to all sub-domains of example.co with the wildcard + // prefix. + EXPECT_GT(registrar().GetAppExtendedScopeScore(GURL("https://app.example.co"), + app_id), + 0u); + EXPECT_GT(registrar().GetAppExtendedScopeScore( + GURL("https://test.app.example.co"), app_id), + 0u); + EXPECT_GT(registrar().GetAppExtendedScopeScore( + GURL("https://example.co/path"), app_id), + 0u); + + EXPECT_GT(registrar().GetAppExtendedScopeScore( + GURL("https://example.app/start"), app_id), + 0u); + + // Scope is extended to the example.app domain but not to the sub-domain + // test.example.app as there was no wildcard prefix. + EXPECT_EQ(registrar().GetAppExtendedScopeScore( + GURL("https://test.example.app"), app_id), + 0u); + + EXPECT_EQ(registrar().GetAppExtendedScopeScore( + GURL("https://other.origin.com"), app_id), + 0u); + EXPECT_EQ(registrar().GetAppExtendedScopeScore(GURL("https://testexample.co"), + app_id), + 0u); + EXPECT_EQ(registrar().GetAppExtendedScopeScore( + GURL("https://app.example.com"), app_id), + 0u); +} + TEST_F(WebAppRegistrarTest_TabStrip, TabbedAppNewTabUrl) { InitSyncBridge();
diff --git a/chrome/browser/webid/federated_identity_auto_reauthn_permission_context.cc b/chrome/browser/webid/federated_identity_auto_reauthn_permission_context.cc index cd19210..ac54b22 100644 --- a/chrome/browser/webid/federated_identity_auto_reauthn_permission_context.cc +++ b/chrome/browser/webid/federated_identity_auto_reauthn_permission_context.cc
@@ -6,9 +6,11 @@ #include "base/metrics/histogram_macros.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" +#include "chrome/browser/password_manager/password_manager_settings_service_factory.h" #include "chrome/browser/permissions/permission_decision_auto_blocker_factory.h" #include "chrome/browser/profiles/profile.h" #include "components/content_settings/core/common/content_settings_types.h" +#include "components/password_manager/core/browser/password_manager_setting.h" #include "components/permissions/permission_decision_auto_blocker.h" #include "url/origin.h" @@ -19,16 +21,22 @@ HostContentSettingsMapFactory::GetForProfile(browser_context)), permission_autoblocker_( PermissionDecisionAutoBlockerFactory::GetForProfile( + Profile::FromBrowserContext(browser_context))), + password_settings_service_( + PasswordManagerSettingsServiceFactory::GetForProfile( Profile::FromBrowserContext(browser_context))) {} FederatedIdentityAutoReauthnPermissionContext:: ~FederatedIdentityAutoReauthnPermissionContext() = default; bool FederatedIdentityAutoReauthnPermissionContext:: - HasAutoReauthnContentSetting() { + IsAutoReauthnSettingEnabled() { return host_content_settings_map_->GetDefaultContentSetting( ContentSettingsType::FEDERATED_IDENTITY_AUTO_REAUTHN_PERMISSION, - /*provider_id=*/nullptr) != ContentSetting::CONTENT_SETTING_BLOCK; + /*provider_id=*/nullptr) != + ContentSetting::CONTENT_SETTING_BLOCK && + password_settings_service_->IsSettingEnabled( + password_manager::PasswordManagerSetting::kAutoSignIn); } bool FederatedIdentityAutoReauthnPermissionContext::IsAutoReauthnEmbargoed(
diff --git a/chrome/browser/webid/federated_identity_auto_reauthn_permission_context.h b/chrome/browser/webid/federated_identity_auto_reauthn_permission_context.h index f9f52100..8b17e40 100644 --- a/chrome/browser/webid/federated_identity_auto_reauthn_permission_context.h +++ b/chrome/browser/webid/federated_identity_auto_reauthn_permission_context.h
@@ -7,6 +7,7 @@ #include "components/content_settings/core/browser/host_content_settings_map.h" #include "components/keyed_service/core/keyed_service.h" +#include "components/password_manager/core/browser/password_manager_settings_service.h" #include "content/public/browser/federated_identity_auto_reauthn_permission_context_delegate.h" namespace content { @@ -34,7 +35,7 @@ const FederatedIdentityAutoReauthnPermissionContext&) = delete; // content::FederatedIdentityAutoReauthnPermissionContextDelegate: - bool HasAutoReauthnContentSetting() override; + bool IsAutoReauthnSettingEnabled() override; bool IsAutoReauthnEmbargoed( const url::Origin& relying_party_embedder) override; base::Time GetAutoReauthnEmbargoStartTime( @@ -49,6 +50,7 @@ const raw_ptr<HostContentSettingsMap> host_content_settings_map_; const raw_ptr<permissions::PermissionDecisionAutoBlocker, DanglingUntriaged> permission_autoblocker_; + const raw_ptr<PasswordManagerSettingsService> password_settings_service_; }; #endif // CHROME_BROWSER_WEBID_FEDERATED_IDENTITY_AUTO_REAUTHN_PERMISSION_CONTEXT_H_
diff --git a/chrome/browser/webid/federated_identity_auto_reauthn_permission_context_unittest.cc b/chrome/browser/webid/federated_identity_auto_reauthn_permission_context_unittest.cc index 8c45c5a..a6e4e53ca 100644 --- a/chrome/browser/webid/federated_identity_auto_reauthn_permission_context_unittest.cc +++ b/chrome/browser/webid/federated_identity_auto_reauthn_permission_context_unittest.cc
@@ -6,6 +6,7 @@ #include "base/memory/raw_ptr.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" +#include "chrome/browser/sync/sync_service_factory.h" #include "chrome/browser/webid/federated_identity_auto_reauthn_permission_context_factory.h" #include "chrome/test/base/testing_profile.h" #include "components/content_settings/core/browser/host_content_settings_map.h" @@ -24,14 +25,18 @@ FederatedIdentityAutoReauthnPermissionContextTest&) = delete; void SetUp() override { + profile_ = TestingProfile::Builder() + .AddTestingFactory(SyncServiceFactory::GetInstance(), + SyncServiceFactory::GetDefaultFactory()) + .Build(); context_ = FederatedIdentityAutoReauthnPermissionContextFactory::GetForProfile( - &profile_); + profile()); host_content_settings_map_ = - HostContentSettingsMapFactory::GetForProfile(&profile_); + HostContentSettingsMapFactory::GetForProfile(profile()); } - Profile* profile() { return &profile_; } + Profile* profile() { return profile_.get(); } protected: raw_ptr<FederatedIdentityAutoReauthnPermissionContext> context_; @@ -50,14 +55,14 @@ private: content::BrowserTaskEnvironment task_environment_{ base::test::TaskEnvironment::TimeSource::MOCK_TIME}; - TestingProfile profile_; + std::unique_ptr<TestingProfile> profile_; }; // Test that FedCM auto re-authn is opt-in by default. TEST_F(FederatedIdentityAutoReauthnPermissionContextTest, AutoReauthnEnabledByDefault) { GURL rp_url("https://rp.com"); - EXPECT_TRUE(context_->HasAutoReauthnContentSetting()); + EXPECT_TRUE(context_->IsAutoReauthnSettingEnabled()); EXPECT_FALSE(context_->IsAutoReauthnEmbargoed(url::Origin::Create(rp_url))); }
diff --git a/chrome/build/lacros64.pgo.txt b/chrome/build/lacros64.pgo.txt index da3f349..ddd11a77 100644 --- a/chrome/build/lacros64.pgo.txt +++ b/chrome/build/lacros64.pgo.txt
@@ -1 +1 @@ -chrome-chromeos-amd64-generic-main-1683532503-6be1d227cb16be062413ec47635cc898649b9153.profdata +chrome-chromeos-amd64-generic-main-1683561463-c7057013f3e871ed513786ef7561d95a3b9b06cf.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt index c9e89fad..c4b873b 100644 --- a/chrome/build/mac-arm.pgo.txt +++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@ -chrome-mac-arm-main-1683539972-a5e858b7bce2628a081a440526a932190f169066.profdata +chrome-mac-arm-main-1683568773-a0a24e4eec93cc36e279e0b09a0ce067751292c3.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index f16d3d1..a8395fe 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-main-1683525502-e358bac2852f836329fd43f50de254b1a8c99631.profdata +chrome-mac-main-1683546861-881df410f4cc8167c15282f0b54cf4f016d7291c.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index 91cc83f..ef06650 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1683535909-70e6d4250fcc40ebdaf7748a3a31fc1f24483305.profdata +chrome-win32-main-1683546861-05232a03ac22f367a23cc53a5ad55cbad793a1c5.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index 0b190997..1c72a55 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1683535909-7c416d20826bbea109d642061c3eb0c8c2f29ed2.profdata +chrome-win64-main-1683557303-7b4ad0cf7939ed5e88558c9975ea60f4e493d300.profdata
diff --git a/chrome/installer/setup/install.cc b/chrome/installer/setup/install.cc index 3e2493f..4ab00374 100644 --- a/chrome/installer/setup/install.cc +++ b/chrome/installer/setup/install.cc
@@ -158,9 +158,9 @@ // only on the first install of Chrome. void CopyPreferenceFileForFirstRun(const InstallerState& installer_state, const base::FilePath& prefs_source_path) { - base::FilePath prefs_dest_path( - installer_state.target_path().AppendASCII(kLegacyInitialPrefs)); - if (!base::CopyFile(prefs_source_path, prefs_dest_path)) { + if (!base::CopyFile(prefs_source_path, + InitialPreferences::Path(installer_state.target_path(), + /*for_read=*/false))) { VLOG(1) << "Failed to copy initial preferences from:" << prefs_source_path.value() << " gle: " << ::GetLastError(); } @@ -635,7 +635,7 @@ RunShortcutCreationInChildProc( installer_state, setup_path, - installer_state.target_path().AppendASCII(kLegacyInitialPrefs), level, + InitialPreferences::Path(installer_state.target_path()), level, INSTALL_SHORTCUT_REPLACE_EXISTING); // Adapt Chrome registrations to this new OS. @@ -706,10 +706,9 @@ // Use the initial preferences copied beside chrome.exe at install for the // sake of creating/updating shortcuts. const base::FilePath installation_root = installer_state.target_path(); - RunShortcutCreationInChildProc( - installer_state, setup_path, - installation_root.AppendASCII(kLegacyInitialPrefs), CURRENT_USER, - install_operation); + RunShortcutCreationInChildProc(installer_state, setup_path, + InitialPreferences::Path(installation_root), + CURRENT_USER, install_operation); UpdateDefaultBrowserBeaconForPath(installation_root.Append(kChromeExe));
diff --git a/chrome/installer/setup/install_unittest.cc b/chrome/installer/setup/install_unittest.cc index 7dfab5b..6714b4c75 100644 --- a/chrome/installer/setup/install_unittest.cc +++ b/chrome/installer/setup/install_unittest.cc
@@ -232,7 +232,7 @@ expected_start_menu_properties_ = expected_properties_; expected_start_menu_properties_.set_dual_mode(false); - prefs_.reset(GetFakeMasterPrefs(false, false)); + prefs_.reset(GetFakeInitialPrefs(false, false)); ASSERT_TRUE(fake_user_desktop_.CreateUniqueTempDir()); ASSERT_TRUE(fake_common_desktop_.CreateUniqueTempDir()); @@ -281,7 +281,7 @@ UnpinShortcutFromTaskbar(system_start_menu_subdir_shortcut_); } - installer::InitialPreferences* GetFakeMasterPrefs( + installer::InitialPreferences* GetFakeInitialPrefs( bool do_not_create_desktop_shortcut, bool do_not_create_quick_launch_shortcut) { const struct { @@ -384,7 +384,7 @@ TEST_F(InstallShortcutTest, CreateAllShortcutsButDesktopShortcut) { std::unique_ptr<installer::InitialPreferences> prefs_no_desktop( - GetFakeMasterPrefs(true, false)); + GetFakeInitialPrefs(true, false)); installer::CreateOrUpdateShortcuts(chrome_exe_, *prefs_no_desktop, installer::CURRENT_USER, installer::INSTALL_SHORTCUT_CREATE_ALL); @@ -397,7 +397,7 @@ TEST_F(InstallShortcutTest, CreateAllShortcutsButQuickLaunchShortcut) { std::unique_ptr<installer::InitialPreferences> prefs_no_ql( - GetFakeMasterPrefs(false, true)); + GetFakeInitialPrefs(false, true)); installer::CreateOrUpdateShortcuts(chrome_exe_, *prefs_no_ql, installer::CURRENT_USER, installer::INSTALL_SHORTCUT_CREATE_ALL);
diff --git a/chrome/installer/util/initial_preferences.cc b/chrome/installer/util/initial_preferences.cc index cdf01df..dd368e9 100644 --- a/chrome/installer/util/initial_preferences.cc +++ b/chrome/installer/util/initial_preferences.cc
@@ -71,6 +71,19 @@ namespace installer { +#if !BUILDFLAG(IS_MAC) +// static +base::FilePath InitialPreferences::Path(const base::FilePath& dir, + bool for_read) { + base::FilePath initial_prefs = dir.AppendASCII("initial_preferences"); + if (!for_read || base::PathIsReadable(initial_prefs)) { + return initial_prefs; + } + + return dir.AppendASCII("master_preferences"); +} +#endif // !BUILDFLAG(IS_MAC) + InitialPreferences::InitialPreferences() { InitializeFromCommandLine(*base::CommandLine::ForCurrentProcess()); }
diff --git a/chrome/installer/util/initial_preferences.h b/chrome/installer/util/initial_preferences.h index 6f68742..1659c8cd 100644 --- a/chrome/installer/util/initial_preferences.h +++ b/chrome/installer/util/initial_preferences.h
@@ -23,13 +23,6 @@ namespace installer { -#if !BUILDFLAG(IS_MAC) -// This is the default name for the initial preferences file used to pre-set -// values in the user profile at first run. -const char kInitialPrefs[] = "initial_preferences"; -const char kLegacyInitialPrefs[] = "master_preferences"; -#endif - // The initial preferences is a JSON file with the same entries as the // 'Default\Preferences' file. This function parses the distribution // section of the preferences file. @@ -74,6 +67,16 @@ class InitialPreferences { public: +#if !BUILDFLAG(IS_MAC) + // Find and return initial preferences's file path that is located in `dir`. + // It will fallback to the legacy file name if the new one is not available + // and `for_read` is set to true. + // Only available on Windows, Linux and CrOS. Mac has its own initial + // preferences file names which is implemented in + // `chrome/browser/mac/initial_prefs.h`. + static base::FilePath Path(const base::FilePath& dir, bool for_read = true); +#endif // !BUILDFLAG(IS_MAC) + // Construct a initial preferences from the current process' current command // line. Equivalent to calling // InitialPreferences(*CommandLine::ForCurrentProcess()).
diff --git a/chrome/installer/util/initial_preferences_unittest.cc b/chrome/installer/util/initial_preferences_unittest.cc index 17255183..d0935d2 100644 --- a/chrome/installer/util/initial_preferences_unittest.cc +++ b/chrome/installer/util/initial_preferences_unittest.cc
@@ -12,8 +12,10 @@ #include "base/environment.h" #include "base/files/file_util.h" +#include "base/files/scoped_temp_dir.h" #include "base/path_service.h" #include "base/values.h" +#include "build/build_config.h" #include "chrome/common/chrome_paths.h" #include "chrome/common/pref_names.h" #include "chrome/installer/util/initial_preferences_constants.h" @@ -424,3 +426,26 @@ EXPECT_FALSE(value); } } + +#if !BUILDFLAG(IS_MAC) + +TEST_F(InitialPreferencesTest, Path) { + base::ScopedTempDir temp_dir; + ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); + + auto initial_pref_path = + temp_dir.GetPath().AppendASCII("initial_preferences"); + + EXPECT_EQ(temp_dir.GetPath().AppendASCII("master_preferences"), + installer::InitialPreferences::Path(temp_dir.GetPath())); + EXPECT_EQ(initial_pref_path, installer::InitialPreferences::Path( + temp_dir.GetPath(), /*for_read=*/false)); + + base::File file(initial_pref_path, base::File::Flags::FLAG_CREATE); + file.Close(); + + EXPECT_EQ(initial_pref_path, + installer::InitialPreferences::Path(temp_dir.GetPath())); +} + +#endif // !BUILDFLAG(IS_MAC)
diff --git a/chrome/services/mac_notifications/public/cpp/BUILD.gn b/chrome/services/mac_notifications/public/cpp/BUILD.gn index 5dd0ca9..a0a6bf7 100644 --- a/chrome/services/mac_notifications/public/cpp/BUILD.gn +++ b/chrome/services/mac_notifications/public/cpp/BUILD.gn
@@ -8,5 +8,6 @@ "mac_notification_metrics.mm", ] deps = [ "//base" ] + configs += [ "//build/config/compiler:enable_arc" ] frameworks = [ "Foundation.framework" ] }
diff --git a/chrome/services/mac_notifications/public/cpp/mac_notification_metrics.mm b/chrome/services/mac_notifications/public/cpp/mac_notification_metrics.mm index 3f9fc5e..5116e36d 100644 --- a/chrome/services/mac_notifications/public/cpp/mac_notification_metrics.mm +++ b/chrome/services/mac_notifications/public/cpp/mac_notification_metrics.mm
@@ -10,6 +10,10 @@ #include "base/metrics/histogram_functions.h" #include "base/strings/strcat.h" +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + namespace mac_notifications { bool IsAppBundleAlertStyle() {
diff --git a/chrome/services/system_signals/BUILD.gn b/chrome/services/system_signals/BUILD.gn index 64e3417..db59614 100644 --- a/chrome/services/system_signals/BUILD.gn +++ b/chrome/services/system_signals/BUILD.gn
@@ -42,6 +42,8 @@ sources += [ "mac/mac_system_signals_service.mm" ] + configs += [ "//build/config/compiler:enable_arc" ] + deps += [ "//components/device_signals/core/system_signals/mac" ] } @@ -84,6 +86,7 @@ if (is_mac) { sources += [ "mac/mac_system_signals_service_unittest.mm" ] + configs += [ "//build/config/compiler:enable_arc" ] } if (is_linux) {
diff --git a/chrome/services/system_signals/mac/mac_system_signals_service.mm b/chrome/services/system_signals/mac/mac_system_signals_service.mm index 9dd7379b7..7d41dfc8 100644 --- a/chrome/services/system_signals/mac/mac_system_signals_service.mm +++ b/chrome/services/system_signals/mac/mac_system_signals_service.mm
@@ -12,6 +12,10 @@ #include "components/device_signals/core/system_signals/mac/mac_platform_delegate.h" #include "components/device_signals/core/system_signals/platform_delegate.h" +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + namespace system_signals { MacSystemSignalsService::MacSystemSignalsService(
diff --git a/chrome/services/system_signals/mac/mac_system_signals_service_unittest.mm b/chrome/services/system_signals/mac/mac_system_signals_service_unittest.mm index 71c7ce20..4efce03 100644 --- a/chrome/services/system_signals/mac/mac_system_signals_service_unittest.mm +++ b/chrome/services/system_signals/mac/mac_system_signals_service_unittest.mm
@@ -16,6 +16,10 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + using device_signals::MockFileSystemService; using testing::Return;
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/TestContentProvider.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/TestContentProvider.java index 7b80a4de..dc9e9c20 100644 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/TestContentProvider.java +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/TestContentProvider.java
@@ -17,8 +17,6 @@ import android.os.ParcelFileDescriptor; import android.util.Log; -import org.chromium.build.annotations.MainDex; - import java.io.File; import java.io.IOException; import java.net.URLConnection; @@ -48,7 +46,6 @@ * The second one is moving the TestContentProvider to the ChromeTestSuport apk. This * seems a lot better path than above. */ -@MainDex public class TestContentProvider extends ContentProvider { private static final String ANDROID_DATA_FILE_PATH = "android/"; private static final String AUTHORITY = "org.chromium.chrome.test.TestContentProvider";
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/partnercustomizations/TestPartnerBrowserCustomizationsDelayedProvider.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/partnercustomizations/TestPartnerBrowserCustomizationsDelayedProvider.java index a027e1350..f6b87cc 100644 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/partnercustomizations/TestPartnerBrowserCustomizationsDelayedProvider.java +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/partnercustomizations/TestPartnerBrowserCustomizationsDelayedProvider.java
@@ -9,8 +9,6 @@ import android.os.Bundle; import android.text.TextUtils; -import org.chromium.build.annotations.MainDex; - import java.util.List; import java.util.concurrent.CountDownLatch; @@ -19,7 +17,6 @@ * query function. * Note: if you move or rename this class, make sure you have also updated AndroidManifest.xml. */ -@MainDex public class TestPartnerBrowserCustomizationsDelayedProvider extends TestPartnerBrowserCustomizationsProvider { private static String sUriPathToDelay;
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/partnercustomizations/TestPartnerBrowserCustomizationsProvider.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/partnercustomizations/TestPartnerBrowserCustomizationsProvider.java index f721c82f..30e9b7a 100644 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/partnercustomizations/TestPartnerBrowserCustomizationsProvider.java +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/partnercustomizations/TestPartnerBrowserCustomizationsProvider.java
@@ -16,13 +16,10 @@ import android.text.TextUtils; import android.util.Log; -import org.chromium.build.annotations.MainDex; - /** * PartnerBrowserCustomizationsProvider example for testing. * Note: if you move or rename this class, make sure you have also updated AndroidManifest.xml. */ -@MainDex public class TestPartnerBrowserCustomizationsProvider extends ContentProvider { protected String mTag = TestPartnerBrowserCustomizationsProvider.class.getSimpleName();
diff --git a/chrome/test/chromedriver/test/run_py_tests.py b/chrome/test/chromedriver/test/run_py_tests.py index 96651f8..10ea2f6 100755 --- a/chrome/test/chromedriver/test/run_py_tests.py +++ b/chrome/test/chromedriver/test/run_py_tests.py
@@ -6119,7 +6119,7 @@ } }) resp = conn.WaitForResponse(cmd_id) - shared_id = resp['result']['result']['value']['sharedId'] + shared_id = resp['result']['result']['sharedId'] self.assertRegex(shared_id, '\\w+_element_\\w', msg='Shared id format is incorrect') pos = shared_id.rfind('_') @@ -6179,7 +6179,7 @@ } }) resp = conn.WaitForResponse(cmd_id) - node_id = resp['result']['result']['value']['sharedId'] + node_id = resp['result']['result']['sharedId'] div = webelement.WebElement(self._driver, node_id) div.Click() self.assertEqual(1, len(self._driver.FindElements('tag name', 'br')))
diff --git a/chrome/test/data/webui/cr_components/chromeos/network/apn_list_test.js b/chrome/test/data/webui/cr_components/chromeos/network/apn_list_test.js index d2d8802..b608a3b 100644 --- a/chrome/test/data/webui/cr_components/chromeos/network/apn_list_test.js +++ b/chrome/test/data/webui/cr_components/chromeos/network/apn_list_test.js
@@ -179,6 +179,21 @@ assertFalse(!!getZeroStateText()); assertTrue(!!getErrorMessage()); assertEquals('Can\'t connect to network.', getErrorMessageText()); + + // Add a connected APN. The error should not show. + apnList.managedCellularProperties = { + connectedApn: connectedApn, + apnList: { + activeValue: [connectedApn], + }, + }; + await flushTasks(); + assertFalse(!!getZeroStateText()); + assertFalse(!!getErrorMessage()); + const apns = apnList.shadowRoot.querySelectorAll('apn-list-item'); + assertEquals(apns.length, 1); + assertTrue(OncMojo.apnMatch(apns[0].apn, connectedApn)); + assertTrue(apns[0].isConnected); }); test('There is no Connected APN and no custom APNs', async function() {
diff --git a/chrome/test/data/webui/settings/BUILD.gn b/chrome/test/data/webui/settings/BUILD.gn index f70d633..594ec6f 100644 --- a/chrome/test/data/webui/settings/BUILD.gn +++ b/chrome/test/data/webui/settings/BUILD.gn
@@ -56,6 +56,7 @@ "password_view_test.ts", "payments_section_card_rows_test.ts", "payments_section_card_dialogs_test.ts", + "payments_section_focus_test.ts", "payments_section_iban_test.ts", "payments_section_interactive_test.ts", "payments_section_test.ts",
diff --git a/chrome/test/data/webui/settings/autofill_section_test.ts b/chrome/test/data/webui/settings/autofill_section_test.ts index 4db0a6c..254f1a8 100644 --- a/chrome/test/data/webui/settings/autofill_section_test.ts +++ b/chrome/test/data/webui/settings/autofill_section_test.ts
@@ -13,7 +13,7 @@ import {flushTasks} from 'chrome://webui-test/polymer_test_util.js'; import {AutofillManagerExpectations, createAddressEntry, createEmptyAddressEntry, STUB_USER_ACCOUNT_INFO, TestAutofillManager} from './passwords_and_autofill_fake_data.js'; -import {createAutofillSection, initiateRemoving, initiateEditing, CountryDetailManagerTestImpl, createAddressDialog, createRemoveAddressDialog, expectEvent, openAddressDialog} from './autofill_section_test_utils.js'; +import {createAutofillSection, initiateRemoving, initiateEditing, CountryDetailManagerTestImpl, createAddressDialog, createRemoveAddressDialog, expectEvent, openAddressDialog, deleteAddress} from './autofill_section_test_utils.js'; // clang-format on suite('AutofillSectionUiTest', function() { @@ -189,6 +189,43 @@ }); }); +suite('AutofillSectionFocusTest', function() { + test('verifyFocusLocationAfterRemoving', async () => { + const section = await createAutofillSection( + [ + createAddressEntry(), + createAddressEntry(), + createAddressEntry(), + ], + {profile_enabled: {value: true}}); + const manager = AutofillManagerImpl.getInstance() as TestAutofillManager; + + await deleteAddress(section, manager, 1); + const addressesAfterRemovingInTheMiddle = + section.$.addressList.querySelectorAll('.list-item'); + assertTrue( + addressesAfterRemovingInTheMiddle[1]!.matches(':focus-within'), + 'The focus should remain on the same index on the list (but next ' + + 'to the removed address).'); + + await deleteAddress(section, manager, 1); + const addressesAfterRemovingLastInTheList = + section.$.addressList.querySelectorAll('.list-item'); + assertTrue( + addressesAfterRemovingLastInTheList[0]!.matches(':focus-within'), + 'After removing the last address on the list the focus should go ' + + 'to the preivous address.'); + + await deleteAddress(section, manager, 0); + assertTrue( + section.$.addAddress.matches(':focus-within'), + 'If there are no addresses remaining after removal the focus should ' + + 'go to the Add button.'); + + document.body.removeChild(section); + }); +}); + suite('AutofillSectionAddressTests', function() { suiteSetup(function() { CountryDetailManagerImpl.setInstance(new CountryDetailManagerTestImpl());
diff --git a/chrome/test/data/webui/settings/autofill_section_test_utils.ts b/chrome/test/data/webui/settings/autofill_section_test_utils.ts index 520d1d1..e3efaf6 100644 --- a/chrome/test/data/webui/settings/autofill_section_test_utils.ts +++ b/chrome/test/data/webui/settings/autofill_section_test_utils.ts
@@ -204,3 +204,22 @@ return initiateRemoving(section, 0); } + +/** + * Performs some UI and manager manipulations to simulate the address removal. + */ +export async function deleteAddress( + section: SettingsAutofillSectionElement, manager: TestAutofillManager, + index: number) { + const dialog = await initiateRemoving(section, index); + const closePromise = eventToPromise('close', dialog.$.dialog); + dialog.$.remove.click(); + await closePromise; + + const address = [...manager.data.addresses]; + address.splice(index, 1); + manager.data.addresses = address; + manager.lastCallback.setPersonalDataManagerListener! + (address, [], [], manager.data.accountInfo); + await flushTasks(); +}
diff --git a/chrome/test/data/webui/settings/cr_settings_interactive_ui_tests.js b/chrome/test/data/webui/settings/cr_settings_interactive_ui_tests.js index 651720b1..9efce5c 100644 --- a/chrome/test/data/webui/settings/cr_settings_interactive_ui_tests.js +++ b/chrome/test/data/webui/settings/cr_settings_interactive_ui_tests.js
@@ -43,6 +43,18 @@ mocha.run(); }); +var CrSettingsPaymentsSectionFocusTest = + class extends CrSettingsInteractiveUITest { + /** @override */ + get browsePreload() { + return 'chrome://settings/test_loader.html?module=settings/payments_section_focus_test.js'; + } +}; + +TEST_F('CrSettingsPaymentsSectionFocusTest', 'All', function() { + mocha.run(); +}); + var CrSettingsSyncPageTest = class extends CrSettingsInteractiveUITest { /** @override */ get browsePreload() {
diff --git a/chrome/test/data/webui/settings/payments_section_focus_test.ts b/chrome/test/data/webui/settings/payments_section_focus_test.ts new file mode 100644 index 0000000..d406904 --- /dev/null +++ b/chrome/test/data/webui/settings/payments_section_focus_test.ts
@@ -0,0 +1,53 @@ +// 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. + +// clang-format off +import {PaymentsManagerImpl} from 'chrome://settings/lazy_load.js'; +import {loadTimeData} from 'chrome://settings/settings.js'; +import {assertTrue} from 'chrome://webui-test/chai_assert.js'; + +import {createCreditCardEntry, createIbanEntry, TestPaymentsManager} from './passwords_and_autofill_fake_data.js'; +import {createPaymentsSection, getPaymentMethodEntry, PaymentMethod, deletePaymentMethod} from './payments_section_utils.js'; +// clang-format on + +suite('PaymentSectionFocusTests', function() { + setup(function() { + loadTimeData.overrideValues({ + showIbansSettings: true, + }); + }); + + test('FocusLocationAfterDeletion', async function() { + const section = await createPaymentsSection( + [ + createCreditCardEntry(), + createCreditCardEntry(), + ], + [ + createIbanEntry('FI1410093000123458', 'NickName'), + ], + [], {credit_card_enabled: {value: true}}); + const manager = (PaymentsManagerImpl.getInstance() as TestPaymentsManager); + + const addButton = section.shadowRoot!.querySelector('#addPaymentMethods'); + assertTrue(!!addButton); + + await deletePaymentMethod(section, manager, PaymentMethod.CREDIT_CARD, 1); + assertTrue( + getPaymentMethodEntry(section, 'iban-0').matches(':focus-within'), + 'The focus should go to the first IBAN entry after removing ' + + 'the latest credit card.'); + + await deletePaymentMethod(section, manager, PaymentMethod.IBAN, 0); + assertTrue( + getPaymentMethodEntry(section, 'card-0').matches(':focus-within'), + 'The focus should be set on the preceding entry as the removed IBAN ' + + 'was the latest payment method in the list.'); + + await deletePaymentMethod(section, manager, PaymentMethod.CREDIT_CARD, 0); + assertTrue( + addButton.matches(':focus-within'), + 'No payment methods in the list, the focus goes to the Add button'); + }); +});
diff --git a/chrome/test/data/webui/settings/payments_section_utils.ts b/chrome/test/data/webui/settings/payments_section_utils.ts index 5446dbc..34da2c46 100644 --- a/chrome/test/data/webui/settings/payments_section_utils.ts +++ b/chrome/test/data/webui/settings/payments_section_utils.ts
@@ -3,9 +3,11 @@ // found in the LICENSE file. // clang-format off -import {PaymentsManagerImpl, SettingsPaymentsSectionElement} from 'chrome://settings/lazy_load.js'; -import {assertTrue} from 'chrome://webui-test/chai_assert.js'; +import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; +import {PaymentsManagerImpl, SettingsPaymentsSectionElement, SettingsCreditCardListEntryElement, SettingsIbanListEntryElement} from 'chrome://settings/lazy_load.js'; +import {assertTrue, assertLT} from 'chrome://webui-test/chai_assert.js'; import {flushTasks} from 'chrome://webui-test/polymer_test_util.js'; +import {eventToPromise, whenAttributeIs} from 'chrome://webui-test/test_util.js'; import {PaymentsManagerExpectations, TestPaymentsManager} from './passwords_and_autofill_fake_data.js'; @@ -70,3 +72,91 @@ assertTrue(!!row); return row.shadowRoot!; } + + +type PaymentEntryElement = + SettingsCreditCardListEntryElement|SettingsIbanListEntryElement; + +export const enum PaymentMethod { + CREDIT_CARD, + IBAN, +} + +/** + * Queries the payment method element by its DOM id. + * See `SettingsPaymentsListElement` for the format of the ids. + */ +export function getPaymentMethodEntry( + section: SettingsPaymentsSectionElement, id: string): PaymentEntryElement { + const container = section.$.paymentsList.shadowRoot; + assertTrue( + !!container, + 'the list element is expected to render its content in the shadowRoot'); + const element = container.querySelector<PaymentEntryElement>('#' + id); + assertTrue(!!element, `payment method with DOM id ${id} is not found`); + return element; +} +/** + * The payment method is identified by the position (`index`) in the payment + * method sub list (identified by the `type` argument). + */ +async function executeUiManipulationsToDeletePaymentMethod( + section: SettingsPaymentsSectionElement, type: PaymentMethod, + index: number) { + const id = + type === PaymentMethod.CREDIT_CARD ? `card-${index}` : `iban-${index}`; + const deleteButtonSelector = type === PaymentMethod.CREDIT_CARD ? + '#menuRemoveCreditCard' : + '#menuRemoveIban'; + + // Open the dots menu: + const entry = getPaymentMethodEntry(section, id); + assertTrue(!!entry.dotsMenu); + entry.dotsMenu.click(); + flush(); + + // Click the Delete button: + const deleteButton = section.shadowRoot!.querySelector<HTMLButtonElement>( + deleteButtonSelector); + assertTrue(!!deleteButton); + deleteButton.click(); + flush(); + + // Confirm the deletion in the dialog: + const confirmationDialog = + section.shadowRoot!.querySelector('settings-simple-confirmation-dialog'); + assertTrue(!!confirmationDialog); + await whenAttributeIs(confirmationDialog.$.dialog, 'open', ''); + const closePromise = eventToPromise('close', confirmationDialog.$.dialog); + confirmationDialog.$.confirm.click(); + await closePromise; +} + +/** + * Performs required manipulations in the UI and manager to simulate the payment + * method removal. The payment method is identified by the position (`index`) in + * the respective (`type`) sub list. + */ +export async function deletePaymentMethod( + section: SettingsPaymentsSectionElement, manager: TestPaymentsManager, + type: PaymentMethod, index: number) { + const deleteMethod = + type === PaymentMethod.CREDIT_CARD ? 'removeCreditCard' : 'removeIban'; + const dataProperty = + type === PaymentMethod.CREDIT_CARD ? 'creditCards' : 'ibans'; + + // Ensure manager's deleteMethod call is caused by UI manipulations here. + manager.resetResolver(deleteMethod); + await executeUiManipulationsToDeletePaymentMethod(section, type, index); + await manager.whenCalled(deleteMethod); + + // Create a copy to make sure all the Polymer updates get triggered. + const paymentMethodItems = [...manager.data[dataProperty]]; + assertLT(index, paymentMethodItems.length); + paymentMethodItems.splice(index, 1); + manager.data[dataProperty] = paymentMethodItems; + manager.lastCallback.setPersonalDataManagerListener! + ([], manager.data.creditCards, manager.data.ibans); + + await flushTasks(); +}
diff --git a/chrome/updater/app/server/win/com_classes.cc b/chrome/updater/app/server/win/com_classes.cc index bf7f0bf..8b25c5b5 100644 --- a/chrome/updater/app/server/win/com_classes.cc +++ b/chrome/updater/app/server/win/com_classes.cc
@@ -144,6 +144,9 @@ } HRESULT UpdaterImpl::FetchPolicies(IUpdaterCallback* callback) { + if (!callback) { + return E_INVALIDARG; + } scoped_refptr<ComServerApp> com_server = AppServerSingletonInstance(); com_server->main_task_runner()->PostTask( FROM_HERE, @@ -171,8 +174,9 @@ const wchar_t* version, const wchar_t* existence_checker_path, IUpdaterCallback* callback) { - if (!callback) + if (!callback) { return E_INVALIDARG; + } // Validates that string parameters are not longer than 16K characters. absl::optional<RegistrationRequest> request = @@ -252,6 +256,9 @@ // `update_service` on the main sequence. The callbacks received from // `update_service` arrive in the main sequence too. HRESULT UpdaterImpl::RunPeriodicTasks(IUpdaterCallback* callback) { + if (!callback) { + return E_INVALIDARG; + } scoped_refptr<ComServerApp> com_server = AppServerSingletonInstance(); com_server->main_task_runner()->PostTask( FROM_HERE, @@ -284,7 +291,9 @@ StateChangeCallbackFilter( scoped_refptr<base::SequencedTaskRunner> task_runner, Microsoft::WRL::ComPtr<IUpdaterObserver> observer) - : task_runner_(task_runner), observer_(observer) {} + : task_runner_(task_runner), observer_(observer) { + CHECK(observer); + } StateChangeCallbackFilter(const StateChangeCallbackFilter&) = delete; StateChangeCallbackFilter& operator=(const StateChangeCallbackFilter&) = delete; @@ -322,6 +331,10 @@ LONG priority, BOOL same_version_update_allowed, IUpdaterObserver* observer) { + if (!observer) { + return E_INVALIDARG; + } + auto task_runner = base::ThreadPool::CreateSequencedTaskRunner( {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}); @@ -378,6 +391,10 @@ LONG priority, BOOL same_version_update_allowed, IUpdaterObserver* observer) { + if (!observer) { + return E_INVALIDARG; + } + // This task runner is responsible for sequencing the callbacks posted // by the `UpdateService` and calling the outbound COM functions to // notify the client about state changes in the `UpdateService`. @@ -430,6 +447,10 @@ // See the comment for the UpdaterImpl::Update. HRESULT UpdaterImpl::UpdateAll(IUpdaterObserver* observer) { + if (!observer) { + return E_INVALIDARG; + } + using IUpdaterObserverPtr = Microsoft::WRL::ComPtr<IUpdaterObserver>; scoped_refptr<ComServerApp> com_server = AppServerSingletonInstance(); @@ -478,8 +499,9 @@ const wchar_t* install_data_index, LONG priority, IUpdaterObserver* observer) { - if (!observer) + if (!observer) { return E_INVALIDARG; + } // Validates that string parameters are not longer than 16K characters. absl::optional<RegistrationRequest> request = @@ -592,6 +614,10 @@ IUpdaterObserver* observer) { VLOG(1) << __func__; + if (!observer) { + return E_INVALIDARG; + } + for (const wchar_t* str : {app_id, installer_path, install_args, install_data, install_settings}) { if (wcsnlen_s(str, kMaxStringLen) >= kMaxStringLen) { @@ -679,6 +705,10 @@ // See the comment for the UpdaterImpl::Update. HRESULT UpdaterInternalImpl::Run(IUpdaterInternalCallback* callback) { + if (!callback) { + return E_INVALIDARG; + } + using IUpdaterInternalCallbackPtr = Microsoft::WRL::ComPtr<IUpdaterInternalCallback>; scoped_refptr<ComServerApp> com_server = AppServerSingletonInstance(); @@ -712,6 +742,10 @@ } HRESULT UpdaterInternalImpl::Hello(IUpdaterInternalCallback* callback) { + if (!callback) { + return E_INVALIDARG; + } + using IUpdaterInternalCallbackPtr = Microsoft::WRL::ComPtr<IUpdaterInternalCallback>; scoped_refptr<ComServerApp> com_server = AppServerSingletonInstance();
diff --git a/chrome/updater/app/server/win/com_classes.h b/chrome/updater/app/server/win/com_classes.h index 83032ce..f3b8f9c 100644 --- a/chrome/updater/app/server/win/com_classes.h +++ b/chrome/updater/app/server/win/com_classes.h
@@ -28,9 +28,7 @@ // object. The purpose of this class is to remote the state of the // |UpdateService|. Instances of this class are typically passed as arguments // to RPC method calls which model COM events. -class UpdateStateImpl : public DynamicIIDsImpl<IUpdateState, - __uuidof(IUpdateStateUser), - __uuidof(IUpdateStateSystem)> { +class UpdateStateImpl : public DYNAMICIIDSIMPL(IUpdateState) { public: explicit UpdateStateImpl(const UpdateService::UpdateState& update_state) : update_state_(update_state) {} @@ -58,10 +56,7 @@ // This class implements the ICompleteStatus interface and exposes it as a COM // object. -class CompleteStatusImpl - : public DynamicIIDsImpl<ICompleteStatus, - __uuidof(ICompleteStatusUser), - __uuidof(ICompleteStatusSystem)> { +class CompleteStatusImpl : public DYNAMICIIDSIMPL(ICompleteStatus) { public: CompleteStatusImpl(int code, const std::wstring& message) : code_(code), message_(message) {} @@ -80,9 +75,7 @@ }; // This class implements the IUpdater interface and exposes it as a COM object. -class UpdaterImpl : public DynamicIIDsImpl<IUpdater, - __uuidof(IUpdaterUser), - __uuidof(IUpdaterSystem)> { +class UpdaterImpl : public DYNAMICIIDSIMPL(IUpdater) { public: UpdaterImpl() = default; UpdaterImpl(const UpdaterImpl&) = delete; @@ -137,10 +130,7 @@ // This class implements the IUpdaterInternal interface and exposes it as a COM // object. -class UpdaterInternalImpl - : public DynamicIIDsImpl<IUpdaterInternal, - __uuidof(IUpdaterInternalUser), - __uuidof(IUpdaterInternalSystem)> { +class UpdaterInternalImpl : public DYNAMICIIDSIMPL(IUpdaterInternal) { public: UpdaterInternalImpl() = default; UpdaterInternalImpl(const UpdaterInternalImpl&) = delete;
diff --git a/chrome/updater/app/server/win/com_classes_legacy.cc b/chrome/updater/app/server/win/com_classes_legacy.cc index 56eade9..ddce9ba 100644 --- a/chrome/updater/app/server/win/com_classes_legacy.cc +++ b/chrome/updater/app/server/win/com_classes_legacy.cc
@@ -103,9 +103,7 @@ class AppVersionWebImpl : public IDispatchImpl<IAppVersionWeb> { public: AppVersionWebImpl() - : IDispatchImpl<IAppVersionWeb>( - {{__uuidof(IAppVersionWebUser), __uuidof(IAppVersionWeb)}}, - {{__uuidof(IAppVersionWebSystem), __uuidof(IAppVersionWeb)}}) {} + : IDispatchImpl<IAppVersionWeb>(IID_MAPS_USERSYSTEM(IAppVersionWeb)) {} AppVersionWebImpl(const AppVersionWebImpl&) = delete; AppVersionWebImpl& operator=(const AppVersionWebImpl&) = delete; @@ -144,9 +142,7 @@ class CurrentStateImpl : public IDispatchImpl<ICurrentState> { public: CurrentStateImpl() - : IDispatchImpl<ICurrentState>( - {{__uuidof(ICurrentStateUser), __uuidof(ICurrentState)}}, - {{__uuidof(ICurrentStateSystem), __uuidof(ICurrentState)}}) {} + : IDispatchImpl<ICurrentState>(IID_MAPS_USERSYSTEM(ICurrentState)) {} CurrentStateImpl(const CurrentStateImpl&) = delete; CurrentStateImpl& operator=(const CurrentStateImpl&) = delete; @@ -343,8 +339,7 @@ class AppWebImpl : public IDispatchImpl<IAppWeb> { public: AppWebImpl() - : IDispatchImpl<IAppWeb>({{__uuidof(IAppWebUser), __uuidof(IAppWeb)}}, - {{__uuidof(IAppWebSystem), __uuidof(IAppWeb)}}), + : IDispatchImpl<IAppWeb>(IID_MAPS_USERSYSTEM(IAppWeb)), task_runner_(base::ThreadPool::CreateSequencedTaskRunner( {base::MayBlock(), base::WithBaseSyncPrimitives()})) {} AppWebImpl(const AppWebImpl&) = delete; @@ -649,9 +644,7 @@ class AppBundleWebImpl : public IDispatchImpl<IAppBundleWeb> { public: AppBundleWebImpl() - : IDispatchImpl<IAppBundleWeb>( - {{__uuidof(IAppBundleWebUser), __uuidof(IAppBundleWeb)}}, - {{__uuidof(IAppBundleWebSystem), __uuidof(IAppBundleWeb)}}) {} + : IDispatchImpl<IAppBundleWeb>(IID_MAPS_USERSYSTEM(IAppBundleWeb)) {} AppBundleWebImpl(const AppBundleWebImpl&) = delete; AppBundleWebImpl& operator=(const AppBundleWebImpl&) = delete; @@ -783,9 +776,8 @@ }; LegacyOnDemandImpl::LegacyOnDemandImpl() - : IDispatchImpl<IGoogleUpdate3Web>( - {{__uuidof(IGoogleUpdate3WebUser), __uuidof(IGoogleUpdate3Web)}}, - {{__uuidof(IGoogleUpdate3WebSystem), __uuidof(IGoogleUpdate3Web)}}) {} + : IDispatchImpl<IGoogleUpdate3Web>(IID_MAPS_USERSYSTEM(IGoogleUpdate3Web)) { +} LegacyOnDemandImpl::~LegacyOnDemandImpl() = default; @@ -857,9 +849,7 @@ } LegacyAppCommandWebImpl::LegacyAppCommandWebImpl() - : IDispatchImpl<IAppCommandWeb>( - {{__uuidof(IAppCommandWebUser), __uuidof(IAppCommandWeb)}}, - {{__uuidof(IAppCommandWebSystem), __uuidof(IAppCommandWeb)}}) {} + : IDispatchImpl<IAppCommandWeb>(IID_MAPS_USERSYSTEM(IAppCommandWeb)) {} LegacyAppCommandWebImpl::~LegacyAppCommandWebImpl() = default; HRESULT LegacyAppCommandWebImpl::RuntimeClassInitialize( @@ -935,12 +925,12 @@ PolicyStatusImpl::PolicyStatusImpl() : IDispatchImpl<IPolicyStatus3, IPolicyStatus2, IPolicyStatus>( - {{__uuidof(IPolicyStatus3User), __uuidof(IPolicyStatus3)}, - {__uuidof(IPolicyStatus2User), __uuidof(IPolicyStatus2)}, - {__uuidof(IPolicyStatusUser), __uuidof(IPolicyStatus)}}, - {{__uuidof(IPolicyStatus3System), __uuidof(IPolicyStatus3)}, - {__uuidof(IPolicyStatus2System), __uuidof(IPolicyStatus2)}, - {__uuidof(IPolicyStatusSystem), __uuidof(IPolicyStatus)}}), + {IID_MAP_ENTRY_USER(IPolicyStatus3), + IID_MAP_ENTRY_USER(IPolicyStatus2), + IID_MAP_ENTRY_USER(IPolicyStatus)}, + {IID_MAP_ENTRY_SYSTEM(IPolicyStatus3), + IID_MAP_ENTRY_SYSTEM(IPolicyStatus2), + IID_MAP_ENTRY_SYSTEM(IPolicyStatus)}), policy_service_( AppServerSingletonInstance()->config()->GetPolicyService()) {} PolicyStatusImpl::~PolicyStatusImpl() = default;
diff --git a/chrome/updater/ipc/update_service_internal_proxy_win.cc b/chrome/updater/ipc/update_service_internal_proxy_win.cc index 480677c..ddb2f014 100644 --- a/chrome/updater/ipc/update_service_internal_proxy_win.cc +++ b/chrome/updater/ipc/update_service_internal_proxy_win.cc
@@ -30,9 +30,7 @@ // This class implements the IUpdaterInternalCallback interface and exposes it // as a COM object. The class has thread-affinity for the STA thread. class UpdaterInternalCallback - : public DynamicIIDsImpl<IUpdaterInternalCallback, - __uuidof(IUpdaterInternalCallbackUser), - __uuidof(IUpdaterInternalCallbackSystem)> { + : public DYNAMICIIDSIMPL(IUpdaterInternalCallback) { public: explicit UpdaterInternalCallback(base::OnceClosure callback) : callback_(std::move(callback)) {}
diff --git a/chrome/updater/ipc/update_service_proxy_win.cc b/chrome/updater/ipc/update_service_proxy_win.cc index 6c16639..b356f71 100644 --- a/chrome/updater/ipc/update_service_proxy_win.cc +++ b/chrome/updater/ipc/update_service_proxy_win.cc
@@ -43,10 +43,7 @@ // This class implements the IUpdaterObserver interface and exposes it as a COM // object. The class has thread-affinity for the STA thread. -class UpdaterObserver - : public DynamicIIDsImpl<IUpdaterObserver, - __uuidof(IUpdaterObserverUser), - __uuidof(IUpdaterObserverSystem)> { +class UpdaterObserver : public DYNAMICIIDSIMPL(IUpdaterObserver) { public: UpdaterObserver(UpdateService::StateChangeCallback state_update_callback, UpdateService::Callback callback) @@ -212,10 +209,7 @@ // This class implements the IUpdaterCallback interface and exposes it as a COM // object. The class has thread-affinity for the STA thread. -class UpdaterCallback - : public DynamicIIDsImpl<IUpdaterCallback, - __uuidof(IUpdaterCallbackUser), - __uuidof(IUpdaterCallbackSystem)> { +class UpdaterCallback : public DYNAMICIIDSIMPL(IUpdaterCallback) { public: explicit UpdaterCallback(base::OnceCallback<void(LONG)> callback) : callback_(std::move(callback)) {}
diff --git a/chrome/updater/mac/setup/setup.mm b/chrome/updater/mac/setup/setup.mm index b01e35c..d386e1b 100644 --- a/chrome/updater/mac/setup/setup.mm +++ b/chrome/updater/mac/setup/setup.mm
@@ -128,7 +128,8 @@ // If there is no Current symlink, create one now. base::FilePath current_symlink = install_dir->Append("Current"); if (!base::PathExists(current_symlink)) { - if (symlink(kUpdaterVersion, current_symlink.value().c_str())) { + if (base::DeleteFile(current_symlink) && + symlink(kUpdaterVersion, current_symlink.value().c_str())) { return kErrorFailedToLinkLauncher; } }
diff --git a/chrome/updater/test/integration_test_commands.h b/chrome/updater/test/integration_test_commands.h index 66f125c6..97fba5d9 100644 --- a/chrome/updater/test/integration_test_commands.h +++ b/chrome/updater/test/integration_test_commands.h
@@ -90,6 +90,7 @@ const std::string& install_data_index) const = 0; virtual void UpdateAll() const = 0; virtual void DeleteUpdaterDirectory() const = 0; + virtual void DeleteFile(const base::FilePath& path) const = 0; virtual void PrintLog() const = 0; virtual base::FilePath GetDifferentUserPath() const = 0; [[nodiscard]] virtual bool WaitForUpdaterExit() const = 0;
diff --git a/chrome/updater/test/integration_test_commands_system.cc b/chrome/updater/test/integration_test_commands_system.cc index 1e4c6d2..ad6d819 100644 --- a/chrome/updater/test/integration_test_commands_system.cc +++ b/chrome/updater/test/integration_test_commands_system.cc
@@ -234,6 +234,10 @@ RunCommand("delete_updater_directory", {}); } + void DeleteFile(const base::FilePath& path) const override { + RunCommand("delete_file", {Param("path", path.MaybeAsASCII())}); + } + void InstallApp(const std::string& app_id) const override { RunCommand("install_app", {Param("app_id", app_id)}); } @@ -306,13 +310,10 @@ #endif // BUILDFLAG(IS_WIN) base::FilePath GetDifferentUserPath() const override { -#if BUILDFLAG(IS_MAC) - // The updater_tests executable is owned by non-root. - return base::PathService::CheckedGet(base::FILE_EXE); -#else + // On POSIX, the path may be chowned; so do not use a file not owned by the + // test, nor the test executable itself. NOTREACHED() << __func__ << ": not implemented."; return base::FilePath(); -#endif } void StressUpdateService() const override {
diff --git a/chrome/updater/test/integration_test_commands_user.cc b/chrome/updater/test/integration_test_commands_user.cc index a9e3c96..0e2f5bc1 100644 --- a/chrome/updater/test/integration_test_commands_user.cc +++ b/chrome/updater/test/integration_test_commands_user.cc
@@ -212,6 +212,10 @@ updater::test::DeleteUpdaterDirectory(updater_scope_); } + void DeleteFile(const base::FilePath& path) const override { + updater::test::DeleteFile(updater_scope_, path); + } + void InstallApp(const std::string& app_id) const override { updater::test::InstallApp(updater_scope_, app_id); }
diff --git a/chrome/updater/test/integration_tests.cc b/chrome/updater/test/integration_tests.cc index e35600a..acf93c79 100644 --- a/chrome/updater/test/integration_tests.cc +++ b/chrome/updater/test/integration_tests.cc
@@ -10,6 +10,7 @@ #include "base/files/file_enumerator.h" #include "base/files/file_path.h" +#include "base/files/scoped_temp_dir.h" #include "base/functional/bind.h" #include "base/functional/callback_helpers.h" #include "base/memory/scoped_refptr.h" @@ -323,6 +324,10 @@ void DeleteUpdaterDirectory() { test_commands_->DeleteUpdaterDirectory(); } + void DeleteFile(const base::FilePath& path) { + test_commands_->DeleteFile(path); + } + base::FilePath GetDifferentUserPath() { return test_commands_->GetDifferentUserPath(); } @@ -907,10 +912,8 @@ // test need not run on Windows. #if BUILDFLAG(IS_MAC) TEST_F(IntegrationTest, UnregisterUnownedApp) { - if (GetTestScope() == UpdaterScope::kSystem) { - // TODO(crbug.com/1441082): Re-enable this test. - return; - } + base::ScopedTempDir temp_dir; + ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); ASSERT_NO_FATAL_FAILURE(Install()); ASSERT_NO_FATAL_FAILURE(ExpectInstalled()); ASSERT_NO_FATAL_FAILURE(ExpectVersionActive(kUpdaterVersion)); @@ -919,13 +922,22 @@ ASSERT_NO_FATAL_FAILURE(InstallApp("test2")); ASSERT_TRUE(WaitForUpdaterExit()); - ASSERT_NO_FATAL_FAILURE( - SetExistenceCheckerPath("test1", GetDifferentUserPath())); + ASSERT_NO_FATAL_FAILURE(SetExistenceCheckerPath( + "test1", IsSystemInstall(GetTestScope()) ? temp_dir.GetPath() + : GetDifferentUserPath())); ASSERT_NO_FATAL_FAILURE(RunWake(0)); ASSERT_TRUE(WaitForUpdaterExit()); - ASSERT_NO_FATAL_FAILURE(ExpectNotRegistered("test1")); + // Since the updater may have chowned the temp dir, we may need to elevate to + // delete it. + ASSERT_NO_FATAL_FAILURE(DeleteFile(temp_dir.GetPath())); + + if (IsSystemInstall(GetTestScope())) { + ASSERT_NO_FATAL_FAILURE(ExpectRegistered("test1")); + } else { + ASSERT_NO_FATAL_FAILURE(ExpectNotRegistered("test1")); + } ASSERT_NO_FATAL_FAILURE(ExpectRegistered("test2"));
diff --git a/chrome/updater/test/integration_tests_helper.cc b/chrome/updater/test/integration_tests_helper.cc index e8e0bba..eb74989 100644 --- a/chrome/updater/test/integration_tests_helper.cc +++ b/chrome/updater/test/integration_tests_helper.cc
@@ -325,6 +325,7 @@ {"update_all", WithSystemScope(Wrap(&UpdateAll))}, {"delete_updater_directory", WithSystemScope(Wrap(&DeleteUpdaterDirectory))}, + {"delete_file", (WithSwitch("path", WithSystemScope(Wrap(&DeleteFile))))}, {"install_app", WithSwitch("app_id", WithSystemScope(Wrap(&InstallApp)))}, {"uninstall_app", WithSwitch("app_id", WithSystemScope(Wrap(&UninstallApp)))},
diff --git a/chrome/updater/test/integration_tests_impl.cc b/chrome/updater/test/integration_tests_impl.cc index c07b229..3ab3ac0f 100644 --- a/chrome/updater/test/integration_tests_impl.cc +++ b/chrome/updater/test/integration_tests_impl.cc
@@ -471,6 +471,10 @@ ASSERT_TRUE(base::DeletePathRecursively(*install_dir)); } +void DeleteFile(UpdaterScope /*scope*/, const base::FilePath& path) { + ASSERT_TRUE(base::DeleteFile(path)); +} + void SetupFakeUpdaterPrefs(UpdaterScope scope, const base::Version& version) { scoped_refptr<GlobalPrefs> global_prefs = CreateGlobalPrefs(scope); ASSERT_TRUE(global_prefs) << "No global prefs.";
diff --git a/chrome/updater/test/integration_tests_impl.h b/chrome/updater/test/integration_tests_impl.h index 7ed6c8d..032c64c 100644 --- a/chrome/updater/test/integration_tests_impl.h +++ b/chrome/updater/test/integration_tests_impl.h
@@ -128,6 +128,9 @@ // Invokes the active instance's UpdateService::UpdateAll (via RPC). void UpdateAll(UpdaterScope scope); +// Deletes the file. +void DeleteFile(UpdaterScope scope, const base::FilePath& path); + // Deletes the updater executable directory. Does not do any kind of cleanup // related to service registration. The intent of this command is to replicate // a common mode of breaking the updater, so we can test how it recovers.
diff --git a/chrome/updater/update_service_impl.cc b/chrome/updater/update_service_impl.cc index 5ef80358..9e687b0 100644 --- a/chrome/updater/update_service_impl.cc +++ b/chrome/updater/update_service_impl.cc
@@ -284,10 +284,10 @@ // The installer should make an updater registration, but in case it halts // before it does, synthesize a registration if necessary here. - if (!base::Contains(persisted_data_->GetAppIds(), - base::ToLowerASCII(kUpdaterAppId), - static_cast<std::string (*)(base::StringPiece)>( - &base::ToLowerASCII))) { + const base::Version registered_updater_version = + persisted_data_->GetProductVersion(kUpdaterAppId); + if (!registered_updater_version.IsValid() || + base::Version(kUpdaterVersion) > registered_updater_version) { RegistrationRequest updater_request; updater_request.app_id = kUpdaterAppId; updater_request.version = base::Version(kUpdaterVersion);
diff --git a/chrome/updater/util/win_util.h b/chrome/updater/util/win_util.h index a74aa29..43222057 100644 --- a/chrome/updater/util/win_util.h +++ b/chrome/updater/util/win_util.h
@@ -120,6 +120,21 @@ } }; +// Macro that makes it easier to derive from `DynamicIIDsImpl`. +#define DYNAMICIIDSIMPL(interface) \ + DynamicIIDsImpl<interface, __uuidof(interface##User), \ + __uuidof(interface##System)> + +// Macros that makes it easier to call the `IDispatchImpl` constructor. +#define IID_MAP_ENTRY_USER(interface) \ + { __uuidof(interface##User), __uuidof(interface) } +#define IID_MAP_ENTRY_SYSTEM(interface) \ + { __uuidof(interface##System), __uuidof(interface) } +#define IID_MAPS_USERSYSTEM(interface) \ + {IID_MAP_ENTRY_USER(interface)}, { \ + IID_MAP_ENTRY_SYSTEM(interface) \ + } + // Returns the last error as an HRESULT or E_FAIL if last error is NO_ERROR. // This is not a drop in replacement for the HRESULT_FROM_WIN32 macro. // The macro maps a NO_ERROR to S_OK, whereas the HRESULTFromLastError maps a
diff --git a/chrome/utility/importer/nss_decryptor.cc b/chrome/utility/importer/nss_decryptor.cc index 4c3e3d154..8b0ab3c 100644 --- a/chrome/utility/importer/nss_decryptor.cc +++ b/chrome/utility/importer/nss_decryptor.cc
@@ -175,33 +175,40 @@ const base::Value::List* password_list = parsed_json_dict->FindList("logins"); if (password_list) { for (const auto& value : *password_list) { - if (!value.is_dict()) + auto* dict = value.GetIfDict(); + if (!dict) { continue; + } FirefoxRawPasswordInfo raw_password_info; - if (const std::string* hostname = value.FindStringKey("hostname")) + if (const std::string* hostname = dict->FindString("hostname")) { raw_password_info.host = *hostname; + } - if (const std::string* username = value.FindStringKey("usernameField")) + if (const std::string* username = dict->FindString("usernameField")) { raw_password_info.username_element = base::UTF8ToUTF16(*username); + } - if (const std::string* password = value.FindStringKey("passwordField")) + if (const std::string* password = dict->FindString("passwordField")) { raw_password_info.password_element = base::UTF8ToUTF16(*password); + } - if (const std::string* username = - value.FindStringKey("encryptedUsername")) + if (const std::string* username = dict->FindString("encryptedUsername")) { raw_password_info.encrypted_username = *username; + } - if (const std::string* password = - value.FindStringKey("encryptedPassword")) + if (const std::string* password = dict->FindString("encryptedPassword")) { raw_password_info.encrypted_password = *password; + } - if (const std::string* submit_url = value.FindStringKey("formSubmitURL")) + if (const std::string* submit_url = dict->FindString("formSubmitURL")) { raw_password_info.form_action = *submit_url; + } - if (const std::string* realm = value.FindStringKey("httpRealm")) + if (const std::string* realm = dict->FindString("httpRealm")) { raw_password_info.realm = *realm; + } importer::ImportedPasswordForm form; if (CreatePasswordFormFromRawInfo(raw_password_info, &form))
diff --git a/chromecast/browser/android/junit/src/org/chromium/chromecast/shell/CastWebContentsActivityTest.java b/chromecast/browser/android/junit/src/org/chromium/chromecast/shell/CastWebContentsActivityTest.java index 689c4fb..91018ddd 100644 --- a/chromecast/browser/android/junit/src/org/chromium/chromecast/shell/CastWebContentsActivityTest.java +++ b/chromecast/browser/android/junit/src/org/chromium/chromecast/shell/CastWebContentsActivityTest.java
@@ -87,10 +87,12 @@ private boolean mInPipMode; private MotionEvent mLastTouchEvent; + @Override public boolean getTurnScreenOn() { return mTurnScreenOn; } + @Override public boolean getShowWhenLocked() { return mShowWhenLocked; } @@ -106,11 +108,13 @@ } @Implementation + @Override public void setTurnScreenOn(boolean turnScreenOn) { mTurnScreenOn = turnScreenOn; } @Implementation + @Override public void setShowWhenLocked(boolean showWhenLocked) { mShowWhenLocked = showWhenLocked; }
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM index ecca23e5..ef6d883 100644 --- a/chromeos/CHROMEOS_LKGM +++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@ -15455.0.0 \ No newline at end of file +15456.0.0 \ No newline at end of file
diff --git a/chromeos/ash/components/dbus/hermes/fake_hermes_euicc_client.cc b/chromeos/ash/components/dbus/hermes/fake_hermes_euicc_client.cc index e5291f5..a103ce7c 100644 --- a/chromeos/ash/components/dbus/hermes/fake_hermes_euicc_client.cc +++ b/chromeos/ash/components/dbus/hermes/fake_hermes_euicc_client.cc
@@ -516,8 +516,12 @@ return; } - // TODO(b/271854446): Update this method to be able to have test profile paths - // able to be returned. + // Configure a single profile that uses the activation code that was provided + // and immediately return the path to this profile. + profile_paths.push_back(AddFakeCarrierProfile( + euicc_path, hermes::profile::State::kPending, activation_code, + AddCarrierProfileBehavior::kAddProfileWithService)); + std::move(callback).Run(HermesResponseStatus::kSuccess, profile_paths); }
diff --git a/chromeos/ash/components/dbus/shill/fake_shill_device_client.cc b/chromeos/ash/components/dbus/shill/fake_shill_device_client.cc index 48f65ad..f72fad3 100644 --- a/chromeos/ash/components/dbus/shill/fake_shill_device_client.cc +++ b/chromeos/ash/components/dbus/shill/fake_shill_device_client.cc
@@ -97,6 +97,14 @@ const base::Value& value, base::OnceClosure callback, ErrorCallback error_callback) { + if (set_property_error_name_.has_value()) { + std::move(error_callback) + .Run(set_property_error_name_.value(), + /*error_message=*/std::string()); + set_property_error_name_ = absl::nullopt; + return; + } + if (property_change_delay_.has_value()) { // Return callback immediately and set property after delay. std::move(callback).Run(); @@ -449,6 +457,11 @@ property_change_delay_ = time_delay; } +void FakeShillDeviceClient::SetErrorForNextSetPropertyAttempt( + const std::string& error_name) { + set_property_error_name_ = error_name; +} + // Private Methods ------------------------------------------------------------- FakeShillDeviceClient::SimLockStatus FakeShillDeviceClient::GetSimLockStatus(
diff --git a/chromeos/ash/components/dbus/shill/fake_shill_device_client.h b/chromeos/ash/components/dbus/shill/fake_shill_device_client.h index 7393da1..795642a 100644 --- a/chromeos/ash/components/dbus/shill/fake_shill_device_client.h +++ b/chromeos/ash/components/dbus/shill/fake_shill_device_client.h
@@ -101,6 +101,8 @@ void SetSimulateInhibitScanning(bool simulate_inhibit_scanning) override; void SetPropertyChangeDelay( absl::optional<base::TimeDelta> time_delay) override; + void SetErrorForNextSetPropertyAttempt( + const std::string& error_name) override; static const char kSimPuk[]; static const char kDefaultSimPin[]; @@ -167,6 +169,9 @@ // change by given amount. absl::optional<base::TimeDelta> property_change_delay_; + // If set the next SetProperty call will fail with this error_name. + absl::optional<std::string> set_property_error_name_; + // Note: This should remain the last member so it'll be destroyed and // invalidate its weak pointers before any other members are destroyed. base::WeakPtrFactory<FakeShillDeviceClient> weak_ptr_factory_{this};
diff --git a/chromeos/ash/components/dbus/shill/shill_device_client.h b/chromeos/ash/components/dbus/shill/shill_device_client.h index 2c1f9b1..4f44042 100644 --- a/chromeos/ash/components/dbus/shill/shill_device_client.h +++ b/chromeos/ash/components/dbus/shill/shill_device_client.h
@@ -67,6 +67,10 @@ // change. virtual void SetPropertyChangeDelay( absl::optional<base::TimeDelta> time_delay) = 0; + // Sets a SetProperty error. If set, the next SetProperty call will + // fail with the given |error_name| + virtual void SetErrorForNextSetPropertyAttempt( + const std::string& error_name) = 0; protected: virtual ~TestInterface() = default;
diff --git a/chromeos/ash/components/network/BUILD.gn b/chromeos/ash/components/network/BUILD.gn index d547f4c4..3b97b5f 100644 --- a/chromeos/ash/components/network/BUILD.gn +++ b/chromeos/ash/components/network/BUILD.gn
@@ -22,6 +22,7 @@ "//chromeos/ash/components/network/metrics", "//chromeos/ash/components/network/onc", "//chromeos/ash/components/network/proxy", + "//chromeos/ash/services/cellular_setup/public/mojom", "//chromeos/ash/services/hotspot_config/public/cpp", "//chromeos/ash/services/hotspot_config/public/mojom", "//chromeos/components/onc", @@ -269,6 +270,7 @@ "//chromeos/ash/components/network/metrics:unit_tests", "//chromeos/ash/components/network/onc:unit_tests", "//chromeos/ash/components/network/proxy:unit_tests", + "//chromeos/ash/services/cellular_setup/public/mojom", "//chromeos/ash/services/hotspot_config/public/cpp", "//chromeos/ash/services/hotspot_config/public/cpp:test_support", "//chromeos/ash/services/hotspot_config/public/mojom",
diff --git a/chromeos/ash/components/network/DEPS b/chromeos/ash/components/network/DEPS index 7b31057e..c22c8d7 100644 --- a/chromeos/ash/components/network/DEPS +++ b/chromeos/ash/components/network/DEPS
@@ -9,6 +9,7 @@ "+chromeos/ash/components/dbus", "+chromeos/ash/services/hotspot_config/public", "+chromeos/ash/services/network_config/public", + "+chromeos/ash/services/cellular_setup/public", "+chromeos/components/onc", "+chromeos/dbus", "+chromeos/services/network_config/public",
diff --git a/chromeos/ash/components/network/cellular_esim_profile_handler.cc b/chromeos/ash/components/network/cellular_esim_profile_handler.cc index 2dc8ff51..53af1c8 100644 --- a/chromeos/ash/components/network/cellular_esim_profile_handler.cc +++ b/chromeos/ash/components/network/cellular_esim_profile_handler.cc
@@ -4,9 +4,13 @@ #include "chromeos/ash/components/network/cellular_esim_profile_handler.h" +#include "ash/constants/ash_features.h" +#include "base/check.h" +#include "base/strings/utf_string_conversions.h" #include "base/task/single_thread_task_runner.h" -#include "chromeos/ash/components/network/cellular_esim_profile.h" +#include "chromeos/ash/components/network/cellular_utils.h" #include "chromeos/ash/components/network/hermes_metrics_util.h" +#include "chromeos/ash/components/network/network_event_log.h" namespace ash { namespace { @@ -26,6 +30,12 @@ HermesProfileClient::Get()->RemoveObserver(this); } +CellularESimProfileHandler::RequestAvailableProfilesInfo:: + RequestAvailableProfilesInfo() = default; + +CellularESimProfileHandler::RequestAvailableProfilesInfo:: + ~RequestAvailableProfilesInfo() = default; + void CellularESimProfileHandler::Init( NetworkStateHandler* network_state_handler, CellularInhibitor* cellular_inhibitor) { @@ -53,6 +63,23 @@ std::move(callback), std::move(inhibit_lock)); } +void CellularESimProfileHandler::RequestAvailableProfiles( + const dbus::ObjectPath& euicc_path, + RequestAvailableProfilesCallback callback) { + DCHECK(ash::features::IsSmdsSupportEnabled()); + + std::unique_ptr<RequestAvailableProfilesInfo> info = + std::make_unique<RequestAvailableProfilesInfo>(); + info->smds_activation_codes = cellular_utils::GetSmdsActivationCodes(); + info->callback = std::move(callback); + + cellular_inhibitor_->InhibitCellularScanning( + CellularInhibitor::InhibitReason::kRequestingAvailableProfiles, + base::BindOnce( + &CellularESimProfileHandler::OnInhibitedForRequestAvailableProfiles, + weak_ptr_factory_.GetWeakPtr(), euicc_path, std::move(info))); +} + void CellularESimProfileHandler::PerformRefreshProfileList( const dbus::ObjectPath& euicc_path, bool restore_slot, @@ -66,9 +93,10 @@ cellular_inhibitor_->InhibitCellularScanning( CellularInhibitor::InhibitReason::kRefreshingProfileList, - base::BindOnce(&CellularESimProfileHandler::OnInhibited, - weak_ptr_factory_.GetWeakPtr(), euicc_path, restore_slot, - std::move(callback))); + base::BindOnce( + &CellularESimProfileHandler::OnInhibitedForRefreshProfileList, + weak_ptr_factory_.GetWeakPtr(), euicc_path, restore_slot, + std::move(callback))); } void CellularESimProfileHandler::AddObserver(Observer* observer) { @@ -100,7 +128,7 @@ OnHermesPropertiesUpdated(); } -void CellularESimProfileHandler::OnInhibited( +void CellularESimProfileHandler::OnInhibitedForRefreshProfileList( const dbus::ObjectPath& euicc_path, bool restore_slot, RefreshProfilesCallback callback, @@ -164,4 +192,123 @@ kProfileRefreshCallbackDelay); } +void CellularESimProfileHandler::OnInhibitedForRequestAvailableProfiles( + const dbus::ObjectPath& euicc_path, + std::unique_ptr<RequestAvailableProfilesInfo> info, + std::unique_ptr<CellularInhibitor::InhibitLock> inhibit_lock) { + DCHECK(info); + DCHECK(info->callback); + + if (!inhibit_lock) { + // TODO(b/278135630): Emit + // Network.Cellular.ESim.SMDSScan.{SMDSType}.{ResultType}. + NET_LOG(ERROR) + << "Failed to inhibit cellular for requesting available profiles"; + std::move(info->callback) + .Run(cellular_setup::mojom::ESimOperationResult::kFailure, + std::vector<CellularESimProfile>()); + return; + } + + PerformRequestAvailableProfiles(euicc_path, std::move(info), + std::move(inhibit_lock)); +} + +void CellularESimProfileHandler::PerformRequestAvailableProfiles( + const dbus::ObjectPath& euicc_path, + std::unique_ptr<RequestAvailableProfilesInfo> info, + std::unique_ptr<CellularInhibitor::InhibitLock> inhibit_lock) { + DCHECK(info); + DCHECK(info->callback); + DCHECK(inhibit_lock); + + if (info->smds_activation_codes.empty()) { + // TODO(b/278135630): Emit + // Network.Cellular.ESim.SMDSScan.{SMDSType}.{ResultType}. + // TODO(b/278135534): Emit Network.Ash.Cellular.ESim.SMDSScan.ProfileCount. + NET_LOG(EVENT) << "Finished requesting available profiles"; + std::move(info->callback) + .Run(cellular_setup::mojom::ESimOperationResult::kSuccess, + std::move(info->profile_list)); + return; + } + + NET_LOG(EVENT) << "Requesting available profiles"; + + // Remove one SM-DS activation code from the list and use this activation code + // for the next SM-DS scan. This logic is responsible for making sure we only + // scan each activation code once, avoiding an infinite loop. + const std::string smds_activation_code = info->smds_activation_codes.back(); + info->smds_activation_codes.pop_back(); + + HermesEuiccClient::Get()->RefreshSmdxProfiles( + euicc_path, smds_activation_code, + /*restore_slot=*/true, + base::BindOnce(&CellularESimProfileHandler::OnRequestAvailableProfiles, + weak_ptr_factory_.GetWeakPtr(), euicc_path, + std::move(info), std::move(inhibit_lock))); +} + +void CellularESimProfileHandler::OnRequestAvailableProfiles( + const dbus::ObjectPath& euicc_path, + std::unique_ptr<RequestAvailableProfilesInfo> info, + std::unique_ptr<CellularInhibitor::InhibitLock> inhibit_lock, + HermesResponseStatus status, + const std::vector<dbus::ObjectPath>& profile_paths) { + DCHECK(info); + DCHECK(info->callback); + DCHECK(inhibit_lock); + + // TODO(b/278135481): Emit Network.Cellular.ESim.SMDSScan.{SMDSType}.Duration. + // TODO(b/278135630): Emit + // Network.Cellular.ESim.SMDSScan.{SMDSType}.{ResultType}. + // Each SM-DS scan will return both a result and zero or more available + // profiles. An error being returned indicates there was an issue when + // performing the scan, but since it does not invalidate the returned profiles + // we simply log the error, capture the error in our metrics, and continue. + NET_LOG(EVENT) + << "HermesEuiccClient::RefreshSmdsProfiles returned with result code " + << status; + + HermesEuiccClient::Properties* euicc_properties = + HermesEuiccClient::Get()->GetProperties(euicc_path); + DCHECK(euicc_properties); + + for (const auto& profile_path : profile_paths) { + HermesProfileClient::Properties* profile_properties = + HermesProfileClient::Get()->GetProperties(profile_path); + if (!profile_properties) { + NET_LOG(ERROR) + << "Failed to get profile properties for available profile"; + continue; + } + if (profile_properties->state().value() != + hermes::profile::State::kPending) { + NET_LOG(ERROR) << "Expected available profile to have state " + << hermes::profile::State::kPending << ", has " + << profile_properties->state().value(); + continue; + } + + NET_LOG(EVENT) << "Found available profile"; + + info->profile_list.emplace_back( + CellularESimProfile::State::kPending, profile_path, + euicc_properties->eid().value(), profile_properties->iccid().value(), + base::UTF8ToUTF16(profile_properties->name().value()), + base::UTF8ToUTF16(profile_properties->nick_name().value()), + base::UTF8ToUTF16(profile_properties->service_provider().value()), + profile_properties->activation_code().value()); + } + + // This function is provided as a callback to + // PerformRequestAvailableProfiles() to be called when an SM-DS scan + // completes. Since the activation code used in this function may not have + // been the last needed, continue the loop. When |info.smds_activation_codes| + // is empty PerformRequestAvailableProfiles() will exit this loop by invoking + // |info.callback|. + PerformRequestAvailableProfiles(euicc_path, std::move(info), + std::move(inhibit_lock)); +} + } // namespace ash
diff --git a/chromeos/ash/components/network/cellular_esim_profile_handler.h b/chromeos/ash/components/network/cellular_esim_profile_handler.h index 7678224a..ee9b162 100644 --- a/chromeos/ash/components/network/cellular_esim_profile_handler.h +++ b/chromeos/ash/components/network/cellular_esim_profile_handler.h
@@ -18,6 +18,7 @@ #include "chromeos/ash/components/dbus/hermes/hermes_profile_client.h" #include "chromeos/ash/components/network/cellular_esim_profile.h" #include "chromeos/ash/components/network/cellular_inhibitor.h" +#include "chromeos/ash/services/cellular_setup/public/mojom/esim_manager.mojom.h" #include "components/prefs/pref_service.h" class PrefService; @@ -53,6 +54,12 @@ using RefreshProfilesCallback = base::OnceCallback<void(std::unique_ptr<CellularInhibitor::InhibitLock>)>; + // Callback which returns the result of requesting available profiles and all + // available profiles that were discovered. + using RequestAvailableProfilesCallback = + base::OnceCallback<void(cellular_setup::mojom::ESimOperationResult, + std::vector<CellularESimProfile>)>; + // Refreshes the list of installed profiles from Hermes. This operation // requires the Cellular Device to be inhibited. If |inhibit_lock| is passed // by the client, it will be used; otherwise, this function will acquire one @@ -69,6 +76,14 @@ RefreshProfilesCallback callback, std::unique_ptr<CellularInhibitor::InhibitLock> inhibit_lock = nullptr); + // Requests the list of profiles that are available for installation from + // known SM-DS servers. This operation will cause the cellular device to + // become inhibited. The operation result provided to the callback indicates + // whether this function was able to successfully inhibit the cellular device. + virtual void RequestAvailableProfiles( + const dbus::ObjectPath& euicc_path, + RequestAvailableProfilesCallback callback); + // Returns a list of the known cellular eSIM profiles fetched from Hermes. // Note that this function returns cached values if an eSIM slot is not active // (e.g., if ModemManager is currently pointed to a pSIM slot). @@ -109,6 +124,26 @@ virtual void InitInternal() {} private: + // Requesting profiles available to install requires performing operations + // that must be done in serial. This struct is used to contain all of the + // information necessary to perform these operations, collect the results + // of each operation as it is completed, and to hold the callback that should + // be invoked once all of the operations have been completed. + struct RequestAvailableProfilesInfo { + RequestAvailableProfilesInfo(); + ~RequestAvailableProfilesInfo(); + + // The list of SM-DS activation codes that should be used to scan for + // available profiles. + std::vector<std::string> smds_activation_codes; + + // The list of available profiles found from scanning with activation codes + // from |smds_activation_codes|. + std::vector<CellularESimProfile> profile_list; + + RequestAvailableProfilesCallback callback; + }; + // HermesManagerClient::Observer: void OnAvailableEuiccListChanged() override; @@ -126,7 +161,7 @@ bool restore_slot, RefreshProfilesCallback callback, std::unique_ptr<CellularInhibitor::InhibitLock> inhibit_lock = nullptr); - void OnInhibited( + void OnInhibitedForRefreshProfileList( const dbus::ObjectPath& euicc_path, bool restore_slot, RefreshProfilesCallback callback, @@ -138,6 +173,20 @@ std::unique_ptr<CellularInhibitor::InhibitLock> inhibit_lock); void OnRequestInstalledProfilesResult(base::TimeTicks start_time, HermesResponseStatus status); + void OnInhibitedForRequestAvailableProfiles( + const dbus::ObjectPath& euicc_path, + std::unique_ptr<RequestAvailableProfilesInfo> info, + std::unique_ptr<CellularInhibitor::InhibitLock> inhibit_lock); + void PerformRequestAvailableProfiles( + const dbus::ObjectPath& euicc_path, + std::unique_ptr<RequestAvailableProfilesInfo> info, + std::unique_ptr<CellularInhibitor::InhibitLock> inhibit_lock); + void OnRequestAvailableProfiles( + const dbus::ObjectPath& euicc_path, + std::unique_ptr<RequestAvailableProfilesInfo> info, + std::unique_ptr<CellularInhibitor::InhibitLock> inhibit_lock, + HermesResponseStatus status, + const std::vector<dbus::ObjectPath>& profile_paths); raw_ptr<CellularInhibitor, ExperimentalAsh> cellular_inhibitor_ = nullptr;
diff --git a/chromeos/ash/components/network/cellular_esim_profile_handler_impl.cc b/chromeos/ash/components/network/cellular_esim_profile_handler_impl.cc index e7082039..ccc5870 100644 --- a/chromeos/ash/components/network/cellular_esim_profile_handler_impl.cc +++ b/chromeos/ash/components/network/cellular_esim_profile_handler_impl.cc
@@ -243,7 +243,7 @@ DCHECK(device_prefs_); std::vector<CellularESimProfile> profiles_from_hermes = - GenerateProfilesFromHermes(); + cellular_utils::GenerateProfilesFromHermes(); // Skip updating if there are profiles that haven't received ICCID updates // yet. This is required because property updates to eSIM profile objects
diff --git a/chromeos/ash/components/network/cellular_esim_profile_handler_impl_unittest.cc b/chromeos/ash/components/network/cellular_esim_profile_handler_impl_unittest.cc index 61d4bc6e..66d20b06 100644 --- a/chromeos/ash/components/network/cellular_esim_profile_handler_impl_unittest.cc +++ b/chromeos/ash/components/network/cellular_esim_profile_handler_impl_unittest.cc
@@ -20,12 +20,16 @@ #include "chromeos/ash/components/dbus/hermes/hermes_profile_client.h" #include "chromeos/ash/components/dbus/shill/fake_shill_device_client.h" #include "chromeos/ash/components/network/cellular_inhibitor.h" +#include "chromeos/ash/components/network/cellular_utils.h" #include "chromeos/ash/components/network/network_state_test_helper.h" #include "chromeos/ash/components/network/network_type_pattern.h" +#include "chromeos/ash/services/cellular_setup/public/mojom/esim_manager.mojom.h" #include "components/prefs/testing_pref_service.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/cros_system_api/dbus/shill/dbus-constants.h" +using ash::cellular_setup::mojom::ESimOperationResult; + namespace ash { namespace { @@ -36,6 +40,9 @@ const char kDisableProfileResultHistogram[] = "Network.Cellular.ESim.DisableProfile.Result"; +constexpr base::TimeDelta kInteractiveDelay = base::Seconds(30); +constexpr base::TimeDelta kInteractiveDelayHalf = kInteractiveDelay / 2; + std::string CreateTestEuiccPath(int euicc_num) { return base::StringPrintf("%s%d", kTestEuiccBasePath, euicc_num); } @@ -68,13 +75,11 @@ const CellularESimProfileHandlerImplTest&) = delete; protected: - explicit CellularESimProfileHandlerImplTest(bool enable_dbus_migration) + explicit CellularESimProfileHandlerImplTest( + const std::vector<base::test::FeatureRef>& enabled_features, + const std::vector<base::test::FeatureRef>& disabled_features) : helper_(/*use_default_devices_and_services=*/false) { - if (enable_dbus_migration) { - feature_list_.InitAndEnableFeature(ash::features::kSmdsDbusMigration); - } else { - feature_list_.InitAndDisableFeature(ash::features::kSmdsDbusMigration); - } + feature_list_.InitWithFeatures(enabled_features, disabled_features); } ~CellularESimProfileHandlerImplTest() override = default; @@ -161,6 +166,11 @@ return path; } + void SetErrorForNextSetPropertyAttempt(const std::string& error_name) { + helper_.device_test()->SetErrorForNextSetPropertyAttempt(error_name); + base::RunLoop().RunUntilIdle(); + } + std::vector<CellularESimProfile> GetESimProfiles() { return handler_->GetESimProfiles(); } @@ -194,6 +204,10 @@ return inhibit_lock; } + absl::optional<CellularInhibitor::InhibitReason> GetInhibitReason() { + return cellular_inhibitor_.GetInhibitReason(); + } + void QueueEuiccErrorStatus() { helper_.hermes_euicc_test()->QueueHermesErrorStatus( HermesResponseStatus::kErrorUnknown); @@ -208,6 +222,13 @@ std::move(inhibit_lock)); } + void RequestAvailableProfiles( + int euicc_num, + CellularESimProfileHandler::RequestAvailableProfilesCallback callback) { + handler_->RequestAvailableProfiles( + dbus::ObjectPath(CreateTestEuiccPath(euicc_num)), std::move(callback)); + } + bool GetLastRefreshProfilesRestoreSlotArg() { return helper_.hermes_euicc_test()->GetLastRefreshProfilesRestoreSlotArg(); } @@ -236,6 +257,8 @@ task_environment_.FastForwardBy(kProfileRefreshCallbackDelay); } + base::test::TaskEnvironment* task_environment() { return &task_environment_; } + private: base::test::ScopedFeatureList feature_list_; base::test::TaskEnvironment task_environment_{ @@ -261,7 +284,8 @@ protected: CellularESimProfileHandlerImplTest_DBusMigrationDisabled() : CellularESimProfileHandlerImplTest( - /*enable_dbus_migration=*/false) {} + /*enabled_features=*/{}, + /*disabled_features=*/{ash::features::kSmdsDbusMigration}) {} ~CellularESimProfileHandlerImplTest_DBusMigrationDisabled() override = default; }; @@ -277,10 +301,49 @@ protected: CellularESimProfileHandlerImplTest_DBusMigrationEnabled() : CellularESimProfileHandlerImplTest( - /*enable_dbus_migration=*/true) {} + /*enabled_features=*/{ash::features::kSmdsDbusMigration}, + /*disabled_features=*/{}) {} ~CellularESimProfileHandlerImplTest_DBusMigrationEnabled() override = default; }; +class CellularESimProfileHandlerImplTest_SmdsSupportEnabled + : public CellularESimProfileHandlerImplTest { + public: + CellularESimProfileHandlerImplTest_SmdsSupportEnabled( + const CellularESimProfileHandlerImplTest_SmdsSupportEnabled&) = delete; + CellularESimProfileHandlerImplTest_SmdsSupportEnabled& operator=( + const CellularESimProfileHandlerImplTest_SmdsSupportEnabled&) = delete; + + protected: + CellularESimProfileHandlerImplTest_SmdsSupportEnabled() + : CellularESimProfileHandlerImplTest( + /*enabled_features=*/{ash::features::kSmdsDbusMigration, + ash::features::kSmdsSupport}, + /*disabled_features=*/{}) {} + ~CellularESimProfileHandlerImplTest_SmdsSupportEnabled() override = default; +}; + +class CellularESimProfileHandlerImplTest_SmdsSupportAndStorkEnabled + : public CellularESimProfileHandlerImplTest { + public: + CellularESimProfileHandlerImplTest_SmdsSupportAndStorkEnabled( + const CellularESimProfileHandlerImplTest_SmdsSupportAndStorkEnabled&) = + delete; + CellularESimProfileHandlerImplTest_SmdsSupportAndStorkEnabled& operator=( + const CellularESimProfileHandlerImplTest_SmdsSupportAndStorkEnabled&) = + delete; + + protected: + CellularESimProfileHandlerImplTest_SmdsSupportAndStorkEnabled() + : CellularESimProfileHandlerImplTest( + /*enabled_features=*/{ash::features::kSmdsDbusMigration, + ash::features::kSmdsSupport, + ash::features::kUseStorkSmdsServerAddress}, + /*disabled_features=*/{}) {} + ~CellularESimProfileHandlerImplTest_SmdsSupportAndStorkEnabled() override = + default; +}; + TEST_F(CellularESimProfileHandlerImplTest_DBusMigrationDisabled, NoEuicc) { AddCellularDevice(); // No EUICCs exist, so no profiles should exist. @@ -1004,4 +1067,146 @@ HermesResponseStatus::kSuccess, /*expected_count=*/1); } + +TEST_F(CellularESimProfileHandlerImplTest_SmdsSupportEnabled, + RequestAvailableProfiles) { + AddCellularDevice(); + AddEuicc(/*euicc_num=*/1); + Init(); + SetDevicePrefs(); + + HermesEuiccClient::Get()->GetTestInterface()->SetInteractiveDelay( + kInteractiveDelay); + + absl::optional<ESimOperationResult> result; + absl::optional<std::vector<CellularESimProfile>> profile_list; + + base::RunLoop run_loop; + RequestAvailableProfiles( + /*euicc_num=*/1, + base::BindLambdaForTesting( + [&](ESimOperationResult returned_result, + std::vector<CellularESimProfile> returned_profile_list) { + result = returned_result; + profile_list = returned_profile_list; + run_loop.Quit(); + })); + + task_environment()->FastForwardBy(kInteractiveDelayHalf); + + const absl::optional<CellularInhibitor::InhibitReason> inhibit_reason = + GetInhibitReason(); + ASSERT_TRUE(inhibit_reason); + EXPECT_EQ(inhibit_reason, + CellularInhibitor::InhibitReason::kRequestingAvailableProfiles); + + EXPECT_FALSE(profile_list.has_value()); + + task_environment()->FastForwardBy(kInteractiveDelayHalf); + run_loop.Run(); + + EXPECT_FALSE(GetInhibitReason()); + ASSERT_TRUE(result.has_value()); + EXPECT_EQ(*result, cellular_setup::mojom::ESimOperationResult::kSuccess); + + const std::vector<std::string> smds_activation_codes = + cellular_utils::GetSmdsActivationCodes(); + + ASSERT_TRUE(profile_list.has_value()); + EXPECT_EQ(smds_activation_codes.size(), profile_list->size()); + + for (const auto& profile : *profile_list) { + EXPECT_NE(std::find(smds_activation_codes.begin(), + smds_activation_codes.end(), profile.activation_code()), + smds_activation_codes.end()); + } +} + +TEST_F(CellularESimProfileHandlerImplTest_SmdsSupportEnabled, + RequestAvailableProfiles_FailToInhibit) { + AddCellularDevice(); + AddEuicc(/*euicc_num=*/1); + Init(); + SetDevicePrefs(); + + // The cellular device is inhibited by setting a device property. Simulate a + // failure to inhibit by making the next attempt to set a property fail. + SetErrorForNextSetPropertyAttempt("error_name"); + + absl::optional<ESimOperationResult> result; + absl::optional<std::vector<CellularESimProfile>> profile_list; + + { + base::RunLoop run_loop; + RequestAvailableProfiles( + /*euicc_num=*/1, + base::BindLambdaForTesting( + [&](ESimOperationResult returned_result, + std::vector<CellularESimProfile> returned_profile_list) { + result = returned_result; + profile_list = returned_profile_list; + run_loop.Quit(); + })); + run_loop.Run(); + } + + ASSERT_TRUE(result.has_value()); + EXPECT_EQ(*result, cellular_setup::mojom::ESimOperationResult::kFailure); + + ASSERT_TRUE(profile_list.has_value()); + EXPECT_TRUE(profile_list->empty()); + + { + base::RunLoop run_loop; + RequestAvailableProfiles( + /*euicc_num=*/1, + base::BindLambdaForTesting( + [&](ESimOperationResult returned_result, + std::vector<CellularESimProfile> returned_profile_list) { + result = returned_result; + profile_list = returned_profile_list; + run_loop.Quit(); + })); + run_loop.Run(); + } + + EXPECT_EQ(result, cellular_setup::mojom::ESimOperationResult::kSuccess); + EXPECT_FALSE(profile_list->empty()); +} + +TEST_F(CellularESimProfileHandlerImplTest_SmdsSupportAndStorkEnabled, + RequestAvailableProfiles_Stork) { + AddCellularDevice(); + AddEuicc(/*euicc_num=*/1); + Init(); + SetDevicePrefs(); + + absl::optional<ESimOperationResult> result; + absl::optional<std::vector<CellularESimProfile>> profile_list; + + base::RunLoop run_loop; + RequestAvailableProfiles( + /*euicc_num=*/1, + base::BindLambdaForTesting( + [&](ESimOperationResult returned_result, + std::vector<CellularESimProfile> returned_profile_list) { + result = returned_result; + profile_list = returned_profile_list; + run_loop.Quit(); + })); + run_loop.Run(); + + ASSERT_TRUE(result.has_value()); + EXPECT_EQ(*result, cellular_setup::mojom::ESimOperationResult::kSuccess); + + const std::vector<std::string> smds_activation_codes = + cellular_utils::GetSmdsActivationCodes(); + + ASSERT_TRUE(profile_list.has_value()); + ASSERT_EQ(1u, smds_activation_codes.size()); + ASSERT_EQ(smds_activation_codes.size(), profile_list->size()); + EXPECT_EQ(smds_activation_codes.front(), + profile_list->front().activation_code()); +} + } // namespace ash
diff --git a/chromeos/ash/components/network/cellular_inhibitor.cc b/chromeos/ash/components/network/cellular_inhibitor.cc index e58c913..5936c0f 100644 --- a/chromeos/ash/components/network/cellular_inhibitor.cc +++ b/chromeos/ash/components/network/cellular_inhibitor.cc
@@ -380,6 +380,9 @@ case CellularInhibitor::InhibitReason::kDisablingProfile: stream << "[Disabling profile]"; break; + case CellularInhibitor::InhibitReason::kRequestingAvailableProfiles: + stream << "[Requesting available profiles]"; + break; } return stream; }
diff --git a/chromeos/ash/components/network/cellular_inhibitor.h b/chromeos/ash/components/network/cellular_inhibitor.h index dd87b89..6a73b92 100644 --- a/chromeos/ash/components/network/cellular_inhibitor.h +++ b/chromeos/ash/components/network/cellular_inhibitor.h
@@ -75,6 +75,7 @@ kRefreshingProfileList, kResettingEuiccMemory, kDisablingProfile, + kRequestingAvailableProfiles, }; friend std::ostream& operator<<(std::ostream& stream, const InhibitReason& state);
diff --git a/chromeos/ash/components/network/cellular_policy_handler.cc b/chromeos/ash/components/network/cellular_policy_handler.cc index afcd4e4..35c6ba9 100644 --- a/chromeos/ash/components/network/cellular_policy_handler.cc +++ b/chromeos/ash/components/network/cellular_policy_handler.cc
@@ -153,7 +153,8 @@ return; } - absl::optional<dbus::ObjectPath> euicc_path = GetCurrentEuiccPath(); + absl::optional<dbus::ObjectPath> euicc_path = + cellular_utils::GetCurrentEuiccPath(); if (!euicc_path) { // Hermes may not be ready and available euicc list is empty. Wait for // AvailableEuiccListChanged notification to continue with installation.
diff --git a/chromeos/ash/components/network/cellular_utils.cc b/chromeos/ash/components/network/cellular_utils.cc index 5a76b47..937da16 100644 --- a/chromeos/ash/components/network/cellular_utils.cc +++ b/chromeos/ash/components/network/cellular_utils.cc
@@ -21,8 +21,15 @@ namespace { +// The activation code for the GSM Association SM-DS server. +constexpr char kSmdsGsma[] = "1$lpa.ds.gsma.com$"; +// The activation code for the Stork SM-DS server. +constexpr char kSmdsStork[] = "1$prod.smds.rsp.goog$"; + const char kNonShillCellularNetworkPathPrefix[] = "/non-shill-cellular/"; +} // namespace + base::flat_set<dbus::ObjectPath> GetProfilePathsFromEuicc( HermesEuiccClient::Properties* euicc_properties) { base::flat_set<dbus::ObjectPath> profile_paths; @@ -99,7 +106,7 @@ return esim_slot_to_eid; } -} // namespace +namespace cellular_utils { std::vector<CellularESimProfile> GenerateProfilesFromHermes() { std::vector<CellularESimProfile> profiles; @@ -176,4 +183,12 @@ return use_second_euicc ? euicc_paths[1] : euicc_paths[0]; } +std::vector<std::string> GetSmdsActivationCodes() { + if (features::IsUseStorkSmdsServerAddressEnabled()) { + return {kSmdsStork}; + } + return {kSmdsGsma}; +} + +} // namespace cellular_utils } // namespace ash
diff --git a/chromeos/ash/components/network/cellular_utils.h b/chromeos/ash/components/network/cellular_utils.h index 88e81f24..48ab230 100644 --- a/chromeos/ash/components/network/cellular_utils.h +++ b/chromeos/ash/components/network/cellular_utils.h
@@ -18,6 +18,8 @@ class CellularESimProfile; +namespace cellular_utils { + // Generates a list of CellularESimProfile objects for all Hermes esim profile // objects available through its dbus clients. Note that this function returns // an empty array if CellularESimProfileHandler::RefreshProfileList has not @@ -50,6 +52,12 @@ COMPONENT_EXPORT(CHROMEOS_NETWORK) absl::optional<dbus::ObjectPath> GetCurrentEuiccPath(); +// Returns the activation codes that should be used to scan for profiles that +// are available for installation. +COMPONENT_EXPORT(CHROMEOS_NETWORK) +std::vector<std::string> GetSmdsActivationCodes(); + +} // namespace cellular_utils } // namespace ash #endif // CHROMEOS_ASH_COMPONENTS_NETWORK_CELLULAR_UTILS_H_
diff --git a/chromeos/ash/components/network/cellular_utils_unittest.cc b/chromeos/ash/components/network/cellular_utils_unittest.cc index 2edb8238..c19ae9e 100644 --- a/chromeos/ash/components/network/cellular_utils_unittest.cc +++ b/chromeos/ash/components/network/cellular_utils_unittest.cc
@@ -45,19 +45,19 @@ base::test::ScopedFeatureList feature_list; feature_list.InitAndEnableFeature(features::kCellularUseSecondEuicc); HermesManagerClient::Get()->GetTestInterface()->ClearEuiccs(); - EXPECT_FALSE(GetCurrentEuiccPath()); + EXPECT_FALSE(cellular_utils::GetCurrentEuiccPath()); // Verify that use-second-euicc flag should be ignored when Hermes only // exposes only one Euicc. HermesManagerClient::Get()->GetTestInterface()->AddEuicc( dbus::ObjectPath(kTestEuiccPath), kTestEid, /*is_active=*/true, /*physical_slot=*/0); - EXPECT_EQ(kTestEuiccPath, GetCurrentEuiccPath()->value()); + EXPECT_EQ(kTestEuiccPath, cellular_utils::GetCurrentEuiccPath()->value()); // Verify that use-second-euicc flag should take effect when Hermes exposes // two Euicc(s). HermesManagerClient::Get()->GetTestInterface()->AddEuicc( dbus::ObjectPath(kTestEuiccPath2), kTestEid2, /*is_active=*/false, /*physical_slot=*/1); - EXPECT_EQ(kTestEuiccPath2, GetCurrentEuiccPath()->value()); + EXPECT_EQ(kTestEuiccPath2, cellular_utils::GetCurrentEuiccPath()->value()); } } // namespace ash
diff --git a/chromeos/ash/components/network/fake_stub_cellular_networks_provider.cc b/chromeos/ash/components/network/fake_stub_cellular_networks_provider.cc index 53c8c68a4..1e7058c 100644 --- a/chromeos/ash/components/network/fake_stub_cellular_networks_provider.cc +++ b/chromeos/ash/components/network/fake_stub_cellular_networks_provider.cc
@@ -95,7 +95,7 @@ if (!base::Contains(stub_iccid_and_eid_pairs_, iccid, &IccidEidPair::first)) return false; - *service_path_out = GenerateStubCellularServicePath(iccid); + *service_path_out = cellular_utils::GenerateStubCellularServicePath(iccid); *guid_out = GetGuidForStubIccid(iccid); return true; }
diff --git a/chromeos/ash/components/network/network_connection_handler_impl.cc b/chromeos/ash/components/network/network_connection_handler_impl.cc index bfbbe4d..3f3e04bc 100644 --- a/chromeos/ash/components/network/network_connection_handler_impl.cc +++ b/chromeos/ash/components/network/network_connection_handler_impl.cc
@@ -372,7 +372,8 @@ // If the SIM is active and the active SIM is locked, we are attempting to // connect to a locked SIM. A SIM must be unlocked before a connection can // succeed. - if (cellular_device && IsSimPrimary(network->iccid(), cellular_device) && + if (cellular_device && + cellular_utils::IsSimPrimary(network->iccid(), cellular_device) && cellular_device->IsSimLocked()) { InvokeConnectErrorCallback(service_path, std::move(error_callback), kErrorSimLocked);
diff --git a/chromeos/ash/components/network/network_connection_handler_impl_unittest.cc b/chromeos/ash/components/network/network_connection_handler_impl_unittest.cc index 09582ae..ad838a2 100644 --- a/chromeos/ash/components/network/network_connection_handler_impl_unittest.cc +++ b/chromeos/ash/components/network/network_connection_handler_impl_unittest.cc
@@ -1205,7 +1205,7 @@ // Connect to a stub path. Internally, this should wait until a connectable // Shill-backed service is created. - Connect(GenerateStubCellularServicePath(kTestIccid)); + Connect(cellular_utils::GenerateStubCellularServicePath(kTestIccid)); // Now, create a non-stub service and make it connectable. AddNonConnectableESimService(); @@ -1217,14 +1217,15 @@ // A connection was requested to the stub service path, not the actual one. EXPECT_TRUE(network_connection_observer()->GetRequested( - GenerateStubCellularServicePath(kTestIccid))); + cellular_utils::GenerateStubCellularServicePath(kTestIccid))); EXPECT_FALSE( network_connection_observer()->GetRequested(kTestCellularServicePath)); // However, the connection success was part of the actual service path, not // the stub one. - EXPECT_EQ(std::string(), network_connection_observer()->GetResult( - GenerateStubCellularServicePath(kTestIccid))); + EXPECT_EQ(std::string(), + network_connection_observer()->GetResult( + cellular_utils::GenerateStubCellularServicePath(kTestIccid))); EXPECT_EQ(kSuccessResult, network_connection_observer()->GetResult(kTestCellularServicePath)); } @@ -1285,7 +1286,7 @@ // Connect to a stub path. Internally, this should wait until a connectable // Shill-backed service is created. - Connect(GenerateStubCellularServicePath(kTestIccid)); + Connect(cellular_utils::GenerateStubCellularServicePath(kTestIccid)); // Now, Create a shill backed service for the same network. ShillManagerClient::Get()->GetTestInterface()->SetInteractiveDelay(
diff --git a/chromeos/ash/components/network/network_state.cc b/chromeos/ash/components/network/network_state.cc index 44cbf72..e584c90 100644 --- a/chromeos/ash/components/network/network_state.cc +++ b/chromeos/ash/components/network/network_state.cc
@@ -511,7 +511,8 @@ } bool NetworkState::IsNonShillCellularNetwork() const { - return type() == shill::kTypeCellular && IsStubCellularServicePath(path()); + return type() == shill::kTypeCellular && + cellular_utils::IsStubCellularServicePath(path()); } NetworkState::PortalState NetworkState::GetPortalState() const { @@ -672,7 +673,7 @@ const std::string& guid, bool is_managed, const std::string& cellular_device_path) { - std::string path = GenerateStubCellularServicePath(iccid); + std::string path = cellular_utils::GenerateStubCellularServicePath(iccid); auto new_state = std::make_unique<NetworkState>(path); new_state->set_type(shill::kTypeCellular); new_state->set_update_received();
diff --git a/chromeos/ash/components/network/network_state_handler_unittest.cc b/chromeos/ash/components/network/network_state_handler_unittest.cc index b6410ca..fa75b85 100644 --- a/chromeos/ash/components/network/network_state_handler_unittest.cc +++ b/chromeos/ash/components/network/network_state_handler_unittest.cc
@@ -2441,7 +2441,8 @@ EXPECT_EQ(2u, network_list.size()); EXPECT_EQ(1u, test_observer_->network_list_changed_count()); EXPECT_EQ(1u, test_observer_->service_path_transitions().size()); - EXPECT_EQ(GenerateStubCellularServicePath(kTestCellularServiceIccid2), + EXPECT_EQ(cellular_utils::GenerateStubCellularServicePath( + kTestCellularServiceIccid2), test_observer_->service_path_transitions()[0].first); EXPECT_EQ(kTestCellularServicePath2, test_observer_->service_path_transitions()[0].second);
diff --git a/chromeos/ash/components/network/stub_cellular_networks_provider.cc b/chromeos/ash/components/network/stub_cellular_networks_provider.cc index b09cb22c..8b936ebe 100644 --- a/chromeos/ash/components/network/stub_cellular_networks_provider.cc +++ b/chromeos/ash/components/network/stub_cellular_networks_provider.cc
@@ -101,7 +101,7 @@ if (iccid_eid_pair.first != iccid) continue; - *service_path_out = GenerateStubCellularServicePath(iccid); + *service_path_out = cellular_utils::GenerateStubCellularServicePath(iccid); *guid_out = GetGuidForStubIccid(iccid); return true; }
diff --git a/chromeos/ash/components/network/stub_cellular_networks_provider_unittest.cc b/chromeos/ash/components/network/stub_cellular_networks_provider_unittest.cc index 251f64e..1ee23726 100644 --- a/chromeos/ash/components/network/stub_cellular_networks_provider_unittest.cc +++ b/chromeos/ash/components/network/stub_cellular_networks_provider_unittest.cc
@@ -125,7 +125,8 @@ } EXPECT_TRUE(exists); - EXPECT_EQ(GenerateStubCellularServicePath(iccid), service_path); + EXPECT_EQ(cellular_utils::GenerateStubCellularServicePath(iccid), + service_path); } void DisableCellularTechnology() {
diff --git a/chromeos/ash/components/network/test_cellular_esim_profile_handler.cc b/chromeos/ash/components/network/test_cellular_esim_profile_handler.cc index a5f9c2d..0340e740f 100644 --- a/chromeos/ash/components/network/test_cellular_esim_profile_handler.cc +++ b/chromeos/ash/components/network/test_cellular_esim_profile_handler.cc
@@ -59,7 +59,7 @@ void TestCellularESimProfileHandler::OnHermesPropertiesUpdated() { std::vector<CellularESimProfile> new_profile_states = - GenerateProfilesFromHermes(); + cellular_utils::GenerateProfilesFromHermes(); if (new_profile_states == esim_profile_states_) return; esim_profile_states_ = new_profile_states;
diff --git a/chromeos/ash/components/osauth/impl/BUILD.gn b/chromeos/ash/components/osauth/impl/BUILD.gn index 8398dca..2a211225 100644 --- a/chromeos/ash/components/osauth/impl/BUILD.gn +++ b/chromeos/ash/components/osauth/impl/BUILD.gn
@@ -19,6 +19,10 @@ "//chromeos/ash/components/login/auth/public:authpublic", ] sources = [ + "auth_hub_impl.cc", + "auth_hub_impl.h", + "auth_hub_mode_lifecycle.cc", + "auth_hub_mode_lifecycle.h", "auth_parts_impl.cc", "auth_parts_impl.h", "auth_session_storage_impl.cc", @@ -31,12 +35,18 @@ deps = [ ":impl", "//base", + "//base/test:test_support", "//chromeos/ash/components/dbus/userdataauth", "//chromeos/ash/components/dbus/userdataauth:test_support", "//chromeos/ash/components/login/auth/public:authpublic", + "//chromeos/ash/components/osauth/test_support", "//testing/gmock", "//testing/gtest", "//third_party/abseil-cpp:absl", ] - sources = [ "auth_session_storage_impl_unittest.cc" ] + sources = [ + "auth_hub_impl_test.cc", + "auth_hub_mode_lifecycle_unittest.cc", + "auth_session_storage_impl_unittest.cc", + ] }
diff --git a/chromeos/ash/components/osauth/impl/auth_hub_impl.cc b/chromeos/ash/components/osauth/impl/auth_hub_impl.cc new file mode 100644 index 0000000..2e9dd31 --- /dev/null +++ b/chromeos/ash/components/osauth/impl/auth_hub_impl.cc
@@ -0,0 +1,41 @@ +// 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. + +#include "chromeos/ash/components/osauth/impl/auth_hub_impl.h" + +#include "base/functional/callback.h" +#include "chromeos/ash/components/osauth/public/auth_factor_engine_factory.h" +#include "chromeos/ash/components/osauth/public/auth_parts.h" + +namespace ash { + +AuthHubImpl::AuthHubImpl() { + mode_lifecycle_ = std::make_unique<AuthHubModeLifecycle>(this); +} + +AuthHubImpl::~AuthHubImpl() = default; + +void AuthHubImpl::InitializeForMode(AuthHubMode target) { + mode_lifecycle_->SwitchToMode(target); +} + +void AuthHubImpl::OnReadyForMode( + AuthHubMode mode, + AuthHubModeLifecycle::EnginesMap available_engines) { + on_initialized_listeners_.Notify(); +} + +void AuthHubImpl::OnExitedMode(AuthHubMode mode) {} + +void AuthHubImpl::OnModeShutdown() {} + +void AuthHubImpl::EnsureInitialized(base::OnceClosure on_initialized) { + if (mode_lifecycle_->IsReady()) { + std::move(on_initialized).Run(); + return; + } + on_initialized_listeners_.AddUnsafe(std::move(on_initialized)); +} + +} // namespace ash
diff --git a/chromeos/ash/components/osauth/impl/auth_hub_impl.h b/chromeos/ash/components/osauth/impl/auth_hub_impl.h new file mode 100644 index 0000000..c336fe4 --- /dev/null +++ b/chromeos/ash/components/osauth/impl/auth_hub_impl.h
@@ -0,0 +1,49 @@ +// 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 CHROMEOS_ASH_COMPONENTS_OSAUTH_IMPL_AUTH_HUB_IMPL_H_ +#define CHROMEOS_ASH_COMPONENTS_OSAUTH_IMPL_AUTH_HUB_IMPL_H_ + +#include <memory> + +#include "base/callback_list.h" +#include "base/component_export.h" +#include "base/containers/flat_map.h" +#include "base/memory/weak_ptr.h" +#include "chromeos/ash/components/osauth/impl/auth_hub_mode_lifecycle.h" +#include "chromeos/ash/components/osauth/public/auth_factor_engine.h" +#include "chromeos/ash/components/osauth/public/auth_hub.h" +#include "chromeos/ash/components/osauth/public/common_types.h" + +namespace ash { + +class COMPONENT_EXPORT(CHROMEOS_ASH_COMPONENTS_OSAUTH) AuthHubImpl + : public AuthHub, + public AuthHubModeLifecycle::Owner { + public: + explicit AuthHubImpl(); + ~AuthHubImpl() override; + + // ----- AuthHub implementation: + + // High-level lifecycle: + void InitializeForMode(AuthHubMode target) override; + void EnsureInitialized(base::OnceClosure on_initialized) override; + + // ----- AuthHubModeLifecycle implementation: + void OnReadyForMode( + AuthHubMode mode, + AuthHubModeLifecycle::EnginesMap available_engines) override; + void OnExitedMode(AuthHubMode mode) override; + void OnModeShutdown() override; + + private: + base::OnceCallbackList<void()> on_initialized_listeners_; + std::unique_ptr<AuthHubModeLifecycle> mode_lifecycle_; + base::WeakPtrFactory<AuthHubImpl> weak_factory_{this}; +}; + +} // namespace ash + +#endif // CHROMEOS_ASH_COMPONENTS_OSAUTH_IMPL_AUTH_HUB_IMPL_H_
diff --git a/chromeos/ash/components/osauth/impl/auth_hub_impl_test.cc b/chromeos/ash/components/osauth/impl/auth_hub_impl_test.cc new file mode 100644 index 0000000..fd23f6b --- /dev/null +++ b/chromeos/ash/components/osauth/impl/auth_hub_impl_test.cc
@@ -0,0 +1,78 @@ +// 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. + +#include "chromeos/ash/components/osauth/impl/auth_hub_mode_lifecycle.h" + +#include <memory> + +#include "base/functional/callback_helpers.h" +#include "base/memory/raw_ptr.h" +#include "base/test/gmock_callback_support.h" +#include "base/test/gmock_move_support.h" +#include "base/test/task_environment.h" +#include "base/test/test_future.h" +#include "chromeos/ash/components/osauth/impl/auth_hub_impl.h" +#include "chromeos/ash/components/osauth/impl/auth_parts_impl.h" +#include "chromeos/ash/components/osauth/public/auth_hub.h" +#include "chromeos/ash/components/osauth/test_support/mock_auth_factor_engine.h" +#include "chromeos/ash/components/osauth/test_support/mock_auth_factor_engine_factory.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace ash { + +constexpr AshAuthFactor kOneFactor = AshAuthFactor::kGaiaPassword; + +using base::test::RunOnceCallback; +using testing::_; +using testing::ByMove; +using testing::Return; +using testing::StrictMock; + +class AuthHubTestMode : public ::testing::Test { + protected: + AuthHubTestMode() { + parts_ = AuthPartsImpl::CreateTestInstance(); + parts_->SetAuthHub(std::make_unique<AuthHubImpl>()); + + auto factory = std::make_unique<StrictMock<MockAuthFactorEngineFactory>>(); + auto engine = std::make_unique<StrictMock<MockAuthFactorEngine>>(); + + engine_ = engine.get(); + + EXPECT_CALL(*factory, GetFactor()).WillRepeatedly(Return(kOneFactor)); + EXPECT_CALL(*engine, GetFactor()).WillRepeatedly(Return(kOneFactor)); + EXPECT_CALL(*factory, CreateEngine(_)) + .WillOnce(Return(ByMove(std::move(engine)))); + + parts_->RegisterEngineFactory(std::move(factory)); + } + + base::test::TaskEnvironment task_environment_{ + base::test::TaskEnvironment::TimeSource::MOCK_TIME}; + + std::unique_ptr<AuthPartsImpl> parts_; + + base::raw_ptr<MockAuthFactorEngine> engine_; +}; + +TEST_F(AuthHubTestMode, CheckEnsureInitialized) { + base::test::TestFuture<void> init_future; + + AuthHub::Get()->EnsureInitialized(init_future.GetCallback()); + + AuthFactorEngine::CommonInitCallback init_callback; + EXPECT_CALL(*engine_, InitializeCommon(_)) + .WillOnce(MoveArg<0>(&init_callback)); + + AuthHub::Get()->InitializeForMode(AuthHubMode::kLoginScreen); + + EXPECT_FALSE(init_future.IsReady()); + + std::move(init_callback).Run(kOneFactor); + + EXPECT_TRUE(init_future.IsReady()); +} + +} // namespace ash
diff --git a/chromeos/ash/components/osauth/impl/auth_hub_mode_lifecycle.cc b/chromeos/ash/components/osauth/impl/auth_hub_mode_lifecycle.cc new file mode 100644 index 0000000..29420025 --- /dev/null +++ b/chromeos/ash/components/osauth/impl/auth_hub_mode_lifecycle.cc
@@ -0,0 +1,266 @@ +// 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. + +#include "chromeos/ash/components/osauth/impl/auth_hub_mode_lifecycle.h" + +#include "base/functional/callback.h" +#include "base/logging.h" +#include "base/ranges/algorithm.h" +#include "base/time/time.h" +#include "chromeos/ash/components/osauth/public/auth_factor_engine.h" +#include "chromeos/ash/components/osauth/public/auth_factor_engine_factory.h" +#include "chromeos/ash/components/osauth/public/auth_parts.h" + +namespace ash { +namespace { + +#if !defined(NDEBUG) +constexpr base::TimeDelta kWatchdogTimeout = base::Seconds(5); +#else +constexpr base::TimeDelta kWatchdogTimeout = base::Seconds(10); +#endif + +enum class EngineStatus { + kStarting, + kStarted, + kFailed, + kShuttingDown, + kStopped +}; + +} // namespace + +struct AuthHubModeLifecycle::EngineState { + std::unique_ptr<AuthFactorEngine> engine; + EngineStatus status; +}; + +AuthHubModeLifecycle::AuthHubModeLifecycle(AuthHubModeLifecycle::Owner* owner) + : owner_(owner) {} + +AuthHubModeLifecycle::~AuthHubModeLifecycle() = default; + +void AuthHubModeLifecycle::SwitchToMode(AuthHubMode target) { + CHECK_NE(target, AuthHubMode::kNone); + SwitchToModeImpl(target); +} + +void AuthHubModeLifecycle::Shutdown() { + SwitchToModeImpl(AuthHubMode::kNone); +} + +void AuthHubModeLifecycle::SwitchToModeImpl(AuthHubMode target) { + switch (stage_) { + case Stage::kUninitialized: + CHECK_EQ(mode_, AuthHubMode::kNone); + target_mode_ = target; + initializing_for_mode_ = target_mode_; + InitializeEnginesForMode(); + break; + case Stage::kStarted: + CHECK_NE(mode_, AuthHubMode::kNone); + if (target != mode_) { + target_mode_ = target; + stage_ = Stage::kShuttingDownServices; + ShutDownEngines(); + } else { + LOG(WARNING) << "Multiple initialization to " << mode_; + } + return; + case Stage::kStartingServices: + // Set up new target mode, but do not set initializing_for_mode_, + // it would trigger re-initialization. + target_mode_ = target; + break; + case Stage::kShuttingDownServices: + // Just update the target mode. + target_mode_ = target; + return; + } +} + +void AuthHubModeLifecycle::InitializeEnginesForMode() { + CHECK(engines_.empty()); + CHECK_NE(target_mode_, AuthHubMode::kNone); + + for (const auto& factory : AuthParts::Get()->GetEngineFactories()) { + auto engine = factory->CreateEngine(target_mode_); + if (engine) { + AshAuthFactor factor = factory->GetFactor(); + engines_[factor].engine = std::move(engine); + engines_[factor].status = EngineStatus::kStarting; + } + } + + stage_ = Stage::kStartingServices; + + watchdog_.Stop(); + watchdog_.Start( + FROM_HERE, kWatchdogTimeout, + base::BindOnce(&AuthHubModeLifecycle::OnInitializationWatchdog, + weak_factory_.GetWeakPtr())); + + // TODO(b/277929602): metrics on initialization time. + for (const auto& engine_state : engines_) { + engine_state.second.engine->InitializeCommon( + base::BindOnce(&AuthHubModeLifecycle::OnAuthEngineInitialized, + weak_factory_.GetWeakPtr())); + } +} + +void AuthHubModeLifecycle::OnAuthEngineInitialized(AshAuthFactor factor) { + CHECK_EQ(stage_, Stage::kStartingServices); + engines_[factor].status = EngineStatus::kStarted; + CheckInitializationStatus(); +} + +void AuthHubModeLifecycle::OnInitializationWatchdog() { + CHECK_EQ(stage_, Stage::kStartingServices); + LOG(ERROR) << "Initialization watchdog triggered"; + // Invalidate all initialization callbacks: + weak_factory_.InvalidateWeakPtrs(); + for (auto& engine_state : engines_) { + if (engine_state.second.status == EngineStatus::kStarting) { + engine_state.second.status = EngineStatus::kFailed; + LOG(ERROR) << "Factor " << static_cast<int>(engine_state.first) + << " did not initialize in time"; + engine_state.second.engine->InitializationTimedOut(); + } + } + CheckInitializationStatus(); +} + +void AuthHubModeLifecycle::CheckInitializationStatus() { + bool all_initialized = true; + for (const auto& engine_state : engines_) { + switch (engine_state.second.status) { + case EngineStatus::kStarting: + all_initialized = false; + break; + case EngineStatus::kStarted: + case EngineStatus::kFailed: + break; + case EngineStatus::kShuttingDown: + case EngineStatus::kStopped: + LOG(FATAL) << "Engine " << static_cast<int>(engine_state.first) + << " is in invalid state " + << static_cast<int>(engine_state.second.status); + } + } + if (all_initialized) { + watchdog_.Stop(); + + if (target_mode_ != initializing_for_mode_) { + // Trigger shutdown immediately; after shutdown is completed, + // `CheckShutdownStatus` will trigger re-initialization to target_mode_. + stage_ = Stage::kShuttingDownServices; + ShutDownEngines(); + return; + } + + initializing_for_mode_ = AuthHubMode::kNone; + mode_ = target_mode_; + stage_ = Stage::kStarted; + + owner_->OnReadyForMode(mode_, GetAvailableEngines()); + } +} + +void AuthHubModeLifecycle::ShutDownEngines() { + CHECK_EQ(stage_, Stage::kShuttingDownServices); + for (auto& engine_state : engines_) { + engine_state.second.status = EngineStatus::kShuttingDown; + } + + watchdog_.Stop(); + watchdog_.Start(FROM_HERE, kWatchdogTimeout, + base::BindOnce(&AuthHubModeLifecycle::OnShutdownWatchdog, + weak_factory_.GetWeakPtr())); + + // TODO(b/277929602): metrics on shutdown time. + for (const auto& engine_state : engines_) { + engine_state.second.engine->ShutdownCommon( + base::BindOnce(&AuthHubModeLifecycle::OnAuthEngineShutdown, + weak_factory_.GetWeakPtr())); + } +} + +void AuthHubModeLifecycle::OnAuthEngineShutdown(AshAuthFactor factor) { + CHECK_EQ(stage_, Stage::kShuttingDownServices); + + engines_[factor].status = EngineStatus::kStopped; + + CheckShutdownStatus(); +} + +void AuthHubModeLifecycle::OnShutdownWatchdog() { + CHECK_EQ(stage_, Stage::kShuttingDownServices); + LOG(ERROR) << "Shutdown watchdog triggered"; + // Invalidate all remaining shutdown callbacks: + weak_factory_.InvalidateWeakPtrs(); + + for (auto& engine_state : engines_) { + if (engine_state.second.status == EngineStatus::kShuttingDown) { + engine_state.second.status = EngineStatus::kFailed; + LOG(ERROR) << "Factor " << static_cast<int>(engine_state.first) + << " did not shut down in time"; + engine_state.second.engine->ShutdownTimedOut(); + } + } + CheckShutdownStatus(); +} + +void AuthHubModeLifecycle::CheckShutdownStatus() { + CHECK_EQ(stage_, Stage::kShuttingDownServices); + + bool all_stopped = true; + for (const auto& engine_state : engines_) { + switch (engine_state.second.status) { + case EngineStatus::kShuttingDown: + all_stopped = false; + break; + case EngineStatus::kStopped: + case EngineStatus::kFailed: + break; + case EngineStatus::kStarting: + case EngineStatus::kStarted: + LOG(FATAL) << "Engine " << static_cast<int>(engine_state.first) + << " is in invalid state " + << static_cast<int>(engine_state.second.status); + } + } + + if (all_stopped) { + watchdog_.Stop(); + engines_.clear(); + if (mode_ != AuthHubMode::kNone) { + owner_->OnExitedMode(mode_); + } + mode_ = AuthHubMode::kNone; + stage_ = Stage::kUninitialized; + if (target_mode_ != AuthHubMode::kNone) { + initializing_for_mode_ = target_mode_; + InitializeEnginesForMode(); + } else { + owner_->OnModeShutdown(); + } + } +} + +bool AuthHubModeLifecycle::IsReady() { + return stage_ == Stage::kStarted; +} + +AuthHubModeLifecycle::EnginesMap AuthHubModeLifecycle::GetAvailableEngines() { + CHECK_EQ(stage_, Stage::kStarted); + AuthHubModeLifecycle::EnginesMap result; + for (const auto& engine_state : engines_) { + if (engine_state.second.status == EngineStatus::kStarted) { + result[engine_state.first] = engine_state.second.engine.get(); + } + } + return result; +} + +} // namespace ash
diff --git a/chromeos/ash/components/osauth/impl/auth_hub_mode_lifecycle.h b/chromeos/ash/components/osauth/impl/auth_hub_mode_lifecycle.h new file mode 100644 index 0000000..3553277 --- /dev/null +++ b/chromeos/ash/components/osauth/impl/auth_hub_mode_lifecycle.h
@@ -0,0 +1,111 @@ +// 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 CHROMEOS_ASH_COMPONENTS_OSAUTH_IMPL_AUTH_HUB_MODE_LIFECYCLE_H_ +#define CHROMEOS_ASH_COMPONENTS_OSAUTH_IMPL_AUTH_HUB_MODE_LIFECYCLE_H_ + +#include "base/callback_list.h" +#include "base/containers/flat_map.h" +#include "base/memory/weak_ptr.h" +#include "base/timer/timer.h" +#include "chromeos/ash/components/osauth/public/auth_factor_engine.h" +#include "chromeos/ash/components/osauth/public/common_types.h" + +namespace ash { + +// This class manages outer lifecycle of the auth hub. +// Outer lifecycle includes switching between AuthHub modes, and usually +// would use the following route: +// `kNone` -> `kLoginScreen` -> `kInSession` -> `kNone`, but there are +// two notable exceptions: +// * after in-session crash AuthHub would go `kNone` -> `kInSession` +// * Until ChromeOS multi-profile is made obsolete by Lacros +// AuthHub would need to support `kInSession`->`kLoginScreen`->`kInSession` +// when showing/hiding "Add user" screen. +// Each mode lifecycle includes: +// * Using `AuthFactorEngineFactory`-ies to create `AuthFactorEngine`s; +// * Calling `InitializeCommon(...)` for all engines and waiting for them to +// complete; +// * Running in given mode (outside the scope of this class) +// * Calling `ShutdownCommon(...)` for all engines and waiting for them to +// complete; +// * Destroying all engine instances; +// * Switching to another mode if necessary. +class COMPONENT_EXPORT(CHROMEOS_ASH_COMPONENTS_OSAUTH) AuthHubModeLifecycle { + public: + using EnginesMap = + base::flat_map<AshAuthFactor, base::raw_ptr<AuthFactorEngine>>; + + // Interface to interact with owning AuthHub: + class Owner { + public: + virtual void OnReadyForMode(AuthHubMode mode, + EnginesMap available_engines) = 0; + virtual void OnExitedMode(AuthHubMode mode) = 0; + virtual void OnModeShutdown() = 0; + virtual ~Owner() = default; + }; + + explicit AuthHubModeLifecycle(Owner* owner); + ~AuthHubModeLifecycle(); + + bool IsReady(); + EnginesMap GetAvailableEngines(); + + void SwitchToMode(AuthHubMode mode); + void Shutdown(); + + private: + enum class Stage { + kUninitialized, + kStartingServices, + kStarted, + kShuttingDownServices, + }; + + struct EngineState; + + // Starts initialization sequence, or updates `target_mode_`, if stage is not + // `kUninitialized`, triggering `ShutDownEngines` if necessary. + void SwitchToModeImpl(AuthHubMode mode); + + // Start initialization sequence. + void InitializeEnginesForMode(); + // Called for each auth factor, would trigger `CheckInitializationStatus`. + void OnAuthEngineInitialized(AshAuthFactor factor); + // Ensures that shutdown sequence would eventually finish, triggers + // `CheckInitializationStatus`. + void OnInitializationWatchdog(); + // Checks if initialization sequence is completed, notifies `owner_`. + // If there is a new `target_mode_`, would trigger `ShutDownEngines` without + // notifying `owner_`. + void CheckInitializationStatus(); + + // Starts shutdown sequence. + void ShutDownEngines(); + // Called for each auth factor, would trigger `CheckShutdownStatus`. + void OnAuthEngineShutdown(AshAuthFactor factor); + // Ensures that shutdown sequence would eventually finish, triggers + // `CheckShutdownStatus`. + void OnShutdownWatchdog(); + // Checks if shutdown sequence is completed, notifies `owner_`. + // If there is a new `target_mode_`, would trigger `InitializeEnginesForMode`. + void CheckShutdownStatus(); + + AuthHubMode mode_ = kNone; + AuthHubMode initializing_for_mode_ = kNone; + AuthHubMode target_mode_ = kNone; + + Stage stage_ = Stage::kUninitialized; + + base::flat_map<AshAuthFactor, EngineState> engines_; + + base::OneShotTimer watchdog_; + base::raw_ptr<Owner> owner_; + base::WeakPtrFactory<AuthHubModeLifecycle> weak_factory_{this}; +}; + +} // namespace ash + +#endif // CHROMEOS_ASH_COMPONENTS_OSAUTH_IMPL_AUTH_HUB_MODE_LIFECYCLE_H_
diff --git a/chromeos/ash/components/osauth/impl/auth_hub_mode_lifecycle_unittest.cc b/chromeos/ash/components/osauth/impl/auth_hub_mode_lifecycle_unittest.cc new file mode 100644 index 0000000..b9cabc63 --- /dev/null +++ b/chromeos/ash/components/osauth/impl/auth_hub_mode_lifecycle_unittest.cc
@@ -0,0 +1,329 @@ +// 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. + +#include "chromeos/ash/components/osauth/impl/auth_hub_mode_lifecycle.h" + +#include <memory> + +#include "base/functional/callback_helpers.h" +#include "base/memory/raw_ptr.h" +#include "base/test/gmock_callback_support.h" +#include "base/test/gmock_move_support.h" +#include "base/test/task_environment.h" +#include "base/test/test_future.h" +#include "chromeos/ash/components/osauth/impl/auth_hub_impl.h" +#include "chromeos/ash/components/osauth/impl/auth_hub_mode_lifecycle.h" +#include "chromeos/ash/components/osauth/impl/auth_parts_impl.h" +#include "chromeos/ash/components/osauth/public/auth_hub.h" +#include "chromeos/ash/components/osauth/test_support/mock_auth_factor_engine.h" +#include "chromeos/ash/components/osauth/test_support/mock_auth_factor_engine_factory.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace ash { + +constexpr base::TimeDelta kLongTime = base::Minutes(1); +constexpr AshAuthFactor kOneFactor = AshAuthFactor::kGaiaPassword; +constexpr AshAuthFactor kAnotherFactor = AshAuthFactor::kLegacyPin; + +using base::test::RunOnceCallback; +using testing::_; +using testing::ByMove; +using testing::Eq; +using testing::Invoke; +using testing::Mock; +using testing::Return; +using testing::StrictMock; + +class MockModeLifecycleOwner : public AuthHubModeLifecycle::Owner { + public: + MockModeLifecycleOwner() = default; + ~MockModeLifecycleOwner() override = default; + + MOCK_METHOD(void, + OnReadyForMode, + (AuthHubMode, AuthHubModeLifecycle::EnginesMap), + (override)); + MOCK_METHOD(void, OnExitedMode, (AuthHubMode), (override)); + MOCK_METHOD(void, OnModeShutdown, (), (override)); +}; + +class AuthHubModeLifecycleTest : public ::testing::Test { + protected: + AuthHubModeLifecycleTest() { parts_ = AuthPartsImpl::CreateTestInstance(); } + + ~AuthHubModeLifecycleTest() override {} + + void SetEngineExpectations(MockAuthFactorEngine* engine, + AshAuthFactor factor, + bool auto_init) { + EXPECT_CALL(*engine, GetFactor()).WillRepeatedly(Return(factor)); + // Call or store initialization callback. + if (auto_init) { + EXPECT_CALL(*engine, InitializeCommon(_)) + .WillOnce(RunOnceCallback<0>(factor)); + } else { + EXPECT_CALL(*engine, InitializeCommon(_)) + .WillOnce( + Invoke([&, factor](AuthFactorEngine::CommonInitCallback cb) { + init_callbacks_[factor] = std::move(cb); + })); + } + } + + void ExpectLoginFactor(AshAuthFactor factor, + bool auto_init = true, + int times = 1) { + auto factory = std::make_unique<StrictMock<MockAuthFactorEngineFactory>>(); + EXPECT_CALL(*factory, GetFactor()).WillRepeatedly(Return(factor)); + EXPECT_CALL(*factory, CreateEngine(_)) + .Times(times) + .WillRepeatedly(Invoke([&, auto_init, factor](AuthHubMode mode) { + auto engine = std::make_unique<StrictMock<MockAuthFactorEngine>>(); + SetEngineExpectations(engine.get(), factor, auto_init); + engines_[factor] = engine.get(); + return engine; + })); + parts_->RegisterEngineFactory(std::move(factory)); + } + + void ExpectSessionOnlyFactor(AshAuthFactor factor, + bool auto_init = true, + int times = 1) { + auto factory = std::make_unique<StrictMock<MockAuthFactorEngineFactory>>(); + EXPECT_CALL(*factory, GetFactor()).WillRepeatedly(Return(factor)); + EXPECT_CALL(*factory, CreateEngine(Eq(AuthHubMode::kInSession))) + .Times(times) + .WillRepeatedly(Invoke([&, auto_init, factor](AuthHubMode) { + auto engine = std::make_unique<StrictMock<MockAuthFactorEngine>>(); + SetEngineExpectations(engine.get(), factor, auto_init); + engines_[factor] = engine.get(); + return engine; + })); + ON_CALL(*factory, CreateEngine(Eq(AuthHubMode::kLoginScreen))) + .WillByDefault(Invoke([&](AuthHubMode) { + delete engines_[factor]; + return std::unique_ptr<MockAuthFactorEngine>(); + })); + parts_->RegisterEngineFactory(std::move(factory)); + } + + base::test::TaskEnvironment task_environment_{ + base::test::TaskEnvironment::TimeSource::MOCK_TIME}; + + std::unique_ptr<AuthPartsImpl> parts_; + StrictMock<MockModeLifecycleOwner> owner_; + AuthHubModeLifecycle lifecycle_{&owner_}; + base::flat_map<AshAuthFactor, base::raw_ptr<MockAuthFactorEngine>> engines_; + base::flat_map<AshAuthFactor, AuthFactorEngine::CommonInitCallback> + init_callbacks_; +}; + +// Check when Owner is notified during initialization / shutdown. +TEST_F(AuthHubModeLifecycleTest, SingleFactorInitShutdown) { + ExpectLoginFactor(kOneFactor, /*auto_init=*/false); + + EXPECT_FALSE(lifecycle_.IsReady()); + lifecycle_.SwitchToMode(AuthHubMode::kLoginScreen); + + // Should not notify immediately. + EXPECT_FALSE(lifecycle_.IsReady()); + Mock::VerifyAndClearExpectations(&owner_); + + AuthHubModeLifecycle::EnginesMap engines; + EXPECT_CALL(owner_, OnReadyForMode(Eq(AuthHubMode::kLoginScreen), _)) + .WillOnce(MoveArg<1>(&engines)); + + ASSERT_TRUE(init_callbacks_.contains(kOneFactor)); + std::move(init_callbacks_[kOneFactor]).Run(kOneFactor); + + // Should be notified now. + EXPECT_TRUE(lifecycle_.IsReady()); + Mock::VerifyAndClearExpectations(&owner_); + + ASSERT_TRUE(engines.contains(kOneFactor)); + + AuthFactorEngine::ShutdownCallback callback; + EXPECT_CALL(*engines_[kOneFactor], ShutdownCommon(_)) + .WillOnce(MoveArg<0>(&callback)); + + lifecycle_.Shutdown(); + + // Should not notify immediately. + EXPECT_FALSE(lifecycle_.IsReady()); + Mock::VerifyAndClearExpectations(&owner_); + + EXPECT_CALL(owner_, OnExitedMode(Eq(AuthHubMode::kLoginScreen))); + EXPECT_CALL(owner_, OnModeShutdown()); + + std::move(callback).Run(kOneFactor); + + EXPECT_FALSE(lifecycle_.IsReady()); +} + +// Check owner notifications when shutdown is requested before all +// engines have completed initialization. +TEST_F(AuthHubModeLifecycleTest, SingleFactorShutdownEarly) { + ExpectLoginFactor(kOneFactor, /*auto_init=*/false); + + EXPECT_FALSE(lifecycle_.IsReady()); + lifecycle_.SwitchToMode(AuthHubMode::kLoginScreen); + + // Should not notify immediately. + EXPECT_FALSE(lifecycle_.IsReady()); + Mock::VerifyAndClearExpectations(&owner_); + + ASSERT_TRUE(engines_.contains(kOneFactor)); + + AuthFactorEngine::ShutdownCallback callback; + EXPECT_CALL(*engines_[kOneFactor], ShutdownCommon(_)) + .WillOnce(MoveArg<0>(&callback)); + + lifecycle_.Shutdown(); + + // Eventually engine initializes. + ASSERT_TRUE(init_callbacks_.contains(kOneFactor)); + std::move(init_callbacks_[kOneFactor]).Run(kOneFactor); + + // Should not notify immediately. + EXPECT_FALSE(lifecycle_.IsReady()); + Mock::VerifyAndClearExpectations(&owner_); + + // No OnReadyForMode / OnExitedMode. + EXPECT_CALL(owner_, OnModeShutdown()); + + ASSERT_FALSE(callback.is_null()); + std::move(callback).Run(kOneFactor); + + EXPECT_FALSE(lifecycle_.IsReady()); +} + +// Check owner notifications when initialization for another mode is requested +// before all engines have completed initialization. +TEST_F(AuthHubModeLifecycleTest, SingleFactorReInitialization) { + ExpectLoginFactor(kOneFactor, /*auto_init=*/false, /*times=*/2); + + EXPECT_FALSE(lifecycle_.IsReady()); + lifecycle_.SwitchToMode(AuthHubMode::kLoginScreen); + + // Should not notify immediately. + EXPECT_FALSE(lifecycle_.IsReady()); + Mock::VerifyAndClearExpectations(&owner_); + + ASSERT_TRUE(engines_.contains(kOneFactor)); + + AuthFactorEngine::ShutdownCallback callback; + EXPECT_CALL(*engines_[kOneFactor], ShutdownCommon(_)) + .WillOnce(MoveArg<0>(&callback)); + + lifecycle_.SwitchToMode(AuthHubMode::kInSession); + + // Eventually engine initializes. + ASSERT_TRUE(init_callbacks_.contains(kOneFactor)); + std::move(init_callbacks_[kOneFactor]).Run(kOneFactor); + init_callbacks_.erase(kOneFactor); + + // Should not notify immediately. + EXPECT_FALSE(lifecycle_.IsReady()); + Mock::VerifyAndClearExpectations(&owner_); + + ASSERT_FALSE(callback.is_null()); + std::move(callback).Run(kOneFactor); + + // Should finish shutdown and proceed to initialization for second + // requested mode. + AuthHubModeLifecycle::EnginesMap engines; + EXPECT_CALL(owner_, OnReadyForMode(Eq(AuthHubMode::kInSession), _)) + .WillOnce(MoveArg<1>(&engines)); + + ASSERT_TRUE(init_callbacks_.contains(kOneFactor)); + std::move(init_callbacks_[kOneFactor]).Run(kOneFactor); + + // Should be notified now. + EXPECT_TRUE(lifecycle_.IsReady()); + Mock::VerifyAndClearExpectations(&owner_); + + ASSERT_TRUE(engines.contains(kOneFactor)); +} + +// Check logic when one of the engines takes too long to initialize. +TEST_F(AuthHubModeLifecycleTest, FactorInitializationTimeout) { + ExpectLoginFactor(kOneFactor, /*auto_init=*/false); + ExpectLoginFactor(kAnotherFactor, /*auto_init=*/true); + + EXPECT_FALSE(lifecycle_.IsReady()); + lifecycle_.SwitchToMode(AuthHubMode::kLoginScreen); + + // Should not notify immediately. + EXPECT_FALSE(lifecycle_.IsReady()); + Mock::VerifyAndClearExpectations(&owner_); + + ASSERT_TRUE(engines_.contains(kOneFactor)); + ASSERT_TRUE(engines_.contains(kAnotherFactor)); + + EXPECT_CALL(*engines_[kOneFactor], InitializationTimedOut()); + + AuthHubModeLifecycle::EnginesMap engines; + EXPECT_CALL(owner_, OnReadyForMode(Eq(AuthHubMode::kLoginScreen), _)) + .WillOnce(MoveArg<1>(&engines)); + + // Trigger timeout. + task_environment_.FastForwardBy(kLongTime); + + // Should be notified now, with only kAnotherFactor factor as "Ready". + EXPECT_TRUE(lifecycle_.IsReady()); + Mock::VerifyAndClearExpectations(&owner_); + + EXPECT_EQ(engines.size(), 1u); + ASSERT_TRUE(engines.contains(kAnotherFactor)); + + // Set shutdown expectations: + EXPECT_CALL(*engines_[kOneFactor], ShutdownCommon(_)) + .WillOnce(RunOnceCallback<0>(kOneFactor)); + EXPECT_CALL(*engines_[kAnotherFactor], ShutdownCommon(_)) + .WillOnce(RunOnceCallback<0>(kAnotherFactor)); + + EXPECT_CALL(owner_, OnExitedMode(Eq(AuthHubMode::kLoginScreen))); + EXPECT_CALL(owner_, OnModeShutdown()); + + lifecycle_.Shutdown(); +} + +// Check logic when one of the engines takes too long to shut down. +TEST_F(AuthHubModeLifecycleTest, FactorShutdownTimeout) { + ExpectLoginFactor(kOneFactor); + ExpectLoginFactor(kAnotherFactor); + + AuthHubModeLifecycle::EnginesMap engines; + EXPECT_CALL(owner_, OnReadyForMode(Eq(AuthHubMode::kLoginScreen), _)) + .WillOnce(MoveArg<1>(&engines)); + + lifecycle_.SwitchToMode(AuthHubMode::kLoginScreen); + + EXPECT_TRUE(lifecycle_.IsReady()); + EXPECT_EQ(engines.size(), 2u); + + // Set shutdown expectations: + AuthFactorEngine::ShutdownCallback callback; + EXPECT_CALL(*engines_[kOneFactor], ShutdownCommon(_)) + .WillOnce(MoveArg<0>(&callback)); + + EXPECT_CALL(*engines_[kAnotherFactor], ShutdownCommon(_)) + .WillOnce(RunOnceCallback<0>(kAnotherFactor)); + + lifecycle_.Shutdown(); + + // Should not notify immediately. + EXPECT_FALSE(lifecycle_.IsReady()); + Mock::VerifyAndClearExpectations(&owner_); + + EXPECT_CALL(*engines_[kOneFactor], ShutdownTimedOut()); + EXPECT_CALL(owner_, OnExitedMode(Eq(AuthHubMode::kLoginScreen))); + EXPECT_CALL(owner_, OnModeShutdown()); + + // Trigger timeout. + task_environment_.FastForwardBy(kLongTime); +} + +} // namespace ash
diff --git a/chromeos/ash/components/osauth/impl/auth_parts_impl.cc b/chromeos/ash/components/osauth/impl/auth_parts_impl.cc index 0e41fb6b..cb4828b 100644 --- a/chromeos/ash/components/osauth/impl/auth_parts_impl.cc +++ b/chromeos/ash/components/osauth/impl/auth_parts_impl.cc
@@ -10,6 +10,7 @@ #include "base/check.h" #include "base/check_op.h" #include "chromeos/ash/components/dbus/userdataauth/userdataauth_client.h" +#include "chromeos/ash/components/osauth/impl/auth_hub_impl.h" #include "chromeos/ash/components/osauth/impl/auth_session_storage_impl.h" #include "chromeos/ash/components/osauth/public/auth_factor_engine_factory.h" #include "chromeos/ash/components/osauth/public/auth_parts.h" @@ -54,6 +55,7 @@ void AuthPartsImpl::CreateDefaultComponents() { session_storage_ = std::make_unique<AuthSessionStorageImpl>(UserDataAuthClient::Get()); + auth_hub_ = std::make_unique<AuthHubImpl>(); } AuthSessionStorage* AuthPartsImpl::GetAuthSessionStorage() { @@ -61,6 +63,16 @@ return session_storage_.get(); } +AuthHub* AuthPartsImpl::GetAuthHub() { + CHECK(auth_hub_); + return auth_hub_.get(); +} + +void AuthPartsImpl::SetAuthHub(std::unique_ptr<AuthHub> auth_hub) { + CHECK(!auth_hub_); + auth_hub_ = std::move(auth_hub); +} + void AuthPartsImpl::RegisterEngineFactory( std::unique_ptr<AuthFactorEngineFactory> factory) { engine_factories_.push_back(std::move(factory));
diff --git a/chromeos/ash/components/osauth/impl/auth_parts_impl.h b/chromeos/ash/components/osauth/impl/auth_parts_impl.h index c721d290..44a3eb1 100644 --- a/chromeos/ash/components/osauth/impl/auth_parts_impl.h +++ b/chromeos/ash/components/osauth/impl/auth_parts_impl.h
@@ -15,6 +15,10 @@ namespace ash { +class AuthFactorEngineFactory; +class AuthHub; +class AuthSessionStorage; + class COMPONENT_EXPORT(CHROMEOS_ASH_COMPONENTS_OSAUTH) AuthPartsImpl : public AuthParts { public: @@ -26,15 +30,20 @@ // AuthParts implementation: AuthSessionStorage* GetAuthSessionStorage() override; + AuthHub* GetAuthHub() override; void RegisterEngineFactory( std::unique_ptr<AuthFactorEngineFactory> factory) override; const std::vector<std::unique_ptr<AuthFactorEngineFactory>>& GetEngineFactories() override; + // Test-related setters: + void SetAuthHub(std::unique_ptr<AuthHub> auth_hub); + private: friend class AuthParts; void CreateDefaultComponents(); + std::unique_ptr<AuthHub> auth_hub_; std::unique_ptr<AuthSessionStorage> session_storage_; std::vector<std::unique_ptr<AuthFactorEngineFactory>> engine_factories_;
diff --git a/chromeos/ash/components/osauth/public/BUILD.gn b/chromeos/ash/components/osauth/public/BUILD.gn index b4b2411d..a1fd21d 100644 --- a/chromeos/ash/components/osauth/public/BUILD.gn +++ b/chromeos/ash/components/osauth/public/BUILD.gn
@@ -18,6 +18,7 @@ "auth_factor_engine.h", "auth_factor_engine_factory.h", "auth_factor_status_consumer.h", + "auth_hub.h", "auth_parts.h", "auth_session_storage.h", "common_types.h",
diff --git a/chromeos/ash/components/osauth/public/auth_factor_engine.h b/chromeos/ash/components/osauth/public/auth_factor_engine.h index 0bb6116..bc4e72f 100644 --- a/chromeos/ash/components/osauth/public/auth_factor_engine.h +++ b/chromeos/ash/components/osauth/public/auth_factor_engine.h
@@ -5,6 +5,7 @@ #ifndef CHROMEOS_ASH_COMPONENTS_OSAUTH_PUBLIC_AUTH_FACTOR_ENGINE_H_ #define CHROMEOS_ASH_COMPONENTS_OSAUTH_PUBLIC_AUTH_FACTOR_ENGINE_H_ +#include "base/component_export.h" #include "base/functional/callback.h" #include "chromeos/ash/components/osauth/public/common_types.h" #include "components/account_id/account_id.h" @@ -97,8 +98,8 @@ kDisabled, // Discard authentication attempts. }; - using CommonInitCallback = base::OnceClosure; - using ShutdownCallback = base::OnceClosure; + using CommonInitCallback = base::OnceCallback<void(AshAuthFactor)>; + using ShutdownCallback = base::OnceCallback<void(AshAuthFactor)>; virtual ~AuthFactorEngine() = default; @@ -152,6 +153,11 @@ // Relevant for factors like fingerprint, where in some // device orientations FP sensor can be used unintentionally. virtual bool IsOrientationRestricted() = 0; + + // Engines might override these methods to gracefully handle + // timeout during relevant lifecycle operations. + virtual void InitializationTimedOut() {} + virtual void ShutdownTimedOut() {} }; } // namespace ash
diff --git a/chromeos/ash/components/osauth/public/auth_factor_engine_factory.h b/chromeos/ash/components/osauth/public/auth_factor_engine_factory.h index ffde39c..ae157b9 100644 --- a/chromeos/ash/components/osauth/public/auth_factor_engine_factory.h +++ b/chromeos/ash/components/osauth/public/auth_factor_engine_factory.h
@@ -7,6 +7,7 @@ #include <memory> +#include "base/component_export.h" #include "chromeos/ash/components/osauth/public/common_types.h" namespace ash {
diff --git a/chromeos/ash/components/osauth/public/auth_hub.h b/chromeos/ash/components/osauth/public/auth_hub.h new file mode 100644 index 0000000..3afd7d38 --- /dev/null +++ b/chromeos/ash/components/osauth/public/auth_hub.h
@@ -0,0 +1,40 @@ +// 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 CHROMEOS_ASH_COMPONENTS_OSAUTH_PUBLIC_AUTH_HUB_H_ +#define CHROMEOS_ASH_COMPONENTS_OSAUTH_PUBLIC_AUTH_HUB_H_ + +#include "base/component_export.h" +#include "base/functional/callback.h" +#include "chromeos/ash/components/osauth/public/auth_parts.h" +#include "chromeos/ash/components/osauth/public/common_types.h" + +namespace ash { + +// Main entry point for ChromeOS local Authentication. +class COMPONENT_EXPORT(CHROMEOS_ASH_COMPONENTS_OSAUTH) AuthHub { + public: + // Convenience method. + static inline AuthHub* Get() { return AuthParts::Get()->GetAuthHub(); } + + // AuthHub is not initialized immediately after creation, to allow + // registering extra FactorEngines in AuthParts, so it starts in + // `AuthHubMode::kNone`. + // + // Usually AuthHub would go `kNone` -> `kLoginScreen` -> `kInSession`, + // but there are two exceptions: + // * after in-session crash AuthHub would go `kNone` -> `kInSession`; + // * Until ChromeOS multi-profile is made obsolette by Lacros + // AuthHub would need to go `kInSession`->`kLoginScreen`->`kInSession` + // when showing/hiding "Add user" screen. + virtual void InitializeForMode(AuthHubMode target) = 0; + + virtual void EnsureInitialized(base::OnceClosure on_initialized) = 0; + + virtual ~AuthHub() = default; +}; + +} // namespace ash + +#endif // CHROMEOS_ASH_COMPONENTS_OSAUTH_PUBLIC_AUTH_HUB_H_
diff --git a/chromeos/ash/components/osauth/public/auth_parts.h b/chromeos/ash/components/osauth/public/auth_parts.h index edfc0c6..601fb94 100644 --- a/chromeos/ash/components/osauth/public/auth_parts.h +++ b/chromeos/ash/components/osauth/public/auth_parts.h
@@ -12,6 +12,7 @@ namespace ash { +class AuthHub; class AuthSessionStorage; class AuthFactorEngineFactory; @@ -33,6 +34,7 @@ virtual ~AuthParts() = default; virtual AuthSessionStorage* GetAuthSessionStorage() = 0; + virtual AuthHub* GetAuthHub() = 0; virtual void RegisterEngineFactory( std::unique_ptr<AuthFactorEngineFactory> factory) = 0;
diff --git a/chromeos/ash/components/osauth/public/common_types.h b/chromeos/ash/components/osauth/public/common_types.h index 80ad118..699fde5 100644 --- a/chromeos/ash/components/osauth/public/common_types.h +++ b/chromeos/ash/components/osauth/public/common_types.h
@@ -58,7 +58,9 @@ enum AuthHubMode { kNone, // State before initialization kLoginScreen, // Login screen, no profile data available. - kInSession // In-session mode, user is fixed, but purposes might change. + kInSession // In-session mode (including lock screen), user is fixed, + // but purposes might change, + }; } // namespace ash
diff --git a/chromeos/ash/components/osauth/test_support/BUILD.gn b/chromeos/ash/components/osauth/test_support/BUILD.gn new file mode 100644 index 0000000..5cce5006 --- /dev/null +++ b/chromeos/ash/components/osauth/test_support/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/chromeos/ui_mode.gni") +import("//testing/test.gni") + +assert(is_chromeos_ash, + "Non-ChromeOS builds cannot depend on //chromeos/ash/components/osauth") + +static_library("test_support") { + defines = [ "IS_CHROMEOS_ASH_COMPONENTS_OSAUTH_IMPL" ] + public_deps = [ "//chromeos/ash/components/osauth/public" ] + testonly = true + + deps = [ + "//base", + "//base/test:test_support", + "//testing/gmock", + "//testing/gtest", + ] + sources = [ + "mock_auth_factor_engine.cc", + "mock_auth_factor_engine.h", + "mock_auth_factor_engine_factory.cc", + "mock_auth_factor_engine_factory.h", + ] +}
diff --git a/chromeos/ash/components/osauth/test_support/mock_auth_factor_engine.cc b/chromeos/ash/components/osauth/test_support/mock_auth_factor_engine.cc new file mode 100644 index 0000000..5098de1 --- /dev/null +++ b/chromeos/ash/components/osauth/test_support/mock_auth_factor_engine.cc
@@ -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. + +#include "chromeos/ash/components/osauth/test_support/mock_auth_factor_engine.h" + +#include <memory> + +namespace ash { + +MockAuthFactorEngine::MockAuthFactorEngine() = default; + +MockAuthFactorEngine::~MockAuthFactorEngine() = default; + +} // namespace ash
diff --git a/chromeos/ash/components/osauth/test_support/mock_auth_factor_engine.h b/chromeos/ash/components/osauth/test_support/mock_auth_factor_engine.h new file mode 100644 index 0000000..7e1596c --- /dev/null +++ b/chromeos/ash/components/osauth/test_support/mock_auth_factor_engine.h
@@ -0,0 +1,41 @@ +// 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 CHROMEOS_ASH_COMPONENTS_OSAUTH_TEST_SUPPORT_MOCK_AUTH_FACTOR_ENGINE_H_ +#define CHROMEOS_ASH_COMPONENTS_OSAUTH_TEST_SUPPORT_MOCK_AUTH_FACTOR_ENGINE_H_ + +#include "chromeos/ash/components/osauth/public/auth_factor_engine.h" +#include "testing/gmock/include/gmock/gmock.h" + +namespace ash { + +class MockAuthFactorEngine : public AuthFactorEngine { + public: + MockAuthFactorEngine(); + MockAuthFactorEngine(const MockAuthFactorEngine&) = delete; + MockAuthFactorEngine& operator=(const MockAuthFactorEngine&) = delete; + ~MockAuthFactorEngine() override; + + MOCK_METHOD(AshAuthFactor, GetFactor, (), (override)); + MOCK_METHOD(void, InitializeCommon, (CommonInitCallback), (override)); + MOCK_METHOD(void, ShutdownCommon, (ShutdownCallback), (override)); + MOCK_METHOD(void, + StartAuthFlow, + (const AccountId&, AuthPurpose, FactorEngineObserver*), + (override)); + MOCK_METHOD(void, + StopAuthFlow, + (const AccountId&, AuthPurpose, ShutdownCallback), + (override)); + MOCK_METHOD(void, SetUsageAllowed, (UsageAllowed), (override)); + MOCK_METHOD(bool, IsDisabledByPolicy, (), (override)); + MOCK_METHOD(bool, IsLockedOut, (), (override)); + MOCK_METHOD(bool, IsOrientationRestricted, (), (override)); + MOCK_METHOD(void, InitializationTimedOut, (), (override)); + MOCK_METHOD(void, ShutdownTimedOut, (), (override)); +}; + +} // namespace ash + +#endif // CHROMEOS_ASH_COMPONENTS_OSAUTH_TEST_SUPPORT_MOCK_AUTH_FACTOR_ENGINE_H_
diff --git a/chromeos/ash/components/osauth/test_support/mock_auth_factor_engine_factory.cc b/chromeos/ash/components/osauth/test_support/mock_auth_factor_engine_factory.cc new file mode 100644 index 0000000..75ea3ad --- /dev/null +++ b/chromeos/ash/components/osauth/test_support/mock_auth_factor_engine_factory.cc
@@ -0,0 +1,13 @@ +// 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. + +#include "chromeos/ash/components/osauth/test_support/mock_auth_factor_engine_factory.h" + +namespace ash { + +MockAuthFactorEngineFactory::MockAuthFactorEngineFactory() = default; + +MockAuthFactorEngineFactory::~MockAuthFactorEngineFactory() = default; + +} // namespace ash
diff --git a/chromeos/ash/components/osauth/test_support/mock_auth_factor_engine_factory.h b/chromeos/ash/components/osauth/test_support/mock_auth_factor_engine_factory.h new file mode 100644 index 0000000..17b4fa62 --- /dev/null +++ b/chromeos/ash/components/osauth/test_support/mock_auth_factor_engine_factory.h
@@ -0,0 +1,34 @@ +// 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 CHROMEOS_ASH_COMPONENTS_OSAUTH_TEST_SUPPORT_MOCK_AUTH_FACTOR_ENGINE_FACTORY_H_ +#define CHROMEOS_ASH_COMPONENTS_OSAUTH_TEST_SUPPORT_MOCK_AUTH_FACTOR_ENGINE_FACTORY_H_ + +#include <memory> + +#include "chromeos/ash/components/osauth/public/auth_factor_engine.h" +#include "chromeos/ash/components/osauth/public/auth_factor_engine_factory.h" +#include "chromeos/ash/components/osauth/public/common_types.h" +#include "testing/gmock/include/gmock/gmock.h" + +namespace ash { + +class MockAuthFactorEngineFactory : public AuthFactorEngineFactory { + public: + MockAuthFactorEngineFactory(); + MockAuthFactorEngineFactory(const MockAuthFactorEngineFactory&) = delete; + MockAuthFactorEngineFactory& operator=(const MockAuthFactorEngineFactory&) = + delete; + ~MockAuthFactorEngineFactory() override; + + MOCK_METHOD(AshAuthFactor, GetFactor, (), (override)); + MOCK_METHOD(std::unique_ptr<AuthFactorEngine>, + CreateEngine, + (AuthHubMode), + (override)); +}; + +} // namespace ash + +#endif // CHROMEOS_ASH_COMPONENTS_OSAUTH_TEST_SUPPORT_MOCK_AUTH_FACTOR_ENGINE_FACTORY_H_
diff --git a/chromeos/ash/services/cellular_setup/ota_activator_impl.cc b/chromeos/ash/services/cellular_setup/ota_activator_impl.cc index de63aa6..32aa54ea 100644 --- a/chromeos/ash/services/cellular_setup/ota_activator_impl.cc +++ b/chromeos/ash/services/cellular_setup/ota_activator_impl.cc
@@ -224,7 +224,7 @@ // SIM slots and SIM cards in external dongles. bool has_psim_slots = false; for (const CellularSIMSlotInfo& sim_slot_info : - GetSimSlotInfosWithUpdatedEid(cellular_device)) { + cellular_utils::GetSimSlotInfosWithUpdatedEid(cellular_device)) { if (sim_slot_info.eid.empty()) { has_psim_slots = true; iccid_ = sim_slot_info.iccid;
diff --git a/chromeos/ash/services/network_config/cros_network_config.cc b/chromeos/ash/services/network_config/cros_network_config.cc index 75ce744..af838a1 100644 --- a/chromeos/ash/services/network_config/cros_network_config.cc +++ b/chromeos/ash/services/network_config/cros_network_config.cc
@@ -468,7 +468,8 @@ const DeviceState* cellular_device = network_state_handler->GetDeviceState(network->device_path()); bool sim_is_primary = - cellular_device && IsSimPrimary(network->iccid(), cellular_device); + cellular_device && + cellular_utils::IsSimPrimary(network->iccid(), cellular_device); cellular->sim_lock_enabled = sim_is_primary && cellular_device->sim_lock_enabled(); cellular->sim_locked = sim_is_primary && cellular_device->IsSimLocked(); @@ -537,7 +538,8 @@ std::vector<mojom::SIMInfoPtr> CellularSIMInfosToMojo( const DeviceState* device) { std::vector<mojom::SIMInfoPtr> sim_info_mojos; - for (const auto& sim_slot : GetSimSlotInfosWithUpdatedEid(device)) { + for (const auto& sim_slot : + cellular_utils::GetSimSlotInfosWithUpdatedEid(device)) { auto sim_info_mojo = mojom::SIMInfo::New(); sim_info_mojo->slot_id = sim_slot.slot_id; sim_info_mojo->iccid = sim_slot.iccid; @@ -591,6 +593,8 @@ return mojom::InhibitReason::kResettingEuiccMemory; case CellularInhibitor::InhibitReason::kDisablingProfile: return mojom::InhibitReason::kDisablingProfile; + case CellularInhibitor::InhibitReason::kRequestingAvailableProfiles: + return mojom::InhibitReason::kRequestingAvailableProfiles; } }
diff --git a/chromeos/components/kcer/kcer.h b/chromeos/components/kcer/kcer.h index 5bbd937..c9f3d93c 100644 --- a/chromeos/components/kcer/kcer.h +++ b/chromeos/components/kcer/kcer.h
@@ -60,6 +60,7 @@ kFailedToRemoveCertificate = 11, kKeyNotFound = 12, kFailedToGetKeyId = 13, + kFailedToWriteAttribute = 14, }; // Handles for tokens on ChromeOS.
diff --git a/chromeos/components/kcer/kcer_impl.cc b/chromeos/components/kcer/kcer_impl.cc index a6271939..3b684cc7 100644 --- a/chromeos/components/kcer/kcer_impl.cc +++ b/chromeos/components/kcer/kcer_impl.cc
@@ -201,13 +201,13 @@ } auto on_find_key_done = - base::BindOnce(&KcerImpl::DoesPrivateKeyExistWithKeyToken, + base::BindOnce(&KcerImpl::DoesPrivateKeyExistWithToken, weak_factory_.GetWeakPtr(), std::move(callback)); return FindKeyToken(/*allow_guessing=*/false, /*key=*/std::move(key), std::move(on_find_key_done)); } -void KcerImpl::DoesPrivateKeyExistWithKeyToken( +void KcerImpl::DoesPrivateKeyExistWithToken( DoesKeyExistCallback callback, base::expected<absl::optional<Token>, Error> find_key_result) { if (!find_key_result.has_value()) { @@ -252,7 +252,37 @@ void KcerImpl::SetKeyNickname(PrivateKeyHandle key, std::string nickname, StatusCallback callback) { - // TODO(244408716): Implement. + if (key.GetTokenInternal().has_value()) { + return SetKeyNicknameWithToken(std::move(nickname), std::move(callback), + std::move(key)); + } + + auto on_token_populated = base::BindOnce( + &KcerImpl::SetKeyNicknameWithToken, weak_factory_.GetWeakPtr(), + std::move(nickname), std::move(callback)); + return PopulateTokenForKey(std::move(key), std::move(on_token_populated)); +} + +void KcerImpl::SetKeyNicknameWithToken( + std::string nickname, + StatusCallback callback, + base::expected<PrivateKeyHandle, Error> key_or_error) { + if (!key_or_error.has_value()) { + return std::move(callback).Run(base::unexpected(key_or_error.error())); + } + PrivateKeyHandle key = std::move(key_or_error).value(); + + const base::WeakPtr<KcerToken>& kcer_token = + GetToken(key.GetTokenInternal().value()); + if (!kcer_token.MaybeValid()) { + return std::move(callback).Run( + base::unexpected(Error::kTokenIsNotAvailable)); + } + token_task_runner_->PostTask( + FROM_HERE, + base::BindOnce(&KcerToken::SetKeyNickname, kcer_token, std::move(key), + std::move(nickname), + base::BindPostTaskToCurrentDefault(std::move(callback)))); } void KcerImpl::SetKeyPermissions(PrivateKeyHandle key, @@ -304,4 +334,31 @@ } } +void KcerImpl::PopulateTokenForKey( + PrivateKeyHandle key, + base::OnceCallback<void(base::expected<PrivateKeyHandle, Error>)> + callback) { + auto on_find_key_done = + base::BindOnce(&KcerImpl::PopulateTokenForKeyWithToken, + weak_factory_.GetWeakPtr(), key, std::move(callback)); + FindKeyToken(/*allow_guessing=*/true, + /*key=*/std::move(key), std::move(on_find_key_done)); +} + +void KcerImpl::PopulateTokenForKeyWithToken( + PrivateKeyHandle key, + base::OnceCallback<void(base::expected<PrivateKeyHandle, Error>)> callback, + base::expected<absl::optional<Token>, Error> find_key_result) { + if (!find_key_result.has_value()) { + return std::move(callback).Run(base::unexpected(find_key_result.error())); + } + + if (!find_key_result.value().has_value()) { + return std::move(callback).Run(base::unexpected(Error::kKeyNotFound)); + } + + Token token = find_key_result.value().value(); + return std::move(callback).Run(PrivateKeyHandle(token, std::move(key))); +} + } // namespace kcer::internal
diff --git a/chromeos/components/kcer/kcer_impl.h b/chromeos/components/kcer/kcer_impl.h index e30611e..c3aaa14 100644 --- a/chromeos/components/kcer/kcer_impl.h +++ b/chromeos/components/kcer/kcer_impl.h
@@ -102,10 +102,26 @@ base::OnceCallback<void(base::expected<absl::optional<Token>, Error>)> callback); - void DoesPrivateKeyExistWithKeyToken( + // Attempts to find the token for the `key` (guessing is allowed). Returns a + // PrivateKeyHandle with the token populated on success, an error on failure. + void PopulateTokenForKey( + PrivateKeyHandle key, + base::OnceCallback<void(base::expected<PrivateKeyHandle, Error>)> + callback); + void PopulateTokenForKeyWithToken( + PrivateKeyHandle key, + base::OnceCallback<void(base::expected<PrivateKeyHandle, Error>)> + callback, + base::expected<absl::optional<Token>, Error> find_key_result); + + void DoesPrivateKeyExistWithToken( DoesKeyExistCallback callback, base::expected<absl::optional<Token>, Error> find_key_result); + void SetKeyNicknameWithToken(std::string nickname, + StatusCallback callback, + base::expected<PrivateKeyHandle, Error> key); + // Task runner for the tokens. Can be nullptr if no tokens are available // to the current Kcer instance. scoped_refptr<base::TaskRunner> token_task_runner_;
diff --git a/chromeos/services/network_config/public/mojom/cros_network_config.mojom b/chromeos/services/network_config/public/mojom/cros_network_config.mojom index c9955a8c..84f128b65 100644 --- a/chromeos/services/network_config/public/mojom/cros_network_config.mojom +++ b/chromeos/services/network_config/public/mojom/cros_network_config.mojom
@@ -156,7 +156,10 @@ // Inhibited because the EUICC memory is being reset. kResettingEuiccMemory, // Inhibited because an eSIM profile is being disabled. - kDisablingProfile + kDisablingProfile, + // Inhibited because SM-DS scans are being performed to discover profiles + // available for this device. + kRequestingAvailableProfiles, }; // Always-on VPN operating mode.
diff --git a/components/autofill/core/browser/autofill_type.cc b/components/autofill/core/browser/autofill_type.cc index b26eb12..d0f0f277 100644 --- a/components/autofill/core/browser/autofill_type.cc +++ b/components/autofill/core/browser/autofill_type.cc
@@ -61,6 +61,7 @@ case ADDRESS_HOME_ADDRESS: case ADDRESS_HOME_ADDRESS_WITH_NAME: case ADDRESS_HOME_FLOOR: + case ADDRESS_HOME_LANDMARK: return FieldTypeGroup::kAddressHome; case CREDIT_CARD_NAME_FULL:
diff --git a/components/autofill/core/browser/data_model/autofill_profile.cc b/components/autofill/core/browser/data_model/autofill_profile.cc index 21d6917..d976c31 100644 --- a/components/autofill/core/browser/data_model/autofill_profile.cc +++ b/components/autofill/core/browser/data_model/autofill_profile.cc
@@ -421,6 +421,7 @@ ADDRESS_HOME_ZIP, ADDRESS_HOME_SORTING_CODE, ADDRESS_HOME_COUNTRY, + ADDRESS_HOME_LANDMARK, ADDRESS_HOME_HOUSE_NUMBER, ADDRESS_HOME_STREET_NAME, ADDRESS_HOME_DEPENDENT_STREET_NAME,
diff --git a/components/autofill/core/browser/data_model/autofill_profile_comparator_unittest.cc b/components/autofill/core/browser/data_model/autofill_profile_comparator_unittest.cc index ff3b70cc..71b4600 100644 --- a/components/autofill/core/browser/data_model/autofill_profile_comparator_unittest.cc +++ b/components/autofill/core/browser/data_model/autofill_profile_comparator_unittest.cc
@@ -25,6 +25,7 @@ using autofill::ADDRESS_HOME_CITY; using autofill::ADDRESS_HOME_COUNTRY; using autofill::ADDRESS_HOME_DEPENDENT_LOCALITY; +using autofill::ADDRESS_HOME_LANDMARK; using autofill::ADDRESS_HOME_LINE1; using autofill::ADDRESS_HOME_LINE2; using autofill::ADDRESS_HOME_LINE3; @@ -190,6 +191,13 @@ return profile; } + AutofillProfile CreateProfileWithLandmark(const char* landmark) { + AutofillProfile profile; + profile.SetRawInfo(autofill::ADDRESS_HOME_LANDMARK, + base::UTF8ToUTF16(landmark)); + return profile; + } + AutofillProfile CopyAndModify( const AutofillProfile& profile, const std::vector<std::pair<ServerFieldType, const char16_t*>>& updates) { @@ -302,6 +310,8 @@ actual.GetInfo(AutofillType(ADDRESS_HOME_ZIP), kLocale)); EXPECT_EQ(expected.GetInfo(AutofillType(ADDRESS_HOME_COUNTRY), kLocale), actual.GetInfo(AutofillType(ADDRESS_HOME_COUNTRY), kLocale)); + EXPECT_EQ(expected.GetInfo(AutofillType(ADDRESS_HOME_LANDMARK), kLocale), + actual.GetInfo(AutofillType(ADDRESS_HOME_LANDMARK), kLocale)); if (check_structured_address_tokens) { EXPECT_EQ(expected.GetInfo( @@ -1180,6 +1190,16 @@ } } +TEST_F(AutofillProfileComparatorTest, MergeLandmarks) { + AutofillProfile empty = CreateProfileWithLandmark(""); + AutofillProfile profile2 = CreateProfileWithLandmark("Red tree"); + + Address expected; + expected.SetRawInfo(ADDRESS_HOME_LANDMARK, u"Red tree"); + + MergeAddressesAndExpect(empty, profile2, expected); +} + // Checks for various scenarios for determining mergeability of profiles w.r.t. // the state. TEST_F(AutofillProfileComparatorTest, CheckStatesMergeability) {
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 80162879..2d0e3a36 100644 --- a/components/autofill/core/browser/data_model/autofill_profile_unittest.cc +++ b/components/autofill/core/browser/data_model/autofill_profile_unittest.cc
@@ -1226,6 +1226,7 @@ ADDRESS_HOME_ZIP, ADDRESS_HOME_SORTING_CODE, ADDRESS_HOME_COUNTRY, + ADDRESS_HOME_LANDMARK, ADDRESS_HOME_HOUSE_NUMBER, ADDRESS_HOME_STREET_NAME, ADDRESS_HOME_DEPENDENT_STREET_NAME, @@ -1273,11 +1274,13 @@ EXPECT_FALSE(profile.IsPresentButInvalid(ADDRESS_HOME_STATE)); EXPECT_FALSE(profile.IsPresentButInvalid(ADDRESS_HOME_ZIP)); EXPECT_FALSE(profile.IsPresentButInvalid(PHONE_HOME_WHOLE_NUMBER)); + EXPECT_FALSE(profile.IsPresentButInvalid(ADDRESS_HOME_LANDMARK)); profile.SetRawInfo(ADDRESS_HOME_COUNTRY, u"US"); EXPECT_FALSE(profile.IsPresentButInvalid(ADDRESS_HOME_STATE)); EXPECT_FALSE(profile.IsPresentButInvalid(ADDRESS_HOME_ZIP)); EXPECT_FALSE(profile.IsPresentButInvalid(PHONE_HOME_WHOLE_NUMBER)); + EXPECT_FALSE(profile.IsPresentButInvalid(ADDRESS_HOME_LANDMARK)); profile.SetRawInfo(ADDRESS_HOME_STATE, u"C"); EXPECT_TRUE(profile.IsPresentButInvalid(ADDRESS_HOME_STATE)); @@ -1327,6 +1330,13 @@ EXPECT_EQ(u"\tuser@example.com ", profile.GetRawInfo(EMAIL_ADDRESS)); } +TEST(AutofillProfileTest, SetRawInfoWorksForLandmark) { + AutofillProfile profile; + + profile.SetRawInfo(ADDRESS_HOME_LANDMARK, u"Red tree"); + EXPECT_EQ(u"Red tree", profile.GetRawInfo(ADDRESS_HOME_LANDMARK)); +} + TEST(AutofillProfileTest, SetInfoTrimsWhitespace) { AutofillProfile profile; profile.SetInfo(EMAIL_ADDRESS, u"\tuser@example.com ", "en-US");
diff --git a/components/autofill/core/browser/data_model/autofill_structured_address.cc b/components/autofill/core/browser/data_model/autofill_structured_address.cc index 1f77642b..727aaf2 100644 --- a/components/autofill/core/browser/data_model/autofill_structured_address.cc +++ b/components/autofill/core/browser/data_model/autofill_structured_address.cc
@@ -380,6 +380,13 @@ SortingCodeNode::~SortingCodeNode() = default; +LandmarkNode::LandmarkNode(AddressComponent* parent) + : AddressComponent(ADDRESS_HOME_LANDMARK, + parent, + MergeMode::kReplaceEmpty | kReplaceSubset) {} + +LandmarkNode::~LandmarkNode() = default; + AddressNode::AddressNode() : AddressNode(nullptr) {} AddressNode::AddressNode(const AddressNode& other) : AddressNode() {
diff --git a/components/autofill/core/browser/data_model/autofill_structured_address.h b/components/autofill/core/browser/data_model/autofill_structured_address.h index f1d3bfa..1dab96a8 100644 --- a/components/autofill/core/browser/data_model/autofill_structured_address.h +++ b/components/autofill/core/browser/data_model/autofill_structured_address.h
@@ -217,6 +217,13 @@ ~SortingCodeNode() override; }; +// Stores the landmark of an address profile. +class LandmarkNode : public AddressComponent { + public: + explicit LandmarkNode(AddressComponent* parent); + ~LandmarkNode() override; +}; + // Stores the overall Address that contains the StreetAddress, the PostalCode // the City, the State and the CountryCode. class AddressNode : public AddressComponent { @@ -241,6 +248,7 @@ CityNode city_{this}; StateNode state_{this}; CountryCodeNode country_code_{this}; + LandmarkNode landmark_code_{this}; }; } // namespace autofill
diff --git a/components/autofill/core/browser/data_model/credit_card.cc b/components/autofill/core/browser/data_model/credit_card.cc index 2493002..f3ed46e 100644 --- a/components/autofill/core/browser/data_model/credit_card.cc +++ b/components/autofill/core/browser/data_model/credit_card.cc
@@ -868,7 +868,7 @@ // cards matches. if (record_type() == MASKED_SERVER_CARD || other.record_type() == MASKED_SERVER_CARD) { - bool last_four_digits_match = LastFourDigits() == other.LastFourDigits(); + bool last_four_digits_match = HasSameNumberAs(other); bool months_match = expiration_month() == other.expiration_month() || expiration_month() == 0 || @@ -880,6 +880,15 @@ return last_four_digits_match && months_match && years_match; } + return HasSameNumberAs(other); +} + +bool CreditCard::HasSameNumberAs(const CreditCard& other) const { + if (record_type() == CreditCard::MASKED_SERVER_CARD || + other.record_type() == CreditCard::MASKED_SERVER_CARD) { + return LastFourDigits() == other.LastFourDigits(); + } + return StripSeparators(number_) == StripSeparators(other.number_); }
diff --git a/components/autofill/core/browser/data_model/credit_card.h b/components/autofill/core/browser/data_model/credit_card.h index 199dfb0..a486ede 100644 --- a/components/autofill/core/browser/data_model/credit_card.h +++ b/components/autofill/core/browser/data_model/credit_card.h
@@ -235,6 +235,13 @@ // four digits and expiration dates. [[nodiscard]] bool MatchingCardDetails(const CreditCard& other) const; + // Returns true based on the following criteria: + // 1) If `this` or `other` is a masked server card, this function returns true + // if `other` has the same last four digits as `this`. + // 2) Otherwise, this function returns true if `other` has the same full card + // number as `this`. + [[nodiscard]] bool HasSameNumberAs(const CreditCard& other) const; + // Equality operators compare GUIDs, origins, and the contents. // Usage metadata (use count, use date, modification date) are NOT compared. bool operator==(const CreditCard& credit_card) const;
diff --git a/components/autofill/core/browser/data_model/credit_card_unittest.cc b/components/autofill/core/browser/data_model/credit_card_unittest.cc index 5394470..5017eb1 100644 --- a/components/autofill/core/browser/data_model/credit_card_unittest.cc +++ b/components/autofill/core/browser/data_model/credit_card_unittest.cc
@@ -574,6 +574,37 @@ EXPECT_NE(full_metadata.use_date, full_card.use_date()); } +// Test that if one of the two compared cards is masked server card, +// `HasSameNumberAs` returns true if the last four are the same. For all the +// other comparing card types (none of them is masked server card), +// `HasSameNumberAs` returns true if the full card number are the same. +TEST(CreditCardTest, HasSameNumberAs) { + // Creates three types (local card, masked server card and full server card) + // of credit cards with the same number. + CreditCard local_card = test::GetCreditCard(); + CreditCard masked_server_card = test::GetMaskedServerCardVisa(); + CreditCard full_server_card = test::GetFullServerCard(); + + // Verify that card number is the same for all combinations of card type. + EXPECT_TRUE(local_card.HasSameNumberAs(local_card)); + EXPECT_TRUE(local_card.HasSameNumberAs(masked_server_card)); + EXPECT_TRUE(local_card.HasSameNumberAs(full_server_card)); + EXPECT_TRUE(masked_server_card.HasSameNumberAs(masked_server_card)); + EXPECT_TRUE(masked_server_card.HasSameNumberAs(full_server_card)); + EXPECT_TRUE(full_server_card.HasSameNumberAs(full_server_card)); + + // Update the local card and full server card number to a different number but + // all the three credit cards are with same last four. + local_card.SetRawInfo(CREDIT_CARD_NUMBER, u"4111 1111 0006 1111"); + full_server_card.SetRawInfo(CREDIT_CARD_NUMBER, u"4111 1111 2226 1111"); + + // Verify that only last 4 is compared if one of the compared cards is a + // masked server card; for all other types, full card number is compared. + EXPECT_TRUE(local_card.HasSameNumberAs(masked_server_card)); + EXPECT_FALSE(local_card.HasSameNumberAs(full_server_card)); + EXPECT_TRUE(masked_server_card.HasSameNumberAs(full_server_card)); +} + struct SetExpirationYearFromStringTestCase { std::string expiration_year; int expected_year;
diff --git a/components/autofill/core/browser/field_types.cc b/components/autofill/core/browser/field_types.cc index 6d753649..54e38844 100644 --- a/components/autofill/core/browser/field_types.cc +++ b/components/autofill/core/browser/field_types.cc
@@ -106,7 +106,8 @@ {"CREDIT_CARD_STANDALONE_VERIFICATION_CODE", CREDIT_CARD_STANDALONE_VERIFICATION_CODE}, {"NUMERIC_QUANTITY", NUMERIC_QUANTITY}, - {"ONE_TIME_CODE", ONE_TIME_CODE}}); + {"ONE_TIME_CODE", ONE_TIME_CODE}, + {"ADDRESS_HOME_LANDMARK", ADDRESS_HOME_LANDMARK}}); ServerFieldType ToSafeServerFieldType( std::underlying_type_t<ServerFieldType> raw_value, @@ -129,8 +130,8 @@ !(67 <= t && t <= 72) && // Fax numbers (values [20,24]) are deprecated. !(20 <= t && t <= 24) && - // Reserved for server-side only use. - t != 127 && !(130 <= t && t <= 153); + // Reserved for server-side only use. Except 136. + t != 127 && (t == 136 || !(130 <= t && t <= 153)); }; return IsValid(raw_value) ? static_cast<ServerFieldType>(raw_value) : fallback_value; @@ -182,6 +183,7 @@ case ADDRESS_HOME_ADDRESS: case ADDRESS_HOME_ADDRESS_WITH_NAME: case ADDRESS_HOME_FLOOR: + case ADDRESS_HOME_LANDMARK: return true; case CREDIT_CARD_NAME_FULL: @@ -423,6 +425,8 @@ return "CREDIT_CARD_STANDALONE_VERIFICATION_CODE"; case ONE_TIME_CODE: return "ONE_TIME_CODE"; + case ADDRESS_HOME_LANDMARK: + return "ADDRESS_HOME_LANDMARK"; case MAX_VALID_FIELD_TYPE: return ""; }
diff --git a/components/autofill/core/browser/field_types.h b/components/autofill/core/browser/field_types.h index 530e26b..a3f1748 100644 --- a/components/autofill/core/browser/field_types.h +++ b/components/autofill/core/browser/field_types.h
@@ -361,7 +361,11 @@ // One-time code used for verifying user identity. ONE_TIME_CODE = 129, - // Reserved for a server-side-only use: 130-153 + // A well-known object or feature of the landscape that can easily be + // recognized to understand where the building is situated. + ADDRESS_HOME_LANDMARK = 136, + + // Reserved for a server-side-only use: 130-153. Except 136. // No new types can be added without a corresponding change to the Autofill // server.
diff --git a/components/autofill/core/browser/field_types_unittest.cc b/components/autofill/core/browser/field_types_unittest.cc index a59e7d7..e8c650e 100644 --- a/components/autofill/core/browser/field_types_unittest.cc +++ b/components/autofill/core/browser/field_types_unittest.cc
@@ -107,6 +107,7 @@ BIRTHDATE_4_DIGIT_YEAR, NUMERIC_QUANTITY, ONE_TIME_CODE, + ADDRESS_HOME_LANDMARK, }; ServerFieldType kInvalidValue = static_cast<ServerFieldType>(123456); ASSERT_FALSE(kValidFieldTypes.count(kInvalidValue));
diff --git a/components/autofill/core/browser/metrics/autofill_metrics.cc b/components/autofill/core/browser/metrics/autofill_metrics.cc index b452da8..2818261 100644 --- a/components/autofill/core/browser/metrics/autofill_metrics.cc +++ b/components/autofill/core/browser/metrics/autofill_metrics.cc
@@ -119,6 +119,7 @@ GROUP_UNKNOWN_TYPE, GROUP_BIRTHDATE, GROUP_IBAN, + GROUP_ADDRESS_HOME_LANDMARK, // Add new entries here and update enums.xml. NUM_FIELD_TYPE_GROUPS_FOR_METRICS }; @@ -240,6 +241,9 @@ case ADDRESS_HOME_FLOOR: group = GROUP_ADDRESS_HOME_FLOOR; break; + case ADDRESS_HOME_LANDMARK: + group = GROUP_ADDRESS_HOME_LANDMARK; + break; case UNKNOWN_TYPE: group = GROUP_UNKNOWN_TYPE; break;
diff --git a/components/autofill/core/browser/metrics/shadow_prediction_metrics_unittest.cc b/components/autofill/core/browser/metrics/shadow_prediction_metrics_unittest.cc index fc09ea6..2e322c6 100644 --- a/components/autofill/core/browser/metrics/shadow_prediction_metrics_unittest.cc +++ b/components/autofill/core/browser/metrics/shadow_prediction_metrics_unittest.cc
@@ -94,7 +94,16 @@ // If this test fails after adding a type, update // `AutofillPredictionsComparisonResult` in tools/metrics/histograms/enums.xml // and set `last_known_type` to the last entry in the enum. - constexpr ServerFieldType last_known_type = ONE_TIME_CODE; + ServerFieldType last_known_type = MAX_VALID_FIELD_TYPE; + for (int type_int = MAX_VALID_FIELD_TYPE - 1; type_int >= NO_SERVER_DATA; + type_int--) { + auto type = ToSafeServerFieldType(type_int, MAX_VALID_FIELD_TYPE); + if (type != MAX_VALID_FIELD_TYPE) { + last_known_type = type; + break; + } + } + int max_comparison = GetShadowPrediction(last_known_type, NAME_FIRST, {NAME_LAST});
diff --git a/components/autofill/core/browser/payments/credit_card_fido_authenticator.cc b/components/autofill/core/browser/payments/credit_card_fido_authenticator.cc index 365e74c..5cbf089 100644 --- a/components/autofill/core/browser/payments/credit_card_fido_authenticator.cc +++ b/components/autofill/core/browser/payments/credit_card_fido_authenticator.cc
@@ -686,8 +686,8 @@ } for (const base::Value& key_info : *key_info_list) { - if (!key_info.is_dict() || - !key_info.GetDict().FindString("credential_id")) { + auto* dict = key_info.GetIfDict(); + if (!dict || !dict->FindString("credential_id")) { return false; } }
diff --git a/components/browser_ui/contacts_picker/android/java/src/org/chromium/components/browser_ui/contacts_picker/ContactsPickerFeatureList.java b/components/browser_ui/contacts_picker/android/java/src/org/chromium/components/browser_ui/contacts_picker/ContactsPickerFeatureList.java index 3f7217881..b221915 100644 --- a/components/browser_ui/contacts_picker/android/java/src/org/chromium/components/browser_ui/contacts_picker/ContactsPickerFeatureList.java +++ b/components/browser_ui/contacts_picker/android/java/src/org/chromium/components/browser_ui/contacts_picker/ContactsPickerFeatureList.java
@@ -7,14 +7,12 @@ import org.chromium.base.FeatureList; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; /** * Provides an API for querying the status of Contacts Picker features. */ // TODO(crbug.com/1060097): Remove/update this once a generalized FeatureList exists. @JNINamespace("browser_ui") -@MainDex public class ContactsPickerFeatureList { public static final String CONTACTS_PICKER_SELECT_ALL = "ContactsPickerSelectAll";
diff --git a/components/browser_ui/modaldialog/android/java/src/org/chromium/components/browser_ui/modaldialog/ModalDialogFeatureList.java b/components/browser_ui/modaldialog/android/java/src/org/chromium/components/browser_ui/modaldialog/ModalDialogFeatureList.java index 07d1aae..7e4c4bf 100644 --- a/components/browser_ui/modaldialog/android/java/src/org/chromium/components/browser_ui/modaldialog/ModalDialogFeatureList.java +++ b/components/browser_ui/modaldialog/android/java/src/org/chromium/components/browser_ui/modaldialog/ModalDialogFeatureList.java
@@ -7,14 +7,12 @@ import org.chromium.base.FeatureList; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; /** * Provides an API for querying the status of Modaldialog features. */ // TODO(crbug.com/1060097): Remove/update this once a generalized FeatureList exists. @JNINamespace("browser_ui") -@MainDex public class ModalDialogFeatureList { public static final String MODALDIALOG_BUTTON_PROTECTION = "ModalDialogButtonProtection";
diff --git a/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/TestImageDecoderService.java b/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/TestImageDecoderService.java index e4cfa1d..49c758b2 100644 --- a/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/TestImageDecoderService.java +++ b/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/TestImageDecoderService.java
@@ -9,12 +9,10 @@ import android.os.IBinder; import org.chromium.base.library_loader.LibraryLoader; -import org.chromium.build.annotations.MainDex; /** * A service to accept requests to take image file contents and decode them, used for tests. */ -@MainDex public class TestImageDecoderService extends Service { private final ImageDecoder mDecoder = new ImageDecoder();
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsFeatureList.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsFeatureList.java index 1f72fd6..5fea5b1 100644 --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsFeatureList.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsFeatureList.java
@@ -7,14 +7,12 @@ import org.chromium.base.FeatureList; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; /** * Provides an API for querying the status of Site Settings features. */ // TODO(crbug.com/1060097): Remove/update this once a generalized FeatureList exists. @JNINamespace("browser_ui") -@MainDex public class SiteSettingsFeatureList { public static final String SITE_DATA_IMPROVEMENTS = "SiteDataImprovements"; public static final String REQUEST_DESKTOP_SITE_EXCEPTIONS_DOWNGRADE =
diff --git a/components/browser_ui/widget/android/BUILD.gn b/components/browser_ui/widget/android/BUILD.gn index 6045020..afc2e867 100644 --- a/components/browser_ui/widget/android/BUILD.gn +++ b/components/browser_ui/widget/android/BUILD.gn
@@ -128,7 +128,6 @@ "//components/browser_ui/styles/android:java", "//components/browser_ui/util/android:java", "//components/embedder_support/android:util_java", - "//third_party/android_deps:com_android_support_support_annotations_java", "//third_party/android_deps:material_design_java", "//third_party/androidx:androidx_annotation_annotation_java", "//third_party/androidx:androidx_appcompat_appcompat_java",
diff --git a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/ChromeTransitionDrawable.java b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/ChromeTransitionDrawable.java index 99490ea..c94dd6f 100644 --- a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/ChromeTransitionDrawable.java +++ b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/ChromeTransitionDrawable.java
@@ -13,10 +13,11 @@ import android.graphics.drawable.LayerDrawable; import android.graphics.drawable.TransitionDrawable; import android.graphics.drawable.VectorDrawable; -import android.support.annotation.NonNull; -import android.support.annotation.VisibleForTesting; import android.util.IntProperty; +import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; + import org.chromium.components.browser_ui.widget.animation.CancelAwareAnimatorListener; import org.chromium.components.browser_ui.widget.animation.Interpolators;
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json index 05a24fa..c095416 100644 --- a/components/certificate_transparency/data/log_list.json +++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@ { - "version": "20.65", - "log_list_timestamp": "2023-05-07T12:54:15Z", + "version": "20.66", + "log_list_timestamp": "2023-05-08T12:55:07Z", "operators": [ { "name": "Google",
diff --git a/components/commerce/core/internals/resources/commerce_internals.ts b/components/commerce/core/internals/resources/commerce_internals.ts index a21117a..05ce037 100644 --- a/components/commerce/core/internals/resources/commerce_internals.ts +++ b/components/commerce/core/internals/resources/commerce_internals.ts
@@ -31,8 +31,14 @@ function seeEligibleDetails() { getProxy().getShoppingListEligibleDetails().then(({detail}) => { - const ul = document.createElement('ul'); + const element = getRequiredElement('shopping-list-eligible-details'); + getRequiredElement('shopping-list-eligible-see-details-btn').innerText = + 'Refresh'; + while (element.hasChildNodes()) { + element.removeChild(element.firstElementChild!); + } + const ul = document.createElement('ul'); ul.appendChild(createLiElement( 'IsRegionLockedFeatureEnabled', detail.isRegionLockedFeatureEnabled)); ul.appendChild(createLiElement( @@ -51,7 +57,7 @@ ul.appendChild(createLiElement( 'IsSubjectToParentalControls', detail.isSubjectToParentalControls)); - document.getElementById('shopping-list-eligible-details')!.appendChild(ul); + element.appendChild(ul); }); }
diff --git a/components/content_settings/core/browser/content_settings_registry_unittest.cc b/components/content_settings/core/browser/content_settings_registry_unittest.cc index 509f61c..2eba3c0 100644 --- a/components/content_settings/core/browser/content_settings_registry_unittest.cc +++ b/components/content_settings/core/browser/content_settings_registry_unittest.cc
@@ -228,4 +228,17 @@ federated_identity_auto_reauthn->GetInitialDefaultSetting()); } +TEST_F(ContentSettingsRegistryTest, SettingsHaveAHistogramMapping) { + size_t count = 0; + std::set<int> values; + for (const WebsiteSettingsInfo* info : *website_settings_registry()) { + int value = ContentSettingTypeToHistogramValue(info->type()); + EXPECT_GT(value, 0); + count++; + values.insert(value); + } + // Validate that values are unique. + EXPECT_EQ(count, values.size()); +} + } // namespace content_settings
diff --git a/components/content_settings/core/common/content_settings.cc b/components/content_settings/core/common/content_settings.cc index fcd6d94..9fa9573 100644 --- a/components/content_settings/core/common/content_settings.cc +++ b/components/content_settings/core/common/content_settings.cc
@@ -9,27 +9,25 @@ #include <utility> #include "base/check_op.h" +#include "base/containers/fixed_flat_map.h" +#include "base/metrics/histogram_functions.h" #include "base/notreached.h" #include "build/build_config.h" #include "components/content_settings/core/common/content_settings_metadata.h" +#include "components/content_settings/core/common/content_settings_types.h" #include "components/content_settings/core/common/content_settings_utils.h" namespace { -struct HistogramValue { - ContentSettingsType type; - int value; -}; - // WARNING: The value specified here for a type should match exactly the value // specified in the ContentType enum in enums.xml. Since these values are // used for histograms, please do not reuse the same value for a different // content setting. Always append to the end and increment. -// -// TODO(raymes): We should use a sparse histogram here on the hash of the -// content settings type name instead. -constexpr HistogramValue kHistogramValue[] = { - {ContentSettingsType::COOKIES, 0}, +constexpr auto kHistogramValue = base::MakeFixedFlatMap<ContentSettingsType, + int>({ + // Cookies was previously logged to bucket 0, which is not a valid bucket + // for linear histograms. + {ContentSettingsType::COOKIES, 100}, {ContentSettingsType::IMAGES, 1}, {ContentSettingsType::JAVASCRIPT, 2}, // Removed PLUGINS in M91. @@ -41,6 +39,8 @@ {ContentSettingsType::MEDIASTREAM_MIC, 12}, {ContentSettingsType::MEDIASTREAM_CAMERA, 13}, {ContentSettingsType::PROTOCOL_HANDLERS, 14}, + // PPAPI_BROKER is deprecated and shouldn't get logged anymore. + {ContentSettingsType::DEPRECATED_PPAPI_BROKER, -1}, {ContentSettingsType::AUTOMATIC_DOWNLOADS, 16}, {ContentSettingsType::MIDI_SYSEX, 17}, {ContentSettingsType::SSL_CERT_DECISIONS, 19}, @@ -48,6 +48,7 @@ {ContentSettingsType::APP_BANNER, 22}, {ContentSettingsType::SITE_ENGAGEMENT, 23}, {ContentSettingsType::DURABLE_STORAGE, 24}, + // Removed "Key generation setting" {ContentSettingsType::BLUETOOTH_GUARD, 26}, {ContentSettingsType::BACKGROUND_SYNC, 27}, {ContentSettingsType::AUTOPLAY, 28}, @@ -119,7 +120,19 @@ {ContentSettingsType::ANTI_ABUSE, 96}, {ContentSettingsType::THIRD_PARTY_STORAGE_PARTITIONING, 97}, {ContentSettingsType::HTTPS_ENFORCED, 98}, -}; + {ContentSettingsType::USB_CHOOSER_DATA, 99}, + // The value 100 is assigned to COOKIES! + {ContentSettingsType::GET_DISPLAY_MEDIA_SET_SELECT_ALL_SCREENS, 101}, + {ContentSettingsType::MIDI, 102}, + + // As mentioned at the top, please don't forget to update ContentType in + // enums.xml when you add entries here! +}); + +constexpr int kkHistogramValueMax = std::max_element( + kHistogramValue.begin(), + kHistogramValue.end(), + [](const auto a, const auto b) { return a.second < b.second; }) -> second; void FilterRulesForType(ContentSettingsForOneType& settings, const GURL& primary_url) { @@ -140,28 +153,24 @@ : static_cast<ContentSetting>(content_setting); } -int ContentSettingTypeToHistogramValue(ContentSettingsType content_setting, - size_t* num_values) { - *num_values = std::size(kHistogramValue); +void RecordContentSettingsHistogram(const char* name, + ContentSettingsType content_setting) { + base::UmaHistogramExactLinear( + name, ContentSettingTypeToHistogramValue(content_setting), + kkHistogramValueMax + 1); +} - // Verify the array is sorted by enum type and contains all values. - DCHECK(std::is_sorted(std::begin(kHistogramValue), std::end(kHistogramValue), - [](const HistogramValue& a, const HistogramValue& b) { - return a.type < b.type; - })); - static_assert( - kHistogramValue[std::size(kHistogramValue) - 1].type == - ContentSettingsType( - static_cast<int32_t>(ContentSettingsType::NUM_TYPES) - 1), - "Update content settings histogram lookup"); +int ContentSettingTypeToHistogramValue(ContentSettingsType content_setting) { + static_assert(kHistogramValue.size() == + static_cast<size_t>(ContentSettingsType::NUM_TYPES), + "Update content settings histogram lookup"); - const HistogramValue* found = std::lower_bound( - std::begin(kHistogramValue), std::end(kHistogramValue), content_setting, - [](const HistogramValue& a, ContentSettingsType b) { - return a.type < b; - }); - if (found != std::end(kHistogramValue) && found->type == content_setting) - return found->value; + auto* found = kHistogramValue.find(content_setting); + if (found != kHistogramValue.end()) { + DCHECK_NE(found->second, -1) + << "Used for deprecated settings: " << static_cast<int>(found->first); + return found->second; + } NOTREACHED(); return -1; }
diff --git a/components/content_settings/core/common/content_settings.h b/components/content_settings/core/common/content_settings.h index 8a72a705..7af9be7d 100644 --- a/components/content_settings/core/common/content_settings.h +++ b/components/content_settings/core/common/content_settings.h
@@ -40,9 +40,11 @@ ContentSetting IntToContentSetting(int content_setting); // Converts a given content setting to its histogram value, for use when saving -// content settings types to a histogram. -int ContentSettingTypeToHistogramValue(ContentSettingsType content_setting, - size_t* num_values); +// content settings types to UKM. For UMA use RecordContentSettingsHistogram. +int ContentSettingTypeToHistogramValue(ContentSettingsType content_setting); +// Records a linear histogram for |content_setting|. +void RecordContentSettingsHistogram(const char* name, + ContentSettingsType content_setting); struct ContentSettingPatternSource { ContentSettingPatternSource(const ContentSettingsPattern& primary_pattern,
diff --git a/components/crash/android/java/src/org/chromium/components/crash/PureJavaExceptionHandler.java b/components/crash/android/java/src/org/chromium/components/crash/PureJavaExceptionHandler.java index 61a2262..4554392 100644 --- a/components/crash/android/java/src/org/chromium/components/crash/PureJavaExceptionHandler.java +++ b/components/crash/android/java/src/org/chromium/components/crash/PureJavaExceptionHandler.java
@@ -5,7 +5,6 @@ package org.chromium.components.crash; import org.chromium.base.annotations.CalledByNative; -import org.chromium.build.annotations.MainDex; /** * This UncaughtExceptionHandler will upload the stacktrace when there is an uncaught exception. @@ -13,7 +12,6 @@ * This happens before native is loaded, and will replace by JavaExceptionReporter after native * finishes loading. */ -@MainDex public class PureJavaExceptionHandler implements Thread.UncaughtExceptionHandler { private final Thread.UncaughtExceptionHandler mParent; private boolean mHandlingException;
diff --git a/components/crash/android/java/src/org/chromium/components/crash/PureJavaExceptionReporter.java b/components/crash/android/java/src/org/chromium/components/crash/PureJavaExceptionReporter.java index afe73aee..a4f0c7b1 100644 --- a/components/crash/android/java/src/org/chromium/components/crash/PureJavaExceptionReporter.java +++ b/components/crash/android/java/src/org/chromium/components/crash/PureJavaExceptionReporter.java
@@ -14,7 +14,6 @@ import org.chromium.base.ContextUtils; import org.chromium.base.PiiElider; import org.chromium.base.StrictModeContext; -import org.chromium.build.annotations.MainDex; import org.chromium.components.minidump_uploader.CrashFileManager; import org.chromium.components.version_info.VersionInfo; @@ -32,7 +31,6 @@ * * This class is written in pure Java, so it can handle exception happens before native is loaded. */ -@MainDex public abstract class PureJavaExceptionReporter implements PureJavaExceptionHandler.JavaExceptionReporter { // report fields, please keep the name sync with MIME blocks in breakpad_linux.cc
diff --git a/components/crash/content/browser/child_exit_observer_android.cc b/components/crash/content/browser/child_exit_observer_android.cc index 0b9c634..5f019af 100644 --- a/components/crash/content/browser/child_exit_observer_android.cc +++ b/components/crash/content/browser/child_exit_observer_android.cc
@@ -44,14 +44,9 @@ ChildExitObserver::ChildExitObserver() { DCHECK_CURRENTLY_ON(BrowserThread::UI); - notification_registrar_.Add(this, - content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, - content::NotificationService::AllSources()); - notification_registrar_.Add(this, - content::NOTIFICATION_RENDERER_PROCESS_CLOSED, - content::NotificationService::AllSources()); BrowserChildProcessObserver::Add(this); - scoped_observation_.Observe(crashpad::CrashHandlerHost::Get()); + scoped_crash_handler_host_observation_.Observe( + crashpad::CrashHandlerHost::Get()); } ChildExitObserver::~ChildExitObserver() { @@ -78,6 +73,9 @@ // The child process pid isn't available when process is gone, keep a mapping // between process_host_id and pid, so we can find it later. process_host_id_to_pid_[host->GetID()] = host->GetProcess().Handle(); + if (!render_process_host_observation_.IsObservingSource(host)) { + render_process_host_observation_.AddObservation(host); + } } void ChildExitObserver::OnChildExit(TerminationInfo* info) { @@ -138,12 +136,22 @@ // Subsequent BrowserChildProcessHostDisconnected will call OnChildExit. } -void ChildExitObserver::Observe(int type, - const content::NotificationSource& source, - const content::NotificationDetails& details) { +void ChildExitObserver::RenderProcessExited( + content::RenderProcessHost* host, + const content::ChildProcessTerminationInfo& info) { + ProcessRenderProcessHostLifetimeEndEvent(host, &info); +} + +void ChildExitObserver::RenderProcessHostDestroyed( + content::RenderProcessHost* host) { + ProcessRenderProcessHostLifetimeEndEvent(host, nullptr); + render_process_host_observation_.RemoveObservation(host); +} + +void ChildExitObserver::ProcessRenderProcessHostLifetimeEndEvent( + content::RenderProcessHost* rph, + const content::ChildProcessTerminationInfo* content_info) { DCHECK_CURRENTLY_ON(BrowserThread::UI); - content::RenderProcessHost* rph = - content::Source<content::RenderProcessHost>(source).ptr(); TerminationInfo info; info.process_host_id = rph->GetID(); info.pid = rph->GetProcess().Handle(); @@ -162,30 +170,21 @@ DCHECK(collector->MemoryMetrics()); info.blink_oom_metrics = *collector->MemoryMetrics(); } - switch (type) { - case content::NOTIFICATION_RENDERER_PROCESS_TERMINATED: { - // NOTIFICATION_RENDERER_PROCESS_TERMINATED is sent when the renderer - // process is cleanly shutdown. - info.normal_termination = true; - info.renderer_shutdown_requested = rph->ShutdownRequested(); - break; - } - case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: { - // We do not care about android fast shutdowns as it is a known case where - // the renderer is intentionally killed when we are done with it. - info.normal_termination = rph->FastShutdownStarted(); - info.renderer_shutdown_requested = rph->ShutdownRequested(); - info.app_state = base::android::ApplicationStatusListener::GetState(); - const auto& content_info = - *content::Details<content::ChildProcessTerminationInfo>(details) - .ptr(); - PopulateTerminationInfo(content_info, &info); - break; - } - default: - NOTREACHED(); - return; + + if (content_info) { + // We do not care about android fast shutdowns as it is a known case where + // the renderer is intentionally killed when we are done with it. + info.normal_termination = rph->FastShutdownStarted(); + info.renderer_shutdown_requested = rph->ShutdownRequested(); + info.app_state = base::android::ApplicationStatusListener::GetState(); + PopulateTerminationInfo(*content_info, &info); + } else { + // No |content_info| is provided when the renderer process is cleanly + // shutdown. + info.normal_termination = true; + info.renderer_shutdown_requested = rph->ShutdownRequested(); } + const auto& iter = process_host_id_to_pid_.find(rph->GetID()); // NOTIFICATION_RENDERER_PROCESS_CLOSED corresponds to death of an underlying // RenderProcess. NOTIFICATION_RENDERER_PROCESS_TERMINATED corresponds to when
diff --git a/components/crash/content/browser/child_exit_observer_android.h b/components/crash/content/browser/child_exit_observer_android.h index 4b80ce64..46dcf6a 100644 --- a/components/crash/content/browser/child_exit_observer_android.h +++ b/components/crash/content/browser/child_exit_observer_android.h
@@ -12,15 +12,15 @@ #include "base/android/application_status_listener.h" #include "base/android/child_process_binding_types.h" #include "base/process/process.h" +#include "base/scoped_multi_source_observation.h" #include "base/scoped_observation.h" #include "base/synchronization/lock.h" #include "components/crash/content/browser/crash_handler_host_linux.h" #include "content/public/browser/browser_child_process_observer.h" #include "content/public/browser/child_process_host.h" -#include "content/public/browser/notification_observer.h" -#include "content/public/browser/notification_registrar.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_process_host_creation_observer.h" +#include "content/public/browser/render_process_host_observer.h" #include "content/public/common/process_type.h" #include "third_party/blink/public/common/oom_intervention/oom_intervention_types.h" @@ -35,7 +35,7 @@ // The ChildExitObserver instance exists on the browser main thread. class ChildExitObserver : public content::BrowserChildProcessObserver, public content::RenderProcessHostCreationObserver, - public content::NotificationObserver, + public content::RenderProcessHostObserver, public crashpad::CrashHandlerHost::Observer { public: struct TerminationInfo { @@ -133,16 +133,21 @@ const content::ChildProcessData& data, const content::ChildProcessTerminationInfo& info) override; - // NotificationObserver implementation: - void Observe(int type, - const content::NotificationSource& source, - const content::NotificationDetails& details) override; + // RenderProcessHostObserver implementation. + void RenderProcessExited( + content::RenderProcessHost* host, + const content::ChildProcessTerminationInfo& info) override; + void RenderProcessHostDestroyed(content::RenderProcessHost* host) override; + + // Processes RenderProcessHost exited and destroyed events. |content_info| is + // expected to be null for destroyed events. + void ProcessRenderProcessHostLifetimeEndEvent( + content::RenderProcessHost* rph, + const content::ChildProcessTerminationInfo* content_info); // Called on child process exit (including crash). void OnChildExit(TerminationInfo* info); - content::NotificationRegistrar notification_registrar_; - base::Lock registered_clients_lock_; std::vector<std::unique_ptr<Client>> registered_clients_; @@ -153,11 +158,15 @@ // accessed on the UI thread. std::map<int, TerminationInfo> browser_child_process_info_; + base::ScopedMultiSourceObservation<content::RenderProcessHost, + content::RenderProcessHostObserver> + render_process_host_observation_{this}; + base::Lock crash_signals_lock_; std::map<base::ProcessId, int> child_pid_to_crash_signal_; base::ScopedObservation<crashpad::CrashHandlerHost, crashpad::CrashHandlerHost::Observer> - scoped_observation_{this}; + scoped_crash_handler_host_observation_{this}; }; } // namespace crash_reporter
diff --git a/components/device_signals/core/browser/mock_user_delegate.h b/components/device_signals/core/browser/mock_user_delegate.h index dc71b1a5..6eb7d9fd 100644 --- a/components/device_signals/core/browser/mock_user_delegate.h +++ b/components/device_signals/core/browser/mock_user_delegate.h
@@ -16,8 +16,12 @@ ~MockUserDelegate() override; MOCK_METHOD(bool, IsAffiliated, (), (const, override)); - MOCK_METHOD(bool, IsManaged, (), (const, override)); + MOCK_METHOD(bool, IsManagedUser, (), (const, override)); MOCK_METHOD(bool, IsSameUser, (const std::string&), (const, override)); + MOCK_METHOD(std::set<policy::PolicyScope>, + GetPolicyScopesNeedingSignals, + (), + (const, override)); }; } // namespace device_signals
diff --git a/components/device_signals/core/browser/user_delegate.h b/components/device_signals/core/browser/user_delegate.h index ca9fdc5..7579fef 100644 --- a/components/device_signals/core/browser/user_delegate.h +++ b/components/device_signals/core/browser/user_delegate.h
@@ -5,8 +5,11 @@ #ifndef COMPONENTS_DEVICE_SIGNALS_CORE_BROWSER_USER_DELEGATE_H_ #define COMPONENTS_DEVICE_SIGNALS_CORE_BROWSER_USER_DELEGATE_H_ +#include <set> #include <string> +#include "components/policy/core/common/policy_types.h" + namespace device_signals { // Delegate representing the user that is currently logged-in to the browser @@ -20,11 +23,15 @@ virtual bool IsAffiliated() const = 0; // Returns true if the current browser user is managed. - virtual bool IsManaged() const = 0; + virtual bool IsManagedUser() const = 0; // Returns true if `gaia_id` represents the same user as the one currently // logged-in to the browser. virtual bool IsSameUser(const std::string& gaia_id) const = 0; + + // Returns the currently enabled Scopes for policies known to require signals. + virtual std::set<policy::PolicyScope> GetPolicyScopesNeedingSignals() + const = 0; }; } // namespace device_signals
diff --git a/components/device_signals/core/browser/user_permission_service_impl.cc b/components/device_signals/core/browser/user_permission_service_impl.cc index b18348a..3fe7ba9f 100644 --- a/components/device_signals/core/browser/user_permission_service_impl.cc +++ b/components/device_signals/core/browser/user_permission_service_impl.cc
@@ -4,11 +4,14 @@ #include "components/device_signals/core/browser/user_permission_service_impl.h" +#include <set> + #include "base/check.h" #include "components/device_signals/core/browser/pref_names.h" #include "components/device_signals/core/browser/user_context.h" #include "components/device_signals/core/browser/user_delegate.h" #include "components/policy/core/common/management/management_service.h" +#include "components/policy/core/common/policy_types.h" #include "components/prefs/pref_service.h" namespace device_signals { @@ -33,9 +36,26 @@ return false; } - return !IsDeviceCloudManaged() && - user_prefs_->GetBoolean( - prefs::kUnmanagedDeviceSignalsConsentFlowEnabled); + bool consent_required_by_specific_policy = + !IsDeviceCloudManaged() && + user_prefs_->GetBoolean(prefs::kUnmanagedDeviceSignalsConsentFlowEnabled); + + bool consent_required_by_dependent_policy = false; + std::set<policy::PolicyScope> scopes = + user_delegate_->GetPolicyScopesNeedingSignals(); + if (scopes.find(policy::POLICY_SCOPE_USER) != scopes.end()) { + if (IsDeviceCloudManaged()) { + // Managed device, only trigger the consent flow if the user is + // unaffiliated. + consent_required_by_dependent_policy = !user_delegate_->IsAffiliated(); + } else { + // Unmanaged device. + consent_required_by_dependent_policy = true; + } + } + + return consent_required_by_specific_policy || + consent_required_by_dependent_policy; } UserPermission UserPermissionServiceImpl::CanUserCollectSignals( @@ -49,7 +69,7 @@ return UserPermission::kUnknownUser; } - if (!user_delegate_->IsManaged()) { + if (!user_delegate_->IsManagedUser()) { return UserPermission::kConsumerUser; } @@ -73,16 +93,29 @@ } UserPermission UserPermissionServiceImpl::CanCollectSignals() { - // For now, the only condition that is required is that the current - // browser is Cloud-managed. The rationale being that signals can be - // collected on managed devices by their managing organization, but - // would require more scrutiny for unmanaged browsers (including - // getting user consent). However, support for unmanaged browsers is - // not required yet. + if (HasUserConsented()) { + return UserPermission::kGranted; + } + if (!IsDeviceCloudManaged()) { + // Consent is required on unmanaged devices. return UserPermission::kMissingConsent; } - return UserPermission::kGranted; + + if (!user_delegate_->IsManagedUser() || user_delegate_->IsAffiliated()) { + // Grant access to signals if the profile is unmanaged or affiliated. + return UserPermission::kGranted; + } + + // In unaffiliated contexts, signals can only be collected without consent if + // they are solely needed by a device-level policy. + std::set<policy::PolicyScope> scopes = + user_delegate_->GetPolicyScopesNeedingSignals(); + bool only_needed_by_device = + (scopes.find(policy::POLICY_SCOPE_MACHINE) != scopes.end()) && + scopes.size() == 1U; + return only_needed_by_device ? UserPermission::kGranted + : UserPermission::kMissingConsent; } bool UserPermissionServiceImpl::HasUserConsented() const {
diff --git a/components/device_signals/core/browser/user_permission_service_impl_unittest.cc b/components/device_signals/core/browser/user_permission_service_impl_unittest.cc index bbfecc6..445ca2d 100644 --- a/components/device_signals/core/browser/user_permission_service_impl_unittest.cc +++ b/components/device_signals/core/browser/user_permission_service_impl_unittest.cc
@@ -22,6 +22,7 @@ using policy::EnterpriseManagementAuthority; using policy::ScopedManagementServiceOverrideForTesting; using testing::_; +using testing::AnyNumber; using testing::Return; namespace device_signals { @@ -63,7 +64,7 @@ EnterpriseManagementAuthority::CLOUD_DOMAIN); } - void SetDeviceAsCloudUnmanaged() { + void SetUserAsCloudManaged() { scoped_override_.emplace(&management_service_, EnterpriseManagementAuthority::CLOUD); } @@ -73,6 +74,18 @@ test_prefs_.SetBoolean(prefs::kDeviceSignalsConsentReceived, true); } + void SetPolicyScopesNeedingSignals(bool machine_scope, bool user_scope) { + std::set<policy::PolicyScope> scopes; + if (machine_scope) { + scopes.insert(policy::POLICY_SCOPE_MACHINE); + } + if (user_scope) { + scopes.insert(policy::POLICY_SCOPE_USER); + } + EXPECT_CALL(*mock_user_delegate_, GetPolicyScopesNeedingSignals()) + .WillOnce(Return(std::move(scopes))); + } + base::test::TaskEnvironment task_environment_; TestManagementService management_service_; @@ -93,6 +106,7 @@ // managed. TEST_F(UserPermissionServiceImplTest, ShouldCollectConsent_DeviceCloudManaged) { SetDeviceAsCloudManaged(); + SetPolicyScopesNeedingSignals(/*machine_scope=*/false, /*user_scope*/ false); EXPECT_FALSE(permission_service_->ShouldCollectConsent()); } @@ -100,16 +114,81 @@ // managed but the "enable consent flow" policy is not enabled. TEST_F(UserPermissionServiceImplTest, ShouldCollectConsent_NoEnableConsentFlowPolicy) { - SetDeviceAsCloudUnmanaged(); + SetUserAsCloudManaged(); + SetPolicyScopesNeedingSignals(/*machine_scope=*/false, /*user_scope*/ false); EXPECT_FALSE(permission_service_->ShouldCollectConsent()); } // Tests that consent needs to be collected if the device is not cloud managed // and the "enable consent flow" policy is enabled. -TEST_F(UserPermissionServiceImplTest, ShouldCollectConsent) { - SetDeviceAsCloudUnmanaged(); +TEST_F(UserPermissionServiceImplTest, + ShouldCollectConsent_SpecificPolicy_ManagedUser) { + SetUserAsCloudManaged(); test_prefs_.SetBoolean(prefs::kUnmanagedDeviceSignalsConsentFlowEnabled, true); + SetPolicyScopesNeedingSignals(/*machine_scope=*/false, /*user_scope*/ false); + EXPECT_TRUE(permission_service_->ShouldCollectConsent()); +} + +struct DeviceManagedDependentPolicyTestCase { + bool machine_scope = false; + bool user_scope = false; + bool is_affiliated = false; + bool should_collect_consent = false; +}; + +// Tests the behavior of ShouldCollectConsent against all permutations of +// dependent policy scope and affiliation. +TEST_F(UserPermissionServiceImplTest, + ShouldCollectConsent_ManagedDevice_DependentPolicy) { + SetDeviceAsCloudManaged(); + + std::array<DeviceManagedDependentPolicyTestCase, 8> test_cases = { + DeviceManagedDependentPolicyTestCase{ + /*machine_scope=*/true, /*user_scope=*/true, /*is_affiliated=*/true, + /*should_collect_consent=*/false}, + DeviceManagedDependentPolicyTestCase{ + /*machine_scope=*/true, /*user_scope=*/true, /*is_affiliated=*/false, + /*should_collect_consent=*/true}, + DeviceManagedDependentPolicyTestCase{ + /*machine_scope=*/true, /*user_scope=*/false, /*is_affiliated=*/true, + /*should_collect_consent=*/false}, + DeviceManagedDependentPolicyTestCase{ + /*machine_scope=*/true, /*user_scope=*/false, /*is_affiliated=*/false, + /*should_collect_consent=*/false}, + DeviceManagedDependentPolicyTestCase{ + /*machine_scope=*/false, /*user_scope=*/true, /*is_affiliated=*/true, + /*should_collect_consent=*/false}, + DeviceManagedDependentPolicyTestCase{ + /*machine_scope=*/false, /*user_scope=*/true, /*is_affiliated=*/false, + /*should_collect_consent=*/true}, + DeviceManagedDependentPolicyTestCase{ + /*machine_scope=*/false, /*user_scope=*/false, /*is_affiliated=*/true, + /*should_collect_consent=*/false}, + DeviceManagedDependentPolicyTestCase{ + /*machine_scope=*/false, /*user_scope=*/false, + /*is_affiliated=*/false, /*should_collect_consent=*/false}, + }; + + for (const auto& test_case : test_cases) { + SetPolicyScopesNeedingSignals(test_case.machine_scope, + test_case.user_scope); + + EXPECT_CALL(*mock_user_delegate_, IsAffiliated()) + .Times(AnyNumber()) + .WillOnce(Return(test_case.is_affiliated)); + + EXPECT_EQ(permission_service_->ShouldCollectConsent(), + test_case.should_collect_consent); + } +} + +// Tests that consent should be collected when a dependent policy is enabled on +// an unmanaged device. +TEST_F(UserPermissionServiceImplTest, + ShouldCollectConsent_UnmanagedDevice_DependentPolicy) { + SetUserAsCloudManaged(); + SetPolicyScopesNeedingSignals(/*machine_scope=*/false, /*user_scope*/ true); EXPECT_TRUE(permission_service_->ShouldCollectConsent()); } @@ -149,7 +228,7 @@ EXPECT_CALL(*mock_user_delegate_, IsSameUser(kUserGaiaId)) .WillOnce(Return(true)); - EXPECT_CALL(*mock_user_delegate_, IsManaged()).WillOnce(Return(false)); + EXPECT_CALL(*mock_user_delegate_, IsManagedUser()).WillOnce(Return(false)); EXPECT_EQ(permission_service_->CanUserCollectSignals(user_context), UserPermission::kConsumerUser); @@ -159,14 +238,14 @@ // managed and the user has not given consent. TEST_F(UserPermissionServiceImplTest, CanUserCollectSignals_BrowserNotManaged_NoConsent) { - SetDeviceAsCloudUnmanaged(); + SetUserAsCloudManaged(); UserContext user_context; user_context.user_id = kUserGaiaId; EXPECT_CALL(*mock_user_delegate_, IsSameUser(kUserGaiaId)) .WillOnce(Return(true)); - EXPECT_CALL(*mock_user_delegate_, IsManaged()).WillOnce(Return(true)); + EXPECT_CALL(*mock_user_delegate_, IsManagedUser()).WillOnce(Return(true)); EXPECT_EQ(permission_service_->CanUserCollectSignals(user_context), UserPermission::kMissingConsent); @@ -176,7 +255,7 @@ // managed and the user has given consent. TEST_F(UserPermissionServiceImplTest, CanUserCollectSignals_BrowserNotManaged_WithConsent) { - SetDeviceAsCloudUnmanaged(); + SetUserAsCloudManaged(); SetUserConsentGiven(); UserContext user_context; @@ -184,7 +263,7 @@ EXPECT_CALL(*mock_user_delegate_, IsSameUser(kUserGaiaId)) .WillOnce(Return(true)); - EXPECT_CALL(*mock_user_delegate_, IsManaged()).WillOnce(Return(true)); + EXPECT_CALL(*mock_user_delegate_, IsManagedUser()).WillOnce(Return(true)); EXPECT_EQ(permission_service_->CanUserCollectSignals(user_context), UserPermission::kGranted); @@ -202,7 +281,7 @@ EXPECT_CALL(*mock_user_delegate_, IsSameUser(kUserGaiaId)) .WillOnce(Return(true)); - EXPECT_CALL(*mock_user_delegate_, IsManaged()).WillOnce(Return(true)); + EXPECT_CALL(*mock_user_delegate_, IsManagedUser()).WillOnce(Return(true)); EXPECT_CALL(*mock_user_delegate_, IsAffiliated()).WillOnce(Return(false)); EXPECT_EQ(permission_service_->CanUserCollectSignals(user_context), @@ -221,26 +300,85 @@ EXPECT_CALL(*mock_user_delegate_, IsSameUser(kUserGaiaId)) .WillOnce(Return(true)); - EXPECT_CALL(*mock_user_delegate_, IsManaged()).WillOnce(Return(true)); + EXPECT_CALL(*mock_user_delegate_, IsManagedUser()).WillOnce(Return(true)); EXPECT_CALL(*mock_user_delegate_, IsAffiliated()).WillOnce(Return(true)); EXPECT_EQ(permission_service_->CanUserCollectSignals(user_context), UserPermission::kGranted); } +// Tests that signals can be collected if the user has already given their +// consent. +TEST_F(UserPermissionServiceImplTest, CanCollectSignals_AlreadyConsented) { + SetUserConsentGiven(); + EXPECT_EQ(permission_service_->CanCollectSignals(), UserPermission::kGranted); +} + // Tests that consent is required before allowing to collect signals from an // unmanaged browser. TEST_F(UserPermissionServiceImplTest, CanCollectSignals_BrowserNotManaged) { - SetDeviceAsCloudUnmanaged(); - + SetUserAsCloudManaged(); EXPECT_EQ(permission_service_->CanCollectSignals(), UserPermission::kMissingConsent); } -// Tests that signals can be collected from a managed browser. -TEST_F(UserPermissionServiceImplTest, CanCollectSignals_BrowserManaged) { +// Tests that signals can be collected when on a managed browser in an unmanaged +// profile. +TEST_F(UserPermissionServiceImplTest, + CanCollectSignals_BrowserManaged_UnmanagedUser) { SetDeviceAsCloudManaged(); + + EXPECT_CALL(*mock_user_delegate_, IsManagedUser()).WillOnce(Return(false)); + EXPECT_EQ(permission_service_->CanCollectSignals(), UserPermission::kGranted); } +// Tests that signals can be collected when on a managed browser in an +// affiliated profile. +TEST_F(UserPermissionServiceImplTest, + CanCollectSignals_BrowserManaged_AffiliatedUser) { + SetDeviceAsCloudManaged(); + + EXPECT_CALL(*mock_user_delegate_, IsManagedUser()).WillOnce(Return(true)); + EXPECT_CALL(*mock_user_delegate_, IsAffiliated()).WillOnce(Return(true)); + + EXPECT_EQ(permission_service_->CanCollectSignals(), UserPermission::kGranted); +} + +struct UnaffiliatedUserTestCase { + bool machine_scope = false; + bool user_scope = false; + bool can_collect = false; +}; + +// Tests whether signals can be collected in various unaffiliated context +// use-cases. +TEST_F(UserPermissionServiceImplTest, + CanCollectSignals_BrowserManaged_UnaffiliatedUser) { + SetDeviceAsCloudManaged(); + + const std::array<UnaffiliatedUserTestCase, 4> test_cases = { + UnaffiliatedUserTestCase{/*machine_scope=*/false, /*user_scope=*/false, + /*can_collect=*/false}, + UnaffiliatedUserTestCase{/*machine_scope=*/false, /*user_scope=*/true, + /*can_collect=*/false}, + UnaffiliatedUserTestCase{/*machine_scope=*/true, /*user_scope=*/false, + /*can_collect=*/true}, + UnaffiliatedUserTestCase{/*machine_scope=*/true, /*user_scope=*/true, + /*can_collect=*/false}, + }; + + for (const auto& test_case : test_cases) { + EXPECT_CALL(*mock_user_delegate_, IsManagedUser()).WillOnce(Return(true)); + EXPECT_CALL(*mock_user_delegate_, IsAffiliated()).WillOnce(Return(false)); + + SetPolicyScopesNeedingSignals(test_case.machine_scope, + test_case.user_scope); + + EXPECT_EQ(permission_service_->CanCollectSignals(), + test_case.can_collect ? UserPermission::kGranted + : UserPermission::kMissingConsent); + } +} + } // namespace device_signals
diff --git a/components/heap_profiling/multi_process/javatests/src/org/chromium/components/heap_profiling/multi_process/HeapProfilingTestShim.java b/components/heap_profiling/multi_process/javatests/src/org/chromium/components/heap_profiling/multi_process/HeapProfilingTestShim.java index 9d08e941..3780c3d6 100644 --- a/components/heap_profiling/multi_process/javatests/src/org/chromium/components/heap_profiling/multi_process/HeapProfilingTestShim.java +++ b/components/heap_profiling/multi_process/javatests/src/org/chromium/components/heap_profiling/multi_process/HeapProfilingTestShim.java
@@ -5,13 +5,11 @@ package org.chromium.components.heap_profiling.multi_process; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; /** * Provides direct access to heap_profiling_test_shim, which in turn forwards to * heap_profiling::TestDriver. Only used for testing. */ -@MainDex public class HeapProfilingTestShim { public HeapProfilingTestShim() { mNativeHeapProfilingTestShim = HeapProfilingTestShimJni.get().init(this);
diff --git a/components/media_router/browser/logger_impl_unittest.cc b/components/media_router/browser/logger_impl_unittest.cc index 3d3af73..e8f07ff 100644 --- a/components/media_router/browser/logger_impl_unittest.cc +++ b/components/media_router/browser/logger_impl_unittest.cc
@@ -53,7 +53,7 @@ std::string GetAttributeOfFirstEntry(const std::string& logs_json, const std::string& attribute) { base::Value logs = base::JSONReader::Read(logs_json).value(); - return *logs.GetList()[0].FindStringKey(attribute); + return *logs.GetList()[0].GetDict().FindString(attribute); } };
diff --git a/components/messages/android/java/src/org/chromium/components/messages/MessageFeatureList.java b/components/messages/android/java/src/org/chromium/components/messages/MessageFeatureList.java index 89254bf5..e351657 100644 --- a/components/messages/android/java/src/org/chromium/components/messages/MessageFeatureList.java +++ b/components/messages/android/java/src/org/chromium/components/messages/MessageFeatureList.java
@@ -7,13 +7,11 @@ import org.chromium.base.FeatureList; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; /** * Provides an API for querying the status of Message features. */ @JNINamespace("messages") -@MainDex public class MessageFeatureList { public static final String MESSAGES_FOR_ANDROID_STACKING_ANIMATION = "MessagesForAndroidStackingAnimation";
diff --git a/components/module_installer/android/java/src/org/chromium/components/module_installer/builder/Module.java b/components/module_installer/android/java/src/org/chromium/components/module_installer/builder/Module.java index 83b3bdc1..ffdfad3 100644 --- a/components/module_installer/android/java/src/org/chromium/components/module_installer/builder/Module.java +++ b/components/module_installer/android/java/src/org/chromium/components/module_installer/builder/Module.java
@@ -14,7 +14,6 @@ import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; import org.chromium.base.library_loader.LibraryLoader; -import org.chromium.build.annotations.MainDex; import org.chromium.components.module_installer.engine.InstallEngine; import org.chromium.components.module_installer.engine.InstallListener; import org.chromium.components.module_installer.util.Timer; @@ -22,12 +21,11 @@ /** * Represents a feature module. Can be used to install the module, access its interface, etc. See * {@link ModuleInterface} for how to conveniently create an instance of the module class for a - * specific feature module. The @MainDex annotation supports module use in the renderer process. + * specific feature module. * * @param <T> The interface of the module */ @JNINamespace("module_installer") -@MainDex public class Module<T> { private final String mName; private final Class<T> mInterfaceClass;
diff --git a/components/omnibox/browser/BUILD.gn b/components/omnibox/browser/BUILD.gn index a6182b4..3e7c3c8b 100644 --- a/components/omnibox/browser/BUILD.gn +++ b/components/omnibox/browser/BUILD.gn
@@ -227,8 +227,6 @@ "on_device_head_provider.h", "on_device_model_update_listener.cc", "on_device_model_update_listener.h", - "on_device_tail_model_observer.cc", - "on_device_tail_model_observer.h", "on_device_tail_tokenizer.cc", "on_device_tail_tokenizer.h", "open_tab_provider.cc", @@ -653,6 +651,8 @@ "//components/bookmarks/test", "//components/history/core/browser", "//components/history/core/test", + "//components/optimization_guide/core:core", + "//components/optimization_guide/proto:optimization_guide_proto", "//components/prefs:test_support", "//components/query_tiles/test:test_support", "//components/resources", @@ -671,6 +671,13 @@ # Needed to get the TOOLKIT_VIEWS define. deps += [ "//ui/views" ] } + + if (build_with_tflite_lib) { + sources += [ + "fake_on_device_tail_model_service.cc", + "fake_on_device_tail_model_service.h", + ] + } } bundle_data("unit_tests_bundle_data") {
diff --git a/components/omnibox/browser/fake_autocomplete_provider_client.cc b/components/omnibox/browser/fake_autocomplete_provider_client.cc index dc7c8492..943893f 100644 --- a/components/omnibox/browser/fake_autocomplete_provider_client.cc +++ b/components/omnibox/browser/fake_autocomplete_provider_client.cc
@@ -26,6 +26,10 @@ pref_service_ = std::make_unique<TestingPrefServiceSimple>(); local_state_ = std::make_unique<TestingPrefServiceSimple>(); tile_service_ = std::make_unique<query_tiles::FakeTileService>(); +#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) + on_device_tail_model_service_ = + std::make_unique<FakeOnDeviceTailModelService>(); +#endif // BUILDFLAG(BUILD_WITH_TFLITE_LIB) } FakeAutocompleteProviderClient::~FakeAutocompleteProviderClient() { @@ -90,3 +94,10 @@ scoped_refptr<history::TopSites> FakeAutocompleteProviderClient::GetTopSites() { return top_sites_; } + +#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) +OnDeviceTailModelService* +FakeAutocompleteProviderClient::GetOnDeviceTailModelService() const { + return on_device_tail_model_service_.get(); +} +#endif // BUILDFLAG(BUILD_WITH_TFLITE_LIB)
diff --git a/components/omnibox/browser/fake_autocomplete_provider_client.h b/components/omnibox/browser/fake_autocomplete_provider_client.h index a47dc9d..82ec721 100644 --- a/components/omnibox/browser/fake_autocomplete_provider_client.h +++ b/components/omnibox/browser/fake_autocomplete_provider_client.h
@@ -17,6 +17,11 @@ #include "components/omnibox/browser/mock_autocomplete_provider_client.h" #include "components/omnibox/browser/shortcuts_backend.h" #include "components/omnibox/browser/test_scheme_classifier.h" +#include "components/optimization_guide/machine_learning_tflite_buildflags.h" + +#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) +#include "components/omnibox/browser/fake_on_device_tail_model_service.h" +#endif // BUILDFLAG(BUILD_WITH_TFLITE_LIB) namespace bookmarks { class BookmarkModel; @@ -64,6 +69,10 @@ const TabMatcher& GetTabMatcher() const override; scoped_refptr<history::TopSites> GetTopSites() override; +#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) + OnDeviceTailModelService* GetOnDeviceTailModelService() const override; +#endif // BUILDFLAG(BUILD_WITH_TFLITE_LIB) + // Test-only setters void set_bookmark_model(std::unique_ptr<bookmarks::BookmarkModel> model) { bookmark_model_ = std::move(model); @@ -107,6 +116,10 @@ std::unique_ptr<query_tiles::TileService> tile_service_; FakeTabMatcher fake_tab_matcher_; scoped_refptr<history::TopSites> top_sites_{}; + +#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) + std::unique_ptr<FakeOnDeviceTailModelService> on_device_tail_model_service_; +#endif // BUILDFLAG(BUILD_WITH_TFLITE_LIB) }; #endif // COMPONENTS_OMNIBOX_BROWSER_FAKE_AUTOCOMPLETE_PROVIDER_CLIENT_H_
diff --git a/components/omnibox/browser/fake_on_device_tail_model_service.cc b/components/omnibox/browser/fake_on_device_tail_model_service.cc new file mode 100644 index 0000000..bb14aa9 --- /dev/null +++ b/components/omnibox/browser/fake_on_device_tail_model_service.cc
@@ -0,0 +1,34 @@ +// 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. + +#include "components/omnibox/browser/fake_on_device_tail_model_service.h" + +#include <utility> + +#include "base/task/sequenced_task_runner.h" +#include "base/task/task_traits.h" +#include "base/task/thread_pool.h" + +FakeOnDeviceTailModelService::FakeOnDeviceTailModelService() = default; + +void FakeOnDeviceTailModelService::OnModelUpdated( + optimization_guide::proto::OptimizationTarget optimization_target, + const optimization_guide::ModelInfo& model_info) { + if (optimization_target != + optimization_guide::proto:: + OPTIMIZATION_TARGET_OMNIBOX_ON_DEVICE_TAIL_SUGGEST) { + return; + } + + // Only initialize the runner and the executor here, such that tests without + // test task environment will not fail unless they explicitly call + // `OnModelUpdated`. + model_executor_task_runner_ = base::ThreadPool::CreateSequencedTaskRunner( + {base::MayBlock(), base::TaskPriority::BEST_EFFORT}); + tail_model_executor_ = + ExecutorUniquePtr(new OnDeviceTailModelExecutor(), + base::OnTaskRunnerDeleter(model_executor_task_runner_)); + + OnDeviceTailModelService::OnModelUpdated(optimization_target, model_info); +}
diff --git a/components/omnibox/browser/fake_on_device_tail_model_service.h b/components/omnibox/browser/fake_on_device_tail_model_service.h new file mode 100644 index 0000000..ade92c6e --- /dev/null +++ b/components/omnibox/browser/fake_on_device_tail_model_service.h
@@ -0,0 +1,22 @@ +// 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 COMPONENTS_OMNIBOX_BROWSER_FAKE_ON_DEVICE_TAIL_MODEL_SERVICE_H_ +#define COMPONENTS_OMNIBOX_BROWSER_FAKE_ON_DEVICE_TAIL_MODEL_SERVICE_H_ + +#include "components/omnibox/browser/on_device_tail_model_service.h" +#include "components/optimization_guide/core/model_info.h" +#include "components/optimization_guide/proto/models.pb.h" + +// Fake implementation of on device tail model service for use with tests. +class FakeOnDeviceTailModelService : public OnDeviceTailModelService { + public: + FakeOnDeviceTailModelService(); + + void OnModelUpdated( + optimization_guide::proto::OptimizationTarget optimization_target, + const optimization_guide::ModelInfo& model_info) override; +}; + +#endif // COMPONENTS_OMNIBOX_BROWSER_FAKE_ON_DEVICE_TAIL_MODEL_SERVICE_H_
diff --git a/components/omnibox/browser/on_device_head_provider.cc b/components/omnibox/browser/on_device_head_provider.cc index d70f130..c193227 100644 --- a/components/omnibox/browser/on_device_head_provider.cc +++ b/components/omnibox/browser/on_device_head_provider.cc
@@ -30,8 +30,14 @@ #include "third_party/metrics_proto/omnibox_focus_type.pb.h" #include "third_party/metrics_proto/omnibox_input_type.pb.h" +#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) +#include "components/omnibox/browser/on_device_tail_model_executor.h" +#include "components/omnibox/browser/on_device_tail_model_service.h" +#endif + namespace { const int kBaseRelevanceForUrlInput = 99; +const int kTailBaseRelevance = 90; const size_t kMaxRequestId = std::numeric_limits<size_t>::max() - 1; int OnDeviceHeadSuggestMaxScoreForNonUrlInput(bool is_incognito) { @@ -55,6 +61,13 @@ TAIL, }; +struct Suggestion { + std::string text; + SuggestionType type; + + Suggestion(std::string text, SuggestionType type) : text(text), type(type) {} +}; + } // namespace struct OnDeviceHeadProvider::OnDeviceHeadProviderParams { @@ -66,10 +79,7 @@ AutocompleteInput input; // The suggestions fetched from the on device model which matches the input. - std::vector<std::string> suggestions; - - // The type of the result suggestions. - SuggestionType suggestion_type; + std::vector<Suggestion> suggestions; // Indicates whether this request failed or not. bool failed = false; @@ -86,20 +96,6 @@ delete; }; -struct OnDeviceHeadProvider::OnDeviceModelFileParams { - // TODO(crbug.com/1372112): update head model class to take file path instead - // of the std::string file name. - std::string head_model_filename; - -#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) - base::FilePath tail_model_filepath; - - base::FilePath vocab_filepath; - - OnDeviceTailModelExecutor::ModelMetadata tail_model_metadata; -#endif -}; - // static OnDeviceHeadProvider* OnDeviceHeadProvider::Create( AutocompleteProviderClient* client, @@ -117,14 +113,7 @@ worker_task_runner_(base::ThreadPool::CreateSequencedTaskRunner( {base::TaskPriority::BEST_EFFORT, base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN, base::MayBlock()})), - on_device_search_request_id_(0) -#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) - , - on_device_tail_model_executor_( - new OnDeviceTailModelExecutor(), - base::OnTaskRunnerDeleter(worker_task_runner_)) -#endif -{ + on_device_search_request_id_(0) { AddListener(listener); } @@ -177,8 +166,7 @@ return; matches_.clear(); - if (input.text().empty() || - GetOnDeviceModelFileParams().head_model_filename.empty()) { + if (input.text().empty() || GetOnDeviceHeadModelFilename().empty()) { return; } @@ -207,14 +195,11 @@ // static std::unique_ptr<OnDeviceHeadProvider::OnDeviceHeadProviderParams> -OnDeviceHeadProvider::GetSuggestionsFromModel( - OnDeviceModelFileParams model_file_params, -#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) - OnDeviceTailModelExecutor* tail_model_executor, -#endif +OnDeviceHeadProvider::GetSuggestionsFromHeadModel( + const std::string& model_filename, const size_t provider_max_matches, std::unique_ptr<OnDeviceHeadProviderParams> params) { - if (model_file_params.head_model_filename.empty() || !params) { + if (model_filename.empty() || !params) { if (params) { params->failed = true; } @@ -225,55 +210,13 @@ std::string sanitized_input = SanitizeInput(params->input.text()); auto results = OnDeviceHeadModel::GetSuggestionsForPrefix( - model_file_params.head_model_filename, provider_max_matches, - sanitized_input); + model_filename, provider_max_matches, sanitized_input); params->suggestions.clear(); - // Fallback to the tail model when the head model has no coverage. - if (results.empty()) { -#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) - if (!tail_model_executor || - !OmniboxFieldTrial::IsOnDeviceTailSuggestEnabled()) { - return params; - } - - if (tail_model_executor->IsReady() || - tail_model_executor->Init(model_file_params.tail_model_filepath, - model_file_params.vocab_filepath, - model_file_params.tail_model_metadata)) { - // Extract search query from current URL. - std::string previous_query, query_str; - const GURL& current_url = params->input.current_url(); - if (current_url.path() == "/search" && - net::GetValueForKeyInQuery(current_url, "q", &query_str)) { - previous_query = query_str; - } - - double probability_threshold = base::GetFieldTrialParamByFeatureAsDouble( - omnibox::kOnDeviceTailModel, "ProbabilityThreshold", 0.01); - std::vector<OnDeviceTailModelExecutor::Prediction> predictions = - tail_model_executor->GenerateSuggestionsForPrefix( - sanitized_input, previous_query, provider_max_matches, - /*max_rnn_steps =*/20, probability_threshold); - - bool should_reset_executor = base::GetFieldTrialParamByFeatureAsBool( - omnibox::kOnDeviceTailModel, "ResetAfterExecution", false); - if (should_reset_executor) { - tail_model_executor->Reset(); - } - - params->suggestion_type = SuggestionType::TAIL; - for (const auto& prediction : predictions) { - params->suggestions.push_back(prediction.suggestion); - } - } -#endif - } else { - params->suggestion_type = SuggestionType::HEAD; - for (const auto& item : results) { - // The second member is the score which is not useful for provider. - params->suggestions.push_back(item.first); - } + for (const auto& item : results) { + // The second member is the score which is not useful for provider. + params->suggestions.emplace_back( + Suggestion(item.first, SuggestionType::HEAD)); } return params; } @@ -289,26 +232,79 @@ std::unique_ptr<OnDeviceHeadProviderParams> params) { DCHECK_CALLED_ON_VALID_SEQUENCE(main_sequence_checker_); if (!params || params->request_id != on_device_search_request_id_) { - SearchDone(std::move(params)); + AllSearchDone(std::move(params)); return; } worker_task_runner_->PostTaskAndReplyWithResult( FROM_HERE, - base::BindOnce(&OnDeviceHeadProvider::GetSuggestionsFromModel, - GetOnDeviceModelFileParams(), -#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) - on_device_tail_model_executor_.get(), -#endif - provider_max_matches_, std::move(params)), - base::BindOnce(&OnDeviceHeadProvider::SearchDone, + base::BindOnce(&OnDeviceHeadProvider::GetSuggestionsFromHeadModel, + GetOnDeviceHeadModelFilename(), provider_max_matches_, + std::move(params)), + base::BindOnce(&OnDeviceHeadProvider::HeadModelSearchDone, weak_ptr_factory_.GetWeakPtr())); } -void OnDeviceHeadProvider::SearchDone( +void OnDeviceHeadProvider::HeadModelSearchDone( std::unique_ptr<OnDeviceHeadProviderParams> params) { DCHECK_CALLED_ON_VALID_SEQUENCE(main_sequence_checker_); - TRACE_EVENT0("omnibox", "OnDeviceHeadProvider::SearchDone"); +#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) + if (!OmniboxFieldTrial::IsOnDeviceTailSuggestEnabled() || + client()->GetOnDeviceTailModelService() == nullptr) { + AllSearchDone(std::move(params)); + return; + } + + bool should_fetch_tail_suggestions = + (base::GetFieldTrialParamByFeatureAsBool( + omnibox::kOnDeviceTailModel, "MixHeadAndTailSuggestions", false) || + params->suggestions.empty()); + if (!should_fetch_tail_suggestions) { + AllSearchDone(std::move(params)); + return; + } + + // Extract search query from current URL. + std::string previous_query, query_str; + const GURL& current_url = params->input.current_url(); + if (current_url.path() == "/search" && + net::GetValueForKeyInQuery(current_url, "q", &query_str)) { + previous_query = query_str; + } + float probability_threshold = base::GetFieldTrialParamByFeatureAsDouble( + omnibox::kOnDeviceTailModel, "ProbabilityThreshold", 0.01); + + OnDeviceTailModelExecutor::ModelInput input( + /*prefix=*/SanitizeInput(params->input.text()), + /*previous_query=*/previous_query, + /*max_num_suggestions=*/provider_max_matches_, /*max_rnn_steps=*/20, + /*probability_threshold=*/probability_threshold); + + client()->GetOnDeviceTailModelService()->GetPredictionsForInput( + input, base::BindOnce(&OnDeviceHeadProvider::TailModelSearchDone, + weak_ptr_factory_.GetWeakPtr(), std::move(params))); +#else + AllSearchDone(std::move(params)); +#endif +} + +#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) +void OnDeviceHeadProvider::TailModelSearchDone( + std::unique_ptr<OnDeviceHeadProviderParams> params, + std::vector<OnDeviceTailModelExecutor::Prediction> predictions) { + DCHECK_CALLED_ON_VALID_SEQUENCE(main_sequence_checker_); + for (const auto& prediction : predictions) { + params->suggestions.emplace_back( + Suggestion(prediction.suggestion, SuggestionType::TAIL)); + } + AllSearchDone(std::move(params)); +} +#endif + +void OnDeviceHeadProvider::AllSearchDone( + std::unique_ptr<OnDeviceHeadProviderParams> params) { + DCHECK_CALLED_ON_VALID_SEQUENCE(main_sequence_checker_); + TRACE_EVENT0("omnibox", "OnDeviceHeadProvider::AllSearchDone"); // Ignore this request if it has been stopped or a new one has already been // created. if (!params || params->request_id != on_device_search_request_id_) @@ -327,22 +323,38 @@ params->suggestions.size(), 1, 5, 6); matches_.clear(); - int relevance = params->input.type() == metrics::OmniboxInputType::URL - ? kBaseRelevanceForUrlInput - : OnDeviceHeadSuggestMaxScoreForNonUrlInput( - client()->IsOffTheRecord()); - bool is_tail_suggestion = (params->suggestion_type == SuggestionType::TAIL); + int head_relevance = params->input.type() == metrics::OmniboxInputType::URL + ? kBaseRelevanceForUrlInput + : OnDeviceHeadSuggestMaxScoreForNonUrlInput( + client()->IsOffTheRecord()); + int tail_relevance = kTailBaseRelevance; - for (const auto& item : params->suggestions) { - matches_.push_back(BaseSearchProvider::CreateOnDeviceSearchSuggestion( - /*autocomplete_provider=*/this, /*input=*/params->input, - /*suggestion=*/base::UTF8ToUTF16(item), /*relevance=*/relevance--, - /*template_url=*/ - template_url_service->GetDefaultSearchProvider(), - /*search_terms_data=*/ - template_url_service->search_terms_data(), - /*accepted_suggestion=*/TemplateURLRef::NO_SUGGESTION_CHOSEN, - is_tail_suggestion)); + for (const auto& suggestion : params->suggestions) { + if (suggestion.type == SuggestionType::HEAD) { + matches_.push_back(BaseSearchProvider::CreateOnDeviceSearchSuggestion( + /*autocomplete_provider=*/this, /*input=*/params->input, + /*suggestion=*/base::UTF8ToUTF16(suggestion.text), + /*relevance=*/head_relevance--, + /*template_url=*/ + template_url_service->GetDefaultSearchProvider(), + /*search_terms_data=*/ + template_url_service->search_terms_data(), + /*accepted_suggestion=*/TemplateURLRef::NO_SUGGESTION_CHOSEN, + /*is_tail_suggestion=*/false)); + head_relevance--; + } else { + matches_.push_back(BaseSearchProvider::CreateOnDeviceSearchSuggestion( + /*autocomplete_provider=*/this, /*input=*/params->input, + /*suggestion=*/base::UTF8ToUTF16(suggestion.text), + /*relevance=*/tail_relevance--, + /*template_url=*/ + template_url_service->GetDefaultSearchProvider(), + /*search_terms_data=*/ + template_url_service->search_terms_data(), + /*accepted_suggestion=*/TemplateURLRef::NO_SUGGESTION_CHOSEN, + /*is_tail_suggestion=*/true)); + tail_relevance--; + } } UMA_HISTOGRAM_TIMES("Omnibox.OnDeviceHeadSuggest.AsyncQueryTime", base::TimeTicks::Now() - params->creation_time); @@ -352,22 +364,12 @@ NotifyListeners(true); } +// TODO(crbug.com/1372112): update head model class to take file path instead +// of the std::string file name. // static -OnDeviceHeadProvider::OnDeviceModelFileParams -OnDeviceHeadProvider::GetOnDeviceModelFileParams() { +std::string OnDeviceHeadProvider::GetOnDeviceHeadModelFilename() const { auto* model_update_listener = OnDeviceModelUpdateListener::GetInstance(); - OnDeviceModelFileParams model_file_params; - if (model_update_listener != nullptr) { - model_file_params.head_model_filename = - model_update_listener->head_model_filename(); -#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) - model_file_params.tail_model_filepath = - model_update_listener->tail_model_filepath(); - model_file_params.vocab_filepath = model_update_listener->vocab_filepath(); - model_file_params.tail_model_metadata = - model_update_listener->tail_model_metadata(); -#endif - } - - return model_file_params; + return model_update_listener != nullptr + ? model_update_listener->head_model_filename() + : ""; }
diff --git a/components/omnibox/browser/on_device_head_provider.h b/components/omnibox/browser/on_device_head_provider.h index 1a4720ab..96edfb3 100644 --- a/components/omnibox/browser/on_device_head_provider.h +++ b/components/omnibox/browser/on_device_head_provider.h
@@ -50,9 +50,6 @@ // from the on device head model for a search request to the model. struct OnDeviceHeadProviderParams; - // The structure holds params for on device model files. - struct OnDeviceModelFileParams; - OnDeviceHeadProvider(AutocompleteProviderClient* client, AutocompleteProviderListener* listener); ~OnDeviceHeadProvider() override; @@ -61,26 +58,34 @@ bool IsOnDeviceHeadProviderAllowed(const AutocompleteInput& input); - // Helper functions used for asynchronous search to the on device head model. + // Helper functions used for asynchronous search to the on device models. // The Autocomplete input and output from the model will be passed from - // DoSearch to SearchDone via the OnDeviceHeadProviderParams object. - // DoSearch: searches the on device model and returns the tops suggestions + // DoSearch to AllSearchDone via the OnDeviceHeadProviderParams object. + // DoSearch: searches the on device models and returns the tops suggestions // matches the given AutocompleteInput. void DoSearch(std::unique_ptr<OnDeviceHeadProviderParams> params); - // SearchDone: called after DoSearch, fills |matches_| with the suggestions - // fetches by DoSearch and then calls NotifyListeners. - void SearchDone(std::unique_ptr<OnDeviceHeadProviderParams> params); + // AllSearchDone: called after all searches are completed, fills |matches_| + // with the suggestions fetched by DoSearch and then calls NotifyListeners. + void AllSearchDone(std::unique_ptr<OnDeviceHeadProviderParams> params); + // Helper function to be called when searches to the head model is done. + void HeadModelSearchDone(std::unique_ptr<OnDeviceHeadProviderParams> params); - // Helper functions to read model file params from the static - // OnDeviceModelUpdateListener instance. - static OnDeviceModelFileParams GetOnDeviceModelFileParams(); - - // Fetches suggestions matching the params from the given on device model. - static std::unique_ptr<OnDeviceHeadProviderParams> GetSuggestionsFromModel( - OnDeviceModelFileParams model_file_params, #if BUILDFLAG(BUILD_WITH_TFLITE_LIB) - OnDeviceTailModelExecutor* tail_model_executor, + // Helper function to be called when searches to the tail model is done. + void TailModelSearchDone( + std::unique_ptr<OnDeviceHeadProviderParams> params, + std::vector<OnDeviceTailModelExecutor::Prediction> predictions); #endif + + // Helper functions to read head model filename from the static + // OnDeviceModelUpdateListener instance. + std::string GetOnDeviceHeadModelFilename() const; + + // Fetches suggestions matching the params from the given on device head + // model. + static std::unique_ptr<OnDeviceHeadProviderParams> + GetSuggestionsFromHeadModel( + const std::string& model_filename, const size_t provider_max_matches, std::unique_ptr<OnDeviceHeadProviderParams> params); @@ -99,14 +104,6 @@ // AutocompleteController. size_t on_device_search_request_id_; -#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) - using ExecutorUniquePtr = - std::unique_ptr<OnDeviceTailModelExecutor, base::OnTaskRunnerDeleter>; - - // The executor to run the tail suggest model. - ExecutorUniquePtr on_device_tail_model_executor_; -#endif - base::WeakPtrFactory<OnDeviceHeadProvider> weak_ptr_factory_{this}; };
diff --git a/components/omnibox/browser/on_device_head_provider_unittest.cc b/components/omnibox/browser/on_device_head_provider_unittest.cc index 3a2b240..2a42050 100644 --- a/components/omnibox/browser/on_device_head_provider_unittest.cc +++ b/components/omnibox/browser/on_device_head_provider_unittest.cc
@@ -24,6 +24,10 @@ #include "testing/gtest/include/gtest/gtest.h" #include "third_party/metrics_proto/omnibox_focus_type.pb.h" +#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) +#include "components/optimization_guide/core/test_model_info_builder.h" +#endif + using testing::_; using testing::NiceMock; using testing::Return; @@ -82,11 +86,24 @@ metadata.mutable_lstm_model_params()->set_state_size(512); metadata.mutable_lstm_model_params()->set_embedding_dimension(64); - auto* update_listener = OnDeviceModelUpdateListener::GetInstance(); - if (update_listener) { - update_listener->OnTailModelUpdate(tail_model_path, additional_files, - metadata); - } + optimization_guide::proto::Any any_metadata; + any_metadata.set_type_url( + "type.googleapis.com/com.foo.OnDeviceTailSuggestModelMetadata"); + metadata.SerializeToString(any_metadata.mutable_value()); + + std::unique_ptr<optimization_guide::ModelInfo> model_info = + optimization_guide::TestModelInfoBuilder() + .SetModelFilePath(tail_model_path) + .SetAdditionalFiles(additional_files) + .SetVersion(123) + .SetModelMetadata(any_metadata) + .Build(); + + client_->GetOnDeviceTailModelService()->OnModelUpdated( + optimization_guide::proto::OptimizationTarget:: + OPTIMIZATION_TARGET_OMNIBOX_ON_DEVICE_TAIL_SUGGEST, + *model_info); + task_environment_.RunUntilIdle(); } #endif @@ -220,7 +237,8 @@ EXPECT_TRUE(provider_->done()); EXPECT_FALSE(provider_->matches().empty()); - EXPECT_EQ(u"facebook", provider_->matches()[0].contents); + EXPECT_TRUE(base::StartsWith(provider_->matches()[0].contents, u"facebook", + base::CompareCase::SENSITIVE)); } #endif
diff --git a/components/omnibox/browser/on_device_model_update_listener.cc b/components/omnibox/browser/on_device_model_update_listener.cc index b49cabc7..d4d0aa1e 100644 --- a/components/omnibox/browser/on_device_model_update_listener.cc +++ b/components/omnibox/browser/on_device_model_update_listener.cc
@@ -35,22 +35,6 @@ return head_model_filename_; } -base::FilePath OnDeviceModelUpdateListener::tail_model_filepath() const { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - return tail_model_filepath_; -} - -base::FilePath OnDeviceModelUpdateListener::vocab_filepath() const { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - return vocab_filepath_; -} - -optimization_guide::proto::OnDeviceTailSuggestModelMetadata -OnDeviceModelUpdateListener::tail_model_metadata() const { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - return tail_model_metadata_; -} - OnDeviceModelUpdateListener::OnDeviceModelUpdateListener() = default; OnDeviceModelUpdateListener::~OnDeviceModelUpdateListener() = default; @@ -72,29 +56,7 @@ } } -void OnDeviceModelUpdateListener::OnTailModelUpdate( - const base::FilePath& model_file, - const base::flat_set<base::FilePath>& additional_files, - const optimization_guide::proto::OnDeviceTailSuggestModelMetadata& - metadata) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - if (!(model_file.empty() || additional_files.empty())) { - tail_model_filepath_ = model_file; - tail_model_metadata_ = metadata; - for (const auto& file_path : additional_files) { - if (!file_path.empty()) { - // Currently only one additional file (i.e. vocabulary) will be sent. - vocab_filepath_ = file_path; - break; - } - } - } -} - void OnDeviceModelUpdateListener::ResetListenerForTest() { head_model_dir_.clear(); head_model_filename_.clear(); - tail_model_filepath_.clear(); - vocab_filepath_.clear(); - tail_model_metadata_.Clear(); }
diff --git a/components/omnibox/browser/on_device_model_update_listener.h b/components/omnibox/browser/on_device_model_update_listener.h index b14776c..6c1d2b6 100644 --- a/components/omnibox/browser/on_device_model_update_listener.h +++ b/components/omnibox/browser/on_device_model_update_listener.h
@@ -11,7 +11,6 @@ #include "base/files/file_path.h" #include "base/no_destructor.h" #include "base/threading/thread_checker.h" -#include "components/optimization_guide/proto/on_device_tail_suggest_model_metadata.pb.h" // This class is used by OnDeviceHeadSuggestComponentInstaller or // OnDeviceTailModelObserver to hold the filenames for the on device models @@ -25,20 +24,7 @@ // |head_model_dir_| and |head_model_filename_|. void OnHeadModelUpdate(const base::FilePath& model_dir); - // Called by on device tail model observer when tail model update is completed - // to update |tail_model_filename_|, |vocab_filename_| and - // |tail_model_metadata_|. - void OnTailModelUpdate( - const base::FilePath& model_file, - const base::flat_set<base::FilePath>& additional_files, - const optimization_guide::proto::OnDeviceTailSuggestModelMetadata& - metadata); - std::string head_model_filename() const; - base::FilePath tail_model_filepath() const; - base::FilePath vocab_filepath() const; - optimization_guide::proto::OnDeviceTailSuggestModelMetadata - tail_model_metadata() const; private: friend class base::NoDestructor<OnDeviceModelUpdateListener>; @@ -59,16 +45,6 @@ // The filename of the head model. std::string head_model_filename_; - // The file path of the tail model. - base::FilePath tail_model_filepath_; - - // The file path of the vocabulary file for the tail model. - base::FilePath vocab_filepath_; - - // The metadata for the tail model. - optimization_guide::proto::OnDeviceTailSuggestModelMetadata - tail_model_metadata_; - THREAD_CHECKER(thread_checker_); };
diff --git a/components/omnibox/browser/on_device_model_update_listener_unittest.cc b/components/omnibox/browser/on_device_model_update_listener_unittest.cc index c6e01791..31c3dec5 100644 --- a/components/omnibox/browser/on_device_model_update_listener_unittest.cc +++ b/components/omnibox/browser/on_device_model_update_listener_unittest.cc
@@ -4,7 +4,6 @@ #include "components/omnibox/browser/on_device_model_update_listener.h" -#include "base/containers/flat_set.h" #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/memory/raw_ptr.h" @@ -17,8 +16,6 @@ namespace { static const char kHeadModelFilename[] = "on_device_head_test_model_index.bin"; -static const char kTailModelFilename[] = "test_tail_model.tflite"; -static const char kVocabFilename[] = "vocab_test.txt"; const base::FilePath GetTestDataDir() { base::FilePath file_path; @@ -53,27 +50,4 @@ task_environment_.RunUntilIdle(); ASSERT_TRUE(base::EndsWith(listener_->head_model_filename(), kHeadModelFilename, base::CompareCase::SENSITIVE)); -} - -TEST_F(OnDeviceModelUpdateListenerTest, OnTailModelUpdate) { - base::FilePath dir_path, model_path, vocab_path; - dir_path = GetTestDataDir(); - model_path = dir_path.AppendASCII(kTailModelFilename); - vocab_path = dir_path.AppendASCII(kVocabFilename); - - base::flat_set<base::FilePath> additional_files; - additional_files.insert(vocab_path); - - optimization_guide::proto::OnDeviceTailSuggestModelMetadata metadata; - metadata.mutable_lstm_model_params()->set_state_size(33); - - listener_->OnTailModelUpdate(model_path, additional_files, metadata); - - task_environment_.RunUntilIdle(); - ASSERT_TRUE(base::EndsWith(listener_->tail_model_filepath().MaybeAsASCII(), - kTailModelFilename, base::CompareCase::SENSITIVE)); - ASSERT_TRUE(base::EndsWith(listener_->vocab_filepath().MaybeAsASCII(), - kVocabFilename, base::CompareCase::SENSITIVE)); - ASSERT_EQ(33, - listener_->tail_model_metadata().lstm_model_params().state_size()); } \ No newline at end of file
diff --git a/components/omnibox/browser/on_device_tail_model_executor.cc b/components/omnibox/browser/on_device_tail_model_executor.cc index 6c8151f..ed2a0fc 100644 --- a/components/omnibox/browser/on_device_tail_model_executor.cc +++ b/components/omnibox/browser/on_device_tail_model_executor.cc
@@ -61,6 +61,21 @@ } // namespace +OnDeviceTailModelExecutor::ModelInput::ModelInput() = default; + +OnDeviceTailModelExecutor::ModelInput::ModelInput(std::string prefix, + std::string previous_query, + size_t max_num_suggestions, + size_t max_rnn_steps, + float probability_threshold) + : prefix(std::move(prefix)), + previous_query(std::move(previous_query)), + max_num_suggestions(max_num_suggestions), + max_rnn_steps(max_rnn_steps), + probability_threshold(probability_threshold) {} + +OnDeviceTailModelExecutor::ModelInput::~ModelInput() = default; + OnDeviceTailModelExecutor::RnnCellStates::RnnCellStates() = default; OnDeviceTailModelExecutor::RnnCellStates::RnnCellStates(size_t num_layer, @@ -508,39 +523,35 @@ std::vector<OnDeviceTailModelExecutor::Prediction> OnDeviceTailModelExecutor::GenerateSuggestionsForPrefix( - const std::string& prefix, - const std::string& previous_query, - size_t max_num_suggestions, - size_t max_rnn_steps, - float probability_threshold) { + const ModelInput& input) { DCHECK(IsReady()); std::vector<Prediction> predictions; - if (prefix.empty()) { + if (input.prefix.empty()) { return predictions; } OnDeviceTailTokenizer::Tokenization input_tokenization; - tokenizer_->CreatePrefixTokenization(prefix, &input_tokenization); + tokenizer_->CreatePrefixTokenization(input.prefix, &input_tokenization); OnDeviceTailTokenizer::TokenIds prev_query_token_ids; - tokenizer_->TokenizePrevQuery(previous_query, &prev_query_token_ids); + tokenizer_->TokenizePrevQuery(input.previous_query, &prev_query_token_ids); std::vector<float> prev_query_encoding; BeamNode root_beam; if (!GetRootBeamNode(input_tokenization, prev_query_token_ids, &prev_query_encoding, &root_beam)) { - DVLOG(1) << "Failed to get root beam node for prefix [" << prefix << "][" - << previous_query << "]"; + DVLOG(1) << "Failed to get root beam node for prefix [" << input.prefix + << "][" << input.previous_query << "]"; return predictions; } OnDeviceTailModelExecutor::CandidateQueue partial_candidates, completed_candidates; partial_candidates.emplace(std::move(root_beam)); - float log_prob_threshold = GetLogProbability(probability_threshold); + float log_prob_threshold = GetLogProbability(input.probability_threshold); - for (size_t i = 0; i < max_rnn_steps; ++i) { + for (size_t i = 0; i < input.max_rnn_steps; ++i) { if (partial_candidates.empty()) { break; } @@ -555,7 +566,7 @@ RnnStepOutput rnn_step_output; if (RunRnnStep(beam.rnn_step_cache_key, beam.token_ids.back(), prev_query_encoding, beam.states, &rnn_step_output)) { - CreateNewBeams(rnn_step_output, beam, max_num_suggestions, + CreateNewBeams(rnn_step_output, beam, input.max_num_suggestions, log_prob_threshold, &partial_candidates, &completed_candidates); @@ -593,7 +604,7 @@ } // Remove echo suggestion. - if (suggestion == prefix) { + if (suggestion == input.prefix) { continue; }
diff --git a/components/omnibox/browser/on_device_tail_model_executor.h b/components/omnibox/browser/on_device_tail_model_executor.h index dd662cc2..7d9332c 100644 --- a/components/omnibox/browser/on_device_tail_model_executor.h +++ b/components/omnibox/browser/on_device_tail_model_executor.h
@@ -35,6 +35,24 @@ float probability; }; + // The struct holds the input parameters needed to generate predictions from + // the model. + struct ModelInput { + ModelInput(); + ModelInput(std::string prefix, + std::string previous_query, + size_t max_num_suggestions, + size_t max_rnn_steps, + float probability_threshold); + ~ModelInput(); + + std::string prefix; + std::string previous_query; + size_t max_num_suggestions; + size_t max_rnn_steps; + float probability_threshold; + }; + using ModelMetadata = optimization_guide::proto::OnDeviceTailSuggestModelMetadata; @@ -56,12 +74,7 @@ // with minimum probability `probability_threshold` for the given `prefix` and // `previous_query`. The given prefix will only be extended at most // `max_rnn_steps` times. - std::vector<Prediction> GenerateSuggestionsForPrefix( - const std::string& prefix, - const std::string& previous_query, - size_t max_num_suggestions, - size_t max_rnn_steps, - float probability_threshold); + std::vector<Prediction> GenerateSuggestionsForPrefix(const ModelInput& input); private: friend class OnDeviceTailModelExecutorPublic;
diff --git a/components/omnibox/browser/on_device_tail_model_executor_unittest.cc b/components/omnibox/browser/on_device_tail_model_executor_unittest.cc index debb29c..667bb2ea 100644 --- a/components/omnibox/browser/on_device_tail_model_executor_unittest.cc +++ b/components/omnibox/browser/on_device_tail_model_executor_unittest.cc
@@ -348,28 +348,23 @@ std::vector<OnDeviceTailModelExecutor::Prediction> predictions; { - predictions = executor_->GenerateSuggestionsForPrefix( - /*prefix =*/"faceb", /*previous_query=*/"", - /*max_num_suggestions =*/5, /*max_rnn_steps =*/20, - /*probability_threshold =*/0.05); + OnDeviceTailModelExecutor::ModelInput input("faceb", "", 5, 20, 0.05); + predictions = executor_->GenerateSuggestionsForPrefix(input); EXPECT_FALSE(predictions.empty()); EXPECT_TRUE(base::StartsWith(predictions[0].suggestion, "facebook", base::CompareCase::SENSITIVE)); } { - predictions = executor_->GenerateSuggestionsForPrefix( - /*prefix =*/"", /*previous_query=*/"snapchat", - /*max_num_suggestions =*/5, /*max_rnn_steps =*/20, - /*probability_threshold =*/0.05); + OnDeviceTailModelExecutor::ModelInput input("", "snapchat", 5, 20, 0.05); + predictions = executor_->GenerateSuggestionsForPrefix(input); EXPECT_TRUE(predictions.empty()); } { - predictions = executor_->GenerateSuggestionsForPrefix( - /*prefix =*/"faceb", /*previous_query=*/"snapchat", - /*max_num_suggestions =*/5, /*max_rnn_steps =*/20, - /*probability_threshold =*/0.05); + OnDeviceTailModelExecutor::ModelInput input("faceb", "snapchat", 5, 20, + 0.05); + predictions = executor_->GenerateSuggestionsForPrefix(input); EXPECT_FALSE(predictions.empty()); EXPECT_TRUE(base::StartsWith(predictions[0].suggestion, "facebook", base::CompareCase::SENSITIVE));
diff --git a/components/omnibox/browser/on_device_tail_model_observer.cc b/components/omnibox/browser/on_device_tail_model_observer.cc deleted file mode 100644 index afa3547..0000000 --- a/components/omnibox/browser/on_device_tail_model_observer.cc +++ /dev/null
@@ -1,56 +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. - -#include "components/omnibox/browser/on_device_tail_model_observer.h" - -#include "base/logging.h" -#include "components/omnibox/browser/on_device_model_update_listener.h" -#include "components/optimization_guide/core/optimization_guide_util.h" -#include "components/optimization_guide/proto/models.pb.h" -#include "components/optimization_guide/proto/on_device_tail_suggest_model_metadata.pb.h" - -OnDeviceTailModelObserver::OnDeviceTailModelObserver( - optimization_guide::OptimizationGuideModelProvider* opt_guide) - : opt_guide_(opt_guide) { - if (opt_guide_) { - opt_guide_->AddObserverForOptimizationTargetModel( - optimization_guide::proto:: - OPTIMIZATION_TARGET_OMNIBOX_ON_DEVICE_TAIL_SUGGEST, - /* model_metadata= */ absl::nullopt, this); - } -} - -OnDeviceTailModelObserver::~OnDeviceTailModelObserver() { - opt_guide_->RemoveObserverForOptimizationTargetModel( - optimization_guide::proto:: - OPTIMIZATION_TARGET_OMNIBOX_ON_DEVICE_TAIL_SUGGEST, - this); - opt_guide_ = nullptr; -} - -void OnDeviceTailModelObserver::OnModelUpdated( - optimization_guide::proto::OptimizationTarget optimization_target, - const optimization_guide::ModelInfo& model_info) { - if (optimization_target != - optimization_guide::proto:: - OPTIMIZATION_TARGET_OMNIBOX_ON_DEVICE_TAIL_SUGGEST) { - return; - } - auto* listener = OnDeviceModelUpdateListener::GetInstance(); - if (listener) { - absl::optional<optimization_guide::proto::OnDeviceTailSuggestModelMetadata> - metadata = optimization_guide::ParsedAnyMetadata< - optimization_guide::proto::OnDeviceTailSuggestModelMetadata>( - model_info.GetModelMetadata().value()); - - if (!metadata.has_value()) { - DVLOG(1) << "Failed to fetch metadata for Omnibox on device tail model"; - return; - } - - listener->OnTailModelUpdate(model_info.GetModelFilePath(), - model_info.GetAdditionalFiles(), - metadata.value()); - } -}
diff --git a/components/omnibox/browser/on_device_tail_model_observer.h b/components/omnibox/browser/on_device_tail_model_observer.h deleted file mode 100644 index 9328f2f..0000000 --- a/components/omnibox/browser/on_device_tail_model_observer.h +++ /dev/null
@@ -1,32 +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 COMPONENTS_OMNIBOX_BROWSER_ON_DEVICE_TAIL_MODEL_OBSERVER_H_ -#define COMPONENTS_OMNIBOX_BROWSER_ON_DEVICE_TAIL_MODEL_OBSERVER_H_ - -#include "base/memory/raw_ptr.h" -#include "components/optimization_guide/core/optimization_guide_model_provider.h" -#include "components/optimization_guide/core/optimization_target_model_observer.h" - -// The optimization target model observer implementation to update the files -// for Omnibox on device tail suggest. -class OnDeviceTailModelObserver - : public optimization_guide::OptimizationTargetModelObserver { - public: - explicit OnDeviceTailModelObserver( - optimization_guide::OptimizationGuideModelProvider* opt_guide); - ~OnDeviceTailModelObserver() override; - - // optimization_guide::OptimizationTargetModelObserver implementation: - void OnModelUpdated( - optimization_guide::proto::OptimizationTarget optimization_target, - const optimization_guide::ModelInfo& model_info) override; - - private: - // Optimization Guide Service that provides model files for this service. - raw_ptr<optimization_guide::OptimizationGuideModelProvider> opt_guide_ = - nullptr; -}; - -#endif // COMPONENTS_OMNIBOX_BROWSER_ON_DEVICE_TAIL_MODEL_OBSERVER_H_
diff --git a/components/omnibox/browser/on_device_tail_model_service.cc b/components/omnibox/browser/on_device_tail_model_service.cc index 8973711..f1064f9 100644 --- a/components/omnibox/browser/on_device_tail_model_service.cc +++ b/components/omnibox/browser/on_device_tail_model_service.cc
@@ -53,14 +53,12 @@ std::vector<OnDeviceTailModelExecutor::Prediction> RunTailModelExecutor( OnDeviceTailModelExecutor* executor, - const OnDeviceTailModelService::OnDeviceTailModelInput& input) { + const OnDeviceTailModelExecutor::ModelInput& input) { std::vector<OnDeviceTailModelExecutor::Prediction> predictions; if (executor == nullptr || !executor->IsReady()) { return predictions; } - predictions = executor->GenerateSuggestionsForPrefix( - input.sanitized_input, input.previous_query, input.max_num_suggestions, - input.max_num_step, input.probability_threshold); + predictions = executor->GenerateSuggestionsForPrefix(input); return predictions; } @@ -82,6 +80,9 @@ } } +OnDeviceTailModelService::OnDeviceTailModelService() + : tail_model_executor_(nullptr, base::OnTaskRunnerDeleter(nullptr)) {} + OnDeviceTailModelService::~OnDeviceTailModelService() { if (model_provider_) { model_provider_->RemoveObserverForOptimizationTargetModel( @@ -115,7 +116,6 @@ DVLOG(1) << "Failed to fetch metadata for Omnibox on device tail model"; return; } - model_executor_task_runner_->PostTask( FROM_HERE, base::BindOnce(&InitializeTailModelExecutor, tail_model_executor_.get(), @@ -125,10 +125,16 @@ } void OnDeviceTailModelService::GetPredictionsForInput( - const OnDeviceTailModelInput& input, + const OnDeviceTailModelExecutor::ModelInput& input, ResultCallback result_callback) { - model_executor_task_runner_->PostTaskAndReplyWithResult( - FROM_HERE, - base::BindOnce(&RunTailModelExecutor, tail_model_executor_.get(), input), - std::move(result_callback)); + if (model_executor_task_runner_) { + model_executor_task_runner_->PostTaskAndReplyWithResult( + FROM_HERE, + base::BindOnce(&RunTailModelExecutor, tail_model_executor_.get(), + input), + std::move(result_callback)); + } else { + std::move(result_callback) + .Run(std::vector<OnDeviceTailModelExecutor::Prediction>()); + } }
diff --git a/components/omnibox/browser/on_device_tail_model_service.h b/components/omnibox/browser/on_device_tail_model_service.h index f12b9d9..03aeb55 100644 --- a/components/omnibox/browser/on_device_tail_model_service.h +++ b/components/omnibox/browser/on_device_tail_model_service.h
@@ -22,15 +22,6 @@ using ResultCallback = base::OnceCallback<void( std::vector<OnDeviceTailModelExecutor::Prediction>)>; - // TODO(crbug.com/1372112): move this struct into model executor class. - struct OnDeviceTailModelInput { - std::string sanitized_input; - std::string previous_query; - size_t max_num_suggestions; - size_t max_num_step; - float probability_threshold; - }; - explicit OnDeviceTailModelService( optimization_guide::OptimizationGuideModelProvider* model_provider); ~OnDeviceTailModelService() override; @@ -45,14 +36,22 @@ const optimization_guide::ModelInfo& model_info) override; // Calls the model executor to generate predictions for the input. - void GetPredictionsForInput(const OnDeviceTailModelInput& input, - ResultCallback result_callback); + void GetPredictionsForInput( + const OnDeviceTailModelExecutor::ModelInput& input, + ResultCallback result_callback); private: friend class OnDeviceTailModelServiceTest; + friend class FakeOnDeviceTailModelService; + + // The default constructor used with tests only, which will create nullptrs + // for all private members such that tests can initialize members later on + // demand. + OnDeviceTailModelService(); // The task runner to run tail model executor. - scoped_refptr<base::SequencedTaskRunner> model_executor_task_runner_; + scoped_refptr<base::SequencedTaskRunner> model_executor_task_runner_ = + nullptr; using ExecutorUniquePtr = std::unique_ptr<OnDeviceTailModelExecutor, base::OnTaskRunnerDeleter>;
diff --git a/components/omnibox/browser/on_device_tail_model_service_unittest.cc b/components/omnibox/browser/on_device_tail_model_service_unittest.cc index 7c3d083..cc0e5cf6 100644 --- a/components/omnibox/browser/on_device_tail_model_service_unittest.cc +++ b/components/omnibox/browser/on_device_tail_model_service_unittest.cc
@@ -10,6 +10,7 @@ #include "base/functional/bind.h" #include "base/path_service.h" #include "base/test/task_environment.h" +#include "components/omnibox/browser/on_device_tail_model_executor.h" #include "components/optimization_guide/core/test_model_info_builder.h" #include "components/optimization_guide/core/test_optimization_guide_model_provider.h" #include "testing/gmock/include/gmock/gmock.h" @@ -94,13 +95,7 @@ TEST_F(OnDeviceTailModelServiceTest, GetPredictionsForInput) { std::vector<OnDeviceTailModelExecutor::Prediction> results; - OnDeviceTailModelService::OnDeviceTailModelInput input; - input.sanitized_input = "faceb"; - input.previous_query = ""; - input.max_num_suggestions = 5; - input.max_num_step = 20; - input.probability_threshold = 0.05; - + OnDeviceTailModelExecutor::ModelInput input("faceb", "", 5, 20, 0.05); OnDeviceTailModelService::ResultCallback callback = base::BindOnce( [](std::vector<OnDeviceTailModelExecutor::Prediction>* results, std::vector<OnDeviceTailModelExecutor::Prediction> predictions) {
diff --git a/components/optimization_guide/core/prediction_model_override.cc b/components/optimization_guide/core/prediction_model_override.cc index 6cf1c78..aee6068 100644 --- a/components/optimization_guide/core/prediction_model_override.cc +++ b/components/optimization_guide/core/prediction_model_override.cc
@@ -76,7 +76,7 @@ OnPredictionModelBuiltCallback callback, bool success) { if (!success) { - LOG(ERROR) << FilePathToString(base_model_dir) << "failed to unzip"; + LOG(ERROR) << FilePathToString(base_model_dir) << " failed to unzip"; std::move(callback).Run(nullptr); return; }
diff --git a/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoFeatures.java b/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoFeatures.java index 2ee2879..60287a0 100644 --- a/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoFeatures.java +++ b/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoFeatures.java
@@ -7,7 +7,6 @@ import org.chromium.base.Features; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; /** * Provides an API for querying the status of Page Info features. @@ -15,7 +14,6 @@ * TODO(crbug.com/1060097): generate this file. */ @JNINamespace("page_info") -@MainDex public class PageInfoFeatures extends Features { public static final String PAGE_INFO_STORE_INFO_NAME = "PageInfoStoreInfo";
diff --git a/components/page_info/page_info.cc b/components/page_info/page_info.cc index 505cfbd4..2196cb3e 100644 --- a/components/page_info/page_info.cc +++ b/components/page_info/page_info.cc
@@ -553,19 +553,15 @@ // Count how often a permission for a specific content type is changed using // the Page Info UI. - size_t num_values; - int histogram_value = ContentSettingTypeToHistogramValue(type, &num_values); - base::UmaHistogramExactLinear("WebsiteSettings.OriginInfo.PermissionChanged", - histogram_value, num_values); + RecordContentSettingsHistogram("WebsiteSettings.OriginInfo.PermissionChanged", + type); if (setting == ContentSetting::CONTENT_SETTING_ALLOW) { - base::UmaHistogramExactLinear( - "WebsiteSettings.OriginInfo.PermissionChanged.Allowed", histogram_value, - num_values); + RecordContentSettingsHistogram( + "WebsiteSettings.OriginInfo.PermissionChanged.Allowed", type); } else if (setting == ContentSetting::CONTENT_SETTING_BLOCK) { - base::UmaHistogramExactLinear( - "WebsiteSettings.OriginInfo.PermissionChanged.Blocked", histogram_value, - num_values); + RecordContentSettingsHistogram( + "WebsiteSettings.OriginInfo.PermissionChanged.Blocked", type); } // This is technically redundant given the histogram above, but putting the
diff --git a/components/password_manager/core/browser/affiliation/affiliations_prefetcher_unittest.cc b/components/password_manager/core/browser/affiliation/affiliations_prefetcher_unittest.cc index 48bb25dd..9f4f587 100644 --- a/components/password_manager/core/browser/affiliation/affiliations_prefetcher_unittest.cc +++ b/components/password_manager/core/browser/affiliation/affiliations_prefetcher_unittest.cc
@@ -501,9 +501,15 @@ ->OnLoginsRetained(nullptr, forms); } +// Test both true and false (kFillingAcrossAffiliatedWebsites on/off) on Android +// only. On other platforms, this is already enabled by default. INSTANTIATE_TEST_SUITE_P(FillingAcrossAffiliatedWebsites, AffiliationsPrefetcherTest, +#if BUILDFLAG(IS_ANDROID) ::testing::Bool()); +#else + ::testing::Values(true)); +#endif class AffiliationsPrefetcherWithTwoStoresTest : public AffiliationsPrefetcherTest {
diff --git a/components/password_manager/core/browser/password_form_manager.cc b/components/password_manager/core/browser/password_form_manager.cc index 8eea75b..2a7f239 100644 --- a/components/password_manager/core/browser/password_form_manager.cc +++ b/components/password_manager/core/browser/password_form_manager.cc
@@ -145,10 +145,6 @@ return false; DCHECK(error.recovery_type != PasswordStoreBackendErrorRecoveryType::kUnrecoverable); - if (!base::FeatureList::IsEnabled( - password_manager::features::kUnifiedPasswordManagerErrorMessages)) { - return false; - } return true; } #endif
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 39ca4920..f777997f 100644 --- a/components/password_manager/core/browser/password_form_manager_unittest.cc +++ b/components/password_manager/core/browser/password_form_manager_unittest.cc
@@ -2897,8 +2897,6 @@ TEST_P(PasswordFormManagerTest, ClientShouldShowErrorMessageForAuthErrorResolvable) { base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature( - features::kUnifiedPasswordManagerErrorMessages); fetcher_->SetProfileStoreBackendError(PasswordStoreBackendError( PasswordStoreBackendErrorType::kAuthErrorResolvable, PasswordStoreBackendErrorRecoveryType::kRecoverable)); @@ -2912,9 +2910,6 @@ TEST_P(PasswordFormManagerTest, ClientShouldShowErrorMessageForAuthErrorUnresolvable) { - base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature( - features::kUnifiedPasswordManagerErrorMessages); fetcher_->SetProfileStoreBackendError(PasswordStoreBackendError( PasswordStoreBackendErrorType::kAuthErrorUnresolvable, PasswordStoreBackendErrorRecoveryType::kRecoverable)); @@ -2927,23 +2922,7 @@ } TEST_P(PasswordFormManagerTest, - ClientShouldNotShowErrorMessageWhenFeatureIsDisabled) { - base::test::ScopedFeatureList feature_list; - feature_list.InitAndDisableFeature( - features::kUnifiedPasswordManagerErrorMessages); - fetcher_->SetProfileStoreBackendError(PasswordStoreBackendError( - PasswordStoreBackendErrorType::kAuthErrorResolvable, - PasswordStoreBackendErrorRecoveryType::kRecoverable)); - - EXPECT_CALL(client_, ShowPasswordManagerErrorMessage).Times(0); - fetcher_->NotifyFetchCompleted(); -} - -TEST_P(PasswordFormManagerTest, ClientShouldNotShowErrorMessageWhenThereIsNoError) { - base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature( - features::kUnifiedPasswordManagerErrorMessages); fetcher_->SetProfileStoreBackendError(absl::nullopt); EXPECT_CALL(client_, ShowPasswordManagerErrorMessage).Times(0); @@ -2952,9 +2931,6 @@ TEST_P(PasswordFormManagerTest, ClientShouldNotShowErrorMessageWhenErrorIsNotAuthError) { - base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature( - features::kUnifiedPasswordManagerErrorMessages); fetcher_->SetProfileStoreBackendError(PasswordStoreBackendError( PasswordStoreBackendErrorType::kUncategorized, PasswordStoreBackendErrorRecoveryType::kUnspecified)); @@ -2964,9 +2940,6 @@ } TEST_P(PasswordFormManagerTest, ClientShouldNotShowErrorMessageWhenUnenrolled) { - base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature( - features::kUnifiedPasswordManagerErrorMessages); client_.GetPrefs()->SetBoolean( password_manager::prefs::kUnenrolledFromGoogleMobileServicesDueToErrors, true);
diff --git a/components/password_manager/core/common/password_manager_features.cc b/components/password_manager/core/common/password_manager_features.cc index 1514ed33..529dc5a 100644 --- a/components/password_manager/core/common/password_manager_features.cc +++ b/components/password_manager/core/common/password_manager_features.cc
@@ -71,7 +71,7 @@ // affiliated website. BASE_FEATURE(kFillingAcrossAffiliatedWebsites, "FillingAcrossAffiliatedWebsites", -#if !BUILDFLAG(IS_ANDROID) // Desktop and iOS +#if !BUILDFLAG(IS_ANDROID) // Desktop and iOS base::FEATURE_ENABLED_BY_DEFAULT); #else base::FEATURE_DISABLED_BY_DEFAULT); @@ -241,11 +241,6 @@ "UnifiedPasswordManagerAndroid", base::FEATURE_ENABLED_BY_DEFAULT); -// Enables showing contextual error messages when UPM encounters an auth error. -BASE_FEATURE(kUnifiedPasswordManagerErrorMessages, - "UnifiedPasswordManagerErrorMessages", - base::FEATURE_ENABLED_BY_DEFAULT); - // Enables showing the warning about UPM migrating local passwords. BASE_FEATURE(kUnifiedPasswordManagerLocalPasswordsMigrationWarning, "UnifiedPasswordManagerLocalPasswordsMigrationWarning", @@ -299,21 +294,6 @@ extern const base::FeatureParam<int> kMigrationVersion = { &kUnifiedPasswordManagerAndroid, "migration_version", 1}; -// Whether to ignore the 24h timeout in between auth error messages as -// well as the 30 mins distance to sync error messages. -extern const base::FeatureParam<bool> kIgnoreAuthErrorMessageTimeouts = { - &kUnifiedPasswordManagerErrorMessages, "ignore_auth_error_message_timeouts", - false}; - -// The maximum number of authentication error UI messages to show before -// considering auth errors as unrecoverable and unenrolling the user from UPM. -// If this param is set, unenrollment will happen even if the auth error is in -// the ignore list. -// By default, there is no limit to how many errors will be shown. -extern const base::FeatureParam<int> kMaxShownUPMErrorsBeforeEviction = { - &kUnifiedPasswordManagerErrorMessages, - "max_shown_auth_errors_before_eviction", -1}; - // The string version to use for the save/update password prompts when the user // is syncing passwords. Version 1 is outdated, so the only supported versions // currently are 2 and 3. @@ -343,8 +323,9 @@ #if BUILDFLAG(IS_ANDROID) bool UsesUnifiedPasswordManagerUi() { - if (!base::FeatureList::IsEnabled(kUnifiedPasswordManagerAndroid)) + if (!base::FeatureList::IsEnabled(kUnifiedPasswordManagerAndroid)) { return false; + } UpmExperimentVariation variation = kUpmExperimentVariationParam.Get(); switch (variation) { case UpmExperimentVariation::kEnableForSyncingUsers: @@ -364,8 +345,9 @@ } bool RequiresMigrationForUnifiedPasswordManager() { - if (!base::FeatureList::IsEnabled(kUnifiedPasswordManagerAndroid)) + if (!base::FeatureList::IsEnabled(kUnifiedPasswordManagerAndroid)) { return false; + } UpmExperimentVariation variation = kUpmExperimentVariationParam.Get(); switch (variation) { case UpmExperimentVariation::kEnableForSyncingUsers: @@ -380,8 +362,9 @@ } bool ManagesLocalPasswordsInUnifiedPasswordManager() { - if (!base::FeatureList::IsEnabled(kUnifiedPasswordManagerAndroid)) + if (!base::FeatureList::IsEnabled(kUnifiedPasswordManagerAndroid)) { return false; + } UpmExperimentVariation variation = kUpmExperimentVariationParam.Get(); switch (variation) { case UpmExperimentVariation::kEnableForSyncingUsers:
diff --git a/components/password_manager/core/common/password_manager_features.h b/components/password_manager/core/common/password_manager_features.h index d6bef812..c6d7bbc 100644 --- a/components/password_manager/core/common/password_manager_features.h +++ b/components/password_manager/core/common/password_manager_features.h
@@ -52,7 +52,7 @@ BASE_DECLARE_FEATURE(kIOSPasswordUISplit); BASE_DECLARE_FEATURE(kIOSPasswordCheckup); BASE_DECLARE_FEATURE(kIOSPasswordBottomSheet); -#endif // IS_IOS +#endif // IS_IOS #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) // Desktop BASE_DECLARE_FEATURE(kMemoryMapWeaknessCheckDictionaries); #endif @@ -81,7 +81,6 @@ BASE_DECLARE_FEATURE(kShowUPMErrorNotification); BASE_DECLARE_FEATURE(kUnifiedCredentialManagerDryRun); BASE_DECLARE_FEATURE(kUnifiedPasswordManagerAndroid); -BASE_DECLARE_FEATURE(kUnifiedPasswordManagerErrorMessages); BASE_DECLARE_FEATURE(kUnifiedPasswordManagerLocalPasswordsMigrationWarning); BASE_DECLARE_FEATURE(kUnifiedPasswordManagerSyncUsingAndroidBackendOnly); BASE_DECLARE_FEATURE(kUnifiedPasswordManagerAndroidBranding); @@ -166,9 +165,6 @@ UpmExperimentVariation::kEnableForSyncingUsers, &kUpmExperimentVariationOption}; -extern const base::FeatureParam<bool> kIgnoreAuthErrorMessageTimeouts; -extern const base::FeatureParam<int> kMaxShownUPMErrorsBeforeEviction; - extern const base::FeatureParam<int> kSaveUpdatePromptSyncingStringVersion; #endif
diff --git a/components/password_manager/core/common/password_manager_pref_names.h b/components/password_manager/core/common/password_manager_pref_names.h index e184044..f930194 100644 --- a/components/password_manager/core/common/password_manager_pref_names.h +++ b/components/password_manager/core/common/password_manager_pref_names.h
@@ -118,6 +118,7 @@ // auth error UI was displayed to the user. Reset once the error is resolved // (detected by a successful backend request) or when the user is unenrolled // from UPM. +// Deprecated. TODO(crbug/1313893): cleanup. extern const char kTimesUPMAuthErrorShown[]; #endif
diff --git a/components/permissions/android/java/src/org/chromium/components/permissions/PermissionsAndroidFeatureList.java b/components/permissions/android/java/src/org/chromium/components/permissions/PermissionsAndroidFeatureList.java index 022eb000..efbf555 100644 --- a/components/permissions/android/java/src/org/chromium/components/permissions/PermissionsAndroidFeatureList.java +++ b/components/permissions/android/java/src/org/chromium/components/permissions/PermissionsAndroidFeatureList.java
@@ -8,7 +8,6 @@ import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; import org.chromium.base.library_loader.LibraryLoader; -import org.chromium.build.annotations.MainDex; /** * Provides an API for querying the status of features relevant for @@ -16,7 +15,6 @@ */ // TODO(crbug.com/1060097): Remove/update this once a generalized FeatureList exists. @JNINamespace("permissions") -@MainDex public class PermissionsAndroidFeatureList { public static final String ANDROID_APPROXIMATE_LOCATION_PERMISSION_SUPPORT = "AndroidApproximateLocationPermissionSupport";
diff --git a/components/permissions/permission_context_base_unittest.cc b/components/permissions/permission_context_base_unittest.cc index 046a00dd..da271235 100644 --- a/components/permissions/permission_context_base_unittest.cc +++ b/components/permissions/permission_context_base_unittest.cc
@@ -290,17 +290,13 @@ auto* entry = entries.front(); ukm_recorder.ExpectEntrySourceHasUrl(entry, url); - size_t num_values = 0; - - EXPECT_NE(ContentSettingTypeToHistogramValue(content_settings_type, - &num_values), - -1); + EXPECT_NE(ContentSettingTypeToHistogramValue(content_settings_type), -1); EXPECT_EQ(*ukm_recorder.GetEntryMetric(entry, "Source"), static_cast<int64_t>(PermissionSourceUI::PROMPT)); EXPECT_EQ(*ukm_recorder.GetEntryMetric(entry, "PermissionType"), - static_cast<int64_t>(ContentSettingTypeToHistogramValue( - content_settings_type, &num_values))); + static_cast<int64_t>( + ContentSettingTypeToHistogramValue(content_settings_type))); EXPECT_EQ(*ukm_recorder.GetEntryMetric(entry, "Action"), static_cast<int64_t>(action.value()));
diff --git a/components/permissions/permission_uma_util.cc b/components/permissions/permission_uma_util.cc index 267eb57..d2c754e 100644 --- a/components/permissions/permission_uma_util.cc +++ b/components/permissions/permission_uma_util.cc
@@ -267,12 +267,9 @@ if (!source_id.has_value()) return; - size_t num_values = 0; - ukm::builders::PermissionUsage builder(source_id.value()); builder.SetPermissionType(static_cast<int64_t>( - ContentSettingTypeToHistogramValue(permission_type, &num_values))); - + ContentSettingTypeToHistogramValue(permission_type))); builder.Record(ukm::UkmRecorder::Get()); } @@ -301,8 +298,6 @@ if (!source_id.has_value()) return; - size_t num_values = 0; - const int loud_ui_prompts_count_for_request_type = loud_ui_actions_counts_for_request_type.total(); const int loud_ui_prompts_count = loud_ui_actions_counts.total(); @@ -312,8 +307,8 @@ ukm::builders::Permission builder(source_id.value()); builder.SetAction(static_cast<int64_t>(action)) .SetGesture(static_cast<int64_t>(gesture_type)) - .SetPermissionType(static_cast<int64_t>( - ContentSettingTypeToHistogramValue(permission, &num_values))) + .SetPermissionType( + static_cast<int64_t>(ContentSettingTypeToHistogramValue(permission))) .SetPriorDismissals(std::min(kPriorCountCap, dismiss_count)) .SetPriorIgnores(std::min(kPriorCountCap, ignore_count)) .SetSource(static_cast<int64_t>(source_ui))
diff --git a/components/policy/core/browser/configuration_policy_handler.cc b/components/policy/core/browser/configuration_policy_handler.cc index 66a286329..6aebda2 100644 --- a/components/policy/core/browser/configuration_policy_handler.cc +++ b/components/policy/core/browser/configuration_policy_handler.cc
@@ -118,30 +118,33 @@ bool ListPolicyHandler::CheckPolicySettings(const policy::PolicyMap& policies, policy::PolicyErrorMap* errors) { - return CheckAndGetList(policies, errors, nullptr); + absl::optional<base::Value::List> empty = absl::nullopt; + return CheckAndGetList(policies, errors, empty); } void ListPolicyHandler::ApplyPolicySettings(const policy::PolicyMap& policies, PrefValueMap* prefs) { - base::Value list(base::Value::Type::NONE); - if (CheckAndGetList(policies, nullptr, &list) && list.is_list()) - ApplyList(std::move(list), prefs); + auto list = absl::make_optional<base::Value::List>(); + if (CheckAndGetList(policies, nullptr, list) && list) { + ApplyList(*std::move(list), prefs); + } } -bool ListPolicyHandler::CheckAndGetList(const policy::PolicyMap& policies, - policy::PolicyErrorMap* errors, - base::Value* filtered_list) { +bool ListPolicyHandler::CheckAndGetList( + const policy::PolicyMap& policies, + policy::PolicyErrorMap* errors, + absl::optional<base::Value::List>& filtered_list) { const base::Value* value = nullptr; if (!CheckAndGetValue(policies, errors, &value)) return false; - if (!value) + if (!value) { + filtered_list = absl::nullopt; // nothing to apply return true; + } // Filter the list, rejecting any invalid strings. const base::Value::List& list = value->GetList(); - if (filtered_list) - *filtered_list = base::Value(base::Value::Type::LIST); for (size_t list_index = 0; list_index < list.size(); ++list_index) { const base::Value& entry = list[list_index]; if (entry.type() != list_entry_type_) { @@ -162,7 +165,7 @@ } if (filtered_list) - filtered_list->GetList().Append(entry.Clone()); + filtered_list->Append(entry.Clone()); } return true;
diff --git a/components/policy/core/browser/configuration_policy_handler.h b/components/policy/core/browser/configuration_policy_handler.h index 55d92c0..9e1ba42e 100644 --- a/components/policy/core/browser/configuration_policy_handler.h +++ b/components/policy/core/browser/configuration_policy_handler.h
@@ -15,6 +15,7 @@ #include "components/policy/core/common/policy_map.h" #include "components/policy/core/common/schema.h" #include "components/policy/policy_export.h" +#include "third_party/abseil-cpp/absl/types/optional.h" class PrefValueMap; @@ -158,16 +159,18 @@ // Implement this method to apply the |filtered_list| of values of type // |list_entry_type_| as returned from CheckAndGetList() to |prefs|. - virtual void ApplyList(base::Value filtered_list, PrefValueMap* prefs) = 0; + virtual void ApplyList(base::Value::List filtered_list, + PrefValueMap* prefs) = 0; private: // Checks whether the policy value is indeed a list, filters out all entries // that are not of type |list_entry_type_| or where CheckListEntry() returns - // false, and returns the |filtered_list| if not nullptr. Sets errors for - // filtered list entries if |errors| is not nullptr. + // false, and appends to |filtered_list| if present. If the value is missing, + // |filtered_list| is cleared. Sets errors for filtered list entries if + // |errors| is not nullptr. bool CheckAndGetList(const policy::PolicyMap& policies, policy::PolicyErrorMap* errors, - base::Value* filtered_list); + absl::optional<base::Value::List>& filtered_list); // Expected value type for list entries. All other types are filtered out. base::Value::Type list_entry_type_;
diff --git a/components/policy/core/browser/configuration_policy_handler_unittest.cc b/components/policy/core/browser/configuration_policy_handler_unittest.cc index fb9692f..3019aa8 100644 --- a/components/policy/core/browser/configuration_policy_handler_unittest.cc +++ b/components/policy/core/browser/configuration_policy_handler_unittest.cc
@@ -117,9 +117,9 @@ : ListPolicyHandler(policy_name, base::Value::Type::STRING) {} protected: - void ApplyList(base::Value filtered_list, PrefValueMap* prefs) override { - DCHECK(filtered_list.is_list()); - prefs->SetValue(kTestPref, std::move(filtered_list)); + void ApplyList(base::Value::List filtered_list, + PrefValueMap* prefs) override { + prefs->SetValue(kTestPref, base::Value(std::move(filtered_list))); } };
diff --git a/components/policy/core/browser/url_scheme_list_policy_handler.cc b/components/policy/core/browser/url_scheme_list_policy_handler.cc index 69a6ca7..ca3f1d48 100644 --- a/components/policy/core/browser/url_scheme_list_policy_handler.cc +++ b/components/policy/core/browser/url_scheme_list_policy_handler.cc
@@ -42,10 +42,10 @@ // Filters more than |url_util::kMaxFiltersPerPolicy| are ignored, add a // warning message. - if (schemes->GetList().size() > policy::kMaxUrlFiltersPerPolicy) { + if (schemes->GetList().size() > max_items()) { errors->AddError(policy_name(), IDS_POLICY_URL_ALLOW_BLOCK_LIST_MAX_FILTERS_LIMIT_WARNING, - base::NumberToString(policy::kMaxUrlFiltersPerPolicy)); + base::NumberToString(max_items())); } std::vector<std::string> invalid_policies; @@ -70,8 +70,9 @@ return; base::Value::List filtered_schemes; for (const auto& entry : schemes->GetList()) { - if (filtered_schemes.size() >= policy::kMaxUrlFiltersPerPolicy) + if (filtered_schemes.size() >= max_items()) { break; + } if (ValidatePolicyEntry(entry.GetIfString())) filtered_schemes.Append(entry.Clone()); @@ -80,6 +81,10 @@ prefs->SetValue(pref_path_, base::Value(std::move(filtered_schemes))); } +size_t URLSchemeListPolicyHandler::max_items() { + return kMaxUrlFiltersPerPolicy; +} + // Validates that policy follows official pattern // https://www.chromium.org/administrators/url-blocklist-filter-format bool URLSchemeListPolicyHandler::ValidatePolicyEntry(
diff --git a/components/policy/core/browser/url_scheme_list_policy_handler.h b/components/policy/core/browser/url_scheme_list_policy_handler.h index 599dedbb..15a3d025 100644 --- a/components/policy/core/browser/url_scheme_list_policy_handler.h +++ b/components/policy/core/browser/url_scheme_list_policy_handler.h
@@ -29,8 +29,11 @@ void ApplyPolicySettings(const PolicyMap& policies, PrefValueMap* prefs) override; + protected: + virtual size_t max_items(); + virtual bool ValidatePolicyEntry(const std::string* policy); + private: - bool ValidatePolicyEntry(const std::string* policy); const char* pref_path_; FRIEND_TEST_ALL_PREFIXES(URLSchemeListPolicyHandlerTest, ValidatePolicyEntry);
diff --git a/components/policy/resources/templates/policies.yaml b/components/policy/resources/templates/policies.yaml index 85fd15ca..ce549ca 100644 --- a/components/policy/resources/templates/policies.yaml +++ b/components/policy/resources/templates/policies.yaml
@@ -1099,7 +1099,7 @@ 1098: SafeBrowsingExtensionProtectionAllowed 1099: ShowDisplaySizeScreenEnabled 1100: AnonymousSearchEnabled - + 1101: LegacyTechReportAllowlist atomic_groups: 1: Homepage 2: RemoteAccess
diff --git a/components/policy/resources/templates/policy_definitions/CloudReporting/LegacyTechReportAllowlist.yaml b/components/policy/resources/templates/policy_definitions/CloudReporting/LegacyTechReportAllowlist.yaml new file mode 100644 index 0000000..e193a0c --- /dev/null +++ b/components/policy/resources/templates/policy_definitions/CloudReporting/LegacyTechReportAllowlist.yaml
@@ -0,0 +1,40 @@ +caption: Specifies URLs that allow legacy technology report +default: [] +desc: |- + Controls if a page that use legacy technologies will be reported based on its URL. + + When policy is set, the URLs whose prefix match an allowlist entry will be used to generated report and uploaded. Unmatched URLs will be ignored. + When policy is not set or set to an empty list, no report will be generated. + + The matching patterns use a similar format to those for the '<ph name="URL_BLOCKLIST_POLICY_NAME">URLBlocklist</ph>' policy, which are documented at https://support.google.com/chrome/a?p=url_blocklist_filter_format. With a few exceptions below: + * No wildcard '*' support. + * Schema, port and query are ignored. + * subdomain must always be specified to be matched. + * At most 100 URLs can be added into the allowlist, + + For <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>, this policy is only effective when the machine is enrolled with <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN">CloudManagementEnrollmentToken</ph>. + + More information about legacy technologies can be found at https://chromestatus.com/features. +example_value: +- example.com +- www.example.edu/path +features: + cloud_only: true + dynamic_refresh: true + per_profile: true +future_on: +- chrome.* +- chrome_os +- android +- fuchsia +owners: +- zmin@chromium.org +- file://components/enterprise/browser/reporting/OWNERS +schema: + items: + type: string + type: array +tags: +- admin-sharing +- google-sharing +type: list
diff --git a/components/policy/test/data/policy_test_cases.json b/components/policy/test/data/policy_test_cases.json index cf384bc..20d38f4 100644 --- a/components/policy/test/data/policy_test_cases.json +++ b/components/policy/test/data/policy_test_cases.json
@@ -16525,6 +16525,60 @@ } ] }, + "LegacyTechReportAllowlist": { + "os": [ + "win", + "linux", + "mac", + "chromeos_lacros", + "android", + "fuchsia" + ], + "policy_pref_mapping_tests": [ + { + "policies": { + "LegacyTechReportAllowlist": [ + "https://www.example.com", + "www.example.com/path", + "192.168.0.1:8088/path", + "localhost" + ] + }, + "policies_settings": { + "LegacyTechReportAllowlist": { + "scope": "machine", + "source": "cloud" + } + }, + "prefs": { + "enterprise_reporting.legachy_tech.urls": { + "value": [ + "https://www.example.com", + "www.example.com/path", + "192.168.0.1:8088/path", + "localhost" + ] + } + } + }, + { + "policies": { + "LegacyTechReportAllowlist": [] + }, + "policies_settings": { + "LegacyTechReportAllowlist": { + "scope": "machine", + "source": "cloud" + } + }, + "prefs": { + "enterprise_reporting.legachy_tech.urls": { + "value": [] + } + } + } + ] + }, "CloudReportingUploadFrequency": { "os": [ "win",
diff --git a/components/printing/renderer/BUILD.gn b/components/printing/renderer/BUILD.gn index b87cb9ae..a7c0ba09 100644 --- a/components/printing/renderer/BUILD.gn +++ b/components/printing/renderer/BUILD.gn
@@ -22,8 +22,4 @@ "//third_party/blink/public/common", "//ui/base", ] - - if (is_mac) { - sources += [ "print_render_frame_helper_mac.mm" ] - } }
diff --git a/components/printing/renderer/print_render_frame_helper.cc b/components/printing/renderer/print_render_frame_helper.cc index 35a39df..9328ac37 100644 --- a/components/printing/renderer/print_render_frame_helper.cc +++ b/components/printing/renderer/print_render_frame_helper.cc
@@ -2568,7 +2568,6 @@ return true; } -#if !BUILDFLAG(IS_APPLE) void PrintRenderFrameHelper::PrintPageInternal(const mojom::PrintParams& params, uint32_t page_number, uint32_t page_count, @@ -2613,7 +2612,6 @@ bool ret = metafile->FinishPage(); DCHECK(ret); } -#endif // !BUILDFLAG(IS_APPLE) #if BUILDFLAG(ENABLE_PRINT_PREVIEW) void PrintRenderFrameHelper::ShowScriptedPrintPreview() {
diff --git a/components/printing/renderer/print_render_frame_helper_mac.mm b/components/printing/renderer/print_render_frame_helper_mac.mm deleted file mode 100644 index 92cbcb3..0000000 --- a/components/printing/renderer/print_render_frame_helper_mac.mm +++ /dev/null
@@ -1,62 +0,0 @@ -// Copyright 2012 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/printing/renderer/print_render_frame_helper.h" - -#import <AppKit/AppKit.h> - -#include <memory> - -#include "base/check.h" -#include "base/mac/scoped_nsautorelease_pool.h" -#include "base/metrics/histogram.h" -#include "cc/paint/paint_canvas.h" -#include "printing/buildflags/buildflags.h" -#include "printing/metafile_skia.h" -#include "printing/mojom/print.mojom.h" -#include "third_party/blink/public/web/web_local_frame.h" - -namespace printing { - -void PrintRenderFrameHelper::PrintPageInternal(const mojom::PrintParams& params, - uint32_t page_number, - uint32_t page_count, - double scale_factor, - blink::WebLocalFrame* frame, - MetafileSkia* metafile) { - double css_scale_factor = scale_factor; - mojom::PageSizeMarginsPtr page_layout_in_points = - ComputePageLayoutInPointsForCss(frame, page_number, params, - ignore_css_margins_, &css_scale_factor); - - gfx::Size page_size; - gfx::Rect content_area; - GetPageSizeAndContentAreaFromPageLayout(*page_layout_in_points, &page_size, - &content_area); - - gfx::Rect canvas_area = - params.display_header_footer ? gfx::Rect(page_size) : content_area; - - double webkit_page_shrink_factor = frame->GetPrintPageShrink(page_number); - float final_scale_factor = css_scale_factor * webkit_page_shrink_factor; - - cc::PaintCanvas* canvas = metafile->GetVectorCanvasForNewPage( - page_size, canvas_area, final_scale_factor, params.page_orientation); - if (!canvas) - return; - - canvas->SetPrintingMetafile(metafile); - if (params.display_header_footer) { - PrintHeaderAndFooter(canvas, page_number + 1, page_count, *frame, - final_scale_factor, *page_layout_in_points, params); - } - RenderPageContent(frame, page_number, canvas_area, content_area, - final_scale_factor, canvas); - - // Done printing. Close the canvas to retrieve the compiled metafile. - bool ret = metafile->FinishPage(); - DCHECK(ret); -} - -} // namespace printing
diff --git a/components/safe_browsing/content/browser/safe_browsing_navigation_observer_manager.cc b/components/safe_browsing/content/browser/safe_browsing_navigation_observer_manager.cc index d9a2ccf2..7e6269f8 100644 --- a/components/safe_browsing/content/browser/safe_browsing_navigation_observer_manager.cc +++ b/components/safe_browsing/content/browser/safe_browsing_navigation_observer_manager.cc
@@ -205,15 +205,13 @@ // need to adjust our search url to the original request. auto* retargeting_nav_event = GetNavigationEvent(retargeting_nav_event_index); - if (!nav_event->server_redirect_urls.empty()) { - // Adjust retargeting navigation event's attributes. - retargeting_nav_event->server_redirect_urls.push_back( - std::move(search_url)); - } else { - // The retargeting_nav_event original request url is unreliable, - // since that navigation can be canceled. - retargeting_nav_event->original_request_url = std::move(search_url); - } + // Adjust retargeting navigation event's attributes. The + // retargeting_nav_event original request and redirects are + // unreliable, since that navigation can be canceled. + retargeting_nav_event->server_redirect_urls = + nav_event->server_redirect_urls; + retargeting_nav_event->original_request_url = + nav_event->original_request_url; result_index = retargeting_nav_event_index; } }
diff --git a/components/safe_browsing/content/browser/safe_browsing_navigation_observer_unittest.cc b/components/safe_browsing/content/browser/safe_browsing_navigation_observer_unittest.cc index 992b3f3..88ebb06 100644 --- a/components/safe_browsing/content/browser/safe_browsing_navigation_observer_unittest.cc +++ b/components/safe_browsing/content/browser/safe_browsing_navigation_observer_unittest.cc
@@ -852,6 +852,65 @@ EXPECT_TRUE(referrer_chain[0].is_retargeting()); } +TEST_F(SBNavigationObserverTest, + CanceledRetargetingNavigationHasCorrectRedirects) { + base::Time now = base::Time::Now(); + base::Time one_second_ago = base::Time::FromDoubleT(now.ToDoubleT() - 1.0); + + SessionID source_tab = SessionID::NewUnique(); + SessionID target_tab = SessionID::NewUnique(); + + // Add two navigations. A initially opens a new tab with url B, but cancels + // that before it completes. It then navigates the new tab to C. We expect + // that asking for the referrer chain for C has C as the event url. + std::unique_ptr<NavigationEvent> first_navigation = + std::make_unique<NavigationEvent>(); + first_navigation->source_url = GURL("http://example.com/a"); + first_navigation->original_request_url = GURL("http://example.com/b"); + first_navigation->server_redirect_urls.emplace_back( + "http://example.com/b_redirect1"); + first_navigation->server_redirect_urls.emplace_back( + "http://example.com/b_redirect2"); + first_navigation->last_updated = one_second_ago; + first_navigation->navigation_initiation = + ReferrerChainEntry::RENDERER_INITIATED_WITH_USER_GESTURE; + first_navigation->source_tab_id = source_tab; + first_navigation->target_tab_id = target_tab; + first_navigation->has_committed = false; + navigation_event_list()->RecordNavigationEvent(std::move(first_navigation)); + + std::unique_ptr<NavigationEvent> second_navigation = + std::make_unique<NavigationEvent>(); + second_navigation->original_request_url = GURL("http://example.com/c"); + second_navigation->server_redirect_urls.emplace_back( + "http://example.com/c_redirect1"); + second_navigation->server_redirect_urls.emplace_back( + "http://example.com/c_redirect2"); + second_navigation->last_updated = now; + second_navigation->navigation_initiation = + ReferrerChainEntry::BROWSER_INITIATED; + second_navigation->source_tab_id = target_tab; + second_navigation->target_tab_id = target_tab; + navigation_event_list()->RecordNavigationEvent(std::move(second_navigation)); + + ReferrerChain referrer_chain; + navigation_observer_manager_->IdentifyReferrerChainByEventURL( + GURL("http://example.com/c_redirect2"), SessionID::InvalidValue(), + content::GlobalRenderFrameHostId(), 10, &referrer_chain); + + ASSERT_EQ(1, referrer_chain.size()); + + EXPECT_EQ("http://example.com/c_redirect2", referrer_chain[0].url()); + ASSERT_EQ(3, referrer_chain[0].server_redirect_chain_size()); + EXPECT_EQ("http://example.com/c", + referrer_chain[0].server_redirect_chain(0).url()); + EXPECT_EQ("http://example.com/c_redirect1", + referrer_chain[0].server_redirect_chain(1).url()); + EXPECT_EQ("http://example.com/c_redirect2", + referrer_chain[0].server_redirect_chain(2).url()); + EXPECT_TRUE(referrer_chain[0].is_retargeting()); +} + TEST_F(SBNavigationObserverTest, TestGetLatestPendingNavigationEvent) { base::Time now = base::Time::Now(); base::Time one_minute_ago = base::Time::FromDoubleT(now.ToDoubleT() - 60.0);
diff --git a/components/safe_browsing/content/renderer/phishing_classifier/scorer.cc b/components/safe_browsing/content/renderer/phishing_classifier/scorer.cc index 89803f2..0ff6d6a 100644 --- a/components/safe_browsing/content/renderer/phishing_classifier/scorer.cc +++ b/components/safe_browsing/content/renderer/phishing_classifier/scorer.cc
@@ -134,6 +134,7 @@ std::unique_ptr<tflite::task::vision::ImageClassifier> classifier, scoped_refptr<base::SequencedTaskRunner> callback_task_runner, base::OnceCallback<void(std::vector<double>)> callback) { + base::Time before_operation = base::Time::Now(); tflite::task::vision::FrameBuffer::Plane plane{ reinterpret_cast<const tflite::uint8*>(model_input.data()), {3 * input_width, 3}}; @@ -142,6 +143,8 @@ tflite::task::vision::FrameBuffer::Format::kRGB, tflite::task::vision::FrameBuffer::Orientation::kTopLeft); auto statusor_result = classifier->Classify(*frame_buffer); + base::UmaHistogramTimes("SBClientPhishing.ApplyTfliteTime.Classify", + base::Time::Now() - before_operation); if (!statusor_result.ok()) { VLOG(1) << statusor_result.status().ToString(); callback_task_runner->PostTask(
diff --git a/components/safe_browsing/core/browser/db/v4_store.cc b/components/safe_browsing/core/browser/db/v4_store.cc index 9446b88..b4df352 100644 --- a/components/safe_browsing/core/browser/db/v4_store.cc +++ b/components/safe_browsing/core/browser/db/v4_store.cc
@@ -265,6 +265,76 @@ CopyingBaseFileOutputStream stream_; }; +// A ZeroCopyInputStream that reads from a file using base::File. Any errors +// during deserialization close the file. +class BaseFileInputStream : public google::protobuf::io::ZeroCopyInputStream { + public: + // Creates and opens `input_file`. + explicit BaseFileInputStream(const base::FilePath& input_file) + : stream_(input_file), impl_(&stream_) {} + BaseFileInputStream(const BaseFileInputStream&) = delete; + BaseFileInputStream& operator=(const BaseFileInputStream&) = delete; + + // Closes the file, if it was still open. + ~BaseFileInputStream() override = default; + + // Returns `base::File::FILE_OK` if no error and the file is still open; else + // the error that led to closure of the file. + base::File::Error GetError() const { return stream_.GetError(); } + + // google::protobuf::io::ZeroCopyInputStream: + bool Next(const void** data, int* size) override { + return impl_.Next(data, size); + } + void BackUp(int count) override { return impl_.BackUp(count); } + bool Skip(int count) override { return impl_.Skip(count); } + int64_t ByteCount() const override { return impl_.ByteCount(); } + + private: + class CopyingBaseFileInputStream + : public google::protobuf::io::CopyingInputStream { + public: + explicit CopyingBaseFileInputStream(const base::FilePath& input_file) + : file_(input_file, + base::File::FLAG_OPEN | base::File::FLAG_READ | + base::File::FLAG_WIN_EXCLUSIVE_WRITE | + base::File::FLAG_WIN_SHARE_DELETE) {} + CopyingBaseFileInputStream(const CopyingBaseFileInputStream&) = delete; + CopyingBaseFileInputStream& operator=(const CopyingBaseFileInputStream&) = + delete; + ~CopyingBaseFileInputStream() override = default; + + base::File::Error GetError() const { return file_.error_details(); } + + // google::protobuf::io::CopyingInputStream: + int Read(void* buffer, int size) override { + if (!file_.IsValid()) { + return -1; + } + const int bytes_read = + file_.ReadAtCurrentPos(reinterpret_cast<char*>(buffer), size); + if (bytes_read >= 0) { + return bytes_read; + } + file_ = base::File(base::File::GetLastFileError()); + return -1; + } + + int Skip(int count) override { + if (file_.Seek(base::File::FROM_CURRENT, count) != -1) { + return count; + } + return CopyingInputStream::Skip(count); + } + + private: + base::File file_; + }; + + CopyingBaseFileInputStream stream_; + google::protobuf::io::CopyingInputStreamAdaptor impl_; +}; + } // namespace using ::google::protobuf::int32; @@ -798,22 +868,21 @@ V4StoreFileFormat file_format; int64_t file_size; { - // A temporary scope to make sure that |contents| get destroyed as soon as - // we are doing using it. - std::string contents; - if (!base::ReadFileToStringWithMaxSize(store_path_, &contents, - kMaxStoreSizeBytes)) { + BaseFileInputStream input_stream(store_path_); + if (!file_format.ParseFromZeroCopyStream(&input_stream)) { + return input_stream.GetError() != base::File::FILE_OK + ? FILE_UNREADABLE_FAILURE + : PROTO_PARSING_FAILURE; + } + // `ParseFromZeroCopyStream` will return true if the file didn't exist, so + // explicitly check for an error when reading from the file. + if (input_stream.GetError() != base::File::FILE_OK) { return FILE_UNREADABLE_FAILURE; } - - if (contents.empty()) { + file_size = input_stream.ByteCount(); + if (!file_size) { return FILE_EMPTY_FAILURE; } - - if (!file_format.ParseFromString(contents)) { - return PROTO_PARSING_FAILURE; - } - file_size = static_cast<int64_t>(contents.size()); } if (file_format.magic_number() != kFileMagic) {
diff --git a/components/segmentation_platform/internal/BUILD.gn b/components/segmentation_platform/internal/BUILD.gn index 5da475c..1532beb6 100644 --- a/components/segmentation_platform/internal/BUILD.gn +++ b/components/segmentation_platform/internal/BUILD.gn
@@ -102,6 +102,8 @@ "execution/processing/uma_feature_processor.h", "local_state_helper_impl.cc", "local_state_helper_impl.h", + "logging.cc", + "logging.h", "metadata/metadata_utils.cc", "metadata/metadata_utils.h", "metadata/metadata_writer.cc",
diff --git a/components/segmentation_platform/internal/database/cached_result_provider.cc b/components/segmentation_platform/internal/database/cached_result_provider.cc index ab9af47..a5be16d 100644 --- a/components/segmentation_platform/internal/database/cached_result_provider.cc +++ b/components/segmentation_platform/internal/database/cached_result_provider.cc
@@ -4,10 +4,12 @@ #include "components/segmentation_platform/internal/database/cached_result_provider.h" +#include "base/logging.h" #include "base/task/single_thread_task_runner.h" #include "components/segmentation_platform/internal/post_processor/post_processor.h" #include "components/segmentation_platform/internal/stats.h" #include "components/segmentation_platform/public/config.h" +#include "components/segmentation_platform/public/constants.h" namespace segmentation_platform { @@ -53,6 +55,12 @@ ClassificationResult CachedResultProvider::GetCachedResultForClient( const std::string& segmentation_key) { const auto iter = client_result_from_last_session_map_.find(segmentation_key); + if (VLOG_IS_ON(1) && iter != client_result_from_last_session_map_.end()) { + VLOG(1) << "CachedResultProvider loaded prefs with results from previous " + "session: " + << iter->second.ToDebugString() << " for segmentation key " + << segmentation_key; + } return iter == client_result_from_last_session_map_.end() ? ClassificationResult(PredictionStatus::kFailed) : iter->second;
diff --git a/components/segmentation_platform/internal/database/cached_result_writer.cc b/components/segmentation_platform/internal/database/cached_result_writer.cc index 79696937..4ce1cd4 100644 --- a/components/segmentation_platform/internal/database/cached_result_writer.cc +++ b/components/segmentation_platform/internal/database/cached_result_writer.cc
@@ -7,9 +7,11 @@ #include "base/logging.h" #include "base/task/single_thread_task_runner.h" #include "base/time/time.h" +#include "components/segmentation_platform/internal/logging.h" #include "components/segmentation_platform/internal/post_processor/post_processor.h" #include "components/segmentation_platform/internal/stats.h" #include "components/segmentation_platform/public/config.h" +#include "components/segmentation_platform/public/result.h" namespace segmentation_platform { @@ -27,6 +29,10 @@ config->on_demand_execution) { return; } + VLOG(1) << "CachedResultWriter updating prefs with new result: " + << segmentation_platform::PredictionResultToDebugString( + client_result.client_result()) + << " for segmentation key: " << config->segmentation_key; UpdateNewClientResultToPrefs(config, client_result); } @@ -54,7 +60,8 @@ stats::RecordSegmentSelectionFailure( *config, stats::SegmentationSelectionFailureReason:: kProtoPrefsUpdateNotRequired); - VLOG(1) << __func__ << ": previous client_result" + VLOG(1) << __func__ << ": previous client_result for segmentation_key: " + << config->segmentation_key << " has not yet expired. Expiration: " << expiration_time; return false; }
diff --git a/components/segmentation_platform/internal/database/segment_info_database.cc b/components/segmentation_platform/internal/database/segment_info_database.cc index d9daef4..bd66d91 100644 --- a/components/segmentation_platform/internal/database/segment_info_database.cc +++ b/components/segmentation_platform/internal/database/segment_info_database.cc
@@ -5,8 +5,13 @@ #include "components/segmentation_platform/internal/database/segment_info_database.h" #include "base/functional/callback_helpers.h" +#include "base/logging.h" #include "base/strings/string_number_conversions.h" #include "base/task/single_thread_task_runner.h" +#include "components/segmentation_platform/internal/logging.h" + +#include <sstream> +#include <string> namespace segmentation_platform { @@ -152,8 +157,14 @@ // Update results. if (result.has_value()) { + VLOG(1) << "SaveSegmentResult: saving: " + << segmentation_platform::PredictionResultToDebugString( + result.value()) + << " for segment id: " << proto::SegmentId_Name(segment_id); segment_info->mutable_prediction_result()->CopyFrom(*result); } else { + VLOG(1) << "SaveSegmentResult: clearing prediction result for segment " + << proto::SegmentId_Name(segment_id); segment_info->clear_prediction_result(); }
diff --git a/components/segmentation_platform/internal/execution/model_executor_impl.cc b/components/segmentation_platform/internal/execution/model_executor_impl.cc index 7cb3722..b9d98e0 100644 --- a/components/segmentation_platform/internal/execution/model_executor_impl.cc +++ b/components/segmentation_platform/internal/execution/model_executor_impl.cc
@@ -184,11 +184,16 @@ stats::RecordModelExecutionDurationModel( state->segment_info.segment_id(), result.has_value(), clock_->Now() - state->model_execution_start_time); - // TODO(ritikagup): Change the use of this according to MultiOutputModel. - if (result.has_value()) { - VLOG(1) << "Segmentation model result: " << result.value().at(0) - << " for segment " - << proto::SegmentId_Name(state->segment_info.segment_id()); + if (result.has_value() && result.value().size() > 0) { + if (VLOG_IS_ON(1)) { + std::stringstream log_output; + for (unsigned i = 0; i < result.value().size(); ++i) { + log_output << " output " << i << ": " << result.value().at(i); + } + VLOG(1) << "Segmentation model result: " << log_output.str() + << " for segment " + << proto::SegmentId_Name(state->segment_info.segment_id()); + } const proto::SegmentationModelMetadata& model_metadata = state->segment_info.model_metadata(); if (model_metadata.has_output_config()) {
diff --git a/components/segmentation_platform/internal/logging.cc b/components/segmentation_platform/internal/logging.cc new file mode 100644 index 0000000..f6ef7abc --- /dev/null +++ b/components/segmentation_platform/internal/logging.cc
@@ -0,0 +1,23 @@ +// 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. + +#include "components/segmentation_platform/internal/logging.h" +#include <sstream> + +namespace segmentation_platform { + +std::string PredictionResultToDebugString( + proto::PredictionResult prediction_result) { + std::stringstream debug_string; + debug_string << "PredictionResult: timestamp: " + << prediction_result.timestamp_us(); + + for (auto i = 0; i < prediction_result.result_size(); ++i) { + debug_string << " result " << i << ": " << prediction_result.result(i); + } + + return debug_string.str(); +} + +} // namespace segmentation_platform
diff --git a/components/segmentation_platform/internal/logging.h b/components/segmentation_platform/internal/logging.h new file mode 100644 index 0000000..28be2a6 --- /dev/null +++ b/components/segmentation_platform/internal/logging.h
@@ -0,0 +1,18 @@ +// 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 COMPONENTS_SEGMENTATION_PLATFORM_INTERNAL_LOGGING_H_ +#define COMPONENTS_SEGMENTATION_PLATFORM_INTERNAL_LOGGING_H_ + +#include <string> + +#include "components/segmentation_platform/public/proto/prediction_result.pb.h" + +namespace segmentation_platform { + +std::string PredictionResultToDebugString(proto::PredictionResult result); + +} + +#endif // COMPONENTS_SEGMENTATION_PLATFORM_INTERNAL_LOGGING_H_
diff --git a/components/segmentation_platform/internal/segmentation_platform_service_impl.cc b/components/segmentation_platform/internal/segmentation_platform_service_impl.cc index a44469e..e602a7ec 100644 --- a/components/segmentation_platform/internal/segmentation_platform_service_impl.cc +++ b/components/segmentation_platform/internal/segmentation_platform_service_impl.cc
@@ -297,6 +297,7 @@ signal_handler_.OnSignalListUpdated(); execution_service_.OnNewModelInfoReady(segment_info); + request_dispatcher_->OnModelUpdated(segment_info.segment_id()); // Update the service status for proxy. base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask(
diff --git a/components/segmentation_platform/internal/selection/request_dispatcher.cc b/components/segmentation_platform/internal/selection/request_dispatcher.cc index cc3aa2e..55dce1c 100644 --- a/components/segmentation_platform/internal/selection/request_dispatcher.cc +++ b/components/segmentation_platform/internal/selection/request_dispatcher.cc
@@ -3,19 +3,34 @@ // found in the LICENSE file. #include "components/segmentation_platform/internal/selection/request_dispatcher.h" +#include <set> +#include <utility> +#include "base/containers/circular_deque.h" +#include "base/functional/callback_forward.h" +#include "base/location.h" #include "base/memory/scoped_refptr.h" #include "base/task/single_thread_task_runner.h" +#include "base/time/time.h" +#include "components/segmentation_platform/internal/metadata/metadata_utils.h" #include "components/segmentation_platform/internal/selection/request_handler.h" #include "components/segmentation_platform/internal/selection/segment_result_provider.h" #include "components/segmentation_platform/internal/stats.h" #include "components/segmentation_platform/public/config.h" #include "components/segmentation_platform/public/prediction_options.h" +#include "components/segmentation_platform/public/proto/segmentation_platform.pb.h" namespace segmentation_platform { namespace { +// Amount of time to wait for model initialization. During this period requests +// for uninitialized models will be enqueued and processed either when the model +// is ready or when this timeout expires. Time is 200ms to cover 80% of cases +// (According to +// OptimizationGuide.ModelHandler.HandlerCreatedToModelAvailable histogram). +const int kModelInitializationTimeoutMs = 200; + // Wrap callback to record metrics. template <typename ResultType> base::OnceCallback<void(const ResultType&)> GetWrappedCallback( @@ -38,7 +53,37 @@ RequestDispatcher::RequestDispatcher( const std::vector<std::unique_ptr<Config>>& configs, CachedResultProvider* cached_result_provider) - : configs_(configs), cached_result_provider_(cached_result_provider) {} + : configs_(configs), cached_result_provider_(cached_result_provider) { + std::set<proto::SegmentId> found_segments; + + // Individual models must be loaded from disk or fetched from network. Fill a + // list to keep track of which ones are still pending. + for (const auto& config : *configs_) { + // Ignore segmentation keys using legacy models. + if (metadata_utils::ConfigUsesLegacyOutput(config.get())) { + legacy_output_segmentation_keys_.insert(config->segmentation_key); + } else { + // Non legacy segment IDs must have a 1:1 relationship with segmentation + // keys. These checks ensure that. + CHECK(config->segments.size() <= 1) + << "segmentation_key: " << config->segmentation_key + << " must not have multiple segments."; + + for (const auto& segment_id : config->segments) { + CHECK(!segmentation_key_by_segment_id_.contains(segment_id.first)) + << "segment_id: " << proto::SegmentId_Name(segment_id.first) + << " was found in two segmentation keys: " + << segmentation_key_by_segment_id_.at(segment_id.first) << " and " + << config->segmentation_key; + + segmentation_key_by_segment_id_.insert( + {segment_id.first, config->segmentation_key}); + } + + uninitialized_segmentation_keys_.insert(config->segmentation_key); + } + } +} RequestDispatcher::~RequestDispatcher() = default; @@ -58,13 +103,56 @@ } } - // Run any method calls that were received during initialization. + // Set a timeout to execute all pending requests even if their models didn't + // initialize after |kModelInitializationTimeoutMs|. This is to avoid waiting + // for long periods of time when models need to be downloaded, and to avoid + // requests waiting forever when there's no model. + base::SingleThreadTaskRunner::GetCurrentDefault()->PostDelayedTask( + FROM_HERE, + base::BindOnce(&RequestDispatcher::OnModelInitializationTimeout, + weak_ptr_factory_.GetWeakPtr()), + base::Milliseconds(kModelInitializationTimeoutMs)); +} + +void RequestDispatcher::ExecuteAllPendingActions() { while (!pending_actions_.empty()) { - auto callback = std::move(pending_actions_.front()); - pending_actions_.pop_front(); + ExecutePendingActionsForKey(pending_actions_.begin()->first); + } +} + +void RequestDispatcher::ExecutePendingActionsForKey( + const std::string& segmentation_key) { + auto pending_actions_for_key = pending_actions_.find(segmentation_key); + + if (pending_actions_for_key == pending_actions_.end()) { + return; + } + + while (!pending_actions_for_key->second.empty()) { + auto callback = std::move(pending_actions_for_key->second.front()); + pending_actions_for_key->second.pop_front(); base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask( FROM_HERE, std::move(callback)); } + + pending_actions_.erase(segmentation_key); +} + +void RequestDispatcher::OnModelUpdated(proto::SegmentId segment_id) { + auto key_for_updated_segment = + segmentation_key_by_segment_id_.find(segment_id); + if (key_for_updated_segment == segmentation_key_by_segment_id_.end()) { + return; + } + std::string segmentation_key = key_for_updated_segment->second; + + uninitialized_segmentation_keys_.erase(segmentation_key); + ExecutePendingActionsForKey(segmentation_key); +} + +void RequestDispatcher::OnModelInitializationTimeout() { + uninitialized_segmentation_keys_.clear(); + ExecuteAllPendingActions(); } template <typename ResultType, typename Request> @@ -74,16 +162,21 @@ scoped_refptr<InputContext> input_context, Request request, base::OnceCallback<void(const ResultType&)> callback) { + if (legacy_output_segmentation_keys_.contains(segmentation_key)) { + return; + } + // TODO(ssid): Support cached results for all APIs. DCHECK(options.on_demand_execution); // For on-demand results, we need to run the models for which we need DB // initialization to be complete. Hence cache the request if platform // initialization isn't completed yet. - if (!storage_init_status_.has_value()) { + if (!storage_init_status_.has_value() || + uninitialized_segmentation_keys_.contains(segmentation_key)) { // If the platform isn't fully initialized, cache the input arguments to // run later. - pending_actions_.push_back(base::BindOnce( + pending_actions_[segmentation_key].push_back(base::BindOnce( &RequestDispatcher::GetModelResult<ResultType, Request>, weak_ptr_factory_.GetWeakPtr(), segmentation_key, options, std::move(input_context), std::move(request), std::move(callback))); @@ -151,4 +244,12 @@ std::move(callback)); } +int RequestDispatcher::GetPendingActionCountForTesting() { + int total_actions = 0; + for (auto& actions_for_key : pending_actions_) { + total_actions += actions_for_key.second.size(); + } + return total_actions; +} + } // namespace segmentation_platform
diff --git a/components/segmentation_platform/internal/selection/request_dispatcher.h b/components/segmentation_platform/internal/selection/request_dispatcher.h index 9c5a17935..cf83321 100644 --- a/components/segmentation_platform/internal/selection/request_dispatcher.h +++ b/components/segmentation_platform/internal/selection/request_dispatcher.h
@@ -16,6 +16,7 @@ #include "components/segmentation_platform/internal/database/cached_result_provider.h" #include "components/segmentation_platform/internal/selection/request_handler.h" #include "components/segmentation_platform/public/input_context.h" +#include "components/segmentation_platform/public/proto/segmentation_platform.pb.h" #include "components/segmentation_platform/public/result.h" #include "third_party/abseil-cpp/absl/types/optional.h" @@ -46,6 +47,10 @@ std::map<std::string, std::unique_ptr<SegmentResultProvider>> result_providers); + // Called when the model for |segment_id| has been initialized. Used to + // execute any queued requests that depend on that model. + void OnModelUpdated(proto::SegmentId segment_id); + // Client API. See `SegmentationPlatformService::GetClassificationResult`. void GetClassificationResult(const std::string& segmentation_key, const PredictionOptions& options, @@ -58,7 +63,7 @@ AnnotatedNumericResultCallback callback); // For testing only. - int get_pending_actions_size_for_testing() { return pending_actions_.size(); } + int GetPendingActionCountForTesting(); void set_request_handler_for_testing( const std::string& segmentation_key, std::unique_ptr<RequestHandler> request_handler) { @@ -66,6 +71,10 @@ } private: + void OnModelInitializationTimeout(); + void ExecuteAllPendingActions(); + void ExecutePendingActionsForKey(const std::string& segmentation_key); + template <typename ResultType, typename Request> void GetModelResult(const std::string& segmentation_key, const PredictionOptions& options, @@ -79,14 +88,32 @@ // Request handlers associated with the clients. std::map<std::string, std::unique_ptr<RequestHandler>> request_handlers_; + // List of segmentation keys whose models haven't been initialized. Used to + // enqueue requests that involve an uninitialized model. It gets populated + // when the platform initializes and each element gets removed when + // |OnModelUpdated| gets called with its corresponding segment ID. All + // elements get cleared after a timeout to avoid waiting for too long. + std::set<std::string> uninitialized_segmentation_keys_; + + // List of segmentation keys with segment IDs that use the legacy output + // config (e.g. don't support multi-output models). Requests from these + // segmentation keys will be ignored. + std::set<std::string> legacy_output_segmentation_keys_; + // Delegate to provide cached results for all clients, shared among clients. const raw_ptr<CachedResultProvider> cached_result_provider_; // Storage initialization status. absl::optional<bool> storage_init_status_; + // Map from segment ID to the segmentation key that makes use of it. Used + // to run all requests that use a segment ID once its model is available. + std::map<proto::SegmentId, std::string> segmentation_key_by_segment_id_; + // For caching any method calls that were received before initialization. - base::circular_deque<base::OnceClosure> pending_actions_; + // Key is a segmentation key, value is a queue of actions that use that model. + std::map<std::string, base::circular_deque<base::OnceClosure>> + pending_actions_; base::WeakPtrFactory<RequestDispatcher> weak_ptr_factory_{this}; };
diff --git a/components/segmentation_platform/internal/selection/request_dispatcher_unittest.cc b/components/segmentation_platform/internal/selection/request_dispatcher_unittest.cc index c25b3fda..80206403 100644 --- a/components/segmentation_platform/internal/selection/request_dispatcher_unittest.cc +++ b/components/segmentation_platform/internal/selection/request_dispatcher_unittest.cc
@@ -7,8 +7,11 @@ #include "base/memory/raw_ptr.h" #include "base/metrics/user_metrics.h" #include "base/run_loop.h" +#include "base/task/single_thread_task_executor.h" +#include "base/task/single_thread_task_runner.h" #include "base/test/gmock_callback_support.h" #include "base/test/task_environment.h" +#include "base/time/time.h" #include "components/segmentation_platform/internal/post_processor/post_processing_test_utils.h" #include "components/segmentation_platform/internal/selection/request_handler.h" #include "components/segmentation_platform/internal/selection/segment_result_provider.h" @@ -57,7 +60,7 @@ SegmentId::OPTIMIZATION_TARGET_SEGMENTATION_DEVICE_SWITCHER)); configs_.emplace_back(test_utils::CreateTestConfig( kAdaptiveToolbarClient, - SegmentId::OPTIMIZATION_TARGET_SEGMENTATION_NEW_TAB)); + SegmentId::OPTIMIZATION_TARGET_SEGMENTATION_ADAPTIVE_TOOLBAR)); request_dispatcher_ = std::make_unique<RequestDispatcher>(configs_, nullptr); @@ -102,7 +105,7 @@ PredictionOptions options; options.on_demand_execution = true; - EXPECT_EQ(0, request_dispatcher_->get_pending_actions_size_for_testing()); + EXPECT_EQ(0, request_dispatcher_->GetPendingActionCountForTesting()); // Request handler will never be invoked if init fails. EXPECT_CALL(*request_handler1_, GetClassificationResult(_, _, _)).Times(0); @@ -113,7 +116,7 @@ base::BindOnce(&RequestDispatcherTest::OnGetClassificationResult, base::Unretained(this), loop.QuitClosure(), ClassificationResult(PredictionStatus::kFailed))); - EXPECT_EQ(1, request_dispatcher_->get_pending_actions_size_for_testing()); + EXPECT_EQ(1, request_dispatcher_->GetPendingActionCountForTesting()); // Finish platform initialization with failure. The request queue is flushed // and callbacks are invoked with empty results. @@ -123,15 +126,17 @@ request_dispatcher_->OnPlatformInitialized(false, &execution_service, std::move(result_providers)); loop.Run(); - EXPECT_EQ(0, request_dispatcher_->get_pending_actions_size_for_testing()); + EXPECT_EQ(0, request_dispatcher_->GetPendingActionCountForTesting()); } -TEST_F(RequestDispatcherTest, TestRequestQueuingWithInitSuccess) { - base::RunLoop loop; +TEST_F(RequestDispatcherTest, + TestRequestQueuingWithInitSuccessAndNoModelsLoading) { + base::RunLoop run_loop_1; + base::RunLoop run_loop_2; PredictionOptions options; options.on_demand_execution = true; - EXPECT_EQ(0, request_dispatcher_->get_pending_actions_size_for_testing()); + EXPECT_EQ(0, request_dispatcher_->GetPendingActionCountForTesting()); // Request from client 1. ClassificationResult result1(PredictionStatus::kSucceeded); @@ -146,8 +151,9 @@ request_dispatcher_->GetClassificationResult( kDeviceSwitcherClient, options, scoped_refptr<InputContext>(), base::BindOnce(&RequestDispatcherTest::OnGetClassificationResult, - base::Unretained(this), loop.QuitClosure(), result1)); - EXPECT_EQ(1, request_dispatcher_->get_pending_actions_size_for_testing()); + base::Unretained(this), run_loop_1.QuitClosure(), + result1)); + EXPECT_EQ(1, request_dispatcher_->GetPendingActionCountForTesting()); // Request from client 2. ClassificationResult result2(PredictionStatus::kSucceeded); @@ -162,21 +168,101 @@ request_dispatcher_->GetClassificationResult( kAdaptiveToolbarClient, options, scoped_refptr<InputContext>(), base::BindOnce(&RequestDispatcherTest::OnGetClassificationResult, - base::Unretained(this), loop.QuitClosure(), result2)); - EXPECT_EQ(2, request_dispatcher_->get_pending_actions_size_for_testing()); + base::Unretained(this), run_loop_2.QuitClosure(), + result2)); + EXPECT_EQ(2, request_dispatcher_->GetPendingActionCountForTesting()); - // Finish platform initialization with success. The request queue is flushed, - // and the request handler is invoked. + // Finish platform initialization with success. The request queue shouldn't be + // cleared because the models for the queued segments haven't been + // initialized. std::map<std::string, std::unique_ptr<SegmentResultProvider>> result_providers; ExecutionService execution_service; request_dispatcher_->OnPlatformInitialized(true, &execution_service, std::move(result_providers)); - loop.Run(); - EXPECT_EQ(0, request_dispatcher_->get_pending_actions_size_for_testing()); + EXPECT_EQ(2, request_dispatcher_->GetPendingActionCountForTesting()); + + // Run all pending tasks, this triggers a timeout to clear the request queue + // even if the models didn't load. + task_environment_.FastForwardBy(base::Seconds(1)); + EXPECT_EQ(0, request_dispatcher_->GetPendingActionCountForTesting()); + + run_loop_1.Run(); + run_loop_2.Run(); } -TEST_F(RequestDispatcherTest, TestRequestAfterInitSuccess) { +TEST_F(RequestDispatcherTest, + TestRequestQueuingWithInitSuccessAndAfterModelsLoaded) { + base::RunLoop run_loop_1; + base::RunLoop run_loop_2; + PredictionOptions options; + options.on_demand_execution = true; + + EXPECT_EQ(0, request_dispatcher_->GetPendingActionCountForTesting()); + + // Request from client 1. + ClassificationResult result1(PredictionStatus::kSucceeded); + result1.ordered_labels.emplace_back("test_label1"); + EXPECT_CALL(*request_handler1_, GetClassificationResult(_, _, _)) + .WillRepeatedly(Invoke([&](const PredictionOptions& options, + scoped_refptr<InputContext> input_context, + ClassificationResultCallback callback) { + std::move(callback).Run(result1); + })); + + request_dispatcher_->GetClassificationResult( + kDeviceSwitcherClient, options, scoped_refptr<InputContext>(), + base::BindOnce(&RequestDispatcherTest::OnGetClassificationResult, + base::Unretained(this), run_loop_1.QuitClosure(), + result1)); + EXPECT_EQ(1, request_dispatcher_->GetPendingActionCountForTesting()); + + // Request from client 2. + ClassificationResult result2(PredictionStatus::kSucceeded); + result2.ordered_labels.emplace_back("test_label2"); + EXPECT_CALL(*request_handler2_, GetClassificationResult(_, _, _)) + .WillRepeatedly(Invoke([&](const PredictionOptions& options, + scoped_refptr<InputContext> input_context, + ClassificationResultCallback callback) { + std::move(callback).Run(result2); + })); + + request_dispatcher_->GetClassificationResult( + kAdaptiveToolbarClient, options, scoped_refptr<InputContext>(), + base::BindOnce(&RequestDispatcherTest::OnGetClassificationResult, + base::Unretained(this), run_loop_2.QuitClosure(), + result2)); + EXPECT_EQ(2, request_dispatcher_->GetPendingActionCountForTesting()); + + // Finish platform initialization with success. The request queue is posted, + // but no requests are dispatched because their models are still not yet + // loaded. + std::map<std::string, std::unique_ptr<SegmentResultProvider>> + result_providers; + ExecutionService execution_service; + request_dispatcher_->OnPlatformInitialized(true, &execution_service, + std::move(result_providers)); + // Initialize platform, no requests should be executed. + EXPECT_EQ(2, request_dispatcher_->GetPendingActionCountForTesting()); + + // Set the device switcher model as initialized. Its request should be + // executed. + request_dispatcher_->OnModelUpdated( + SegmentId::OPTIMIZATION_TARGET_SEGMENTATION_DEVICE_SWITCHER); + // The device switcher request should be dispatched and + // the other one gets enqueued again. + run_loop_1.Run(); + EXPECT_EQ(1, request_dispatcher_->GetPendingActionCountForTesting()); + + // Set the new tab model as initialized. + request_dispatcher_->OnModelUpdated( + SegmentId::OPTIMIZATION_TARGET_SEGMENTATION_ADAPTIVE_TOOLBAR); + // The last request should be dispatched. + run_loop_2.Run(); + EXPECT_EQ(0, request_dispatcher_->GetPendingActionCountForTesting()); +} + +TEST_F(RequestDispatcherTest, TestRequestAfterInitSuccessAndModelsLoaded) { base::RunLoop loop; PredictionOptions options; options.on_demand_execution = true; @@ -185,8 +271,15 @@ std::map<std::string, std::unique_ptr<SegmentResultProvider>> result_providers; ExecutionService execution_service; + // Set platform as initialized. request_dispatcher_->OnPlatformInitialized(true, &execution_service, std::move(result_providers)); + // Set both models as initialized, now requests should be dispatched + // immediately without queueing. + request_dispatcher_->OnModelUpdated( + SegmentId::OPTIMIZATION_TARGET_SEGMENTATION_DEVICE_SWITCHER); + request_dispatcher_->OnModelUpdated( + SegmentId::OPTIMIZATION_TARGET_SEGMENTATION_ADAPTIVE_TOOLBAR); // Request from client 1. ClassificationResult result1(PredictionStatus::kSucceeded); @@ -202,7 +295,7 @@ kDeviceSwitcherClient, options, scoped_refptr<InputContext>(), base::BindOnce(&RequestDispatcherTest::OnGetClassificationResult, base::Unretained(this), loop.QuitClosure(), result1)); - EXPECT_EQ(0, request_dispatcher_->get_pending_actions_size_for_testing()); + EXPECT_EQ(0, request_dispatcher_->GetPendingActionCountForTesting()); // Request from client 2. ClassificationResult result2(PredictionStatus::kSucceeded); @@ -219,7 +312,7 @@ base::BindOnce(&RequestDispatcherTest::OnGetClassificationResult, base::Unretained(this), loop.QuitClosure(), result2)); loop.Run(); - EXPECT_EQ(0, request_dispatcher_->get_pending_actions_size_for_testing()); + EXPECT_EQ(0, request_dispatcher_->GetPendingActionCountForTesting()); } TEST_F(RequestDispatcherTest, TestAnnotatedNumericResultRequestWithWaiting) { @@ -241,7 +334,7 @@ kDeviceSwitcherClient, options, scoped_refptr<InputContext>(), base::BindOnce(&RequestDispatcherTest::OnGetAnnotatedNumericResult, base::Unretained(this), loop.QuitClosure(), result1)); - EXPECT_EQ(1, request_dispatcher_->get_pending_actions_size_for_testing()); + EXPECT_EQ(1, request_dispatcher_->GetPendingActionCountForTesting()); // Init platform. std::map<std::string, std::unique_ptr<SegmentResultProvider>> @@ -251,7 +344,7 @@ std::move(result_providers)); loop.Run(); - EXPECT_EQ(0, request_dispatcher_->get_pending_actions_size_for_testing()); + EXPECT_EQ(0, request_dispatcher_->GetPendingActionCountForTesting()); } } // namespace
diff --git a/components/segmentation_platform/internal/selection/segment_result_provider.cc b/components/segmentation_platform/internal/selection/segment_result_provider.cc index a8f64b1..ce388a67 100644 --- a/components/segmentation_platform/internal/selection/segment_result_provider.cc +++ b/components/segmentation_platform/internal/selection/segment_result_provider.cc
@@ -13,6 +13,7 @@ #include "components/segmentation_platform/internal/database/signal_storage_config.h" #include "components/segmentation_platform/internal/execution/default_model_manager.h" #include "components/segmentation_platform/internal/execution/execution_request.h" +#include "components/segmentation_platform/internal/logging.h" #include "components/segmentation_platform/internal/metadata/metadata_utils.h" #include "components/segmentation_platform/internal/proto/model_prediction.pb.h" #include "components/segmentation_platform/internal/scheduler/execution_service.h" @@ -174,7 +175,7 @@ if (request_state->options->ignore_db_scores) { VLOG(1) << __func__ << ": segment=" << SegmentId_Name(request_state->options->segment_id) - << " executing model to get score"; + << " ignoring DB score, executing model."; ExecuteModelAndGetScore(std::move(request_state), DefaultModelManager::SegmentSource::DATABASE, std::move(db_score_callback)); @@ -206,7 +207,7 @@ DefaultModelManager::SegmentSource::DEFAULT_MODEL); VLOG(1) << __func__ << ": segment=" << SegmentId_Name(request_state->options->segment_id) - << " executing model to get score"; + << " failed to get score from database, executing server model."; ExecuteModelAndGetScore(std::move(request_state), fallback_source_to_execute, std::move(db_score_callback)); @@ -270,6 +271,12 @@ return; } + VLOG(1) << __func__ << ": Retrieved prediction from database: " + << segmentation_platform::PredictionResultToDebugString( + db_segment_info->prediction_result()) + << " for segment " + << proto::SegmentId_Name(request_state->options->segment_id); + float rank = ComputeDiscreteMapping( request_state->options->discrete_mapping_key, *db_segment_info); std::move(callback).Run(std::move(request_state), @@ -342,11 +349,12 @@ std::unique_ptr<SegmentResult> segment_result; bool success = result->status == ModelExecutionStatus::kSuccess; + bool is_default_model = + source == DefaultModelManager::SegmentSource::DEFAULT_MODEL; if (success) { - state = source == DefaultModelManager::SegmentSource::DEFAULT_MODEL - ? ResultState::kDefaultModelScoreUsed - : ResultState::kTfliteModelScoreUsed; + state = is_default_model ? ResultState::kDefaultModelScoreUsed + : ResultState::kTfliteModelScoreUsed; prediction_result = metadata_utils::CreatePredictionResult( result->scores, segment_info->model_metadata().output_config(), clock_->Now()); @@ -355,15 +363,23 @@ request_state->options->discrete_mapping_key, *segment_info); segment_result = std::make_unique<SegmentResult>(state, prediction_result, rank); + VLOG(1) << __func__ << ": " << (is_default_model ? "Default" : "Server") + << " model executed successfully. Result: " + << segmentation_platform::PredictionResultToDebugString( + prediction_result) + << " for segment " + << proto::SegmentId_Name(request_state->options->segment_id); } else { - state = source == DefaultModelManager::SegmentSource::DEFAULT_MODEL - ? ResultState::kDefaultModelExecutionFailed - : ResultState::kTfliteModelExecutionFailed; + state = is_default_model ? ResultState::kDefaultModelExecutionFailed + : ResultState::kTfliteModelExecutionFailed; segment_result = std::make_unique<SegmentResult>(state); + VLOG(1) << __func__ << ": " << (is_default_model ? "Default" : "Server") + << " model execution failed" + << " for segment " + << proto::SegmentId_Name(request_state->options->segment_id); } - if (source == DefaultModelManager::SegmentSource::DATABASE && - request_state->options->save_results_to_db) { + if (!is_default_model && request_state->options->save_results_to_db) { // Saving results to database. segment_database_->SaveSegmentResult( segment_info->segment_id(),
diff --git a/components/segmentation_platform/public/result.cc b/components/segmentation_platform/public/result.cc index b7ddb2f7..64da291 100644 --- a/components/segmentation_platform/public/result.cc +++ b/components/segmentation_platform/public/result.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "components/segmentation_platform/public/result.h" +#include <sstream> namespace segmentation_platform { @@ -17,6 +18,29 @@ ClassificationResult& ClassificationResult::operator=( const ClassificationResult&) = default; +std::string ClassificationResult::ToDebugString() const { + std::stringstream debug_string; + debug_string << "Status: "; + + switch (status) { + case segmentation_platform::PredictionStatus::kNotReady: + debug_string << "Not ready"; + break; + case segmentation_platform::PredictionStatus::kFailed: + debug_string << "Failed"; + break; + case segmentation_platform::PredictionStatus::kSucceeded: + debug_string << "Succeeded"; + break; + } + + for (unsigned i = 0; i < ordered_labels.size(); ++i) { + debug_string << " output " << i << ": " << ordered_labels.at(i); + } + + return debug_string.str(); +} + AnnotatedNumericResult::AnnotatedNumericResult(PredictionStatus status) : status(status) {}
diff --git a/components/segmentation_platform/public/result.h b/components/segmentation_platform/public/result.h index ea9579c..b35fbe1 100644 --- a/components/segmentation_platform/public/result.h +++ b/components/segmentation_platform/public/result.h
@@ -49,6 +49,8 @@ // The request ID used for identifying a specific training data inputs. Can be // null if training data was not uploaded for that execution. TrainingRequestId request_id; + + std::string ToDebugString() const; }; // Result generated by evaluating the TFLite file or the default heuristic.
diff --git a/components/services/screen_ai/BUILD.gn b/components/services/screen_ai/BUILD.gn index 73123d85..374abbb 100644 --- a/components/services/screen_ai/BUILD.gn +++ b/components/services/screen_ai/BUILD.gn
@@ -84,7 +84,7 @@ "screen_ai_service_impl_unittest.cc", ] - # TODO(https://crbug.com/1278249): Enable after the protobuf issue is fixed. + # TODO(https://crbug.com/1443341): Enable after the protobuf issue is fixed. if (!is_win) { sources += [ "proto/main_content_extractor_proto_convertor_unittest.cc",
diff --git a/components/services/screen_ai/proto/main_content_extractor_proto_convertor.cc b/components/services/screen_ai/proto/main_content_extractor_proto_convertor.cc index 22c2245..ecd7732d 100644 --- a/components/services/screen_ai/proto/main_content_extractor_proto_convertor.cc +++ b/components/services/screen_ai/proto/main_content_extractor_proto_convertor.cc
@@ -153,7 +153,7 @@ return role_name; } -// TODO(https://crbug.com/1278249): Consider merging the following functions +// TODO(https://crbug.com/1443341): Consider merging the following functions // into a template, e.g. using std::is_same. void AddAttribute(const std::string& name, int value, @@ -199,7 +199,7 @@ uie.set_id(id); // Attributes. - // TODO(https://crbug.com/1278249): Get attribute strings from a Google3 + // TODO(https://crbug.com/1443341): Get attribute strings from a Google3 // export, also the experimental ones for the unittest. AddAttribute("axnode_id", static_cast<int>(node->id()), uie); const std::string& display_value = @@ -314,7 +314,7 @@ ui::AXTree tree(snapshot); // To be computed based on the max dimensions of all elements in the tree. - // TODO(https://crbug.com/1278249): Consider using combination of scroll + // TODO(https://crbug.com/1443341): Consider using combination of scroll // max and view port size to find the tree dimensions. Screen2x is getting the // size from the screenshot image of the tree. gfx::SizeF tree_dimensions;
diff --git a/components/services/screen_ai/proto/main_content_extractor_proto_convertor_unittest.cc b/components/services/screen_ai/proto/main_content_extractor_proto_convertor_unittest.cc index 0eb21ba0..a7cd39c62 100644 --- a/components/services/screen_ai/proto/main_content_extractor_proto_convertor_unittest.cc +++ b/components/services/screen_ai/proto/main_content_extractor_proto_convertor_unittest.cc
@@ -25,7 +25,7 @@ // Set to 'true' to get debug protos. #define WRITE_DEBUG_PROTO false -// TODO(crbug.com/1278249): Name test files with more context. E.g. what is it +// TODO(crbug.com/1341655): Name test files with more context. E.g. what is it // testing? Which site is it? etc. // Test definitions for ProtoConvertorViewHierarchyTest. constexpr int kProtoConversionTestCasesCount = 5; @@ -99,7 +99,7 @@ EXPECT_NEAR(box1.right(), box2.right(), max_diff.x()); } -// TODO(https://crbug.com/1278249): Consider making the comparison not sensitive +// TODO(https://crbug.com/1341655): Consider making the comparison not sensitive // to order. template <class T> void ExpectLists(const T& list1, const T& list2) { @@ -213,7 +213,7 @@ attribute_indices_map.erase(expected_attrib_index); continue; } - // TODO(https://crbug.com/1278249): Follow up why visibility is + // TODO(https://crbug.com/1341655): Follow up why visibility is // sometimes not passed. if (generated_attrib.name() != "/extras/styles/visibility") EXPECT_TRUE(attribute_found_in_expected) << generated_attrib.name();
diff --git a/components/services/screen_ai/proto/visual_annotator_proto_convertor.cc b/components/services/screen_ai/proto/visual_annotator_proto_convertor.cc index 884c695b..ff880bc 100644 --- a/components/services/screen_ai/proto/visual_annotator_proto_convertor.cc +++ b/components/services/screen_ai/proto/visual_annotator_proto_convertor.cc
@@ -38,7 +38,7 @@ ui::AXNodeID next_negative_node_id{kFirstValidNegativeId}; -// TODO(crbug.com/1278249): Check if this max count will cover different cases. +// TODO(crbug.com/1443341): Check if this max count will cover different cases. constexpr int kUmaMaxNodesCount = 500; // Returns the next valid negative ID that can be used for identifying @@ -80,7 +80,7 @@ DCHECK_EQ(out_data.role, ax::mojom::Role::kUnknown); switch (predicted_type.type_of_case()) { case chrome_screen_ai::UIComponent::PredictedType::kEnumType: - // TODO(https://crbug.com/1278249): We do not actually need an enum. All + // TODO(https://crbug.com/1443341): We do not actually need an enum. All // predicted types could be strings. We could easily map from a string to // an `ax::mojom::Role`. Then, we won't need to keep the enums synced. out_data.role = static_cast<ax::mojom::Role>(predicted_type.enum_type()); @@ -199,7 +199,7 @@ DCHECK_NE(inline_text_box.id, ui::kInvalidAXNodeID); // The boundaries of each `inline_text_box` is computed as the union of the // boundaries of all `word_box`es that are inside. - // TODO(crbug.com/1278249): What if the angles of orientation are different? + // TODO(crbug.com/1443341): What if the angles of orientation are different? // Do we need to apply the related transform, or is the fact that the // transform is the same between line and word boxes results in no difference? inline_text_box.relative_bounds.bounds.Union(gfx::RectF( @@ -207,7 +207,8 @@ word_box.bounding_box().width(), word_box.bounding_box().height())); std::vector<int32_t> character_offsets; - // TODO(nektar): Handle writing directions other than LEFT_TO_RIGHT. + // TODO(crbug.com/1443341): Handle writing directions other than + // LEFT_TO_RIGHT. int32_t line_offset = base::ClampRound(inline_text_box.relative_bounds.bounds.x()); ranges::transform(word_box.symbols(), std::back_inserter(character_offsets), @@ -310,8 +311,8 @@ std::string language; if (static_text_node.GetStringAttribute(ax::mojom::StringAttribute::kLanguage, &language)) { - // TODO(nektar): Only set language if different from parent node (i.e. the - // static text node), in order to minimize memory usage. + // TODO(crbug.com/1443341): Only set language if different from parent node + // (i.e. the static text node), in order to minimize memory usage. inline_text_box_node.AddStringAttribute( ax::mojom::StringAttribute::kLanguage, language); } @@ -374,8 +375,8 @@ // role. line_box_node.SetNameChecked(line_box.utf8_string()); if (!line_box.language().empty()) { - // TODO(nektar): Only set language if different from parent node (i.e. the - // page node), in order to minimize memory usage. + // TODO(crbug.com/1443341): Only set language if different from parent node + // (i.e. the page node), in order to minimize memory usage. line_box_node.AddStringAttribute(ax::mojom::StringAttribute::kLanguage, line_box.language()); } @@ -397,8 +398,8 @@ next_negative_node_id = kFirstValidNegativeId; } -// TODO(nektar): Change return value to `std::vector<ui::AXNodeData>` as other -// fields in `AXTreeUpdate` are unused. +// TODO(crbug.com/1443341): Change return value to `std::vector<ui::AXNodeData>` +// as other fields in `AXTreeUpdate` are unused. ui::AXTreeUpdate VisualAnnotationToAXTreeUpdate( const chrome_screen_ai::VisualAnnotation& visual_annotation, const gfx::Rect& image_rect) { @@ -407,7 +408,7 @@ DCHECK(visual_annotation.lines_size() == 0 || visual_annotation.ui_component_size() == 0); - // TODO(https://crbug.com/1278249): Create an AXTreeSource and create the + // TODO(https://crbug.com/1443341): Create an AXTreeSource and create the // update using AXTreeSerializer. // Each `UIComponent`, `LineBox`, as well as every `WordBox` that results in a
diff --git a/components/services/screen_ai/public/cpp/screen_ai_service_router.cc b/components/services/screen_ai/public/cpp/screen_ai_service_router.cc index 3fac75f..f35671a 100644 --- a/components/services/screen_ai/public/cpp/screen_ai_service_router.cc +++ b/components/services/screen_ai/public/cpp/screen_ai_service_router.cc
@@ -17,7 +17,7 @@ namespace { -// TODO(https://crbug.com/1278249): Move file names into a shared constants +// TODO(https://crbug.com/1443341): Move file names into a shared constants // file before adding more files. class ComponentModelFiles { public: @@ -108,7 +108,7 @@ return; } - // TODO(https://crbug.com/1278249): Make sure the library is sandboxed and + // TODO(https://crbug.com/1443341): Make sure the library is sandboxed and // loaded from the same folder and component updater doesn't download a new // version during sandbox creation. content::ServiceProcessHost::Launch(
diff --git a/components/services/screen_ai/screen_ai_library_wrapper.h b/components/services/screen_ai/screen_ai_library_wrapper.h index 91caa48a..dc01e13 100644 --- a/components/services/screen_ai/screen_ai_library_wrapper.h +++ b/components/services/screen_ai/screen_ai_library_wrapper.h
@@ -73,7 +73,7 @@ // Initializes the pipeline for OCR. // |models_folder| is a null terminated string pointing to the // folder that includes model files for OCR. - // TODO(http://crbug.com/1278249): Replace |models_folder| with file + // TODO(http://crbug.com/1443341): Replace |models_folder| with file // handle(s). typedef bool (*InitOCRFn)(const char* /*models_folder*/); InitOCRFn init_ocr_ = nullptr;
diff --git a/components/stylus_handwriting/android/BUILD.gn b/components/stylus_handwriting/android/BUILD.gn index 2cf3b32..99a150e 100644 --- a/components/stylus_handwriting/android/BUILD.gn +++ b/components/stylus_handwriting/android/BUILD.gn
@@ -60,7 +60,7 @@ "//base:base_junit_test_support", "//content/public/android:content_full_java", "//mojo/public/mojom/base:base_java", - "//third_party/android_deps:com_android_support_support_annotations_java", + "//third_party/androidx:androidx_annotation_annotation_java", "//third_party/blink/public:blink_headers_java", "//third_party/blink/public/mojom:mojom_platform_java", "//third_party/junit:junit",
diff --git a/components/stylus_handwriting/android/junit/src/org/chromium/components/stylus_handwriting/DirectWritingTriggerTest.java b/components/stylus_handwriting/android/junit/src/org/chromium/components/stylus_handwriting/DirectWritingTriggerTest.java index ce6391e5..6eb2a5ce 100644 --- a/components/stylus_handwriting/android/junit/src/org/chromium/components/stylus_handwriting/DirectWritingTriggerTest.java +++ b/components/stylus_handwriting/android/junit/src/org/chromium/components/stylus_handwriting/DirectWritingTriggerTest.java
@@ -22,10 +22,11 @@ import android.graphics.Rect; import android.os.Build; import android.os.SystemClock; -import android.support.annotation.RequiresApi; import android.view.MotionEvent; import android.view.ViewGroup; +import androidx.annotation.RequiresApi; + import org.junit.After; import org.junit.Before; import org.junit.Test;
diff --git a/components/subresource_filter/android/java/src/org/chromium/components/subresource_filter/SubresourceFilterFeatureList.java b/components/subresource_filter/android/java/src/org/chromium/components/subresource_filter/SubresourceFilterFeatureList.java index df92d3ab..2ce340b 100644 --- a/components/subresource_filter/android/java/src/org/chromium/components/subresource_filter/SubresourceFilterFeatureList.java +++ b/components/subresource_filter/android/java/src/org/chromium/components/subresource_filter/SubresourceFilterFeatureList.java
@@ -7,14 +7,12 @@ import org.chromium.base.FeatureList; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; /** * Provides an API for querying the status of subresource_filter component Features. */ // TODO(crbug.com/1060097): Remove/update this once a generalized FeatureList exists. @JNINamespace("subresource_filter") -@MainDex public class SubresourceFilterFeatureList { public static final String SUBRESOURCE_FILTER = "SubresourceFilter";
diff --git a/components/sync/base/syncer_error.cc b/components/sync/base/syncer_error.cc index 1bc1b12..dad86af 100644 --- a/components/sync/base/syncer_error.cc +++ b/components/sync/base/syncer_error.cc
@@ -36,7 +36,6 @@ ENUM_CASE(SERVER_RETURN_DISABLED_BY_ADMIN); ENUM_CASE(SERVER_RETURN_CLIENT_DATA_OBSOLETE); ENUM_CASE(SERVER_RETURN_ENCRYPTION_OBSOLETE); - ENUM_CASE(SERVER_MORE_TO_DOWNLOAD); ENUM_CASE(SYNCER_OK); } NOTREACHED(); @@ -81,8 +80,7 @@ } bool SyncerError::IsActualError() const { - return value_ != UNSET && value_ != SYNCER_OK && - value_ != SERVER_MORE_TO_DOWNLOAD; + return value_ != UNSET && value_ != SYNCER_OK; } } // namespace syncer
diff --git a/components/sync/base/syncer_error.h b/components/sync/base/syncer_error.h index 8a95f61..f236d0f 100644 --- a/components/sync/base/syncer_error.h +++ b/components/sync/base/syncer_error.h
@@ -42,8 +42,7 @@ SERVER_RETURN_ENCRYPTION_OBSOLETE = 19, // Deprecated: DATATYPE_TRIGGERED_RETRY = 20, - - SERVER_MORE_TO_DOWNLOAD = 21, + // Deprecated: SERVER_MORE_TO_DOWNLOAD = 21, SYNCER_OK = 22, @@ -64,7 +63,7 @@ std::string ToString() const; // Helper to check that |error| is set to something (not UNSET) and is not - // SYNCER_OK or SERVER_MORE_TO_DOWNLOAD. + // SYNCER_OK. bool IsActualError() const; private:
diff --git a/components/sync/driver/sync_service_impl.cc b/components/sync/driver/sync_service_impl.cc index ae881572d..7d12d7f 100644 --- a/components/sync/driver/sync_service_impl.cc +++ b/components/sync/driver/sync_service_impl.cc
@@ -1401,8 +1401,11 @@ } ModelTypeSet SyncServiceImpl::GetModelTypesForTransportOnlyMode() const { + // Control types (in practice, NIGORI) are always supported. This special case + // is necessary because the NIGORI controller isn't in + // `data_type_controllers_`. + ModelTypeSet allowed_types = ControlTypes(); // Collect the types from all controllers that support transport-only mode. - ModelTypeSet allowed_types; for (const auto& [type, controller] : data_type_controllers_) { if (controller->ShouldRunInTransportOnlyMode()) { allowed_types.Put(type);
diff --git a/components/sync/driver/sync_service_impl_unittest.cc b/components/sync/driver/sync_service_impl_unittest.cc index 85fab4d..78e80e3 100644 --- a/components/sync/driver/sync_service_impl_unittest.cc +++ b/components/sync/driver/sync_service_impl_unittest.cc
@@ -623,8 +623,8 @@ CreateService(SyncServiceImpl::MANUAL_START); service()->Initialize(); - EXPECT_TRUE(service()->GetDisableReasons().Has( - SyncService::DISABLE_REASON_USER_CHOICE)); + EXPECT_TRUE( + service()->HasDisableReason(SyncService::DISABLE_REASON_USER_CHOICE)); } #endif // !BUILDFLAG(IS_CHROMEOS_ASH) @@ -1194,10 +1194,36 @@ {BOOKMARKS, false}, {DEVICE_INFO, true}, }); + // Note: Even though NIGORI technically isn't registered, it should always be + // considered part of the interested data types. EXPECT_CALL(*sync_invalidations_service(), - SetInterestedDataTypes(AllOf(ContainsDataType(BOOKMARKS), + SetInterestedDataTypes(AllOf(ContainsDataType(NIGORI), + ContainsDataType(BOOKMARKS), ContainsDataType(DEVICE_INFO)))); InitializeForNthSync(); + ASSERT_TRUE(service()->IsSyncFeatureActive()); + EXPECT_TRUE(engine()->started_handling_invalidations()); +} + +TEST_F(SyncServiceImplTest, + ShouldSendDataTypesToSyncInvalidationsServiceInTransportMode) { + SignIn(); + CreateService(SyncServiceImpl::MANUAL_START, + /*registered_types_and_transport_mode_support=*/ + { + {BOOKMARKS, false}, + {DEVICE_INFO, true}, + }); + // In this test, BOOKMARKS doesn't support transport mode, so it should *not* + // be included. + // Note: Even though NIGORI technically isn't registered, it should always be + // considered part of the interested data types. + EXPECT_CALL(*sync_invalidations_service(), + SetInterestedDataTypes(AllOf(ContainsDataType(NIGORI), + Not(ContainsDataType(BOOKMARKS)), + ContainsDataType(DEVICE_INFO)))); + InitializeForFirstSync(); + ASSERT_FALSE(service()->IsSyncFeatureActive()); EXPECT_TRUE(engine()->started_handling_invalidations()); }
diff --git a/components/sync/driver/sync_user_settings_impl.cc b/components/sync/driver/sync_user_settings_impl.cc index 6cbf515..c802f2b 100644 --- a/components/sync/driver/sync_user_settings_impl.cc +++ b/components/sync/driver/sync_user_settings_impl.cc
@@ -288,10 +288,13 @@ #endif types.RetainAll(registered_model_types_); + // Control types (in practice, NIGORI) are always considered "preferred", even + // though they're technically not registered. + types.PutAll(ControlTypes()); + static_assert(46 == GetNumModelTypes(), "If adding a new sync data type, update the list below below if" " you want to disable the new data type for local sync."); - types.PutAll(ControlTypes()); if (prefs_->IsLocalSyncEnabled()) { types.Remove(APP_LIST); types.Remove(AUTOFILL_WALLET_OFFER);
diff --git a/components/sync/engine/commit.cc b/components/sync/engine/commit.cc index 840ff4c..34f5539 100644 --- a/components/sync/engine/commit.cc +++ b/components/sync/engine/commit.cc
@@ -44,7 +44,6 @@ switch (syncer_error.value()) { case SyncerError::UNSET: case SyncerError::SYNCER_OK: - case SyncerError::SERVER_MORE_TO_DOWNLOAD: NOTREACHED(); break; case SyncerError::NETWORK_CONNECTION_UNAVAILABLE:
diff --git a/components/sync/engine/events/get_updates_response_event.cc b/components/sync/engine/events/get_updates_response_event.cc index 66fda0b..da97410f 100644 --- a/components/sync/engine/events/get_updates_response_event.cc +++ b/components/sync/engine/events/get_updates_response_event.cc
@@ -33,12 +33,14 @@ std::string GetUpdatesResponseEvent::GetDetails() const { switch (error_.value()) { - case SyncerError::SYNCER_OK: - return base::StringPrintf("Received %d update(s).", - response_.get_updates().entries_size()); - case SyncerError::SERVER_MORE_TO_DOWNLOAD: - return base::StringPrintf("Received %d update(s). Some updates remain.", - response_.get_updates().entries_size()); + case SyncerError::SYNCER_OK: { + std::string details = base::StringPrintf( + "Received %d update(s).", response_.get_updates().entries_size()); + if (response_.get_updates().changes_remaining() != 0) { + details += " Some updates remain."; + } + return details; + } case SyncerError::UNSET: case SyncerError::NETWORK_CONNECTION_UNAVAILABLE: case SyncerError::NETWORK_IO_ERROR:
diff --git a/components/sync/engine/get_updates_processor.cc b/components/sync/engine/get_updates_processor.cc index 6939abd..b7addbda 100644 --- a/components/sync/engine/get_updates_processor.cc +++ b/components/sync/engine/get_updates_processor.cc
@@ -186,6 +186,8 @@ SyncCycle* cycle) { TRACE_EVENT0("sync", "DownloadUpdates"); + has_more_updates_to_download_ = false; + sync_pb::ClientToServerMessage message; InitDownloadUpdatesContext(cycle, &message); PrepareGetUpdates(*request_types, &message); @@ -353,9 +355,8 @@ DCHECK(progress_marker_iter == progress_index_by_type.end() && updates_iter == updates_by_type.end()); - return gu_response.changes_remaining() == 0 - ? SyncerError(SyncerError::SYNCER_OK) - : SyncerError(SyncerError::SERVER_MORE_TO_DOWNLOAD); + has_more_updates_to_download_ = gu_response.changes_remaining() != 0; + return SyncerError(SyncerError::SYNCER_OK); } void GetUpdatesProcessor::ApplyUpdates(const ModelTypeSet& gu_types, @@ -367,4 +368,8 @@ } } +bool GetUpdatesProcessor::HasMoreUpdatesToDownload() const { + return has_more_updates_to_download_; +} + } // namespace syncer
diff --git a/components/sync/engine/get_updates_processor.h b/components/sync/engine/get_updates_processor.h index 2362f79f..303ca6cc7 100644 --- a/components/sync/engine/get_updates_processor.h +++ b/components/sync/engine/get_updates_processor.h
@@ -41,15 +41,19 @@ // Downloads and processes a batch of updates for the specified types. // - // Returns SYNCER_OK if the download succeeds, SERVER_MORE_TO_DOWNLOAD if the - // download succeeded but there are still some updates left to fetch on the - // server, or an appropriate error value in case of failure. + // Returns SYNCER_OK if the download succeeds or an appropriate error value in + // case of failure. SyncerError DownloadUpdates(ModelTypeSet* request_types, SyncCycle* cycle); // Applies any downloaded and processed updates. void ApplyUpdates(const ModelTypeSet& gu_types, StatusController* status_controller); + // Returns true if last DownloadUpdates() outcome indicated that there are + // more updates to download from the server, e.g. when GetUpdatesResponse has + // non-zero `changes_remaining`. + bool HasMoreUpdatesToDownload() const; + private: // Populates a GetUpdates request message with per-type information. void PrepareGetUpdates(const ModelTypeSet& gu_types, @@ -88,6 +92,9 @@ // that problem is to initialize this map in set_routing_info(). raw_ptr<UpdateHandlerMap> update_handler_map_; + // Whether last GetUpdatesResponse has non-zero `changes_remaining`. + bool has_more_updates_to_download_ = false; + const raw_ref<const GetUpdatesDelegate> delegate_; };
diff --git a/components/sync/engine/get_updates_processor_unittest.cc b/components/sync/engine/get_updates_processor_unittest.cc index 3582f06..a064b98 100644 --- a/components/sync/engine/get_updates_processor_unittest.cc +++ b/components/sync/engine/get_updates_processor_unittest.cc
@@ -383,9 +383,8 @@ StatusController status; std::unique_ptr<GetUpdatesProcessor> processor( BuildGetUpdatesProcessor(normal_delegate)); - SyncerError error = - processor->ProcessResponse(gu_response, enabled_types(), &status); - EXPECT_EQ(error.value(), SyncerError::SERVER_MORE_TO_DOWNLOAD); + processor->ProcessResponse(gu_response, enabled_types(), &status); + EXPECT_TRUE(processor->HasMoreUpdatesToDownload()); } // A simple scenario: No updates returned and nothing more to download.
diff --git a/components/sync/engine/syncer.cc b/components/sync/engine/syncer.cc index c927a5e..7df29f4 100644 --- a/components/sync/engine/syncer.cc +++ b/components/sync/engine/syncer.cc
@@ -124,7 +124,7 @@ do { download_result = get_updates_processor.DownloadUpdates(&download_types, cycle); - } while (download_result.value() == SyncerError::SERVER_MORE_TO_DOWNLOAD); + } while (get_updates_processor.HasMoreUpdatesToDownload()); // It is our responsibility to propagate the removal of types that occurred in // GetUpdatesProcessor::DownloadUpdates().
diff --git a/components/sync/protocol/app_notification_specifics.proto b/components/sync/protocol/app_notification_specifics.proto deleted file mode 100644 index 4e45087..0000000 --- a/components/sync/protocol/app_notification_specifics.proto +++ /dev/null
@@ -1,45 +0,0 @@ -// Copyright 2012 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// -// Sync protocol datatype extension for app notifications. - -// If you change or add any fields in this file, update proto_visitors.h and -// potentially proto_enum_conversions.{h, cc}. - -syntax = "proto2"; - -option java_multiple_files = true; -option java_package = "org.chromium.components.sync.protocol"; - -option optimize_for = LITE_RUNTIME; - -package sync_pb; - -// Properties of an app notification. - -// An App Notification, to be delivered from Chrome Apps to the -// Chrome browser through the Notification API. -message AppNotification { - // Globally unique id. This is more robust for uniquely identifying each - // notification and hence gives us flexibility in the future. In absence - // of this, unique id would be (app_id, creation_timestamp_ms). But that - // relies on creation_timestamp_ms being high resolution and is not - // globally unique - only unique for a given user. - optional string guid = 1; - // Metadata, not shown directly to the user. - // The unique App Id, as created by the webstore and used to - // delegate messages to the applications. This is defined as 32 characters - optional string app_id = 2; - // Timestamp when the message was created in milliseconds. - // This is seperate from ctime as this is only set by the application. - optional int64 creation_timestamp_ms = 3; - - // Payload - these fields are visible to the user content is defined by the - // app. The fields are described in: - // chrome/browser/extensions/app_notification.h - optional string title = 4; - optional string body_text = 5; - optional string link_url = 6; - optional string link_text = 7; -}
diff --git a/components/sync/protocol/entity_specifics.proto b/components/sync/protocol/entity_specifics.proto index 97c0e080..5d61d166 100644 --- a/components/sync/protocol/entity_specifics.proto +++ b/components/sync/protocol/entity_specifics.proto
@@ -13,7 +13,6 @@ import "components/sync/protocol/encryption.proto"; import "components/sync/protocol/app_list_specifics.proto"; -import "components/sync/protocol/app_notification_specifics.proto"; import "components/sync/protocol/app_setting_specifics.proto"; import "components/sync/protocol/app_specifics.proto"; import "components/sync/protocol/arc_package_specifics.proto"; @@ -33,7 +32,6 @@ import "components/sync/protocol/history_specifics.proto"; import "components/sync/protocol/managed_user_setting_specifics.proto"; import "components/sync/protocol/managed_user_shared_setting_specifics.proto"; -import "components/sync/protocol/managed_user_specifics.proto"; import "components/sync/protocol/nigori_specifics.proto"; import "components/sync/protocol/os_preference_specifics.proto"; import "components/sync/protocol/os_priority_preference_specifics.proto"; @@ -51,8 +49,6 @@ import "components/sync/protocol/segmentation_specifics.proto"; import "components/sync/protocol/session_specifics.proto"; import "components/sync/protocol/sharing_message_specifics.proto"; -import "components/sync/protocol/synced_notification_app_info_specifics.proto"; -import "components/sync/protocol/synced_notification_specifics.proto"; import "components/sync/protocol/theme_specifics.proto"; import "components/sync/protocol/typed_url_specifics.proto"; import "components/sync/protocol/user_consent_specifics.proto"; @@ -106,9 +102,6 @@ PreferenceSpecifics preference = 37702; TypedUrlSpecifics typed_url = 40781; ThemeSpecifics theme = 41210; - // TODO(crbug.com/1012648): |app_notification| isn't used by the client - // anymore, but the server still needs it for now. - AppNotification app_notification = 45184 [deprecated = true]; PasswordSpecifics password = 45873; NigoriSpecifics nigori = 47745; ExtensionSpecifics extension = 48119; @@ -119,29 +112,11 @@ ExtensionSettingSpecifics extension_setting = 96159; AppSettingSpecifics app_setting = 103656; HistoryDeleteDirectiveSpecifics history_delete_directive = 150251; - // TODO(crbug.com/1012648): |synced_notification| and - // |synced_notification_app_info| aren't used by the client anymore, but the - // server still needs them for now. - SyncedNotificationSpecifics synced_notification = 153108 - [deprecated = true]; - SyncedNotificationAppInfoSpecifics synced_notification_app_info = 235816 - [deprecated = true]; DeviceInfoSpecifics device_info = 154522; - // TODO(crbug.com/1009361): |experiments| isn't used by the client anymore, - // but the server still needs it for now. - ExperimentsSpecifics experiments = 161496 [deprecated = true]; PriorityPreferenceSpecifics priority_preference = 163425; DictionarySpecifics dictionary = 170540; - FaviconTrackingSpecifics favicon_tracking = 181534 [deprecated = true]; - FaviconImageSpecifics favicon_image = 182019 [deprecated = true]; ManagedUserSettingSpecifics managed_user_setting = 186662; - // TODO(tschumann): Remove once server-side dependencies are resolved. - ManagedUserSpecifics managed_user = 194582 [deprecated = true]; - // TODO(tschumann): Remove once server-side dependencies are resolved. - ManagedUserSharedSettingSpecifics managed_user_shared_setting = 202026 - [deprecated = true]; AppListSpecifics app_list = 229170; - EmptySpecifics managed_user_allowlist = 306060 [deprecated = true]; AutofillWalletSpecifics autofill_wallet = 306270; WalletMetadataSpecifics wallet_metadata = 330441; ArcPackageSpecifics arc_package = 340906; @@ -159,8 +134,6 @@ SharingMessageSpecifics sharing_message = 728866; AutofillOfferSpecifics autofill_offer = 774329; WorkspaceDeskSpecifics workspace_desk = 874841; - // This is not included in model_type.h because it's currently only used by - // the server and by Play Services. (crbug.com/1223853) WebauthnCredentialSpecifics webauthn_credential = 895275; HistorySpecifics history = 963985; PrintersAuthorizationServerSpecifics printers_authorization_server = 974304; @@ -169,6 +142,21 @@ ContactInfoSpecifics contact_info = 1034378; SegmentationSpecifics segmentation = 1026052; PowerBookmarkSpecifics power_bookmark = 1073150; + + // No-longer-supported data types, in various stages of removal. + // TODO(crbug.com/1395003): Eventually, these should all become "reserved" + // fields, or at least use "EmptySpecifics". But some of them are still + // needed by the server, e.g. to support older clients. + EmptySpecifics app_notification = 45184 [deprecated = true]; + EmptySpecifics synced_notification = 153108 [deprecated = true]; + EmptySpecifics synced_notification_app_info = 235816 [deprecated = true]; + ExperimentsSpecifics experiments = 161496 [deprecated = true]; + FaviconTrackingSpecifics favicon_tracking = 181534 [deprecated = true]; + FaviconImageSpecifics favicon_image = 182019 [deprecated = true]; + EmptySpecifics managed_user = 194582 [deprecated = true]; + ManagedUserSharedSettingSpecifics managed_user_shared_setting = 202026 + [deprecated = true]; + EmptySpecifics managed_user_allowlist = 306060 [deprecated = true]; } reserved 218175; reserved "wifi_credential";
diff --git a/components/sync/protocol/managed_user_specifics.proto b/components/sync/protocol/managed_user_specifics.proto deleted file mode 100644 index 0f519d3b5..0000000 --- a/components/sync/protocol/managed_user_specifics.proto +++ /dev/null
@@ -1,42 +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. -// -// Sync protocol datatype extension for managed user settings. - -// If you change or add any fields in this file, update proto_visitors.h and -// potentially proto_enum_conversions.{h, cc}. - -syntax = "proto2"; - -option java_multiple_files = true; -option java_package = "org.chromium.components.sync.protocol"; - -option optimize_for = LITE_RUNTIME; - -package sync_pb; - -// Properties of managed user sync objects. -message ManagedUserSpecifics { - // A randomly-generated identifier for the managed user. - optional string id = 1; - // The human-visible name of the managed user - optional string name = 2; - // This flag is set by the server to acknowledge that it has committed a - // newly created managed user. - optional bool acknowledged = 3 [default = false]; - // Master key for managed user cryptohome. - optional string master_key = 4; - // A string representing the index of the supervised user avatar on Chrome. - // It has the following format: - // "chrome-avatar-index:INDEX" where INDEX is an integer. - optional string chrome_avatar = 5; - // A string representing the index of the supervised user avatar on Chrome OS. - // It has the following format: - // "chromeos-avatar-index:INDEX" where INDEX is an integer. - optional string chromeos_avatar = 6; - // Key for signing supervised user's password. - optional string password_signature_key = 7; - // Key for encrypting supervised user's password. - optional string password_encryption_key = 8; -}
diff --git a/components/sync/protocol/protocol_sources.gni b/components/sync/protocol/protocol_sources.gni index 094bfdb..aaa0b46 100644 --- a/components/sync/protocol/protocol_sources.gni +++ b/components/sync/protocol/protocol_sources.gni
@@ -4,7 +4,6 @@ sync_protocol_sources = [ "app_list_specifics.proto", - "app_notification_specifics.proto", "app_setting_specifics.proto", "app_specifics.proto", "arc_package_specifics.proto", @@ -35,7 +34,6 @@ "loopback_server.proto", "managed_user_setting_specifics.proto", "managed_user_shared_setting_specifics.proto", - "managed_user_specifics.proto", "model_type_state.proto", "model_type_store_schema_descriptor.proto", "nigori_local_data.proto", @@ -62,8 +60,6 @@ "sync_entity.proto", "sync_enums.proto", "sync_invalidations_payload.proto", - "synced_notification_app_info_specifics.proto", - "synced_notification_specifics.proto", "test.proto", "theme_specifics.proto", "typed_url_specifics.proto", @@ -71,7 +67,6 @@ "user_consent_specifics.proto", "user_consent_types.proto", "user_event_specifics.proto", - "vault.proto", "web_apk_specifics.proto", "web_app_specifics.proto", "webauthn_credential_specifics.proto",
diff --git a/components/sync/protocol/synced_notification_app_info_specifics.proto b/components/sync/protocol/synced_notification_app_info_specifics.proto deleted file mode 100644 index c0d9a58..0000000 --- a/components/sync/protocol/synced_notification_app_info_specifics.proto +++ /dev/null
@@ -1,18 +0,0 @@ -// Copyright 2014 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// -// Sync protocol datatype extension for synced notification app info objects. -// DO NOT USE: This datatype is deprecated. - -syntax = "proto2"; - -option java_multiple_files = true; -option java_package = "org.chromium.components.sync.protocol"; - -option optimize_for = LITE_RUNTIME; - -package sync_pb; - -// This message is kept around for backwards compatibility sake. -message SyncedNotificationAppInfoSpecifics {}
diff --git a/components/sync/protocol/synced_notification_specifics.proto b/components/sync/protocol/synced_notification_specifics.proto deleted file mode 100644 index 445ad82..0000000 --- a/components/sync/protocol/synced_notification_specifics.proto +++ /dev/null
@@ -1,18 +0,0 @@ -// Copyright 2012 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// -// Sync protocol datatype extension for synced notifications. -// DO NOT USE: This datatype is deprecated. - -syntax = "proto2"; - -option java_multiple_files = true; -option java_package = "org.chromium.components.sync.protocol"; - -option optimize_for = LITE_RUNTIME; - -package sync_pb; - -// This message is kept around for backwards compatibility sake. -message SyncedNotificationSpecifics {}
diff --git a/components/sync/protocol/vault.proto b/components/sync/protocol/vault.proto deleted file mode 100644 index 0ef126e5..0000000 --- a/components/sync/protocol/vault.proto +++ /dev/null
@@ -1,87 +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. - -// Trusted vault protos to communicate with backend written in proto3 to avoid -// subtle differences between enum fields. - -// TODO(crbug.com/1423343): Delete this file once downstream references are -// updated to use components/trusted_vault/proto. -syntax = "proto3"; - -option java_multiple_files = true; -option java_package = "org.chromium.components.sync.protocol"; - -option optimize_for = LITE_RUNTIME; - -package sync_pb; - -message SharedMemberKey { - int32 epoch = 1; - bytes wrapped_key = 2; - bytes member_proof = 3; -} - -message RotationProof { - int32 new_epoch = 1; - bytes rotation_proof = 2; -} - -message SecurityDomainDetails { - message SyncDetails { bool degraded_recoverability = 1; } - - SyncDetails sync_details = 1; -} - -message SecurityDomain { - string name = 1; - int32 current_epoch = 2; - SecurityDomainDetails security_domain_details = 3; -} - -message SecurityDomainMember { - string name = 1; - bytes public_key = 2; - - message SecurityDomainMembership { - string security_domain = 1; - repeated SharedMemberKey keys = 3; - repeated RotationProof rotation_proofs = 4; - } - - repeated SecurityDomainMembership memberships = 3; - - enum MemberType { - MEMBER_TYPE_UNSPECIFIED = 0; - MEMBER_TYPE_PHYSICAL_DEVICE = 1; - } - - MemberType member_type = 4; -} - -message JoinSecurityDomainsRequest { - SecurityDomain security_domain = 1; - SecurityDomainMember security_domain_member = 2; - repeated SharedMemberKey shared_member_key = 3; - int32 member_type_hint = 4; -} - -message JoinSecurityDomainsResponse { - SecurityDomain security_domain = 1; -} - -message JoinSecurityDomainsErrorDetail { - JoinSecurityDomainsResponse already_exists_response = 1; -} - -// TODO(crbug.com/1234719): figure out how to link google.protobuf.Any and use -// it instead. -message Proto3Any { - string type_url = 1; - bytes value = 2; -} - -// Forked version of google.rpc.Status. -message RPCStatus { - repeated Proto3Any details = 3; -} \ No newline at end of file
diff --git a/components/url_formatter/android/java/src/org/chromium/components/url_formatter/UrlFormatter.java b/components/url_formatter/android/java/src/org/chromium/components/url_formatter/UrlFormatter.java index 05bb39d..5b6820f 100644 --- a/components/url_formatter/android/java/src/org/chromium/components/url_formatter/UrlFormatter.java +++ b/components/url_formatter/android/java/src/org/chromium/components/url_formatter/UrlFormatter.java
@@ -10,7 +10,6 @@ import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; import org.chromium.url.GURL; import org.chromium.url.Origin; @@ -18,7 +17,6 @@ * Wrapper for utilities in url_formatter. */ @JNINamespace("url_formatter::android") -@MainDex public final class UrlFormatter { /** * Refer to url_formatter::FixupURL.
diff --git a/components/vector_icons/BUILD.gn b/components/vector_icons/BUILD.gn index 8bd6c6a7..db8b9bf 100644 --- a/components/vector_icons/BUILD.gn +++ b/components/vector_icons/BUILD.gn
@@ -79,6 +79,7 @@ "https_valid_chrome_refresh.icon", "image_search.icon", "info_outline.icon", + "info_refresh.icon", "insert_drive_file_outline.icon", "keyboard.icon", "launch.icon",
diff --git a/components/vector_icons/info_refresh.icon b/components/vector_icons/info_refresh.icon new file mode 100644 index 0000000..9cf55d40 --- /dev/null +++ b/components/vector_icons/info_refresh.icon
@@ -0,0 +1,48 @@ +// 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. + +CANVAS_DIMENSIONS, 16, +MOVE_TO, 7.34f, 11.26f, +R_H_LINE_TO, 1.32f, +V_LINE_TO, 7.2f, +H_LINE_TO, 7.34f, +CLOSE, +R_MOVE_TO, 0.66f, -5.18f, +R_ARC_TO, 0.66f, 0.66f, 0, 0, 0, 0.48f, -0.19f, +R_ARC_TO, 0.66f, 0.66f, 0, 0, 0, 0.2f, -0.48f, +R_ARC_TO, 0.67f, 0.67f, 0, 0, 0, -0.2f, -0.48f, +R_ARC_TO, 0.64f, 0.64f, 0, 0, 0, -0.48f, -0.2f, +R_ARC_TO, 0.66f, 0.66f, 0, 0, 0, -0.48f, 0.2f, +R_ARC_TO, 0.64f, 0.64f, 0, 0, 0, -0.2f, 0.48f, +R_CUBIC_TO, 0, 0.2f, 0.07f, 0.36f, 0.2f, 0.49f, +R_ARC_TO, 0.64f, 0.64f, 0, 0, 0, 0.48f, 0.2f, +CLOSE, +R_MOVE_TO, 0.01f, 8.46f, +R_CUBIC_TO, -0.9f, 0, -1.75f, -0.17f, -2.54f, -0.51f, +R_ARC_TO, 6.52f, 6.52f, 0, 0, 1, -2.08f, -1.4f, +R_ARC_TO, 6.52f, 6.52f, 0, 0, 1, -1.4f, -2.08f, +R_ARC_TO, 6.33f, 6.33f, 0, 0, 1, -0.51f, -2.55f, +R_CUBIC_TO, 0, -0.91f, 0.17f, -1.75f, 0.51f, -2.54f, +ARC_TO, 6.53f, 6.53f, 0, 0, 1, 3.38f, 3.38f, +ARC_TO, 6.52f, 6.52f, 0, 0, 1, 5.46f, 1.98f, +R_ARC_TO, 6.33f, 6.33f, 0, 0, 1, 2.55f, -0.51f, +R_CUBIC_TO, 0.91f, 0, 1.75f, 0.17f, 2.54f, 0.51f, +R_CUBIC_TO, 0.79f, 0.34f, 1.48f, 0.8f, 2.07f, 1.4f, +R_ARC_TO, 6.5f, 6.5f, 0, 0, 1, 1.4f, 2.08f, +R_ARC_TO, 6.29f, 6.29f, 0, 0, 1, 0.51f, 2.54f, +R_CUBIC_TO, 0, 0.9f, -0.17f, 1.75f, -0.51f, 2.54f, +R_ARC_TO, 6.52f, 6.52f, 0, 0, 1, -1.4f, 2.08f, +R_ARC_TO, 6.5f, 6.5f, 0, 0, 1, -2.08f, 1.4f, +R_ARC_TO, 6.29f, 6.29f, 0, 0, 1, -2.54f, 0.51f, +CLOSE, +MOVE_TO, 8, 13.15f, +R_CUBIC_TO, 1.43f, 0, 2.65f, -0.5f, 3.65f, -1.5f, +R_CUBIC_TO, 1, -1, 1.5f, -2.22f, 1.5f, -3.65f, +R_CUBIC_TO, 0, -1.43f, -0.5f, -2.65f, -1.5f, -3.65f, +CUBIC_TO_SHORTHAND, 9.43f, 2.85f, 8, 2.85f, +R_CUBIC_TO, -1.43f, 0, -2.65f, 0.5f, -3.65f, 1.5f, +CUBIC_TO_SHORTHAND, 2.85f, 6.57f, 2.85f, 8, +R_CUBIC_TO, 0, 1.43f, 0.5f, 2.65f, 1.5f, 3.65f, +R_CUBIC_TO, 1, 1, 2.22f, 1.5f, 3.65f, 1.5f, +CLOSE
diff --git a/components/version_info/android/java/src/org/chromium/components/version_info/VersionConstantsBridge.java b/components/version_info/android/java/src/org/chromium/components/version_info/VersionConstantsBridge.java index 75a20dd5..c6d6be83 100644 --- a/components/version_info/android/java/src/org/chromium/components/version_info/VersionConstantsBridge.java +++ b/components/version_info/android/java/src/org/chromium/components/version_info/VersionConstantsBridge.java
@@ -5,12 +5,10 @@ package org.chromium.components.version_info; import org.chromium.base.annotations.CalledByNative; -import org.chromium.build.annotations.MainDex; /** * Bridge between native and VersionConstants.java. */ -@MainDex public class VersionConstantsBridge { @CalledByNative public static int getChannel() {
diff --git a/components/viz/service/frame_sinks/compositor_frame_sink_support.cc b/components/viz/service/frame_sinks/compositor_frame_sink_support.cc index aa83934..e3dca4a 100644 --- a/components/viz/service/frame_sinks/compositor_frame_sink_support.cc +++ b/components/viz/service/frame_sinks/compositor_frame_sink_support.cc
@@ -903,14 +903,14 @@ bool frame_ack = ack_queued_for_client_count_ > 0; ack_pending_during_on_begin_frame_ = !frame_ack && ack_pending_from_surface_count_; - client_->OnBeginFrame(adjusted_args, std::move(frame_timing_details_), - frame_ack, std::move(surface_returned_resources_)); + client_->OnBeginFrame(adjusted_args, frame_timing_details_, frame_ack, + std::move(surface_returned_resources_)); if (frame_ack) { ack_queued_for_client_count_--; } surface_returned_resources_.clear(); } else { - client_->OnBeginFrame(adjusted_args, std::move(frame_timing_details_), + client_->OnBeginFrame(adjusted_args, frame_timing_details_, /*frame_ack=*/false, std::vector<ReturnedResource>()); }
diff --git a/components/viz/service/java/src/org/chromium/components/viz/service/frame_sinks/ExternalBeginFrameSourceAndroid.java b/components/viz/service/java/src/org/chromium/components/viz/service/frame_sinks/ExternalBeginFrameSourceAndroid.java index 6c9ba52..527be5c 100644 --- a/components/viz/service/java/src/org/chromium/components/viz/service/frame_sinks/ExternalBeginFrameSourceAndroid.java +++ b/components/viz/service/java/src/org/chromium/components/viz/service/frame_sinks/ExternalBeginFrameSourceAndroid.java
@@ -10,13 +10,11 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; /** * Provides a VSyncMonitor backed BeginFrameSource. */ @JNINamespace("viz") -@MainDex public class ExternalBeginFrameSourceAndroid implements Choreographer.FrameCallback { private static final long NANOSECONDS_PER_SECOND = 1000000000; private static final long NANOSECONDS_PER_MICROSECOND = 1000;
diff --git a/components/viz/service/java/src/org/chromium/components/viz/service/gl/ThrowUncaughtException.java b/components/viz/service/java/src/org/chromium/components/viz/service/gl/ThrowUncaughtException.java index 30b817fd..a589e9a 100644 --- a/components/viz/service/java/src/org/chromium/components/viz/service/gl/ThrowUncaughtException.java +++ b/components/viz/service/java/src/org/chromium/components/viz/service/gl/ThrowUncaughtException.java
@@ -6,9 +6,7 @@ import org.chromium.base.ThreadUtils; import org.chromium.base.annotations.CalledByNative; -import org.chromium.build.annotations.MainDex; -@MainDex abstract class ThrowUncaughtException { @CalledByNative private static void post() {
diff --git a/content/browser/devtools/browser_devtools_agent_host.cc b/content/browser/devtools/browser_devtools_agent_host.cc index e1d7d768..5fdccca 100644 --- a/content/browser/devtools/browser_devtools_agent_host.cc +++ b/content/browser/devtools/browser_devtools_agent_host.cc
@@ -118,11 +118,10 @@ // DevToolsAgentHostObserver overrides. void DevToolsAgentHostCreated(DevToolsAgentHost* host) override { DCHECK(auto_attach()); - // In the top level target handler auto-attach to pages as soon as they + // In the top level target handler, auto-attach to pages as soon as they // are created, otherwise if they don't incur any network activity we'll // never get a chance to throttle them (and auto-attach there). - - if (IsMainFrameHost(host) || IsSharedWorkerHost(host)) { + if (ShouldAttachToTarget(host)) { DispatchAutoAttach( host, wait_for_debugger_on_start() && !processing_existent_targets_); } @@ -130,8 +129,14 @@ bool ShouldForceDevToolsAgentHostCreation() override { return true; } - static bool IsSharedWorkerHost(DevToolsAgentHost* host) { - return host->GetType() == DevToolsAgentHost::kTypeSharedWorker; + static bool ShouldAttachToTarget(DevToolsAgentHost* host) { + if (host->GetType() == DevToolsAgentHost::kTypeSharedWorker) { + return true; + } + if (host->GetType() == DevToolsAgentHost::kTypeTab) { + return true; + } + return IsMainFrameHost(host); } static bool IsMainFrameHost(DevToolsAgentHost* host) {
diff --git a/content/browser/devtools/devtools_session.cc b/content/browser/devtools/devtools_session.cc index acf1112..33123b0 100644 --- a/content/browser/devtools/devtools_session.cc +++ b/content/browser/devtools/devtools_session.cc
@@ -336,9 +336,18 @@ void DevToolsSession::DispatchProtocolMessageInternal( crdtp::Dispatchable dispatchable, base::span<const uint8_t> message) { - if (!runtime_resume_.is_null() && - crdtp::SpanEquals(crdtp::SpanFrom(kResumeMethod), dispatchable.Method())) - std::move(runtime_resume_).Run(); + if ((browser_only_ || runtime_resume_) && + crdtp::SpanEquals(crdtp::SpanFrom(kResumeMethod), + dispatchable.Method())) { + if (runtime_resume_) { + std::move(runtime_resume_).Run(); + } + if (browser_only_) { + DispatchProtocolMessageToClient( + crdtp::CreateResponse(dispatchable.CallId(), nullptr)->Serialize()); + return; + } + } DevToolsManagerDelegate* delegate = DevToolsManager::GetInstance()->delegate();
diff --git a/content/browser/devtools/protocol/target_handler.cc b/content/browser/devtools/protocol/target_handler.cc index aa8962f..7229180 100644 --- a/content/browser/devtools/protocol/target_handler.cc +++ b/content/browser/devtools/protocol/target_handler.cc
@@ -654,10 +654,13 @@ return base::WrapUnique(new TargetFilter(std::move(*filter.fromJust()))); } - bool Match(DevToolsAgentHost& host) const { + bool Match(DevToolsAgentHost& host) const { return Match(host.GetType()); } + + bool Match(base::StringPiece type) const { for (const auto& entry : entries_) { - if (!entry->HasType() || entry->GetType("") == host.GetType()) + if (!entry->HasType() || entry->GetType("") == type) { return !entry->GetExclude(false); + } } return false; } @@ -735,20 +738,27 @@ DCHECK(auto_attacher == auto_attacher_); DevToolsAgentHost* host = RenderFrameDevToolsAgentHost::GetFor(frame_tree_node); - // For new pages create Throttle only if the session is still paused. - if (!host) - return nullptr; - auto it = auto_attached_sessions_.find(host); - if (it == auto_attached_sessions_.end()) - return nullptr; - if (!it->second->IsWaitingForDebuggerOnStart()) - return nullptr; - // RFDTAHs created during auto-attach had no renderer allocated originally, - // and hence have messages paused, but with navigation we're supposed to - // have a line host, so we can send messages to renderer now. - DCHECK(frame_tree_node->current_frame_host()->IsRenderFrameLive()); - it->second->ResumeSendingMessagesToAgent(); - + TargetHandler::Session* waiting_session = FindWaitingSession(host); + if (waiting_session) { + // RFDTAHs created during auto-attach had no renderer allocated originally, + // and hence have messages paused, but with navigation we're supposed to + // have a live host, so we can send messages to renderer now. + DCHECK(frame_tree_node->current_frame_host()->IsRenderFrameLive()); + // Only resume sending messages to frame agents (i.e. skip for WebContents + // ones). + waiting_session->ResumeSendingMessagesToAgent(); + } else { + // Currently, either RFDTAH or WCDTAH may be waiting for debugger (when + // `waitForDebuggerOnStart` is honored for the Tab target, it is ignored + // for the Page target), so in case no Page-level sessions are waiting, + // also check the tab target. + host = WebContentsDevToolsAgentHost::GetFor( + WebContentsImpl::FromFrameTreeNode(frame_tree_node)); + waiting_session = FindWaitingSession(host); + if (!waiting_session) { + return nullptr; + } + } // window.open() navigations are throttled on the renderer side and the main // request will not be sent until runIfWaitingForDebugger is received from // the client, so there is no need to throttle the navigation in the @@ -756,13 +766,28 @@ // // New window navigations (such as ctrl+click) should be throttled before // the main request is sent to apply user agent and other overrides. - FrameTreeNode* opener = frame_tree_node->opener(); - if (opener) + if (frame_tree_node->opener()) { return nullptr; + } return std::make_unique<RequestThrottle>(weak_factory_.GetWeakPtr(), navigation_handle, host); } +TargetHandler::Session* TargetHandler::FindWaitingSession( + DevToolsAgentHost* host) { + if (!host) { + return nullptr; + } + auto it = auto_attached_sessions_.find(host); + if (it == auto_attached_sessions_.end()) { + return nullptr; + } + if (!it->second->IsWaitingForDebuggerOnStart()) { + return nullptr; + } + return it->second; +} + void TargetHandler::ClearThrottles() { base::flat_set<Throttle*> copy(throttles_); for (Throttle* throttle : copy) @@ -984,6 +1009,14 @@ } auto_attach_target_filter_ = auto_attach ? TargetFilter::Create(std::move(filter)) : nullptr; + if (auto_attach_target_filter_ && access_mode_ == AccessMode::kBrowser && + auto_attach_target_filter_->Match(DevToolsAgentHost::kTypeTab) && + auto_attach_target_filter_->Match(DevToolsAgentHost::kTypePage)) { + callback->sendFailure(Response::InvalidParams( + "Filter should not simultaneously allow \"tab\" and \"page\", " + "page targets are attached via tab targets")); + return; + } SetAutoAttachInternal( auto_attach, wait_for_debugger_on_start, flatten.fromMaybe(false), base::BindOnce(&SetAutoAttachCallback::sendSuccess, std::move(callback)));
diff --git a/content/browser/devtools/protocol/target_handler.h b/content/browser/devtools/protocol/target_handler.h index 5038012..d4089c8f 100644 --- a/content/browser/devtools/protocol/target_handler.h +++ b/content/browser/devtools/protocol/target_handler.h
@@ -182,6 +182,7 @@ void DevToolsAgentHostCrashed(DevToolsAgentHost* agent_host, base::TerminationStatus status) override; bool discover() const { return !!discover_target_filter_; } + Session* FindWaitingSession(DevToolsAgentHost* host); const AccessMode access_mode_; const std::string owner_target_id_;
diff --git a/content/browser/devtools/render_frame_devtools_agent_host.cc b/content/browser/devtools/render_frame_devtools_agent_host.cc index f0bb579e..9c48f63 100644 --- a/content/browser/devtools/render_frame_devtools_agent_host.cc +++ b/content/browser/devtools/render_frame_devtools_agent_host.cc
@@ -219,7 +219,8 @@ void RenderFrameDevToolsAgentHost::AttachToWebContents( WebContents* web_contents) { if (ShouldForceCreation()) { - // Force agent host. + // Force agent hosts. + DevToolsAgentHost::GetOrCreateForTab(web_contents); DevToolsAgentHost::GetOrCreateFor(web_contents); } }
diff --git a/content/browser/devtools/web_contents_devtools_agent_host.cc b/content/browser/devtools/web_contents_devtools_agent_host.cc index 2133706..5c9f22d 100644 --- a/content/browser/devtools/web_contents_devtools_agent_host.cc +++ b/content/browser/devtools/web_contents_devtools_agent_host.cc
@@ -158,7 +158,16 @@ void WebContentsDevToolsAgentHost::InnerAttach(WebContents* wc) { CHECK(!web_contents()); - bool inserted = + // With ConnectWebContents(), we may be attaching to a WC that has + // a different host created. + // TODO(caseq): find a better solution. See also a similar comment in + // RenderFrameDevToolsAgentHost::SetFrameTreeNode(); + auto prev_entry = g_agent_host_instances.Get().find(wc); + if (prev_entry != g_agent_host_instances.Get().end()) { + CHECK_NE(prev_entry->second, this); + prev_entry->second->InnerDetach(); + } + const bool inserted = g_agent_host_instances.Get().insert(std::make_pair(wc, this)).second; CHECK(inserted); auto_attacher_->SetWebContents(wc);
diff --git a/content/browser/download/mhtml_generation_browsertest.cc b/content/browser/download/mhtml_generation_browsertest.cc index 211d5bb..26c946780 100644 --- a/content/browser/download/mhtml_generation_browsertest.cc +++ b/content/browser/download/mhtml_generation_browsertest.cc
@@ -521,11 +521,6 @@ EXPECT_THAT(mhtml, HasSubstr("Content-Transfer-Encoding: quoted-printable")); } - - // Checks that the final status reported to UMA is correct. - histogram_tester()->ExpectUniqueSample( - "PageSerialization.MhtmlGeneration.FinalSaveStatus", - static_cast<int>(mojom::MhtmlSaveStatus::kSuccess), 1); } #if BUILDFLAG(IS_WIN) @@ -565,11 +560,6 @@ EXPECT_THAT(mhtml, HasSubstr("Content-Transfer-Encoding: quoted-printable")); } - - // Checks that the final status reported to UMA is correct. - histogram_tester()->ExpectUniqueSample( - "PageSerialization.MhtmlGeneration.FinalSaveStatus", - static_cast<int>(mojom::MhtmlSaveStatus::kSuccess), 1); } #endif // BUILDFLAG(IS_WIN) @@ -616,11 +606,6 @@ GenerateMHTML(path, embedded_test_server()->GetURL("/page_with_image.html")); EXPECT_EQ(file_size(), -1); // Expecting that the callback reported failure. - - // Checks that the final status reported to UMA is correct. - histogram_tester()->ExpectUniqueSample( - "PageSerialization.MhtmlGeneration.FinalSaveStatus", - static_cast<int>(mojom::MhtmlSaveStatus::kFileCreationError), 1); } // Tests that MHTML generated using the default 'quoted-printable' encoding does
diff --git a/content/browser/download/mhtml_generation_manager.cc b/content/browser/download/mhtml_generation_manager.cc index 025921b..742e4bfc 100644 --- a/content/browser/download/mhtml_generation_manager.cc +++ b/content/browser/download/mhtml_generation_manager.cc
@@ -283,10 +283,6 @@ // false for failure. static bool CloseFileIfValid(base::File& file, int64_t* file_size); - // Time tracking for performance metrics reporting. - base::TimeTicks wait_on_renderer_start_time_; - base::TimeDelta all_renderers_wait_time_; - // User-configurable parameters. Includes the file location, binary encoding // choices. MHTMLGenerationParams params_; @@ -460,8 +456,6 @@ TRACE_EVENT_NESTABLE_ASYNC_BEGIN1("page-serialization", "WaitingOnRenderer", this, "frame tree node id", frame_tree_node_id_of_busy_frame_); - DCHECK(wait_on_renderer_start_time_.is_null()); - wait_on_renderer_start_time_ = base::TimeTicks::Now(); return mojom::MhtmlSaveStatus::kSuccess; } @@ -580,8 +574,6 @@ TRACE_EVENT_NESTABLE_ASYNC_END2("page-serialization", "SavingMhtmlJob", this, "job save status", save_status, "file size", file_size); - UMA_HISTOGRAM_ENUMERATION("PageSerialization.MhtmlGeneration.FinalSaveStatus", - save_status); std::move(callback_).Run(close_file_result.toMHTMLGenerationResult()); @@ -606,23 +598,6 @@ TRACE_EVENT_NESTABLE_ASYNC_INSTANT0("page-serialization", "JobFinished", this); - - // End of job timing reports. - if (!wait_on_renderer_start_time_.is_null()) { - base::TimeDelta renderer_wait_time = - base::TimeTicks::Now() - wait_on_renderer_start_time_; - UMA_HISTOGRAM_TIMES( - "PageSerialization.MhtmlGeneration.BrowserWaitForRendererTime." - "SingleFrame", - renderer_wait_time); - all_renderers_wait_time_ += renderer_wait_time; - } - if (!all_renderers_wait_time_.is_zero()) { - UMA_HISTOGRAM_TIMES( - "PageSerialization.MhtmlGeneration.BrowserWaitForRendererTime." - "FrameTree", - all_renderers_wait_time_); - } } void MHTMLGenerationManager::Job::CloseFile( @@ -664,16 +639,6 @@ void MHTMLGenerationManager::Job::RecordDigests( const std::vector<std::string>& digests_of_uris_of_serialized_resources) { - DCHECK(!wait_on_renderer_start_time_.is_null()); - base::TimeDelta renderer_wait_time = - base::TimeTicks::Now() - wait_on_renderer_start_time_; - UMA_HISTOGRAM_TIMES( - "PageSerialization.MhtmlGeneration.BrowserWaitForRendererTime." - "SingleFrame", - renderer_wait_time); - all_renderers_wait_time_ += renderer_wait_time; - wait_on_renderer_start_time_ = base::TimeTicks(); - // Renderer should be deduping resources with the same uris. DCHECK_EQ(0u, base::STLSetIntersection<std::set<std::string>>( digests_of_already_serialized_uris_,
diff --git a/content/browser/first_party_sets/first_party_set_parser.cc b/content/browser/first_party_sets/first_party_set_parser.cc index 3e0e27e..80d54eb2 100644 --- a/content/browser/first_party_sets/first_party_set_parser.cc +++ b/content/browser/first_party_sets/first_party_set_parser.cc
@@ -262,8 +262,9 @@ // with `elements`), and singleton sets (i.e. sets must have a primary and at // least one valid associated site). // -// Uses `elements` to check disjointness of sets; augments `elements` to include -// the elements of the set that was parsed. +// Uses `elements` to check disjointness of sets. The caller is expected to +// augment `elements` to include the elements of the set returned by this +// function (including any aliases). // // Returns the parsed set if parsing and validation were successful; otherwise, // returns an appropriate ParseError. @@ -274,7 +275,7 @@ const base::Value& value, bool exempt_from_limits, bool emit_errors, - base::flat_set<net::SchemefulSite>& elements, + const base::flat_set<net::SchemefulSite>& elements, std::vector<ParseWarning>* warnings) { if (!value.is_dict()) return base::unexpected(ParseError(ParseErrorType::kInvalidType, {})); @@ -338,15 +339,6 @@ {kFirstPartySetAssociatedSitesField})); } - for (const std::pair<net::SchemefulSite, net::FirstPartySetEntry>& - site_and_entry : set_entries) { - CHECK(elements.insert(site_and_entry.first).second); - } - for (const std::pair<net::SchemefulSite, net::SchemefulSite>& - alias_and_canonical : aliases) { - CHECK(elements.insert(alias_and_canonical.first).second); - } - return std::make_pair(FirstPartySetParser::SingleSet(set_entries), aliases); } @@ -395,6 +387,10 @@ set.insert(std::make_move_iterator(alias_entries.begin()), std::make_move_iterator(alias_entries.end())); } + for (const std::pair<net::SchemefulSite, net::FirstPartySetEntry>& + site_and_entry : set) { + CHECK(elements.insert(site_and_entry.first).second); + } parsed_sets.push_back(set); previous_size = warnings.size(); } @@ -474,6 +470,17 @@ return {}; } + for (const std::pair<net::SchemefulSite, net::FirstPartySetEntry>& + site_and_entry : parsed->first) { + const net::SchemefulSite& site = site_and_entry.first; + CHECK(elements.insert(site).second); + } + for (const std::pair<net::SchemefulSite, net::SchemefulSite>& + alias_and_canonical : parsed->second) { + const net::SchemefulSite& alias = alias_and_canonical.first; + CHECK(elements.insert(alias).second); + } + base::ranges::move(parsed.value().first, std::back_inserter(sets)); base::ranges::move(parsed.value().second, std::back_inserter(aliases)); successfully_parsed_sets++;
diff --git a/content/browser/metrics/histograms_monitor_unittest.cc b/content/browser/metrics/histograms_monitor_unittest.cc index e7e777a..e417cd8 100644 --- a/content/browser/metrics/histograms_monitor_unittest.cc +++ b/content/browser/metrics/histograms_monitor_unittest.cc
@@ -38,7 +38,7 @@ diff = monitor.GetDiff(); ASSERT_EQ(diff.size(), 1ull); - std::string* header1 = diff[0].FindStringKey("header"); + std::string* header1 = diff[0].GetDict().FindString("header"); EXPECT_EQ(*header1, "Histogram: MonitorHistogram1 recorded 2 samples, mean = 35.0"); @@ -48,7 +48,7 @@ histogram2->Add(50); diff = monitor.GetDiff(); ASSERT_EQ(diff.size(), 2ull); - std::string* header2 = diff[1].FindStringKey("header"); + std::string* header2 = diff[1].GetDict().FindString("header"); EXPECT_EQ(*header2, "Histogram: MonitorHistogram2 recorded 1 samples, mean = 50.0"); }
diff --git a/content/browser/preloading/prefetch/prefetch_container.cc b/content/browser/preloading/prefetch/prefetch_container.cc index 52d80da..46c50b4 100644 --- a/content/browser/preloading/prefetch/prefetch_container.cc +++ b/content/browser/preloading/prefetch/prefetch_container.cc
@@ -122,8 +122,7 @@ absl::optional<PrefetchStatus> old_prefetch_status, PrefetchStatus new_prefetch_status) { if (old_prefetch_status && - (old_prefetch_status.value() == PrefetchStatus::kPrefetchUsedNoProbe || - old_prefetch_status.value() == PrefetchStatus::kPrefetchResponseUsed)) { + old_prefetch_status.value() == PrefetchStatus::kPrefetchResponseUsed) { // Skip this update if the triggering outcome has already been updated // to kSuccess. return; @@ -149,7 +148,6 @@ } attempt->SetTriggeringOutcome(PreloadingTriggeringOutcome::kReady); break; - case PrefetchStatus::kPrefetchUsedNoProbe: case PrefetchStatus::kPrefetchResponseUsed: if (old_prefetch_status && old_prefetch_status.value() != PrefetchStatus::kPrefetchSuccessful) { @@ -199,7 +197,6 @@ // heldback. This is covered by attempt's holdback status. For these two // reasons this PrefetchStatus does not fire a `SetTriggeringOutcome`. break; - case PrefetchStatus::kPrefetchNotEligibleGoogleDomain: case PrefetchStatus::kPrefetchNotEligibleUserHasServiceWorker: case PrefetchStatus::kPrefetchNotEligibleSchemeIsNotHttps: case PrefetchStatus::kPrefetchNotEligibleNonDefaultStoragePartition: @@ -213,22 +210,6 @@ case PrefetchStatus::kPrefetchNotUsedCookiesChanged: case PrefetchStatus::kPrefetchIsStale: case PrefetchStatus::kPrefetchNotUsedProbeFailed: - case PrefetchStatus::kNavigatedToLinkNotOnSRP: - case PrefetchStatus::kPrefetchUsedNoProbeWithNSP: - case PrefetchStatus::kPrefetchUsedProbeSuccessWithNSP: - case PrefetchStatus::kPrefetchNotUsedProbeFailedWithNSP: - case PrefetchStatus::kPrefetchUsedNoProbeNSPAttemptDenied: - case PrefetchStatus::kPrefetchUsedProbeSuccessNSPAttemptDenied: - case PrefetchStatus::kPrefetchNotUsedProbeFailedNSPAttemptDenied: - case PrefetchStatus::kPrefetchUsedNoProbeNSPNotStarted: - case PrefetchStatus::kPrefetchUsedProbeSuccessNSPNotStarted: - case PrefetchStatus::kPrefetchNotUsedProbeFailedNSPNotStarted: - case PrefetchStatus::kPrefetchIsStaleWithNSP: - case PrefetchStatus::kPrefetchIsStaleNSPAttemptDenied: - case PrefetchStatus::kPrefetchIsStaleNSPNotStarted: - case PrefetchStatus::kSubresourceThrottled: - case PrefetchStatus::kPrefetchPositionIneligible: - case PrefetchStatus::kPrefetchFailedRedirectsDisabled_DEPRECATED: case PrefetchStatus:: kPrefetchNotEligibleSameSiteCrossOriginPrefetchRequiredProxy: NOTIMPLEMENTED();
diff --git a/content/browser/preloading/prefetch/prefetch_document_manager.cc b/content/browser/preloading/prefetch/prefetch_document_manager.cc index 1b183b1..4e6da81 100644 --- a/content/browser/preloading/prefetch/prefetch_document_manager.cc +++ b/content/browser/preloading/prefetch/prefetch_document_manager.cc
@@ -264,40 +264,22 @@ return false; case PrefetchStatus::kPrefetchNotEligibleUserHasCookies: case PrefetchStatus::kPrefetchNotEligibleUserHasServiceWorker: - case PrefetchStatus::kPrefetchNotEligibleGoogleDomain: case PrefetchStatus::kPrefetchNotEligibleSchemeIsNotHttps: case PrefetchStatus::kPrefetchNotEligibleNonDefaultStoragePartition: - case PrefetchStatus::kPrefetchPositionIneligible: case PrefetchStatus::kPrefetchIneligibleRetryAfter: case PrefetchStatus::kPrefetchProxyNotAvailable: case PrefetchStatus::kPrefetchNotEligibleHostIsNonUnique: case PrefetchStatus::kPrefetchNotEligibleDataSaverEnabled: case PrefetchStatus::kPrefetchNotEligibleExistingProxy: - case PrefetchStatus::kPrefetchUsedNoProbe: case PrefetchStatus::kPrefetchNotUsedProbeFailed: case PrefetchStatus::kPrefetchNotStarted: case PrefetchStatus::kPrefetchNotFinishedInTime: case PrefetchStatus::kPrefetchFailedNetError: case PrefetchStatus::kPrefetchFailedNon2XX: case PrefetchStatus::kPrefetchFailedMIMENotSupported: - case PrefetchStatus::kNavigatedToLinkNotOnSRP: - case PrefetchStatus::kSubresourceThrottled: - case PrefetchStatus::kPrefetchUsedNoProbeWithNSP: - case PrefetchStatus::kPrefetchUsedProbeSuccessWithNSP: - case PrefetchStatus::kPrefetchNotUsedProbeFailedWithNSP: - case PrefetchStatus::kPrefetchUsedNoProbeNSPAttemptDenied: - case PrefetchStatus::kPrefetchUsedProbeSuccessNSPAttemptDenied: - case PrefetchStatus::kPrefetchNotUsedProbeFailedNSPAttemptDenied: - case PrefetchStatus::kPrefetchUsedNoProbeNSPNotStarted: - case PrefetchStatus::kPrefetchUsedProbeSuccessNSPNotStarted: - case PrefetchStatus::kPrefetchNotUsedProbeFailedNSPNotStarted: case PrefetchStatus::kPrefetchIsPrivacyDecoy: case PrefetchStatus::kPrefetchIsStale: - case PrefetchStatus::kPrefetchIsStaleWithNSP: - case PrefetchStatus::kPrefetchIsStaleNSPAttemptDenied: - case PrefetchStatus::kPrefetchIsStaleNSPNotStarted: case PrefetchStatus::kPrefetchNotUsedCookiesChanged: - case PrefetchStatus::kPrefetchFailedRedirectsDisabled_DEPRECATED: case PrefetchStatus::kPrefetchNotEligibleBrowserContextOffTheRecord: case PrefetchStatus::kPrefetchHeldback: case PrefetchStatus::kPrefetchAllowed:
diff --git a/content/browser/preloading/prefetch/prefetch_service.cc b/content/browser/preloading/prefetch/prefetch_service.cc index 4b076e3..5df1b2a5 100644 --- a/content/browser/preloading/prefetch/prefetch_service.cc +++ b/content/browser/preloading/prefetch/prefetch_service.cc
@@ -79,10 +79,8 @@ // If the prefetch is not eligible because of cookie or a service worker, // then maybe send a decoy. return true; - case PrefetchStatus::kPrefetchNotEligibleGoogleDomain: case PrefetchStatus::kPrefetchNotEligibleSchemeIsNotHttps: case PrefetchStatus::kPrefetchNotEligibleNonDefaultStoragePartition: - case PrefetchStatus::kPrefetchPositionIneligible: case PrefetchStatus::kPrefetchIneligibleRetryAfter: case PrefetchStatus::kPrefetchProxyNotAvailable: case PrefetchStatus::kPrefetchNotEligibleHostIsNonUnique: @@ -94,7 +92,6 @@ // These statuses don't relate to any user state, so don't send a decoy // request. return false; - case PrefetchStatus::kPrefetchUsedNoProbe: case PrefetchStatus::kPrefetchNotUsedProbeFailed: case PrefetchStatus::kPrefetchNotStarted: case PrefetchStatus::kPrefetchNotFinishedInTime: @@ -102,24 +99,9 @@ case PrefetchStatus::kPrefetchFailedNon2XX: case PrefetchStatus::kPrefetchFailedMIMENotSupported: case PrefetchStatus::kPrefetchSuccessful: - case PrefetchStatus::kNavigatedToLinkNotOnSRP: - case PrefetchStatus::kSubresourceThrottled: - case PrefetchStatus::kPrefetchUsedNoProbeWithNSP: - case PrefetchStatus::kPrefetchUsedProbeSuccessWithNSP: - case PrefetchStatus::kPrefetchNotUsedProbeFailedWithNSP: - case PrefetchStatus::kPrefetchUsedNoProbeNSPAttemptDenied: - case PrefetchStatus::kPrefetchUsedProbeSuccessNSPAttemptDenied: - case PrefetchStatus::kPrefetchNotUsedProbeFailedNSPAttemptDenied: - case PrefetchStatus::kPrefetchUsedNoProbeNSPNotStarted: - case PrefetchStatus::kPrefetchUsedProbeSuccessNSPNotStarted: - case PrefetchStatus::kPrefetchNotUsedProbeFailedNSPNotStarted: case PrefetchStatus::kPrefetchIsPrivacyDecoy: case PrefetchStatus::kPrefetchIsStale: - case PrefetchStatus::kPrefetchIsStaleWithNSP: - case PrefetchStatus::kPrefetchIsStaleNSPAttemptDenied: - case PrefetchStatus::kPrefetchIsStaleNSPNotStarted: case PrefetchStatus::kPrefetchNotUsedCookiesChanged: - case PrefetchStatus::kPrefetchFailedRedirectsDisabled_DEPRECATED: case PrefetchStatus::kPrefetchResponseUsed: case PrefetchStatus::kPrefetchHeldback: case PrefetchStatus::kPrefetchAllowed:
diff --git a/content/browser/preloading/prefetch/prefetch_status.h b/content/browser/preloading/prefetch/prefetch_status.h index 4dd8f9d..5695c0e 100644 --- a/content/browser/preloading/prefetch/prefetch_status.h +++ b/content/browser/preloading/prefetch/prefetch_status.h
@@ -14,8 +14,10 @@ // These are also mapped onto the first content internal range of // `PreloadingEligibility` and onto `PreloadingFailureReason`. enum class PrefetchStatus { + // Deprecated. Replaced by `kPrefetchResponseUsed`. + // // The interceptor used a prefetch. - kPrefetchUsedNoProbe = 0, + // kPrefetchUsedNoProbe = 0, // Deprecated. Probe success implies the response is used. Thus replaced // by `kPrefetchResponseUsed`. @@ -31,9 +33,11 @@ // made. kPrefetchNotStarted = 3, + // Deprecated. No longer a reason for ineligibility. + // // The url was not eligible to be prefetched because it is a Google-owned // domain. - kPrefetchNotEligibleGoogleDomain = 4, + // kPrefetchNotEligibleGoogleDomain = 4, // The url was not eligible to be prefetched because the user had cookies for // that origin. @@ -47,8 +51,10 @@ // https://. kPrefetchNotEligibleSchemeIsNotHttps = 7, + // Deprecated. No longer a reason for ineligibility. + // // The url was not eligible to be prefetched because its host was an IP - // address. [DEPRECATED] + // address. // kPrefetchNotEligibleHostIsIPAddress = 8, // The url was not eligible to be prefetched because it uses a non-default @@ -71,35 +77,47 @@ // The prefetch finished successfully but was never used. kPrefetchSuccessful = 14, + // Deprecated. No longer used. + // // The navigation off of the Google SRP was to a url that was not on the SRP. - kNavigatedToLinkNotOnSRP = 15, + // kNavigatedToLinkNotOnSRP = 15, + // Deprecated. NSP no longer supported. + // // Variants of the first three statuses with the additional context of a // successfully completed NoStatePrefetch. - kPrefetchUsedNoProbeWithNSP = 16, - kPrefetchUsedProbeSuccessWithNSP = 17, - kPrefetchNotUsedProbeFailedWithNSP = 18, + // kPrefetchUsedNoProbeWithNSP = 16, + // kPrefetchUsedProbeSuccessWithNSP = 17, + // kPrefetchNotUsedProbeFailedWithNSP = 18, + // Deprecated. NSP no longer supported + // // Variants of the first three statuses within the additional context of a // link that was eligible for NoStatePrefetch, but was not started because // the Prerender code denied the request. - kPrefetchUsedNoProbeNSPAttemptDenied = 19, - kPrefetchUsedProbeSuccessNSPAttemptDenied = 20, - kPrefetchNotUsedProbeFailedNSPAttemptDenied = 21, + // kPrefetchUsedNoProbeNSPAttemptDenied = 19, + // kPrefetchUsedProbeSuccessNSPAttemptDenied = 20, + // kPrefetchNotUsedProbeFailedNSPAttemptDenied = 21, + // Deprecated. NSP no longer supported. + // // Variants of the first three statuses with in the additional context of a // link that was eligible for NoStatePrefetch that was never started. - kPrefetchUsedNoProbeNSPNotStarted = 22, - kPrefetchUsedProbeSuccessNSPNotStarted = 23, - kPrefetchNotUsedProbeFailedNSPNotStarted = 24, + // kPrefetchUsedNoProbeNSPNotStarted = 22, + // kPrefetchUsedProbeSuccessNSPNotStarted = 23, + // kPrefetchNotUsedProbeFailedNSPNotStarted = 24, + // Deprecated. Subresources no longer supported. + // // A subresource which was not fetched because it was throttled by an // experimental control for the max number of subresources per prerender. - kSubresourceThrottled = 25, + // kSubresourceThrottled = 25, + // Deprecated. No longer a reason for ineligibilty. + // // The position of the link in the navigation prediction was not eligible to // be prefetch due to experiment controls. - kPrefetchPositionIneligible = 26, + // kPrefetchPositionIneligible = 26, // A previous prefetch to the origin got a HTTP 503 response with an // Retry-After header that has no elapsed yet. @@ -118,17 +136,21 @@ // The prefetch was eligible, but too much time elapsed between the prefetch // and the interception. kPrefetchIsStale = 30, - kPrefetchIsStaleWithNSP = 31, - kPrefetchIsStaleNSPAttemptDenied = 32, - kPrefetchIsStaleNSPNotStarted = 33, + + // Deprecated. NSP no longer supported + // kPrefetchIsStaleWithNSP = 31, + // kPrefetchIsStaleNSPAttemptDenied = 32, + // kPrefetchIsStaleNSPNotStarted = 33, // The prefetch was not used because cookies were added to the URL after the // initial eligibility check. kPrefetchNotUsedCookiesChanged = 34, + // Deprecated. Support for redirecs added. + // // The prefetch was redirected, but following redirects was disabled. // See crbug.com/1266876 for more details. - kPrefetchFailedRedirectsDisabled_DEPRECATED = 35, + // kPrefetchFailedRedirectsDisabled = 35, // The url was not eligible to be prefetched because its host was not unique // (e.g., a non publicly routable IP address or a hostname which is not
diff --git a/content/browser/smart_card/smart_card_browsertest.cc b/content/browser/smart_card/smart_card_browsertest.cc index 8f9c298f..1fa5b26 100644 --- a/content/browser/smart_card/smart_card_browsertest.cc +++ b/content/browser/smart_card/smart_card_browsertest.cc
@@ -30,13 +30,18 @@ #include "third_party/blink/public/common/features_generated.h" #include "third_party/blink/public/mojom/smart_card/smart_card.mojom.h" +using base::test::TestFuture; +using device::mojom::SmartCardConnection; using device::mojom::SmartCardContext; +using device::mojom::SmartCardDisposition; using device::mojom::SmartCardError; using device::mojom::SmartCardProtocol; using device::mojom::SmartCardReaderStateFlags; using device::mojom::SmartCardReaderStateOut; using device::mojom::SmartCardReaderStateOutPtr; +using device::mojom::SmartCardResult; using device::mojom::SmartCardShareMode; +using device::mojom::SmartCardSuccess; using ::testing::_; using testing::Exactly; using testing::InSequence; @@ -49,8 +54,7 @@ public: MOCK_METHOD(void, Disconnect, - (device::mojom::SmartCardDisposition disposition, - DisconnectCallback callback), + (SmartCardDisposition disposition, DisconnectCallback callback), (override)); MOCK_METHOD(void, @@ -849,4 +853,186 @@ })())")); } +IN_PROC_BROWSER_TEST_F(SmartCardTest, Disconnect) { + ASSERT_TRUE(NavigateToURL(shell(), GetIsolatedContextUrl())); + + MockSmartCardReaderTracker& mock_tracker = CreateMockSmartCardReaderTracker(); + + MockSmartCardContextFactory& mock_context_factory = + GetFakeSmartCardDelegate().mock_context_factory; + MockSmartCardConnection mock_connection; + mojo::Receiver<SmartCardConnection> connection_receiver(&mock_connection); + + { + InSequence s; + + EXPECT_CALL(mock_tracker, Start(_, _)) + .WillOnce( + [&mock_tracker](SmartCardReaderTracker::Observer* observer, + SmartCardReaderTracker::StartCallback callback) { + mock_tracker.observer_list.AddObserverIfMissing(observer); + + std::vector<blink::mojom::SmartCardReaderInfoPtr> readers; + readers.push_back(blink::mojom::SmartCardReaderInfo::New( + "Fake reader", blink::mojom::SmartCardReaderState::kEmpty, + std::vector<uint8_t>())); + std::move(callback).Run( + blink::mojom::SmartCardGetReadersResult::NewReaders( + std::move(readers))); + }); + + EXPECT_CALL(mock_context_factory, + Connect("Fake reader", SmartCardShareMode::kShared, _, _)) + .WillOnce([&connection_receiver]( + const std::string& reader, + device::mojom::SmartCardShareMode share_mode, + device::mojom::SmartCardProtocolsPtr preferred_protocols, + SmartCardContext::ConnectCallback callback) { + EXPECT_TRUE(preferred_protocols->t0); + EXPECT_TRUE(preferred_protocols->t1); + EXPECT_FALSE(preferred_protocols->raw); + + auto success = device::mojom::SmartCardConnectSuccess::New( + connection_receiver.BindNewPipeAndPassRemote(), + SmartCardProtocol::kT1); + + std::move(callback).Run( + device::mojom::SmartCardConnectResult::NewSuccess( + std::move(success))); + }); + + EXPECT_CALL(mock_connection, Disconnect(SmartCardDisposition::kEject, _)) + .WillOnce([](SmartCardDisposition disposition, + SmartCardConnection::DisconnectCallback callback) { + std::move(callback).Run( + SmartCardResult::NewSuccess(SmartCardSuccess::kOk)); + }); + + // When the document is destroyed + EXPECT_CALL(mock_tracker, Stop(_)); + } + + EXPECT_EQ( + "second disconnect: InvalidStateError, Failed to execute 'disconnect' on " + "'SmartCardConnection': Is disconnected.", + EvalJs(shell(), R"( + (async () => { + let readers = await navigator.smartCard.getReaders(); + + if (readers.length !== 1) { + return "reader not found"; + } + + let reader = readers[0]; + let connection = await reader.connect("shared", ["t0", "t1"]); + + await connection.disconnect("eject"); + + // A second attempt should fail. + try { + await connection.disconnect("unpower"); + } catch (e) { + return `second disconnect: ${e.name}, ${e.message}`; + } + + return `second disconnect did not throw`; + })())")); +} + +IN_PROC_BROWSER_TEST_F(SmartCardTest, ConcurrentDisconnect) { + ASSERT_TRUE(NavigateToURL(shell(), GetIsolatedContextUrl())); + + MockSmartCardReaderTracker& mock_tracker = CreateMockSmartCardReaderTracker(); + + MockSmartCardContextFactory& mock_context_factory = + GetFakeSmartCardDelegate().mock_context_factory; + MockSmartCardConnection mock_connection; + mojo::Receiver<SmartCardConnection> connection_receiver(&mock_connection); + + TestFuture<SmartCardConnection::DisconnectCallback> disconnect_future; + + { + InSequence s; + + EXPECT_CALL(mock_tracker, Start(_, _)) + .WillOnce( + [&mock_tracker](SmartCardReaderTracker::Observer* observer, + SmartCardReaderTracker::StartCallback callback) { + mock_tracker.observer_list.AddObserverIfMissing(observer); + + std::vector<blink::mojom::SmartCardReaderInfoPtr> readers; + readers.push_back(blink::mojom::SmartCardReaderInfo::New( + "Fake reader", blink::mojom::SmartCardReaderState::kEmpty, + std::vector<uint8_t>())); + std::move(callback).Run( + blink::mojom::SmartCardGetReadersResult::NewReaders( + std::move(readers))); + }); + + EXPECT_CALL(mock_context_factory, + Connect("Fake reader", SmartCardShareMode::kShared, _, _)) + .WillOnce([&connection_receiver]( + const std::string& reader, + device::mojom::SmartCardShareMode share_mode, + device::mojom::SmartCardProtocolsPtr preferred_protocols, + SmartCardContext::ConnectCallback callback) { + EXPECT_TRUE(preferred_protocols->t0); + EXPECT_TRUE(preferred_protocols->t1); + EXPECT_FALSE(preferred_protocols->raw); + + auto success = device::mojom::SmartCardConnectSuccess::New( + connection_receiver.BindNewPipeAndPassRemote(), + SmartCardProtocol::kT1); + + std::move(callback).Run( + device::mojom::SmartCardConnectResult::NewSuccess( + std::move(success))); + }); + + EXPECT_CALL(mock_connection, Disconnect(SmartCardDisposition::kEject, _)) + .WillOnce([&disconnect_future]( + SmartCardDisposition disposition, + SmartCardConnection::DisconnectCallback callback) { + // Ensure this disconnect() call doesn't finish before the second + // one is issued. + disconnect_future.SetValue(std::move(callback)); + }); + + // When the document is destroyed + EXPECT_CALL(mock_tracker, Stop(_)); + } + + EXPECT_EQ( + "second disconnect: InvalidStateError, Failed to execute 'disconnect' on " + "'SmartCardConnection': An operation is in progress.", + EvalJs(shell(), R"( + (async () => { + let readers = await navigator.smartCard.getReaders(); + + if (readers.length !== 1) { + return "reader not found"; + } + + let reader = readers[0]; + let connection = await reader.connect("shared", ["t0", "t1"]); + + // This first disconnect() call will go through but won't be finished + // before the end of this script. + connection.disconnect("eject"); + + // A second attempt should fail since the first one is still ongoing. + try { + await connection.disconnect("unpower"); + } catch (e) { + return `second disconnect: ${e.name}, ${e.message}`; + } + + return `second disconnect did not throw`; + })())")); + + // Let the first disconnect() finish. + disconnect_future.Take().Run( + SmartCardResult::NewSuccess(SmartCardSuccess::kOk)); +} + } // namespace content
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc index ccdd233..1603b08 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc
@@ -1373,14 +1373,18 @@ // TODO(cbentzel): remove this debugging code? if (delegate == delegate_) return; - if (delegate_) + const bool had_delegate = !!delegate_; + if (had_delegate) { delegate_->Detach(this); + } delegate_ = delegate; if (delegate_) { delegate_->Attach(this); // RenderFrameDevToolsAgentHost should not be told about the WebContents // until there is a `delegate_`. - RenderFrameDevToolsAgentHost::AttachToWebContents(this); + if (!had_delegate) { + RenderFrameDevToolsAgentHost::AttachToWebContents(this); + } } // Re-read values from the new delegate and apply them.
diff --git a/content/browser/webid/federated_auth_request_impl.cc b/content/browser/webid/federated_auth_request_impl.cc index a155d6b..5d1c721c 100644 --- a/content/browser/webid/federated_auth_request_impl.cc +++ b/content/browser/webid/federated_auth_request_impl.cc
@@ -1094,13 +1094,13 @@ IsFedCmAutoReauthnEnabled(); bool auto_reauthn = auto_reauthn_enabled; - bool has_auto_reauthn_content_setting = false; + bool is_auto_reauthn_setting_enabled = false; bool is_auto_reauthn_embargoed = false; absl::optional<base::TimeDelta> time_from_embargo; if (auto_reauthn_enabled) { - has_auto_reauthn_content_setting = - auto_reauthn_permission_delegate_->HasAutoReauthnContentSetting(); - auto_reauthn &= has_auto_reauthn_content_setting; + is_auto_reauthn_setting_enabled = + auto_reauthn_permission_delegate_->IsAutoReauthnSettingEnabled(); + auto_reauthn &= is_auto_reauthn_setting_enabled; is_auto_reauthn_embargoed = auto_reauthn_permission_delegate_->IsAutoReauthnEmbargoed( GetEmbeddingOrigin()); @@ -1132,7 +1132,7 @@ mediation_requirement_ == MediationRequirement::kSilent) { fedcm_metrics_->RecordAutoReauthnMetrics( has_single_returning_account, auto_reauthn_account, auto_reauthn, - !has_auto_reauthn_content_setting, is_auto_reauthn_embargoed, + !is_auto_reauthn_setting_enabled, is_auto_reauthn_embargoed, time_from_embargo); // By this moment we know that the user has granted permission in the past @@ -1199,7 +1199,7 @@ if (auto_reauthn_enabled) { fedcm_metrics_->RecordAutoReauthnMetrics( has_single_returning_account, auto_reauthn_account, auto_reauthn, - !has_auto_reauthn_content_setting, is_auto_reauthn_embargoed, + !is_auto_reauthn_setting_enabled, is_auto_reauthn_embargoed, time_from_embargo); } } @@ -2018,8 +2018,8 @@ return false; } - bool has_auto_reauthn_content_setting = - auto_reauthn_permission_delegate_->HasAutoReauthnContentSetting(); + bool is_auto_reauthn_setting_enabled = + auto_reauthn_permission_delegate_->IsAutoReauthnSettingEnabled(); bool is_auto_reauthn_embargoed = auto_reauthn_permission_delegate_->IsAutoReauthnEmbargoed( @@ -2030,8 +2030,8 @@ origin(), GetEmbeddingOrigin(), url::Origin::Create(config_url), absl::nullopt); - return !has_auto_reauthn_content_setting || is_auto_reauthn_embargoed || - !has_sharing_permission_for_any_account || RequiresUserMediation(); + return RequiresUserMediation() || !is_auto_reauthn_setting_enabled || + is_auto_reauthn_embargoed || !has_sharing_permission_for_any_account; } bool FederatedAuthRequestImpl::RequiresUserMediation() {
diff --git a/content/browser/webid/federated_auth_request_impl_unittest.cc b/content/browser/webid/federated_auth_request_impl_unittest.cc index d0c03bf..d509fcb9 100644 --- a/content/browser/webid/federated_auth_request_impl_unittest.cc +++ b/content/browser/webid/federated_auth_request_impl_unittest.cc
@@ -1515,7 +1515,7 @@ // Pretend the auto re-authn permission has been granted. EXPECT_CALL(*test_auto_reauthn_permission_delegate_, - HasAutoReauthnContentSetting()) + IsAutoReauthnSettingEnabled()) .WillOnce(Return(true)); EXPECT_CALL(*test_auto_reauthn_permission_delegate_, IsAutoReauthnEmbargoed(OriginFromString(kRpUrl))) @@ -1554,7 +1554,7 @@ // Pretend the auto re-authn permission has been granted. EXPECT_CALL(*test_auto_reauthn_permission_delegate_, - HasAutoReauthnContentSetting()) + IsAutoReauthnSettingEnabled()) .WillOnce(Return(true)); EXPECT_CALL(*test_auto_reauthn_permission_delegate_, IsAutoReauthnEmbargoed(OriginFromString(kRpUrl))) @@ -1610,7 +1610,7 @@ // Pretend the auto re-authn permission has been granted. EXPECT_CALL(*test_auto_reauthn_permission_delegate_, - HasAutoReauthnContentSetting()) + IsAutoReauthnSettingEnabled()) .WillOnce(Return(true)); EXPECT_CALL(*test_auto_reauthn_permission_delegate_, IsAutoReauthnEmbargoed(OriginFromString(kRpUrl))) @@ -1666,7 +1666,7 @@ // Pretend the auto re-authn permission has been granted. EXPECT_CALL(*test_auto_reauthn_permission_delegate_, - HasAutoReauthnContentSetting()) + IsAutoReauthnSettingEnabled()) .WillOnce(Return(true)); EXPECT_CALL(*test_auto_reauthn_permission_delegate_, IsAutoReauthnEmbargoed(OriginFromString(kRpUrl))) @@ -1704,7 +1704,7 @@ // Pretend the auto re-authn permission has been granted. EXPECT_CALL(*test_auto_reauthn_permission_delegate_, - HasAutoReauthnContentSetting()) + IsAutoReauthnSettingEnabled()) .WillOnce(Return(true)); EXPECT_CALL(*test_auto_reauthn_permission_delegate_, IsAutoReauthnEmbargoed(OriginFromString(kRpUrl))) @@ -1768,7 +1768,7 @@ // Pretend that auto re-authn is not disabled in settings. EXPECT_CALL(*test_auto_reauthn_permission_delegate_, - HasAutoReauthnContentSetting()) + IsAutoReauthnSettingEnabled()) .WillOnce(Return(true)); // Pretend that auto re-authn is not in embargo state. @@ -1789,6 +1789,45 @@ EXPECT_EQ(dialog_controller_state_.sign_in_mode, SignInMode::kExplicit); } +// Test that auto re-authn with multiple accounts and a single returning user +// sets the sign-in mode to kExplicit if "auto sign-in" is disabled. +TEST_F(FederatedAuthRequestImplTest, + AutoReauthnForSingleReturningUserWithAutoSigninDisabled) { + base::test::ScopedFeatureList list; + list.InitAndEnableFeature(features::kFedCmAutoReauthn); + + // Pretend the sharing permission has been granted for this account. + EXPECT_CALL( + *test_permission_delegate_, + HasSharingPermission(OriginFromString(kRpUrl), OriginFromString(kRpUrl), + OriginFromString(kProviderUrlFull), + Optional(std::string(kAccountId)))) + .Times(2) + .WillRepeatedly(Return(true)); + + // Pretend that auto re-authn is not in embargo state. + EXPECT_CALL(*test_auto_reauthn_permission_delegate_, + IsAutoReauthnEmbargoed(OriginFromString(kRpUrl))) + .WillOnce(Return(false)); + + // Pretend that re-authn does not require user mediation. + EXPECT_CALL(*test_auto_reauthn_permission_delegate_, + RequiresUserMediation(GURL(kRpUrl))) + .WillOnce(Return(false)); + + // Pretend that auto re-authn is disabled in settings. + EXPECT_CALL(*test_auto_reauthn_permission_delegate_, + IsAutoReauthnSettingEnabled()) + .WillOnce(Return(false)); + + RunAuthTest(kDefaultRequestParameters, kExpectationSuccess, + kConfigurationValid); + + ASSERT_EQ(displayed_accounts().size(), 1u); + EXPECT_EQ(CountNumLoginStateIsSignin(), 1); + EXPECT_EQ(dialog_controller_state_.sign_in_mode, SignInMode::kExplicit); +} + // Test that if browser has not observed sign-in in the past, the sign-in mode // is set to explicit regardless the account's login state. TEST_F(FederatedAuthRequestImplTest, @@ -1807,7 +1846,7 @@ // Pretend the auto re-authn permission has been granted. EXPECT_CALL(*test_auto_reauthn_permission_delegate_, - HasAutoReauthnContentSetting()) + IsAutoReauthnSettingEnabled()) .WillOnce(Return(true)); EXPECT_CALL(*test_auto_reauthn_permission_delegate_, IsAutoReauthnEmbargoed(OriginFromString(kRpUrl))) @@ -1833,7 +1872,7 @@ // Pretend the auto re-authn permission has been granted. EXPECT_CALL(*test_auto_reauthn_permission_delegate_, - HasAutoReauthnContentSetting()) + IsAutoReauthnSettingEnabled()) .WillOnce(Return(true)); EXPECT_CALL(*test_auto_reauthn_permission_delegate_, IsAutoReauthnEmbargoed(OriginFromString(kRpUrl))) @@ -1864,7 +1903,7 @@ // Pretend the auto re-authn permission has been blocked for this account. EXPECT_CALL(*test_auto_reauthn_permission_delegate_, - HasAutoReauthnContentSetting()) + IsAutoReauthnSettingEnabled()) .WillOnce(Return(false)); RunAuthTest(kDefaultRequestParameters, kExpectationSuccess, @@ -1896,7 +1935,7 @@ // Pretend the auto re-authn permission has been granted for this account. EXPECT_CALL(*test_auto_reauthn_permission_delegate_, - HasAutoReauthnContentSetting()) + IsAutoReauthnSettingEnabled()) .WillOnce(Return(true)); // Pretend that auto re-authn is embargoed. EXPECT_CALL(*test_auto_reauthn_permission_delegate_, @@ -1939,9 +1978,9 @@ OriginFromString(kProviderUrlFull), Eq(absl::nullopt))) .WillOnce(Return(false)); - // Pretend the auto re-authn permission has been granted. + // Pretend the auto re-authn is disabled in settings. EXPECT_CALL(*test_auto_reauthn_permission_delegate_, - HasAutoReauthnContentSetting()) + IsAutoReauthnSettingEnabled()) .WillOnce(Return(true)); EXPECT_CALL(*test_auto_reauthn_permission_delegate_, IsAutoReauthnEmbargoed(OriginFromString(kRpUrl))) @@ -1975,8 +2014,9 @@ // Pretend the auto re-authn permission has been granted. EXPECT_CALL(*test_auto_reauthn_permission_delegate_, - HasAutoReauthnContentSetting()) + IsAutoReauthnSettingEnabled()) .WillOnce(Return(true)); + EXPECT_CALL(*test_auto_reauthn_permission_delegate_, IsAutoReauthnEmbargoed(OriginFromString(kRpUrl))) .WillOnce(Return(true)); @@ -2001,7 +2041,7 @@ list.InitAndEnableFeature(features::kFedCmAutoReauthn); EXPECT_CALL(*test_auto_reauthn_permission_delegate_, - HasAutoReauthnContentSetting()) + IsAutoReauthnSettingEnabled()) .WillOnce(Return(true)); EXPECT_CALL(*test_permission_delegate_, HasSharingPermission( @@ -2027,6 +2067,40 @@ EXPECT_FALSE(DidFetchAnyEndpoint()); } +// Test that no network request is sent if `mediation: silent` is used and user +// has disabled "auto sign-in". +TEST_F(FederatedAuthRequestImplTest, + AutoReauthnMediationSilentFailWithPasswordManagerAutoSigninDisabled) { + base::test::ScopedFeatureList list; + list.InitAndEnableFeature(features::kFedCmAutoReauthn); + + EXPECT_CALL(*test_auto_reauthn_permission_delegate_, + IsAutoReauthnSettingEnabled()) + .WillOnce(Return(false)); + EXPECT_CALL(*test_permission_delegate_, + HasSharingPermission( + OriginFromString(kRpUrl), OriginFromString(kRpUrl), + OriginFromString(kProviderUrlFull), Eq(absl::nullopt))) + .WillOnce(Return(true)); + EXPECT_CALL(*test_auto_reauthn_permission_delegate_, + IsAutoReauthnEmbargoed(OriginFromString(kRpUrl))) + .WillOnce(Return(false)); + EXPECT_CALL(*test_auto_reauthn_permission_delegate_, + RequiresUserMediation(GURL(kRpUrl))) + .WillOnce(Return(false)); + + RequestExpectations expectations = { + RequestTokenStatus::kError, + {FederatedAuthRequestResult::kError}, + /*selected_idp_config_url=*/absl::nullopt}; + MockConfiguration configuration = kConfigurationValid; + configuration.mediation_requirement = MediationRequirement::kSilent; + + RunAuthTest(kDefaultRequestParameters, expectations, configuration); + + EXPECT_FALSE(DidFetchAnyEndpoint()); +} + // Test `mediation: silent` could fail silently after fetching accounts TEST_F(FederatedAuthRequestImplTest, AutoReauthnMediationSilentFailWithTwoReturningAccounts) { @@ -2068,7 +2142,7 @@ // Pretend the auto re-authn permission has been granted. EXPECT_CALL(*test_auto_reauthn_permission_delegate_, - HasAutoReauthnContentSetting()) + IsAutoReauthnSettingEnabled()) .Times(2) .WillRepeatedly(Return(true)); EXPECT_CALL(*test_auto_reauthn_permission_delegate_,
diff --git a/content/browser/webid/test/mock_auto_reauthn_permission_delegate.h b/content/browser/webid/test/mock_auto_reauthn_permission_delegate.h index 3fadeab3..19f1582 100644 --- a/content/browser/webid/test/mock_auto_reauthn_permission_delegate.h +++ b/content/browser/webid/test/mock_auto_reauthn_permission_delegate.h
@@ -22,7 +22,7 @@ MockAutoReauthnPermissionDelegate& operator=( const MockAutoReauthnPermissionDelegate&) = delete; - MOCK_METHOD0(HasAutoReauthnContentSetting, bool()); + MOCK_METHOD0(IsAutoReauthnSettingEnabled, bool()); MOCK_METHOD1(IsAutoReauthnEmbargoed, bool(const url::Origin&)); MOCK_METHOD1(GetAutoReauthnEmbargoStartTime, base::Time(const url::Origin&)); MOCK_METHOD1(RecordDisplayAndEmbargo, void(const url::Origin&));
diff --git a/content/browser/worker_network_isolation_key_browsertest.cc b/content/browser/worker_network_isolation_key_browsertest.cc index 74ae144..2f15c0b5 100644 --- a/content/browser/worker_network_isolation_key_browsertest.cc +++ b/content/browser/worker_network_isolation_key_browsertest.cc
@@ -148,6 +148,19 @@ : public WorkerNetworkIsolationKeyBrowserTest, public ::testing::WithParamInterface< std::tuple<bool /* test_same_network_isolation_key */, WorkerType>> { + public: + WorkerImportScriptsAndFetchRequestNetworkIsolationKeyBrowserTest() { + // This test was written assuming that iframes/workers corresponding to + // different cross-origin frames (same top-level site) would not share an + // HTTP cache partition, but this is not the case when the experiment to + // replace the frame origin with an "is-cross-site" bit in the Network + // Isolation Key is active. Therefore, disable it for this test. + feature_list_.InitAndDisableFeature( + net::features::kEnableCrossSiteFlagNetworkIsolationKey); + } + + private: + base::test::ScopedFeatureList feature_list_; }; // Test that network isolation key is filled in correctly for service/shared
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc index 66ed03be5..57c7d87 100644 --- a/content/child/runtime_features.cc +++ b/content/child/runtime_features.cc
@@ -368,6 +368,8 @@ {"WebAppTabStrip", raw_ref(features::kDesktopPWAsTabStrip)}, {"WebAppTabStripCustomizations", raw_ref(blink::features::kDesktopPWAsTabStripCustomizations)}, + {"WebEnvironmentIntegrity", + raw_ref(features::kWebEnvironmentIntegrity)}, {"WGIGamepadTriggerRumble", raw_ref(features::kEnableWindowsGamingInputDataFetcher)}, {"UserAgentFull", raw_ref(blink::features::kFullUserAgent)},
diff --git a/content/public/android/java/src/org/chromium/content/app/ContentChildProcessServiceDelegate.java b/content/public/android/java/src/org/chromium/content/app/ContentChildProcessServiceDelegate.java index dca1cec..beb4519 100644 --- a/content/public/android/java/src/org/chromium/content/app/ContentChildProcessServiceDelegate.java +++ b/content/public/android/java/src/org/chromium/content/app/ContentChildProcessServiceDelegate.java
@@ -21,7 +21,6 @@ import org.chromium.base.library_loader.LibraryLoader; import org.chromium.base.memory.MemoryPressureUma; import org.chromium.base.process_launcher.ChildProcessServiceDelegate; -import org.chromium.build.annotations.MainDex; import org.chromium.content.browser.ChildProcessCreationParamsImpl; import org.chromium.content.browser.ContentChildProcessConstants; import org.chromium.content.common.IGpuProcessCallback; @@ -35,7 +34,6 @@ * access to view surfaces. */ @JNINamespace("content") -@MainDex public class ContentChildProcessServiceDelegate implements ChildProcessServiceDelegate { private static final String TAG = "ContentCPSDelegate";
diff --git a/content/public/android/java/src/org/chromium/content/app/ContentMain.java b/content/public/android/java/src/org/chromium/content/app/ContentMain.java index 0fe9cdcb..ea17fea 100644 --- a/content/public/android/java/src/org/chromium/content/app/ContentMain.java +++ b/content/public/android/java/src/org/chromium/content/app/ContentMain.java
@@ -6,7 +6,6 @@ import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; /** * This class is used to initialize all types of process. It corresponds to @@ -19,7 +18,6 @@ * **/ @JNINamespace("content") -@MainDex public class ContentMain { /** * Start the ContentMainRunner in native side.
diff --git a/content/public/android/java/src/org/chromium/content/app/KillChildUncaughtExceptionHandler.java b/content/public/android/java/src/org/chromium/content/app/KillChildUncaughtExceptionHandler.java index c972d92..4cb18d3 100644 --- a/content/public/android/java/src/org/chromium/content/app/KillChildUncaughtExceptionHandler.java +++ b/content/public/android/java/src/org/chromium/content/app/KillChildUncaughtExceptionHandler.java
@@ -7,7 +7,6 @@ import android.os.Process; import org.chromium.base.BuildInfo; -import org.chromium.build.annotations.MainDex; /** * Handler that immediately kills the current process on an uncaught exception. @@ -19,7 +18,6 @@ * This does not have any exception handling or crash reporting. Such handlers should be * chained before this handler. */ -@MainDex class KillChildUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler { private boolean mCrashing;
diff --git a/content/public/android/java/src/org/chromium/content/app/PrivilegedProcessService0.java b/content/public/android/java/src/org/chromium/content/app/PrivilegedProcessService0.java index 92d8078..1d5513b 100644 --- a/content/public/android/java/src/org/chromium/content/app/PrivilegedProcessService0.java +++ b/content/public/android/java/src/org/chromium/content/app/PrivilegedProcessService0.java
@@ -4,11 +4,8 @@ package org.chromium.content.app; -import org.chromium.build.annotations.MainDex; - /** * This is needed to register multiple PrivilegedProcess services so that we can have * more than one unsandboxed process. */ -@MainDex public class PrivilegedProcessService0 extends PrivilegedProcessService {}
diff --git a/content/public/android/java/src/org/chromium/content/app/PrivilegedProcessService1.java b/content/public/android/java/src/org/chromium/content/app/PrivilegedProcessService1.java index 66ea84c..f5fe400 100644 --- a/content/public/android/java/src/org/chromium/content/app/PrivilegedProcessService1.java +++ b/content/public/android/java/src/org/chromium/content/app/PrivilegedProcessService1.java
@@ -4,11 +4,8 @@ package org.chromium.content.app; -import org.chromium.build.annotations.MainDex; - /** * This is needed to register multiple PrivilegedProcess services so that we can have * more than one unsandboxed process. */ -@MainDex public class PrivilegedProcessService1 extends PrivilegedProcessService {}
diff --git a/content/public/android/java/src/org/chromium/content/app/PrivilegedProcessService2.java b/content/public/android/java/src/org/chromium/content/app/PrivilegedProcessService2.java index 927817eb..75d5dc52 100644 --- a/content/public/android/java/src/org/chromium/content/app/PrivilegedProcessService2.java +++ b/content/public/android/java/src/org/chromium/content/app/PrivilegedProcessService2.java
@@ -4,11 +4,8 @@ package org.chromium.content.app; -import org.chromium.build.annotations.MainDex; - /** * This is needed to register multiple PrivilegedProcess services so that we can have * more than one unsandboxed process. */ -@MainDex public class PrivilegedProcessService2 extends PrivilegedProcessService {}
diff --git a/content/public/android/java/src/org/chromium/content/app/PrivilegedProcessService3.java b/content/public/android/java/src/org/chromium/content/app/PrivilegedProcessService3.java index 0e58408..85d81a9 100644 --- a/content/public/android/java/src/org/chromium/content/app/PrivilegedProcessService3.java +++ b/content/public/android/java/src/org/chromium/content/app/PrivilegedProcessService3.java
@@ -4,11 +4,8 @@ package org.chromium.content.app; -import org.chromium.build.annotations.MainDex; - /** * This is needed to register multiple PrivilegedProcess services so that we can have * more than one unsandboxed process. */ -@MainDex public class PrivilegedProcessService3 extends PrivilegedProcessService {}
diff --git a/content/public/android/java/src/org/chromium/content/app/PrivilegedProcessService4.java b/content/public/android/java/src/org/chromium/content/app/PrivilegedProcessService4.java index 9856471..145eb1f 100644 --- a/content/public/android/java/src/org/chromium/content/app/PrivilegedProcessService4.java +++ b/content/public/android/java/src/org/chromium/content/app/PrivilegedProcessService4.java
@@ -4,11 +4,8 @@ package org.chromium.content.app; -import org.chromium.build.annotations.MainDex; - /** * This is needed to register multiple PrivilegedProcess services so that we can have * more than one unsandboxed process. */ -@MainDex public class PrivilegedProcessService4 extends PrivilegedProcessService {}
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentFeatureListImpl.java b/content/public/android/java/src/org/chromium/content/browser/ContentFeatureListImpl.java index 06a7a43..d13aa784 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ContentFeatureListImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/ContentFeatureListImpl.java
@@ -6,14 +6,12 @@ import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; /** * Implementation of {@link ContentFeatureList}. * Java accessor for base/feature_list.h state. */ @JNINamespace("content::android") -@MainDex public class ContentFeatureListImpl { /** * Returns whether the specified feature is enabled or not.
diff --git a/content/public/android/java/src/org/chromium/content/common/SurfaceWrapper.java b/content/public/android/java/src/org/chromium/content/common/SurfaceWrapper.java index 3ac5f1f9..8254995 100644 --- a/content/public/android/java/src/org/chromium/content/common/SurfaceWrapper.java +++ b/content/public/android/java/src/org/chromium/content/common/SurfaceWrapper.java
@@ -14,13 +14,11 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; -import org.chromium.build.annotations.MainDex; /** * A wrapper for marshalling a Surface without self-destruction. */ @JNINamespace("content") -@MainDex public class SurfaceWrapper implements Parcelable { private final boolean mWrapsSurface; private Surface mSurface;
diff --git a/content/public/browser/federated_identity_auto_reauthn_permission_context_delegate.h b/content/public/browser/federated_identity_auto_reauthn_permission_context_delegate.h index 8c57da902..a445d1f 100644 --- a/content/public/browser/federated_identity_auto_reauthn_permission_context_delegate.h +++ b/content/public/browser/federated_identity_auto_reauthn_permission_context_delegate.h
@@ -26,11 +26,11 @@ // Returns whether the FedCM API's auto re-authn is unblocked based on content // settings. A caller should also use `IsAutoReauthnEmbargoed()` to determine // whether auto re-authn is allowed or not. - virtual bool HasAutoReauthnContentSetting() = 0; + virtual bool IsAutoReauthnSettingEnabled() = 0; // Returns whether the FedCM API's auto re-authn feature is embargoed for the // passed-in |relying_party_embedder|. A caller should also use - // `HasAutoReauthnContentSetting()` to determine whether auto re-authn is + // `IsAutoReauthnSettingEnabled()` to determine whether auto re-authn is // allowed or not. virtual bool IsAutoReauthnEmbargoed( const url::Origin& relying_party_embedder) = 0;
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc index 9366d27..8bdccda 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc
@@ -1438,6 +1438,11 @@ "WebBluetoothNewPermissionsBackend", base::FEATURE_DISABLED_BY_DEFAULT); +// Enables the Web Environment Integrity API. +BASE_FEATURE(kWebEnvironmentIntegrity, + "WebEnvironmentIntegrity", + base::FEATURE_DISABLED_BY_DEFAULT); + // If WebGL Image Chromium is allowed, this feature controls whether it is // enabled. BASE_FEATURE(kWebGLImageChromium,
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h index ca65d6c..4cb16451 100644 --- a/content/public/common/content_features.h +++ b/content/public/common/content_features.h
@@ -320,6 +320,7 @@ CONTENT_EXPORT BASE_DECLARE_FEATURE(kWebAuthnTouchToFillCredentialSelection); CONTENT_EXPORT BASE_DECLARE_FEATURE(kWebBluetooth); CONTENT_EXPORT BASE_DECLARE_FEATURE(kWebBluetoothNewPermissionsBackend); +CONTENT_EXPORT BASE_DECLARE_FEATURE(kWebEnvironmentIntegrity); CONTENT_EXPORT BASE_DECLARE_FEATURE(kWebGLImageChromium); CONTENT_EXPORT BASE_DECLARE_FEATURE(kWebMidi); CONTENT_EXPORT BASE_DECLARE_FEATURE(kWebOtpBackendAuto);
diff --git a/content/renderer/mhtml_handle_writer.cc b/content/renderer/mhtml_handle_writer.cc index 38e6efb9..e941c1e5 100644 --- a/content/renderer/mhtml_handle_writer.cc +++ b/content/renderer/mhtml_handle_writer.cc
@@ -28,28 +28,18 @@ TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("page-serialization", "Writing MHTML contents to handle", TRACE_ID_LOCAL(this)); - DCHECK(mhtml_write_start_time_.is_null()); - mhtml_write_start_time_ = base::TimeTicks::Now(); - + is_writing_ = true; WriteContentsImpl(std::move(mhtml_contents)); } void MHTMLHandleWriter::Finish(mojom::MhtmlSaveStatus save_status) { DCHECK(!RenderThread::IsMainThread()) << "Should not run in the main renderer thread"; - - // Only record UMA if WriteContents has been called. - if (!mhtml_write_start_time_.is_null()) { + if (is_writing_) { TRACE_EVENT_NESTABLE_ASYNC_END0("page-serialization", "WriteContentsImpl (MHTMLHandleWriter)", TRACE_ID_LOCAL(this)); - base::TimeDelta mhtml_write_time = - base::TimeTicks::Now() - mhtml_write_start_time_; - UMA_HISTOGRAM_TIMES( - "PageSerialization.MhtmlGeneration.WriteToDiskTime.SingleFrame", - mhtml_write_time); } - Close(); main_thread_task_runner_->PostTask(
diff --git a/content/renderer/mhtml_handle_writer.h b/content/renderer/mhtml_handle_writer.h index d4d87f7..57f5e4b9 100644 --- a/content/renderer/mhtml_handle_writer.h +++ b/content/renderer/mhtml_handle_writer.h
@@ -60,10 +60,9 @@ virtual void Close() = 0; private: - base::TimeTicks mhtml_write_start_time_; - scoped_refptr<base::TaskRunner> main_thread_task_runner_; MHTMLWriteCompleteCallback callback_; + bool is_writing_ = false; }; // Wraps a base::File target to write MHTML contents to.
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index 53481599..741d2e44 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -5354,7 +5354,6 @@ void RenderFrameImpl::SerializeAsMHTML(mojom::SerializeAsMHTMLParamsPtr params, SerializeAsMHTMLCallback callback) { TRACE_EVENT0("page-serialization", "RenderFrameImpl::SerializeAsMHTML"); - base::TimeTicks start_time = base::TimeTicks::Now(); // Unpack payload. const WebString mhtml_boundary = @@ -5398,14 +5397,6 @@ // Note: the MHTML footer is written by the browser process, after the last // frame is serialized by a renderer process. - // Note: we assume RenderFrameImpl::OnWriteMHTMLComplete and the rest of - // this function will be fast enough to not need to be accounted for in this - // metric. - base::TimeDelta main_thread_use_time = base::TimeTicks::Now() - start_time; - UMA_HISTOGRAM_TIMES( - "PageSerialization.MhtmlGeneration.RendererMainThreadTime.SingleFrame", - main_thread_use_time); - MHTMLHandleWriterDelegate handle_delegate( *params, base::BindOnce(&RenderFrameImpl::OnWriteMHTMLComplete, @@ -5435,8 +5426,6 @@ std::make_move_iterator(serialized_resources_uri_digests.end())); // Notify the browser process about completion using the callback. - // Note: we assume this method is fast enough to not need to be accounted for - // in PageSerialization.MhtmlGeneration.RendererMainThreadTime.SingleFrame. std::move(callback).Run(save_status, std::move(digests_of_new_parts)); }
diff --git a/content/shell/android/shell_apk/src/org/chromium/content_shell_apk/TestChildProcessService0.java b/content/shell/android/shell_apk/src/org/chromium/content_shell_apk/TestChildProcessService0.java index 109126dc4..1cf43e6 100644 --- a/content/shell/android/shell_apk/src/org/chromium/content_shell_apk/TestChildProcessService0.java +++ b/content/shell/android/shell_apk/src/org/chromium/content_shell_apk/TestChildProcessService0.java
@@ -4,8 +4,5 @@ package org.chromium.content_shell_apk; -import org.chromium.build.annotations.MainDex; - /** One of the TestChildProcessService defined in the AndroidManifest.xml. */ -@MainDex public class TestChildProcessService0 extends TestChildProcessService {}
diff --git a/content/shell/android/shell_apk/src/org/chromium/content_shell_apk/TestChildProcessService1.java b/content/shell/android/shell_apk/src/org/chromium/content_shell_apk/TestChildProcessService1.java index b1137ab..689dc40 100644 --- a/content/shell/android/shell_apk/src/org/chromium/content_shell_apk/TestChildProcessService1.java +++ b/content/shell/android/shell_apk/src/org/chromium/content_shell_apk/TestChildProcessService1.java
@@ -4,8 +4,5 @@ package org.chromium.content_shell_apk; -import org.chromium.build.annotations.MainDex; - /** One of the TestChildProcessService defined in the AndroidManifest.xml. */ -@MainDex public class TestChildProcessService1 extends TestChildProcessService {}
diff --git a/content/shell/browser/shell_federated_permission_context.cc b/content/shell/browser/shell_federated_permission_context.cc index 08acda6..1bb8af1 100644 --- a/content/shell/browser/shell_federated_permission_context.cc +++ b/content/shell/browser/shell_federated_permission_context.cc
@@ -46,7 +46,7 @@ } // FederatedIdentityAutoReauthnPermissionContextDelegate -bool ShellFederatedPermissionContext::HasAutoReauthnContentSetting() { +bool ShellFederatedPermissionContext::IsAutoReauthnSettingEnabled() { return auto_reauthn_permission_; }
diff --git a/content/shell/browser/shell_federated_permission_context.h b/content/shell/browser/shell_federated_permission_context.h index 3c611091..3e593f3 100644 --- a/content/shell/browser/shell_federated_permission_context.h +++ b/content/shell/browser/shell_federated_permission_context.h
@@ -41,7 +41,7 @@ bool ShouldCompleteRequestImmediately() const override; // FederatedIdentityAutoReauthnPermissionContextDelegate - bool HasAutoReauthnContentSetting() override; + bool IsAutoReauthnSettingEnabled() override; bool IsAutoReauthnEmbargoed( const url::Origin& relying_party_embedder) override; base::Time GetAutoReauthnEmbargoStartTime(
diff --git a/content/test/data/forms/form_controls_browsertest_dark_mode_text_selection.png b/content/test/data/forms/form_controls_browsertest_dark_mode_text_selection.png index da2f31a8..6cb3d0f 100644 --- a/content/test/data/forms/form_controls_browsertest_dark_mode_text_selection.png +++ b/content/test/data/forms/form_controls_browsertest_dark_mode_text_selection.png Binary files differ
diff --git a/content/test/data/forms/form_controls_browsertest_dark_mode_text_selection_fuchsia.png b/content/test/data/forms/form_controls_browsertest_dark_mode_text_selection_fuchsia.png index 41112e3d9..ca75bf3c 100644 --- a/content/test/data/forms/form_controls_browsertest_dark_mode_text_selection_fuchsia.png +++ b/content/test/data/forms/form_controls_browsertest_dark_mode_text_selection_fuchsia.png Binary files differ
diff --git a/content/test/data/forms/form_controls_browsertest_dark_mode_text_selection_linux.png b/content/test/data/forms/form_controls_browsertest_dark_mode_text_selection_linux.png index 5674219..680b2a73 100644 --- a/content/test/data/forms/form_controls_browsertest_dark_mode_text_selection_linux.png +++ b/content/test/data/forms/form_controls_browsertest_dark_mode_text_selection_linux.png Binary files differ
diff --git a/content/test/data/forms/form_controls_browsertest_dark_mode_text_selection_win.png b/content/test/data/forms/form_controls_browsertest_dark_mode_text_selection_win.png index a89fd3c8..0193e49 100644 --- a/content/test/data/forms/form_controls_browsertest_dark_mode_text_selection_win.png +++ b/content/test/data/forms/form_controls_browsertest_dark_mode_text_selection_win.png Binary files differ
diff --git a/google_apis/common/base_requests.cc b/google_apis/common/base_requests.cc index a8a2d76..de6b2aa 100644 --- a/google_apis/common/base_requests.cc +++ b/google_apis/common/base_requests.cc
@@ -76,11 +76,12 @@ // Returns the reason of the first error. if (const base::Value::List* errors = error->FindList(kErrorErrorsKey)) { - const base::Value& first_error = (*errors)[0]; - if (first_error.is_dict()) { - const std::string* reason = first_error.FindStringKey(kErrorReasonKey); - if (reason) + const base::Value::Dict* first_error = errors->front().GetIfDict(); + if (first_error) { + const std::string* reason = first_error->FindString(kErrorReasonKey); + if (reason) { return *reason; + } } } }
diff --git a/google_apis/common/parser_util.cc b/google_apis/common/parser_util.cc index 96770d3..e2677dd4 100644 --- a/google_apis/common/parser_util.cc +++ b/google_apis/common/parser_util.cc
@@ -8,9 +8,11 @@ bool IsResourceKindExpected(const base::Value& value, const std::string& expected_kind) { - if (!value.is_dict()) + const auto* dict = value.GetIfDict(); + if (!dict) { return false; - const std::string* kind = value.FindStringKey(kApiResponseKindKey); + } + const std::string* kind = dict->FindString(kApiResponseKindKey); return kind && *kind == expected_kind; }
diff --git a/gpu/command_buffer/service/passthrough_discardable_manager.cc b/gpu/command_buffer/service/passthrough_discardable_manager.cc index dcf220741..2c31ea0d 100644 --- a/gpu/command_buffer/service/passthrough_discardable_manager.cc +++ b/gpu/command_buffer/service/passthrough_discardable_manager.cc
@@ -4,6 +4,7 @@ #include "gpu/command_buffer/service/passthrough_discardable_manager.h" +#include "base/trace_event/memory_dump_manager.h" #include "gpu/command_buffer/service/context_group.h" #include "gpu/command_buffer/service/gles2_cmd_decoder_passthrough.h" #include "gpu/command_buffer/service/service_discardable_manager.h" @@ -31,10 +32,57 @@ : cache_(DiscardableCache::NO_AUTO_EVICT), cache_size_limit_(preferences.force_gpu_mem_discardable_limit_bytes ? preferences.force_gpu_mem_discardable_limit_bytes - : DiscardableCacheSizeLimit()) {} + : DiscardableCacheSizeLimit()) { + // In certain cases, SingleThreadTaskRunner::CurrentDefaultHandle isn't set + // (Android Webview). Don't register a dump provider in these cases. + if (base::SingleThreadTaskRunner::HasCurrentDefault()) { + base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( + this, "gpu::PassthroughDiscardableManager", + base::SingleThreadTaskRunner::GetCurrentDefault()); + } +} PassthroughDiscardableManager::~PassthroughDiscardableManager() { DCHECK(cache_.empty()); + base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( + this); +} + +bool PassthroughDiscardableManager::OnMemoryDump( + const base::trace_event::MemoryDumpArgs& args, + base::trace_event::ProcessMemoryDump* pmd) { + using base::trace_event::MemoryAllocatorDump; + using base::trace_event::MemoryDumpLevelOfDetail; + + if (args.level_of_detail == MemoryDumpLevelOfDetail::BACKGROUND) { + std::string dump_name = + base::StringPrintf("gpu/discardable_cache/cache_0x%" PRIXPTR, + reinterpret_cast<uintptr_t>(this)); + MemoryAllocatorDump* dump = pmd->CreateAllocatorDump(dump_name); + dump->AddScalar(MemoryAllocatorDump::kNameSize, + MemoryAllocatorDump::kUnitsBytes, total_size_); + + if (!cache_.empty()) { + MemoryAllocatorDump* dump_avg_size = + pmd->CreateAllocatorDump(dump_name + "/avg_image_size"); + dump_avg_size->AddScalar("average_size", MemoryAllocatorDump::kUnitsBytes, + total_size_ / cache_.size()); + } + + // Early out, no need for more detail in a BACKGROUND dump. + return true; + } + + for (const auto& entry : cache_) { + std::string dump_name = base::StringPrintf( + "gpu/discardable_cache/cache_0x%" PRIXPTR "/entry_0x%" PRIXPTR, + reinterpret_cast<uintptr_t>(this), + reinterpret_cast<uintptr_t>(entry.second.unlocked_texture.get())); + MemoryAllocatorDump* dump = pmd->CreateAllocatorDump(dump_name); + dump->AddScalar(MemoryAllocatorDump::kNameSize, + MemoryAllocatorDump::kUnitsBytes, entry.second.size); + } + return true; } void PassthroughDiscardableManager::InitializeTexture(
diff --git a/gpu/command_buffer/service/passthrough_discardable_manager.h b/gpu/command_buffer/service/passthrough_discardable_manager.h index c188a79f..86ba2985 100644 --- a/gpu/command_buffer/service/passthrough_discardable_manager.h +++ b/gpu/command_buffer/service/passthrough_discardable_manager.h
@@ -7,6 +7,7 @@ #include "base/containers/lru_cache.h" #include "base/memory/memory_pressure_listener.h" +#include "base/trace_event/memory_dump_provider.h" #include "gpu/command_buffer/common/discardable_handle.h" #include "gpu/gpu_gles2_export.h" @@ -17,7 +18,8 @@ class ContextGroup; } // namespace gles2 -class GPU_GLES2_EXPORT PassthroughDiscardableManager { +class GPU_GLES2_EXPORT PassthroughDiscardableManager + : public base::trace_event::MemoryDumpProvider { public: explicit PassthroughDiscardableManager(const GpuPreferences& preferences); @@ -25,7 +27,11 @@ PassthroughDiscardableManager& operator=( const PassthroughDiscardableManager&) = delete; - ~PassthroughDiscardableManager(); + ~PassthroughDiscardableManager() override; + + // base::trace_event::MemoryDumpProvider implementation. + bool OnMemoryDump(const base::trace_event::MemoryDumpArgs& args, + base::trace_event::ProcessMemoryDump* pmd) override; void InitializeTexture(uint32_t client_id, const gles2::ContextGroup* context_group,
diff --git a/gpu/command_buffer/service/shared_context_state.cc b/gpu/command_buffer/service/shared_context_state.cc index 6d52af4..9345f4f9 100644 --- a/gpu/command_buffer/service/shared_context_state.cc +++ b/gpu/command_buffer/service/shared_context_state.cc
@@ -749,6 +749,14 @@ } } +void SharedContextState::UseShaderCache( + absl::optional<gpu::raster::GrShaderCache::ScopedCacheUse>& cache_use) + const { + if (gr_shader_cache_) { + cache_use.emplace(gr_shader_cache_, gpu::kDisplayCompositorClientId); + } +} + gl::GLDisplay* SharedContextState::display() { return surface_.get()->GetGLDisplay(); }
diff --git a/gpu/command_buffer/service/shared_context_state.h b/gpu/command_buffer/service/shared_context_state.h index c2155b0..7552fbb 100644 --- a/gpu/command_buffer/service/shared_context_state.h +++ b/gpu/command_buffer/service/shared_context_state.h
@@ -23,6 +23,7 @@ #include "gpu/command_buffer/common/skia_utils.h" #include "gpu/command_buffer/service/gl_context_virtual_delegate.h" #include "gpu/command_buffer/service/gr_cache_controller.h" +#include "gpu/command_buffer/service/gr_shader_cache.h" #include "gpu/command_buffer/service/memory_tracking.h" #include "gpu/config/gpu_preferences.h" #include "gpu/gpu_gles2_export.h" @@ -126,6 +127,10 @@ void StoreVkPipelineCacheIfNeeded(); + void UseShaderCache( + absl::optional<gpu::raster::GrShaderCache::ScopedCacheUse>& cache_use) + const; + gl::GLShareGroup* share_group() { return share_group_.get(); } gl::GLContext* context() { return context_.get(); } gl::GLContext* real_context() { return real_context_.get(); }
diff --git a/gpu/command_buffer/service/shared_image_interface_in_process.cc b/gpu/command_buffer/service/shared_image_interface_in_process.cc index cc683de..805eb57f 100644 --- a/gpu/command_buffer/service/shared_image_interface_in_process.cc +++ b/gpu/command_buffer/service/shared_image_interface_in_process.cc
@@ -14,12 +14,14 @@ #include "gpu/command_buffer/service/command_buffer_task_executor.h" #include "gpu/command_buffer/service/display_compositor_memory_and_task_controller_on_gpu.h" #include "gpu/command_buffer/service/gpu_command_buffer_memory_tracker.h" +#include "gpu/command_buffer/service/gr_shader_cache.h" #include "gpu/command_buffer/service/shared_image/shared_image_factory.h" #include "gpu/command_buffer/service/single_task_sequence.h" #include "gpu/command_buffer/service/sync_point_manager.h" #include "gpu/config/gpu_driver_bug_workarounds.h" #include "gpu/config/gpu_feature_info.h" #include "gpu/config/gpu_preferences.h" +#include "third_party/abseil-cpp/absl/types/optional.h" #include "ui/gl/gl_context.h" namespace gpu { @@ -274,6 +276,11 @@ if (!MakeContextCurrent()) return; + // Creating a si with data can result in raster work. This will be a textureop + // that requires a program. See crbug.com/1442725. + absl::optional<gpu::raster::GrShaderCache::ScopedCacheUse> cache_use; + context_state_->UseShaderCache(cache_use); + DCHECK(shared_image_factory_); if (!shared_image_factory_->CreateSharedImage( mailbox, format, size, color_space, surface_origin, alpha_type, usage,
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg index 24e4a50..f8b9aeb 100644 --- a/infra/config/generated/luci/cr-buildbucket.cfg +++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -65052,7 +65052,7 @@ seconds: 120 } build_numbers: YES - service_account: "chromium-orchestrator@chops-service-accounts.iam.gserviceaccount.com" + service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com" task_template_canary_percentage { value: 5 }
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.fuchsia.star b/infra/config/subprojects/chromium/try/tryserver.chromium.fuchsia.star index 8174cdd..816c88b8 100644 --- a/infra/config/subprojects/chromium/try/tryserver.chromium.fuchsia.star +++ b/infra/config/subprojects/chromium/try/tryserver.chromium.fuchsia.star
@@ -59,6 +59,7 @@ "weetbix.enable_weetbix_exonerations": 100, }, main_list_view = "try", + service_account = try_.DEFAULT_SERVICE_ACCOUNT, tryjob = try_.job( location_filters = [ # Covers //fuchsia_web and //fuchsia changes, including
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/OWNERS b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/OWNERS new file mode 100644 index 0000000..f0951e94 --- /dev/null +++ b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/autofill_address_profile/OWNERS
@@ -0,0 +1 @@ +vidhanj@google.com
diff --git a/ios/chrome/browser/passwords/BUILD.gn b/ios/chrome/browser/passwords/BUILD.gn index a84a725..b82a1f7 100644 --- a/ios/chrome/browser/passwords/BUILD.gn +++ b/ios/chrome/browser/passwords/BUILD.gn
@@ -188,6 +188,16 @@ deps = [ "//base" ] } +source_set("password_checkup_metrics") { + configs += [ "//build/config/compiler:enable_arc" ] + sources = [ + "password_checkup_metrics.h", + "password_checkup_metrics.mm", + ] + public_deps = [ ":password_checkup_utils" ] + deps = [ "//base" ] +} + source_set("password_checkup_utils") { configs += [ "//build/config/compiler:enable_arc" ] sources = [
diff --git a/ios/chrome/browser/passwords/password_checkup_metrics.h b/ios/chrome/browser/passwords/password_checkup_metrics.h new file mode 100644 index 0000000..0c30cee --- /dev/null +++ b/ios/chrome/browser/passwords/password_checkup_metrics.h
@@ -0,0 +1,45 @@ +// 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_PASSWORDS_PASSWORD_CHECKUP_METRICS_H_ +#define IOS_CHROME_BROWSER_PASSWORDS_PASSWORD_CHECKUP_METRICS_H_ + +#import "ios/chrome/browser/passwords/password_checkup_utils.h" + +namespace password_manager { + +// Logs the user action of changing an insecure password on its affiliated +// website. +void LogChangePasswordOnWebsite(WarningType context); + +// Logs the user action of editing an insecure password. +void LogEditPassword(WarningType context); + +// Logs the user action of deleting an insecure password. +void LogDeletePassword(WarningType context); + +// Logs the user action of revealing an insecure password. +void LogRevealPassword(WarningType context); + +// Logs the user action of opening the list of password issues. +void LogOpenPasswordIssuesList(WarningType context); + +// Logs the user action of muting a compromised credential warning. +void LogMuteCompromisedWarning(); + +// Logs the user action of unmuting a compromised credential warning. +void LogUnmuteCompromisedWarning(); + +// Logs the user action of starting a password check manually. +void LogStartPasswordCheckManually(); + +// Logs when a password check starts automatically. +void LogStartPasswordCheckAutomatically(); + +// Logs the user action of opening the password checkup home page. +void LogOpenPasswordCheckupHomePage(); + +} // namespace password_manager + +#endif // IOS_CHROME_BROWSER_PASSWORDS_PASSWORD_CHECKUP_METRICS_H_
diff --git a/ios/chrome/browser/passwords/password_checkup_metrics.mm b/ios/chrome/browser/passwords/password_checkup_metrics.mm new file mode 100644 index 0000000..935fe67 --- /dev/null +++ b/ios/chrome/browser/passwords/password_checkup_metrics.mm
@@ -0,0 +1,135 @@ +// 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 "ios/chrome/browser/passwords/password_checkup_metrics.h" + +#import "base/metrics/histogram_functions.h" +#import "base/notreached.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +using password_manager::WarningType; + +namespace { + +const std::string kUserActionWithContextHistogram = + "PasswordManager.BulkCheck.UserAction.IOS"; + +const char kGeneralUserActionHistogram[] = + "PasswordManager.BulkCheck.UserAction.IOS.General"; + +// Enum representing the different types of interactions that a user can have +// with Password Check on iOS for a specific type of insecure credential. +// +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused. It must be kept in sync with +// PasswordCheckInteractionIOS in enums.xml. +enum class PasswordCheckInteractionIOS { + kChangePasswordOnWebsite = 0, + kEditPassword = 1, + kRemovePassword = 2, + kShowPassword = 3, + kMuteWarning = 4, + kUnmuteWarning = 5, + kShowIssuesList = 6, + kMaxValue = kShowIssuesList, +}; + +// Enum representing the different types of interactions that a user can have +// with Password Check on iOS not specific to a type of insecure credential. +// +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused. It must be kept in sync with +// PasswordCheckInteractionIOSWithoutContext in enums.xml. +enum class PasswordCheckInteractionIOSWithoutContext { + kAutomaticPasswordCheck = 0, + kManualPasswordCheck = 1, + kOpenCheckupHomepage = 2, + kMaxValue = kOpenCheckupHomepage, +}; + +// Gets the histogram name for the given context. +std::string GetHistogramForContext(WarningType context) { + switch (context) { + case WarningType::kCompromisedPasswordsWarning: + return kUserActionWithContextHistogram + ".Compromised"; + case WarningType::kReusedPasswordsWarning: + return kUserActionWithContextHistogram + ".Reused"; + case WarningType::kWeakPasswordsWarning: + return kUserActionWithContextHistogram + ".Weak"; + case WarningType::kDismissedWarningsWarning: + return kUserActionWithContextHistogram + ".MutedCompromised"; + case WarningType::kNoInsecurePasswordsWarning: + NOTREACHED_NORETURN(); + } +} + +void LogPasswordCheckInteraction(PasswordCheckInteractionIOS interaction, + WarningType context) { + base::UmaHistogramEnumeration(kUserActionWithContextHistogram, interaction); + base::UmaHistogramEnumeration(GetHistogramForContext(context), interaction); +} + +void LogGeneralPasswordCheckInteraction( + PasswordCheckInteractionIOSWithoutContext interaction) { + base::UmaHistogramEnumeration(kGeneralUserActionHistogram, interaction); +} + +} // namespace + +namespace password_manager { + +void LogChangePasswordOnWebsite(WarningType context) { + LogPasswordCheckInteraction( + PasswordCheckInteractionIOS::kChangePasswordOnWebsite, context); +} + +void LogEditPassword(WarningType context) { + LogPasswordCheckInteraction(PasswordCheckInteractionIOS::kEditPassword, + context); +} + +void LogDeletePassword(WarningType context) { + LogPasswordCheckInteraction(PasswordCheckInteractionIOS::kRemovePassword, + context); +} + +void LogRevealPassword(WarningType context) { + LogPasswordCheckInteraction(PasswordCheckInteractionIOS::kShowPassword, + context); +} + +void LogOpenPasswordIssuesList(WarningType context) { + LogPasswordCheckInteraction(PasswordCheckInteractionIOS::kShowIssuesList, + context); +} + +void LogMuteCompromisedWarning() { + LogPasswordCheckInteraction(PasswordCheckInteractionIOS::kMuteWarning, + WarningType::kCompromisedPasswordsWarning); +} + +void LogUnmuteCompromisedWarning() { + LogPasswordCheckInteraction(PasswordCheckInteractionIOS::kUnmuteWarning, + WarningType::kDismissedWarningsWarning); +} + +void LogStartPasswordCheckManually() { + LogGeneralPasswordCheckInteraction( + PasswordCheckInteractionIOSWithoutContext::kManualPasswordCheck); +} + +void LogStartPasswordCheckAutomatically() { + LogGeneralPasswordCheckInteraction( + PasswordCheckInteractionIOSWithoutContext::kAutomaticPasswordCheck); +} + +void LogOpenPasswordCheckupHomePage() { + LogGeneralPasswordCheckInteraction( + PasswordCheckInteractionIOSWithoutContext::kOpenCheckupHomepage); +} + +} // namespace password_manager
diff --git a/ios/chrome/browser/passwords/password_checkup_utils_unittest.mm b/ios/chrome/browser/passwords/password_checkup_utils_unittest.mm index aeb7f48..dfb8530 100644 --- a/ios/chrome/browser/passwords/password_checkup_utils_unittest.mm +++ b/ios/chrome/browser/passwords/password_checkup_utils_unittest.mm
@@ -5,14 +5,17 @@ #import "ios/chrome/browser/passwords/password_checkup_utils.h" #import "base/strings/string_piece.h" +#import "base/test/bind.h" #import "base/test/scoped_feature_list.h" #import "components/keyed_service/core/service_access_type.h" +#import "components/password_manager/core/browser/affiliation/fake_affiliation_service.h" #import "components/password_manager/core/browser/password_form.h" #import "components/password_manager/core/browser/password_manager_test_utils.h" #import "components/password_manager/core/browser/test_password_store.h" #import "components/password_manager/core/common/password_manager_features.h" #import "components/password_manager/core/common/password_manager_pref_names.h" #import "components/prefs/testing_pref_service.h" +#import "ios/chrome/browser/passwords/ios_chrome_affiliation_service_factory.h" #import "ios/chrome/browser/passwords/ios_chrome_password_check_manager.h" #import "ios/chrome/browser/passwords/ios_chrome_password_check_manager_factory.h" #import "ios/chrome/browser/passwords/ios_chrome_password_store_factory.h" @@ -88,12 +91,20 @@ class PasswordCheckupUtilsTest : public PlatformTest { protected: PasswordCheckupUtilsTest() { + feature_list_.InitAndEnableFeature( + password_manager::features::kPasswordsGrouping); TestChromeBrowserState::Builder builder; builder.AddTestingFactory( IOSChromePasswordStoreFactory::GetInstance(), base::BindRepeating( &password_manager::BuildPasswordStore<web::BrowserState, TestPasswordStore>)); + builder.AddTestingFactory( + IOSChromeAffiliationServiceFactory::GetInstance(), + base::BindRepeating(base::BindLambdaForTesting([](web::BrowserState*) { + return std::unique_ptr<KeyedService>( + std::make_unique<password_manager::FakeAffiliationService>()); + }))); browser_state_ = builder.Build(); store_ = base::WrapRefCounted(static_cast<password_manager::TestPasswordStore*>( @@ -111,6 +122,7 @@ IOSChromePasswordCheckManager& manager() { return *manager_; } private: + base::test::ScopedFeatureList feature_list_; web::WebTaskEnvironment task_env_; std::unique_ptr<ChromeBrowserState> browser_state_; scoped_refptr<TestPasswordStore> store_;
diff --git a/ios/chrome/browser/settings/sync/utils/identity_error_util.mm b/ios/chrome/browser/settings/sync/utils/identity_error_util.mm index a6b4187..63cf2e66 100644 --- a/ios/chrome/browser/settings/sync/utils/identity_error_util.mm +++ b/ios/chrome/browser/settings/sync/utils/identity_error_util.mm
@@ -133,7 +133,7 @@ SyncState GetSyncState(syncer::SyncService* sync_service) { syncer::SyncService::UserActionableError error_state = sync_service->GetUserActionableError(); - if (sync_service->GetDisableReasons().Has( + if (sync_service->HasDisableReason( syncer::SyncService::DISABLE_REASON_ENTERPRISE_POLICY)) { // Sync is disabled by administrator policy. return SyncState::kSyncDisabledByAdministrator;
diff --git a/ios/chrome/browser/sync/sync_setup_service.cc b/ios/chrome/browser/sync/sync_setup_service.cc index 9a6c255e..1c43cba0 100644 --- a/ios/chrome/browser/sync/sync_setup_service.cc +++ b/ios/chrome/browser/sync/sync_setup_service.cc
@@ -89,7 +89,7 @@ } bool SyncSetupService::IsSyncRequested() const { - return !sync_service_->GetDisableReasons().Has( + return !sync_service_->HasDisableReason( syncer::SyncService::DISABLE_REASON_USER_CHOICE); }
diff --git a/ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.mm b/ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.mm index 6571f49..7db765f2 100644 --- a/ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.mm +++ b/ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.mm
@@ -44,6 +44,6 @@ } bool IsSyncDisabledByPolicy(syncer::SyncService* sync_service) { - return sync_service->GetDisableReasons().Has( + return sync_service->HasDisableReason( syncer::SyncService::DISABLE_REASON_ENTERPRISE_POLICY); }
diff --git a/ios/chrome/browser/ui/bookmarks/home/bookmarks_home_mediator.mm b/ios/chrome/browser/ui/bookmarks/home/bookmarks_home_mediator.mm index ef74e61c..15eeebf 100644 --- a/ios/chrome/browser/ui/bookmarks/home/bookmarks_home_mediator.mm +++ b/ios/chrome/browser/ui/bookmarks/home/bookmarks_home_mediator.mm
@@ -726,7 +726,7 @@ // Returns YES if the user cannot turn on sync for enterprise policy reasons. - (BOOL)isSyncDisabledByAdministrator { DCHECK(self.syncService); - bool syncDisabledPolicy = self.syncService->GetDisableReasons().Has( + bool syncDisabledPolicy = self.syncService->HasDisableReason( syncer::SyncService::DISABLE_REASON_ENTERPRISE_POLICY); bool syncTypesDisabledPolicy = IsManagedSyncDataType( self.syncService, syncer::UserSelectableType::kBookmarks);
diff --git a/ios/chrome/browser/ui/first_run/tangible_sync/tangible_sync_screen_coordinator.mm b/ios/chrome/browser/ui/first_run/tangible_sync/tangible_sync_screen_coordinator.mm index 081905de..2bd13e9 100644 --- a/ios/chrome/browser/ui/first_run/tangible_sync/tangible_sync_screen_coordinator.mm +++ b/ios/chrome/browser/ui/first_run/tangible_sync/tangible_sync_screen_coordinator.mm
@@ -61,7 +61,7 @@ SyncServiceFactory::GetForBrowserState(browserState); BOOL shouldSkipSyncScreen = - syncService->GetDisableReasons().Has( + syncService->HasDisableReason( syncer::SyncService::DISABLE_REASON_ENTERPRISE_POLICY) || syncSetupService->IsFirstSetupComplete(); if (shouldSkipSyncScreen) {
diff --git a/ios/chrome/browser/ui/infobars/modals/autofill_address_profile/OWNERS b/ios/chrome/browser/ui/infobars/modals/autofill_address_profile/OWNERS new file mode 100644 index 0000000..f0951e94 --- /dev/null +++ b/ios/chrome/browser/ui/infobars/modals/autofill_address_profile/OWNERS
@@ -0,0 +1 @@ +vidhanj@google.com
diff --git a/ios/chrome/browser/ui/overlays/infobar_banner/autofill_address_profile/OWNERS b/ios/chrome/browser/ui/overlays/infobar_banner/autofill_address_profile/OWNERS new file mode 100644 index 0000000..f0951e94 --- /dev/null +++ b/ios/chrome/browser/ui/overlays/infobar_banner/autofill_address_profile/OWNERS
@@ -0,0 +1 @@ +vidhanj@google.com
diff --git a/ios/chrome/browser/ui/overlays/infobar_modal/autofill_address_profile/OWNERS b/ios/chrome/browser/ui/overlays/infobar_modal/autofill_address_profile/OWNERS new file mode 100644 index 0000000..f0951e94 --- /dev/null +++ b/ios/chrome/browser/ui/overlays/infobar_modal/autofill_address_profile/OWNERS
@@ -0,0 +1 @@ +vidhanj@google.com
diff --git a/ios/chrome/browser/ui/passwords/bottom_sheet/password_suggestion_bottom_sheet_view_controller.mm b/ios/chrome/browser/ui/passwords/bottom_sheet/password_suggestion_bottom_sheet_view_controller.mm index 5d6d5f0..11e3272 100644 --- a/ios/chrome/browser/ui/passwords/bottom_sheet/password_suggestion_bottom_sheet_view_controller.mm +++ b/ios/chrome/browser/ui/passwords/bottom_sheet/password_suggestion_bottom_sheet_view_controller.mm
@@ -400,8 +400,8 @@ // Change the tableview's width constraint based on the screen's orientation. - (void)adjustTableViewWidthConstraint { - CGSize screenSize = [[UIScreen mainScreen] bounds].size; - BOOL isLandscape = screenSize.width > screenSize.height; + BOOL isLandscape = + UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation); _landscapeTableWidthConstraint.active = isLandscape; _portraitTableWidthConstraint.active = !isLandscape; }
diff --git a/ios/chrome/browser/ui/reading_list/reading_list_coordinator.mm b/ios/chrome/browser/ui/reading_list/reading_list_coordinator.mm index 394d6ba..02fb2b3b 100644 --- a/ios/chrome/browser/ui/reading_list/reading_list_coordinator.mm +++ b/ios/chrome/browser/ui/reading_list/reading_list_coordinator.mm
@@ -666,7 +666,7 @@ - (BOOL)isSyncDisabledByAdministrator { syncer::SyncService* syncService = SyncServiceFactory::GetForBrowserState( self.browser->GetBrowserState()->GetOriginalChromeBrowserState()); - const bool syncDisabledPolicy = syncService->GetDisableReasons().Has( + const bool syncDisabledPolicy = syncService->HasDisableReason( syncer::SyncService::DISABLE_REASON_ENTERPRISE_POLICY); const bool syncTypesDisabledPolicy = IsManagedSyncDataType( syncService, syncer::UserSelectableType::kReadingList);
diff --git a/ios/chrome/browser/ui/recent_tabs/recent_tabs_table_view_controller.mm b/ios/chrome/browser/ui/recent_tabs/recent_tabs_table_view_controller.mm index ed330851..23cabd9 100644 --- a/ios/chrome/browser/ui/recent_tabs/recent_tabs_table_view_controller.mm +++ b/ios/chrome/browser/ui/recent_tabs/recent_tabs_table_view_controller.mm
@@ -279,7 +279,7 @@ // Returns YES if the user cannot turn on sync for enterprise policy reasons. - (BOOL)isSyncDisabledByAdministrator { DCHECK(self.syncService); - if (self.syncService->GetDisableReasons().Has( + if (self.syncService->HasDisableReason( syncer::SyncService::DISABLE_REASON_ENTERPRISE_POLICY)) { // Return YES if the SyncDisabled policy is enabled. return YES;
diff --git a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.mm b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.mm index 9fd4d13..64aa8043 100644 --- a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.mm +++ b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.mm
@@ -887,7 +887,7 @@ #pragma mark - Properties - (BOOL)isSyncDisabledByAdministrator { - return self.syncService->GetDisableReasons().Has( + return self.syncService->HasDisableReason( syncer::SyncService::DISABLE_REASON_ENTERPRISE_POLICY); }
diff --git a/ios/chrome/browser/ui/settings/password/BUILD.gn b/ios/chrome/browser/ui/settings/password/BUILD.gn index a5292025..1ff1076e 100644 --- a/ios/chrome/browser/ui/settings/password/BUILD.gn +++ b/ios/chrome/browser/ui/settings/password/BUILD.gn
@@ -13,9 +13,7 @@ deps = [ ":common", ":password_ui", - "//base", "//components/keyed_service/core", - "//components/password_manager/core/browser", "//components/password_manager/core/common:features", "//components/signin/public/identity_manager/objc", "//components/strings", @@ -24,6 +22,7 @@ "//ios/chrome/browser/favicon", "//ios/chrome/browser/net:crurl", "//ios/chrome/browser/passwords", + "//ios/chrome/browser/passwords:password_checkup_metrics", "//ios/chrome/browser/passwords:password_checkup_utils", "//ios/chrome/browser/passwords:save_passwords_consumer", "//ios/chrome/browser/shared/coordinator/alert", @@ -97,6 +96,7 @@ "//ios/chrome/app/strings", "//ios/chrome/browser/flags:system_flags", "//ios/chrome/browser/net:crurl", + "//ios/chrome/browser/passwords:password_checkup_metrics", "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/browser", "//ios/chrome/browser/shared/model/browser_state",
diff --git a/ios/chrome/browser/ui/settings/password/password_checkup/BUILD.gn b/ios/chrome/browser/ui/settings/password/password_checkup/BUILD.gn index 8f20091..2adc1ad5 100644 --- a/ios/chrome/browser/ui/settings/password/password_checkup/BUILD.gn +++ b/ios/chrome/browser/ui/settings/password/password_checkup/BUILD.gn
@@ -18,6 +18,7 @@ "//ios/chrome/app/strings", "//ios/chrome/browser/net:crurl", "//ios/chrome/browser/passwords", + "//ios/chrome/browser/passwords:password_checkup_metrics", "//ios/chrome/browser/passwords:password_checkup_utils", "//ios/chrome/browser/shared/coordinator/chrome_coordinator", "//ios/chrome/browser/shared/model/browser", @@ -52,6 +53,7 @@ "//components/strings", "//ios/chrome/app/strings", "//ios/chrome/browser/net:crurl", + "//ios/chrome/browser/passwords:password_checkup_metrics", "//ios/chrome/browser/passwords:password_checkup_utils", "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/ui/table_view/cells",
diff --git a/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_coordinator.mm b/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_coordinator.mm index d94b13f..d956642b 100644 --- a/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_coordinator.mm +++ b/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_coordinator.mm
@@ -7,6 +7,7 @@ #import "ios/chrome/browser/net/crurl.h" #import "ios/chrome/browser/passwords/ios_chrome_password_check_manager.h" #import "ios/chrome/browser/passwords/ios_chrome_password_check_manager_factory.h" +#import "ios/chrome/browser/passwords/password_checkup_metrics.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/public/commands/application_commands.h" #import "ios/chrome/browser/shared/public/commands/command_dispatcher.h" @@ -64,6 +65,8 @@ - (void)start { [super start]; + + password_manager::LogOpenPasswordCheckupHomePage(); self.viewController = [[PasswordCheckupViewController alloc] initWithStyle:ChromeTableViewStyle()]; self.viewController.handler = self; @@ -94,6 +97,8 @@ - (void)showPasswordIssuesWithWarningType: (password_manager::WarningType)warningType { + password_manager::LogOpenPasswordIssuesList(warningType); + CHECK(!_passwordIssuesCoordinator); _passwordIssuesCoordinator = [[PasswordIssuesCoordinator alloc] initForWarningType:warningType
diff --git a/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_view_controller.mm b/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_view_controller.mm index cd10418..6d85949 100644 --- a/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_view_controller.mm +++ b/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_view_controller.mm
@@ -10,6 +10,7 @@ #import "components/google/core/common/google_util.h" #import "components/strings/grit/components_strings.h" #import "ios/chrome/browser/net/crurl.h" +#import "ios/chrome/browser/passwords/password_checkup_metrics.h" #import "ios/chrome/browser/passwords/password_checkup_utils.h" #import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_text_item.h" @@ -447,6 +448,7 @@ break; case ItemTypeCheckPasswordsButton: if (_checkPasswordsButtonItem.isEnabled) { + password_manager::LogStartPasswordCheckManually(); [self.delegate startPasswordCheck]; } break;
diff --git a/ios/chrome/browser/ui/settings/password/password_details/BUILD.gn b/ios/chrome/browser/ui/settings/password/password_details/BUILD.gn index 07aa4af0..67b590e 100644 --- a/ios/chrome/browser/ui/settings/password/password_details/BUILD.gn +++ b/ios/chrome/browser/ui/settings/password/password_details/BUILD.gn
@@ -20,7 +20,6 @@ ] deps = [ ":password_details_ui", - "//base", "//components/autofill/core/common", "//components/password_manager/core/browser/form_parsing", "//components/password_manager/core/common:features", @@ -29,6 +28,7 @@ "//ios/chrome/app/strings", "//ios/chrome/browser/credential_provider_promo:features", "//ios/chrome/browser/passwords", + "//ios/chrome/browser/passwords:password_checkup_metrics", "//ios/chrome/browser/passwords:password_checkup_utils", "//ios/chrome/browser/shared/coordinator/alert", "//ios/chrome/browser/shared/coordinator/chrome_coordinator", @@ -65,6 +65,8 @@ "password_details_handler.h", "password_details_menu_item.h", "password_details_menu_item.mm", + "password_details_metrics_utils.h", + "password_details_metrics_utils.mm", "password_details_table_view_constants.h", "password_details_table_view_constants.mm", "password_details_table_view_controller+private.h", @@ -82,6 +84,8 @@ "//components/strings", "//ios/chrome/app/strings", "//ios/chrome/browser/passwords", + "//ios/chrome/browser/passwords:password_checkup_metrics", + "//ios/chrome/browser/passwords:password_checkup_utils", "//ios/chrome/browser/shared/public/commands", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/shared/ui/list_model:list_model",
diff --git a/ios/chrome/browser/ui/settings/password/password_details/password_details_mediator.mm b/ios/chrome/browser/ui/settings/password/password_details/password_details_mediator.mm index 7913d581..a43d77d8 100644 --- a/ios/chrome/browser/ui/settings/password/password_details/password_details_mediator.mm +++ b/ios/chrome/browser/ui/settings/password/password_details/password_details_mediator.mm
@@ -12,23 +12,23 @@ #import "base/containers/cxx20_erase.h" #import "base/containers/flat_set.h" #import "base/memory/raw_ptr.h" -#import "base/metrics/histogram_functions.h" #import "base/ranges/algorithm.h" #import "base/strings/sys_string_conversions.h" #import "components/password_manager/core/browser/password_form.h" #import "components/password_manager/core/browser/password_manager_features_util.h" -#import "components/password_manager/core/browser/password_manager_metrics_util.h" #import "components/password_manager/core/browser/ui/credential_ui_entry.h" #import "components/password_manager/core/common/password_manager_features.h" #import "components/signin/public/identity_manager/account_info.h" #import "components/sync/base/features.h" #import "components/sync/driver/sync_service.h" #import "ios/chrome/browser/passwords/password_check_observer_bridge.h" +#import "ios/chrome/browser/passwords/password_checkup_metrics.h" #import "ios/chrome/browser/passwords/password_checkup_utils.h" #import "ios/chrome/browser/ui/settings/password/account_storage_utils.h" #import "ios/chrome/browser/ui/settings/password/password_details/password_details.h" #import "ios/chrome/browser/ui/settings/password/password_details/password_details_consumer.h" #import "ios/chrome/browser/ui/settings/password/password_details/password_details_mediator_delegate.h" +#import "ios/chrome/browser/ui/settings/password/password_details/password_details_metrics_utils.h" #import "ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller_delegate.h" #if !defined(__has_feature) || !__has_feature(objc_arc) @@ -205,11 +205,12 @@ } - (void)removeCredential:(PasswordDetails*)password { - if (password.compromised) { - base::UmaHistogramEnumeration( - "PasswordManager.BulkCheck.UserAction", - password_manager::metrics_util::PasswordCheckInteraction:: - kRemovePassword); + // When details was opened from the Password Manager, only log password + // check actions if the password is compromised. + if (password_manager::ShouldRecordPasswordCheckUserAction( + _context, password.compromised)) { + password_manager::LogDeletePassword( + password_manager::GetWarningTypeForDetailsContext(_context)); } // Map from PasswordDetails to CredentialUIEntry. Should support blocklists.
diff --git a/ios/chrome/browser/ui/settings/password/password_details/password_details_metrics_utils.h b/ios/chrome/browser/ui/settings/password/password_details/password_details_metrics_utils.h new file mode 100644 index 0000000..bc52070b0 --- /dev/null +++ b/ios/chrome/browser/ui/settings/password/password_details/password_details_metrics_utils.h
@@ -0,0 +1,29 @@ +// 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_SETTINGS_PASSWORD_PASSWORD_DETAILS_PASSWORD_DETAILS_METRICS_UTILS_H_ +#define IOS_CHROME_BROWSER_UI_SETTINGS_PASSWORD_PASSWORD_DETAILS_PASSWORD_DETAILS_METRICS_UTILS_H_ + +#import "ios/chrome/browser/passwords/password_checkup_utils.h" +#import "ios/chrome/browser/ui/settings/password/password_details/password_details.h" + +namespace password_manager { + +// Maps a DetailsContext to a WarningType for metrics +// logging. +WarningType GetWarningTypeForDetailsContext(DetailsContext details_context); + +// Whether Password Check User Actions in Password Details should be recorded. +// `details_context` indicates if Password Details was opened from the Password +// Manager, Password Check UI or other entry points. `is_password_compromised` +// indicates if the credential upon which the user is acting is being displayed +// as compromised. Actions should only be recorded for credentials displayed as +// compromised and for credentials displayed in Password Details in one of the +// contexts related to the Password Check UI. +bool ShouldRecordPasswordCheckUserAction(DetailsContext details_context, + bool is_password_compromised); + +} // namespace password_manager + +#endif // IOS_CHROME_BROWSER_UI_SETTINGS_PASSWORD_PASSWORD_DETAILS_PASSWORD_DETAILS_METRICS_UTILS_H_
diff --git a/ios/chrome/browser/ui/settings/password/password_details/password_details_metrics_utils.mm b/ios/chrome/browser/ui/settings/password/password_details/password_details_metrics_utils.mm new file mode 100644 index 0000000..541ce2ff9 --- /dev/null +++ b/ios/chrome/browser/ui/settings/password/password_details/password_details_metrics_utils.mm
@@ -0,0 +1,45 @@ +// 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 "ios/chrome/browser/ui/settings/password/password_details/password_details_metrics_utils.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +namespace password_manager { + +WarningType GetWarningTypeForDetailsContext(DetailsContext details_context) { + switch (details_context) { + // Compromised issues are displayed as such both when navigating from the + // compromised UI in Password Checkup and from the Password Manager list. + // User actions in password details are only associated to other + // insecurity types (weak, reused, etc) when navigating from the + // corresponding Password Checkup UI. + case DetailsContext::kGeneral: + case DetailsContext::kCompromisedIssues: + return WarningType::kCompromisedPasswordsWarning; + case DetailsContext::kWeakIssues: + return WarningType::kWeakPasswordsWarning; + case DetailsContext::kReusedIssues: + return WarningType::kReusedPasswordsWarning; + case DetailsContext::kDismissedWarnings: + return WarningType::kDismissedWarningsWarning; + } +} + +bool ShouldRecordPasswordCheckUserAction(DetailsContext details_context, + bool is_password_compromised) { + switch (details_context) { + case DetailsContext::kGeneral: + return is_password_compromised; + case DetailsContext::kCompromisedIssues: + case DetailsContext::kDismissedWarnings: + case DetailsContext::kReusedIssues: + case DetailsContext::kWeakIssues: + return true; + } +} + +} // namespace password_manager
diff --git a/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller.mm b/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller.mm index 54c10ce0..a1eb7b4 100644 --- a/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller.mm
@@ -13,6 +13,7 @@ #import "components/password_manager/core/common/password_manager_constants.h" #import "components/password_manager/core/common/password_manager_features.h" #import "components/sync/base/features.h" +#import "ios/chrome/browser/passwords/password_checkup_metrics.h" #import "ios/chrome/browser/shared/public/commands/application_commands.h" #import "ios/chrome/browser/shared/public/commands/open_new_tab_command.h" #import "ios/chrome/browser/shared/public/commands/snackbar_commands.h" @@ -34,6 +35,7 @@ #import "ios/chrome/browser/ui/settings/password/password_details/password_details_consumer.h" #import "ios/chrome/browser/ui/settings/password/password_details/password_details_handler.h" #import "ios/chrome/browser/ui/settings/password/password_details/password_details_menu_item.h" +#import "ios/chrome/browser/ui/settings/password/password_details/password_details_metrics_utils.h" #import "ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_constants.h" #import "ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller+private.h" #import "ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller_delegate.h" @@ -50,16 +52,17 @@ #error "This file requires ARC support." #endif -namespace { - using base::UmaHistogramEnumeration; +using password_manager::GetWarningTypeForDetailsContext; using password_manager::constants::kMaxPasswordNoteLength; +using password_manager::features::IsPasswordCheckupEnabled; using password_manager::metrics_util::LogPasswordNoteActionInSettings; using password_manager::metrics_util::LogPasswordSettingsReauthResult; -using password_manager::metrics_util::PasswordCheckInteraction; using password_manager::metrics_util::PasswordNoteAction; using password_manager::metrics_util::ReauthResult; +namespace { + typedef NS_ENUM(NSInteger, SectionIdentifier) { SectionIdentifierPassword = kSectionIdentifierEnumZero, SectionIdentifierSite, @@ -101,7 +104,7 @@ switch (context) { case DetailsContext::kGeneral: case DetailsContext::kCompromisedIssues: - return password_manager::features::IsPasswordCheckupEnabled(); + return IsPasswordCheckupEnabled(); case DetailsContext::kDismissedWarnings: case DetailsContext::kReusedIssues: case DetailsContext::kWeakIssues: @@ -111,7 +114,7 @@ // Returns true if the "Restore Warning" button should be shown. bool ShouldAllowToRestoreWarning(DetailsContext context) { - return password_manager::features::IsPasswordCheckupEnabled() && + return IsPasswordCheckupEnabled() && context == DetailsContext::kDismissedWarnings; } @@ -544,12 +547,17 @@ if (!self.tableView.editing) { int passwordIndex = GetPasswordIndex(indexPath.section); DCHECK(self.applicationCommandsHandler); - DCHECK(self.passwords[passwordIndex].changePasswordURL.has_value()); + PasswordDetails* passwordDetails = self.passwords[passwordIndex]; + DCHECK(passwordDetails.changePasswordURL.has_value()); + + CHECK(password_manager::ShouldRecordPasswordCheckUserAction( + passwordDetails.context, passwordDetails.compromised)); + + password_manager::LogChangePasswordOnWebsite( + GetWarningTypeForDetailsContext(passwordDetails.context)); + OpenNewTabCommand* command = [OpenNewTabCommand - commandWithURLFromChrome:self.passwords[passwordIndex] - .changePasswordURL.value()]; - UmaHistogramEnumeration("PasswordManager.BulkCheck.UserAction", - PasswordCheckInteraction::kChangePassword); + commandWithURLFromChrome:passwordDetails.changePasswordURL.value()]; [self.applicationCommandsHandler closeSettingsUIAndOpenURL:command]; } break; @@ -939,7 +947,7 @@ // Reveals password to the user. - (void)showPasswordFor:(ReauthenticationReason)reason { switch (reason) { - case ReauthenticationReasonShow: + case ReauthenticationReasonShow: { self.passwordShown = YES; self.passwordDetailsInfoItems[_passwordIndexToReveal] .passwordTextItem.textFieldValue = @@ -953,11 +961,18 @@ [self reconfigureCellsForItems:@[ self.passwordDetailsInfoItems[_passwordIndexToReveal].passwordTextItem ]]; - if (self.passwords[_passwordIndexToReveal].compromised) { - UmaHistogramEnumeration("PasswordManager.BulkCheck.UserAction", - PasswordCheckInteraction::kShowPassword); + + PasswordDetails* passwordDetails = self.passwords[_passwordIndexToReveal]; + DetailsContext detailsContext = passwordDetails.context; + // When details was opened from the Password Manager, only log password + // check actions if the password is compromised. + if (password_manager::ShouldRecordPasswordCheckUserAction( + detailsContext, passwordDetails.compromised)) { + password_manager::LogRevealPassword( + GetWarningTypeForDetailsContext(detailsContext)); } break; + } case ReauthenticationReasonCopy: { NSString* copiedString = self.passwords[IsPasswordGroupingEnabled() @@ -1472,12 +1487,18 @@ - (void)didTapDismissWarningButtonAtPasswordIndex:(NSUInteger)passwordIndex { CHECK(passwordIndex >= 0 && passwordIndex < self.passwords.count); CHECK(self.delegate); + + password_manager::LogMuteCompromisedWarning(); + [self.delegate dismissWarningForPassword:self.passwords[passwordIndex]]; } - (void)didTapRestoreWarningButtonAtPasswordIndex:(NSUInteger)passwordIndex { CHECK(passwordIndex >= 0 && passwordIndex < self.passwords.count); CHECK(self.delegate); + + password_manager::LogUnmuteCompromisedWarning(); + [self.delegate restoreWarningForCurrentPassword]; } @@ -1610,26 +1631,34 @@ - (void)passwordEditingConfirmed { DCHECK(self.passwords.count == self.passwordDetailsInfoItems.count); for (NSUInteger i = 0; i < self.passwordDetailsInfoItems.count; i++) { - NSString* oldUsername = self.passwords[i].username; - NSString* oldPassword = self.passwords[i].password; - NSString* oldNote = self.passwords[i].note; - self.passwords[i].username = - self.passwordDetailsInfoItems[i].usernameTextItem.textFieldValue; - self.passwords[i].password = - self.passwordDetailsInfoItems[i].passwordTextItem.textFieldValue; + PasswordDetails* password = self.passwords[i]; + NSString* oldUsername = password.username; + NSString* oldPassword = password.password; + NSString* oldNote = password.note; + + PasswordDetailsInfoItem* passwordDetailsInfoItem = + self.passwordDetailsInfoItems[i]; + password.username = passwordDetailsInfoItem.usernameTextItem.textFieldValue; + password.password = passwordDetailsInfoItem.passwordTextItem.textFieldValue; if (IsPasswordNotesWithBackupEnabled()) { - self.passwords[i].note = - self.passwordDetailsInfoItems[i].passwordNoteItem.text; - [self logChangeBetweenOldNote:oldNote currentNote:self.passwords[i].note]; + password.note = passwordDetailsInfoItem.passwordNoteItem.text; + [self logChangeBetweenOldNote:oldNote currentNote:password.note]; } [self.delegate passwordDetailsViewController:self - didEditPasswordDetails:self.passwords[i] + didEditPasswordDetails:password withOldUsername:oldUsername oldPassword:oldPassword oldNote:oldNote]; - if (self.passwords[i].compromised) { - UmaHistogramEnumeration("PasswordManager.BulkCheck.UserAction", - PasswordCheckInteraction::kEditPassword); + + if (oldUsername != password.username || oldPassword != password.password) { + DetailsContext detailsContext = password.context; + // When details was opened from the Password Manager, only log password + // check actions if the password is compromised. + if (password_manager::ShouldRecordPasswordCheckUserAction( + detailsContext, password.compromised)) { + password_manager::LogEditPassword( + GetWarningTypeForDetailsContext(detailsContext)); + } } } [self.delegate didFinishEditingPasswordDetails];
diff --git a/ios/chrome/browser/ui/settings/password/password_issues/BUILD.gn b/ios/chrome/browser/ui/settings/password/password_issues/BUILD.gn index 946a9b00..0daa30e 100644 --- a/ios/chrome/browser/ui/settings/password/password_issues/BUILD.gn +++ b/ios/chrome/browser/ui/settings/password/password_issues/BUILD.gn
@@ -58,7 +58,10 @@ "//components/password_manager/core/common:features", "//ios/chrome/app/strings", "//ios/chrome/browser/net:crurl", + "//ios/chrome/browser/passwords:password_checkup_metrics", + "//ios/chrome/browser/passwords:password_checkup_utils", "//ios/chrome/browser/shared/ui/table_view", + "//ios/chrome/browser/shared/ui/table_view:utils", "//ios/chrome/browser/shared/ui/table_view/cells", "//ios/chrome/browser/ui/settings:settings_root", "//ios/chrome/browser/ui/settings/password:password_constants",
diff --git a/ios/chrome/browser/ui/settings/password/password_issues/password_issues_coordinator.mm b/ios/chrome/browser/ui/settings/password/password_issues/password_issues_coordinator.mm index e7be0e6..5ed2276 100644 --- a/ios/chrome/browser/ui/settings/password/password_issues/password_issues_coordinator.mm +++ b/ios/chrome/browser/ui/settings/password/password_issues/password_issues_coordinator.mm
@@ -99,6 +99,7 @@ - (void)start { [super start]; + ChromeBrowserState* browserState = self.browser->GetBrowserState(); self.mediator = [[PasswordIssuesMediator alloc] initForWarningType:_warningType @@ -112,7 +113,7 @@ PasswordIssuesTableViewController* passwordIssuesTableViewController = [[PasswordIssuesTableViewController alloc] - initWithStyle:ChromeTableViewStyle()]; + initWithWarningType:_warningType]; passwordIssuesTableViewController.imageDataSource = self.mediator; self.viewController = passwordIssuesTableViewController;
diff --git a/ios/chrome/browser/ui/settings/password/password_issues/password_issues_table_view_controller.h b/ios/chrome/browser/ui/settings/password/password_issues/password_issues_table_view_controller.h index 91bf329..3a4c301 100644 --- a/ios/chrome/browser/ui/settings/password/password_issues/password_issues_table_view_controller.h +++ b/ios/chrome/browser/ui/settings/password/password_issues/password_issues_table_view_controller.h
@@ -11,10 +11,19 @@ @protocol PasswordIssuesPresenter; +namespace password_manager { +enum class WarningType; +} + // Screen with a list of compromised credentials. @interface PasswordIssuesTableViewController : SettingsRootTableViewController <PasswordIssuesConsumer> +- (instancetype)initWithWarningType:(password_manager::WarningType)warningType + NS_DESIGNATED_INITIALIZER; + +- (instancetype)initWithStyle:(UITableViewStyle*)style NS_UNAVAILABLE; + @property(nonatomic, weak) id<PasswordIssuesPresenter> presenter; // Data source for favicon images.
diff --git a/ios/chrome/browser/ui/settings/password/password_issues/password_issues_table_view_controller.mm b/ios/chrome/browser/ui/settings/password/password_issues/password_issues_table_view_controller.mm index 91698fe..ae57b7a 100644 --- a/ios/chrome/browser/ui/settings/password/password_issues/password_issues_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/password/password_issues/password_issues_table_view_controller.mm
@@ -7,8 +7,11 @@ #import <UIKit/UIKit.h> #import "base/mac/foundation_util.h" #import "components/password_manager/core/common/password_manager_features.h" +#import "ios/chrome/browser/passwords/password_checkup_metrics.h" +#import "ios/chrome/browser/passwords/password_checkup_utils.h" #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_text_item.h" #import "ios/chrome/browser/shared/ui/table_view/table_view_favicon_data_source.h" +#import "ios/chrome/browser/shared/ui/table_view/table_view_utils.h" #import "ios/chrome/browser/ui/settings/password/password_issues/password_issue_content_item.h" #import "ios/chrome/browser/ui/settings/password/password_issues/password_issues_consumer.h" #import "ios/chrome/browser/ui/settings/password/password_issues/password_issues_presenter.h" @@ -22,6 +25,7 @@ #error "This file requires ARC support." #endif +using password_manager::WarningType; using password_manager::features::IsPasswordCheckupEnabled; namespace { @@ -66,12 +70,24 @@ // Text displayed in the button for presenting dismissed compromised // credential warnings. When nil, no button is displayed. NSString* _dismissedWarningsButtonText; + // Type of insecure credentials displayed in the page. + WarningType _warningType; } @end @implementation PasswordIssuesTableViewController +- (instancetype)initWithWarningType:(WarningType)warningType { + self = [super initWithStyle:ChromeTableViewStyle()]; + + if (self) { + _warningType = warningType; + } + + return self; +} + #pragma mark - UIViewController - (void)viewDidLoad { @@ -257,10 +273,13 @@ break; } case ItemTypeDismissedCredentialsButton: + password_manager::LogOpenPasswordIssuesList( + WarningType::kDismissedWarningsWarning); [self.presenter presentDismissedCompromisedCredentials]; break; case ItemTypeChangePassword: + password_manager::LogChangePasswordOnWebsite(_warningType); CrURL* changePasswordURL = [self changePasswordURLForPasswordInSection:indexPath.section]; [self.presenter dismissAndOpenURL:changePasswordURL];
diff --git a/ios/chrome/browser/ui/settings/password/password_issues/password_issues_table_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/password/password_issues/password_issues_table_view_controller_unittest.mm index 43b177d6..cdbea6fc 100644 --- a/ios/chrome/browser/ui/settings/password/password_issues/password_issues_table_view_controller_unittest.mm +++ b/ios/chrome/browser/ui/settings/password/password_issues/password_issues_table_view_controller_unittest.mm
@@ -10,6 +10,7 @@ #import "base/test/scoped_feature_list.h" #import "components/password_manager/core/browser/ui/credential_ui_entry.h" #import "components/password_manager/core/common/password_manager_features.h" +#import "ios/chrome/browser/passwords/password_checkup_utils.h" #import "ios/chrome/browser/shared/model/browser_state/test_chrome_browser_state.h" #import "ios/chrome/browser/shared/ui/table_view/chrome_table_view_controller_test.h" #import "ios/chrome/browser/ui/settings/password/password_issues/password_issue.h" @@ -96,7 +97,8 @@ ChromeTableViewController* InstantiateController() override { PasswordIssuesTableViewController* controller = [[PasswordIssuesTableViewController alloc] - initWithStyle:UITableViewStylePlain]; + initWithWarningType:password_manager::WarningType:: + kCompromisedPasswordsWarning]; controller.presenter = presenter_; return controller; }
diff --git a/ios/chrome/browser/ui/settings/password/password_manager_view_controller.mm b/ios/chrome/browser/ui/settings/password/password_manager_view_controller.mm index cbed659..cba699d4 100644 --- a/ios/chrome/browser/ui/settings/password/password_manager_view_controller.mm +++ b/ios/chrome/browser/ui/settings/password/password_manager_view_controller.mm
@@ -34,6 +34,7 @@ #import "components/sync/driver/sync_user_settings.h" #import "ios/chrome/browser/flags/system_flags.h" #import "ios/chrome/browser/net/crurl.h" +#import "ios/chrome/browser/passwords/password_checkup_metrics.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/browser_state/chrome_browser_state.h" @@ -1954,9 +1955,8 @@ case ItemTypeCheckForProblemsButton: if (self.passwordCheckState != PasswordCheckStateRunning) { [self.delegate startPasswordCheck]; + password_manager::LogStartPasswordCheckManually(); self.shouldFocusAccessibilityOnPasswordCheckStatus = YES; - UmaHistogramEnumeration("PasswordManager.BulkCheck.UserAction", - PasswordCheckInteraction::kManualPasswordCheck); } break; case ItemTypeAddPasswordButton: {
diff --git a/ios/chrome/browser/ui/settings/password/passwords_coordinator.mm b/ios/chrome/browser/ui/settings/password/passwords_coordinator.mm index 1a94d683..fdc72cf 100644 --- a/ios/chrome/browser/ui/settings/password/passwords_coordinator.mm +++ b/ios/chrome/browser/ui/settings/password/passwords_coordinator.mm
@@ -4,11 +4,9 @@ #import "ios/chrome/browser/ui/settings/password/passwords_coordinator.h" -#import "base/metrics/histogram_functions.h" #import "base/metrics/user_metrics.h" #import "base/metrics/user_metrics_action.h" #import "components/keyed_service/core/service_access_type.h" -#import "components/password_manager/core/browser/password_manager_metrics_util.h" #import "components/password_manager/core/browser/ui/credential_ui_entry.h" #import "components/password_manager/core/common/password_manager_features.h" #import "components/strings/grit/components_strings.h" @@ -16,6 +14,7 @@ #import "ios/chrome/browser/favicon/ios_chrome_favicon_loader_factory.h" #import "ios/chrome/browser/passwords/ios_chrome_password_check_manager.h" #import "ios/chrome/browser/passwords/ios_chrome_password_check_manager_factory.h" +#import "ios/chrome/browser/passwords/password_checkup_metrics.h" #import "ios/chrome/browser/passwords/password_checkup_utils.h" #import "ios/chrome/browser/shared/coordinator/alert/action_sheet_coordinator.h" #import "ios/chrome/browser/shared/coordinator/alert/alert_coordinator.h" @@ -128,10 +127,8 @@ - (void)checkSavedPasswords { [self.mediator startPasswordCheck]; - base::UmaHistogramEnumeration( - "PasswordManager.BulkCheck.UserAction", - password_manager::metrics_util::PasswordCheckInteraction:: - kAutomaticPasswordCheck); + + password_manager::LogStartPasswordCheckAutomatically(); } - (UIViewController*)viewController {
diff --git a/ios/chrome/test/earl_grey/chrome_earl_grey_ui.mm b/ios/chrome/test/earl_grey/chrome_earl_grey_ui.mm index 98e7e699..115b03f 100644 --- a/ios/chrome/test/earl_grey/chrome_earl_grey_ui.mm +++ b/ios/chrome/test/earl_grey/chrome_earl_grey_ui.mm
@@ -528,6 +528,8 @@ [self waitForAppToIdle]; // Recheck "Saved Passwords" and "Autofill Data". + [ChromeEarlGrey + waitForSufficientlyVisibleElementWithMatcher:ClearSavedPasswordsButton()]; [[EarlGrey selectElementWithMatcher:ClearSavedPasswordsButton()] performAction:grey_tap()]; [[[EarlGrey
diff --git a/media/base/android/java/src/org/chromium/media/CodecProfileLevelList.java b/media/base/android/java/src/org/chromium/media/CodecProfileLevelList.java index ea705b4d..280b3eac 100644 --- a/media/base/android/java/src/org/chromium/media/CodecProfileLevelList.java +++ b/media/base/android/java/src/org/chromium/media/CodecProfileLevelList.java
@@ -8,13 +8,11 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; -import org.chromium.build.annotations.MainDex; import java.util.ArrayList; import java.util.List; @JNINamespace("media") -@MainDex class CodecProfileLevelList { private static final String TAG = "CodecProfileLevelList";
diff --git a/media/base/android/java/src/org/chromium/media/HdrMetadata.java b/media/base/android/java/src/org/chromium/media/HdrMetadata.java index db9a766..921990c6 100644 --- a/media/base/android/java/src/org/chromium/media/HdrMetadata.java +++ b/media/base/android/java/src/org/chromium/media/HdrMetadata.java
@@ -11,13 +11,11 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; import java.nio.ByteBuffer; import java.nio.ByteOrder; @JNINamespace("media") -@MainDex class HdrMetadata { private static final int MAX_CHROMATICITY = 50000; // Defined in CTA-861.3.
diff --git a/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java b/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java index f3c5cb4..7cff0bf 100644 --- a/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java +++ b/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java
@@ -21,7 +21,6 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; import java.nio.ByteBuffer; import java.util.LinkedList; @@ -31,7 +30,6 @@ * A MediaCodec wrapper for adapting the API and catching exceptions. */ @JNINamespace("media") -@MainDex class MediaCodecBridge { private static final String TAG = "MediaCodecBridge";
diff --git a/media/base/android/java/src/org/chromium/media/MediaCodecBridgeBuilder.java b/media/base/android/java/src/org/chromium/media/MediaCodecBridgeBuilder.java index 2e250c9d..464bd092 100644 --- a/media/base/android/java/src/org/chromium/media/MediaCodecBridgeBuilder.java +++ b/media/base/android/java/src/org/chromium/media/MediaCodecBridgeBuilder.java
@@ -12,12 +12,10 @@ import org.chromium.base.Log; import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; -import org.chromium.build.annotations.MainDex; import org.chromium.media.MediaCodecUtil.CodecCreationInfo; import org.chromium.media.MediaCodecUtil.MimeTypes; @JNINamespace("media") -@MainDex class MediaCodecBridgeBuilder { private static final String TAG = "MediaCodecBridge";
diff --git a/media/base/android/java/src/org/chromium/media/MediaCodecUtil.java b/media/base/android/java/src/org/chromium/media/MediaCodecUtil.java index 43d88c721..c892d0d 100644 --- a/media/base/android/java/src/org/chromium/media/MediaCodecUtil.java +++ b/media/base/android/java/src/org/chromium/media/MediaCodecUtil.java
@@ -21,7 +21,6 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.compat.ApiHelperForN; -import org.chromium.build.annotations.MainDex; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -33,7 +32,6 @@ * A collection of MediaCodec utility functions. */ @JNINamespace("media") -@MainDex class MediaCodecUtil { private static final String TAG = "MediaCodecUtil";
diff --git a/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java b/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java index 592fa163..969fa3cc 100644 --- a/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java +++ b/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java
@@ -14,7 +14,6 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; import org.chromium.media.MediaDrmSessionManager.SessionId; import org.chromium.media.MediaDrmSessionManager.SessionInfo; @@ -55,7 +54,6 @@ * MediaCodecAudioDecoders or MediaCodecVideoDecoders. */ @JNINamespace("media") -@MainDex @SuppressLint("WrongConstant") public class MediaDrmBridge { private static final String TAG = "media";
diff --git a/media/base/android/java/src/org/chromium/media/MediaDrmStorageBridge.java b/media/base/android/java/src/org/chromium/media/MediaDrmStorageBridge.java index 4137fe2..c297d051 100644 --- a/media/base/android/java/src/org/chromium/media/MediaDrmStorageBridge.java +++ b/media/base/android/java/src/org/chromium/media/MediaDrmStorageBridge.java
@@ -8,14 +8,12 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; /** * Origin isolated media drm scope id storage. Isolated origin is guranteed by native * implementation. Thus no origin information is stored here. */ @JNINamespace("media") -@MainDex class MediaDrmStorageBridge { private static final long INVALID_NATIVE_MEDIA_DRM_STORAGE_BRIDGE = -1;
diff --git a/media/video/h266_nalu_parser.cc b/media/video/h266_nalu_parser.cc index f7a66ba..b8b54403 100644 --- a/media/video/h266_nalu_parser.cc +++ b/media/video/h266_nalu_parser.cc
@@ -5,11 +5,11 @@ #include "media/video/h266_nalu_parser.h" #include <stddef.h> + #include <algorithm> #include <cmath> #include <cstring> -#include "base/cxx17_backports.h" #include "base/logging.h" #include "media/base/decrypt_config.h" #include "media/video/bit_reader_macros.h"
diff --git a/mojo/public/java/system/src/org/chromium/mojo/system/impl/CoreImpl.java b/mojo/public/java/system/src/org/chromium/mojo/system/impl/CoreImpl.java index 00927b1..e0a843f 100644 --- a/mojo/public/java/system/src/org/chromium/mojo/system/impl/CoreImpl.java +++ b/mojo/public/java/system/src/org/chromium/mojo/system/impl/CoreImpl.java
@@ -9,7 +9,6 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; import org.chromium.mojo.system.Core; import org.chromium.mojo.system.DataPipe; import org.chromium.mojo.system.DataPipe.ConsumerHandle; @@ -36,7 +35,6 @@ * Implementation of {@link Core}. */ @JNINamespace("mojo::android") -@MainDex public class CoreImpl implements Core { /** * Discard flag for the |MojoReadData| operation.
diff --git a/mojo/public/java/system/src/org/chromium/mojo/system/impl/WatcherImpl.java b/mojo/public/java/system/src/org/chromium/mojo/system/impl/WatcherImpl.java index 73730c3..8236b8a8 100644 --- a/mojo/public/java/system/src/org/chromium/mojo/system/impl/WatcherImpl.java +++ b/mojo/public/java/system/src/org/chromium/mojo/system/impl/WatcherImpl.java
@@ -7,14 +7,12 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; import org.chromium.mojo.system.Core; import org.chromium.mojo.system.Handle; import org.chromium.mojo.system.MojoResult; import org.chromium.mojo.system.Watcher; @JNINamespace("mojo::android") -@MainDex class WatcherImpl implements Watcher { private long mImplPtr = WatcherImplJni.get().createWatcher(WatcherImpl.this); private Callback mCallback;
diff --git a/net/http/transport_security_state_static.pins b/net/http/transport_security_state_static.pins index 6292c33..11a8449 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: 2023-05-07 12:54 UTC +# Last updated: 2023-05-08 12:55 UTC PinsListTimestamp -1683464055 +1683550507 TestSPKI sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff --git a/net/http/transport_security_state_static_pins.json b/net/http/transport_security_state_static_pins.json index f83ec16..b74bffc4 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: 2023-05-07 12:54 UTC +// Last updated: 2023-05-08 12:55 UTC // { "pinsets": [
diff --git a/net/proxy_resolution/proxy_resolver_mac.cc b/net/proxy_resolution/proxy_resolver_mac.cc index 00ff1ad..e2411226 100644 --- a/net/proxy_resolution/proxy_resolver_mac.cc +++ b/net/proxy_resolution/proxy_resolver_mac.cc
@@ -31,6 +31,10 @@ #include <CoreServices/CoreServices.h> #endif +#if LEAK_SANITIZER +#include <sanitizer/lsan_interface.h> +#endif + namespace net { class NetworkAnonymizationKey; @@ -272,6 +276,11 @@ base::ScopedCFTypeRef<CFRunLoopSourceRef> runloop_source( CFNetworkExecuteProxyAutoConfigurationURL( pac_url_ref.get(), query_url_ref.get(), ResultCallback, &context)); +#if LEAK_SANITIZER + // CFNetworkExecuteProxyAutoConfigurationURL leaks the returned + // CFRunLoopSourceRef. Filed as FB12170226. + __lsan_ignore_object(runloop_source.get()); +#endif if (!runloop_source) return ERR_FAILED;
diff --git a/net/test/spawned_test_server/remote_test_server.cc b/net/test/spawned_test_server/remote_test_server.cc index ad78e29..e09649a2 100644 --- a/net/test/spawned_test_server/remote_test_server.cc +++ b/net/test/spawned_test_server/remote_test_server.cc
@@ -85,7 +85,7 @@ if (!config) LOG(FATAL) << "Failed to parse " << config_path.value(); - std::string* result = config->FindStringKey("spawner_url_base"); + std::string* result = config->GetDict().FindString("spawner_url_base"); if (!result) LOG(FATAL) << "spawner_url_base is not specified in the config";
diff --git a/remoting/host/chromeos/features.cc b/remoting/host/chromeos/features.cc index d4efe0f..fad6eb71 100644 --- a/remoting/host/chromeos/features.cc +++ b/remoting/host/chromeos/features.cc
@@ -17,6 +17,6 @@ BASE_FEATURE(kEnableFrameSinkDesktopCapturerInCrd, "EnableFrameSinkDesktopCapturerInCrd", - base::FEATURE_DISABLED_BY_DEFAULT); + base::FEATURE_ENABLED_BY_DEFAULT); } // namespace remoting::features
diff --git a/services/audio/public/java/src/org/chromium/audio/AudioFeatureList.java b/services/audio/public/java/src/org/chromium/audio/AudioFeatureList.java index 9e120dd..ee104b0 100644 --- a/services/audio/public/java/src/org/chromium/audio/AudioFeatureList.java +++ b/services/audio/public/java/src/org/chromium/audio/AudioFeatureList.java
@@ -7,14 +7,12 @@ import org.chromium.base.FeatureList; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; /** * Provides an API for querying the status of Audio Service Features. */ // TODO(crbug.com/1060097): Remove/update this once a generalized FeatureList exists. @JNINamespace("features") -@MainDex public class AudioFeatureList { public static final String BLOCK_MIDI_BY_DEFAULT = "BlockMidiByDefault";
diff --git a/services/device/public/java/src/org/chromium/device/DeviceFeatureList.java b/services/device/public/java/src/org/chromium/device/DeviceFeatureList.java index 9cc5f50d..2d4033e 100644 --- a/services/device/public/java/src/org/chromium/device/DeviceFeatureList.java +++ b/services/device/public/java/src/org/chromium/device/DeviceFeatureList.java
@@ -7,14 +7,12 @@ import org.chromium.base.FeatureList; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; /** * Provides an API for querying the status of Device Service Features. */ // TODO(crbug.com/1060097): Remove/update this once a generalized FeatureList exists. @JNINamespace("features") -@MainDex public class DeviceFeatureList { public static final String ASYNC_SENSOR_CALLS = "AsyncSensorCalls"; public static final String GENERIC_SENSOR_EXTRA_CLASSES = "GenericSensorExtraClasses";
diff --git a/services/network/BUILD.gn b/services/network/BUILD.gn index 06d0634c..550b01b 100644 --- a/services/network/BUILD.gn +++ b/services/network/BUILD.gn
@@ -143,6 +143,8 @@ "shared_dictionary/shared_dictionary_manager.h", "shared_dictionary/shared_dictionary_manager_in_memory.cc", "shared_dictionary/shared_dictionary_manager_in_memory.h", + "shared_dictionary/shared_dictionary_on_disk.cc", + "shared_dictionary/shared_dictionary_on_disk.h", "shared_dictionary/shared_dictionary_storage.cc", "shared_dictionary/shared_dictionary_storage.h", "shared_dictionary/shared_dictionary_storage_in_memory.cc", @@ -419,6 +421,7 @@ "shared_dictionary/shared_dictionary_data_pipe_writer_unittest.cc", "shared_dictionary/shared_dictionary_disk_cache_unittest.cc", "shared_dictionary/shared_dictionary_manager_unittest.cc", + "shared_dictionary/shared_dictionary_on_disk_unittest.cc", "shared_dictionary/shared_dictionary_writer_in_memory_unittest.cc", "shared_dictionary/shared_dictionary_writer_on_disk_unittest.cc", "socket_data_pump_unittest.cc",
diff --git a/services/network/shared_dictionary/shared_dictionary_on_disk.cc b/services/network/shared_dictionary/shared_dictionary_on_disk.cc new file mode 100644 index 0000000..dbfd71b --- /dev/null +++ b/services/network/shared_dictionary/shared_dictionary_on_disk.cc
@@ -0,0 +1,104 @@ +// 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. + +#include "services/network/shared_dictionary/shared_dictionary_on_disk.h" + +#include "net/base/io_buffer.h" +#include "net/base/net_errors.h" +#include "services/network/shared_dictionary/shared_dictionary_disk_cache.h" + +namespace network { + +SharedDictionaryOnDisk::SharedDictionaryOnDisk( + size_t size, + const net::SHA256HashValue& hash, + const base::UnguessableToken& disk_cache_key_token, + SharedDictionaryDiskCache* disk_cahe) + : size_(size), hash_(hash) { + auto split_callback = base::SplitOnceCallback(base::BindOnce( + &SharedDictionaryOnDisk::OnEntry, weak_factory_.GetWeakPtr())); + disk_cache::EntryResult result = disk_cahe->OpenOrCreateEntry( + disk_cache_key_token.ToString(), + /*create=*/false, std::move(split_callback.first)); + if (result.net_error() != net::ERR_IO_PENDING) { + std::move(split_callback.second).Run(std::move(result)); + } +} + +SharedDictionaryOnDisk::~SharedDictionaryOnDisk() = default; + +int SharedDictionaryOnDisk::ReadAll(base::OnceCallback<void(int)> callback) { + if (state_ == State::kDone) { + return net::OK; + } + if (state_ == State::kFailed) { + return net::ERR_FAILED; + } + readall_callbacks_.push_back(std::move(callback)); + return net::ERR_IO_PENDING; +} + +scoped_refptr<net::IOBuffer> SharedDictionaryOnDisk::data() const { + CHECK_EQ(State::kDone, state_); + return data_.get(); +} + +size_t SharedDictionaryOnDisk::size() const { + return size_; +} + +const net::SHA256HashValue& SharedDictionaryOnDisk::hash() const { + return hash_; +} + +void SharedDictionaryOnDisk::OnEntry(disk_cache::EntryResult result) { + if (result.net_error() != net::OK) { + SetState(State::kFailed); + return; + } + entry_.reset(result.ReleaseEntry()); + // The dictionary binary is stored in the second stream of disk cache entry + // (index = 1). + if (static_cast<size_t>(entry_->GetDataSize(/*index=*/1)) != size_) { + SetState(State::kFailed); + return; + } + data_ = base::MakeRefCounted<net::IOBufferWithSize>(size_); + + auto split_callback = base::SplitOnceCallback(base::BindOnce( + &SharedDictionaryOnDisk::OnDataRead, weak_factory_.GetWeakPtr())); + + int rv = entry_->ReadData(/*index=*/1, + /*offset=*/0, data_.get(), size_, + std::move(split_callback.first)); + if (rv != net::ERR_IO_PENDING) { + std::move(split_callback.second).Run(rv); + } +} + +void SharedDictionaryOnDisk::OnDataRead(int result) { + entry_.reset(); + + if (result < 0 || (base::checked_cast<size_t>(result) != size_)) { + SetState(State::kFailed); + return; + } + SetState(State::kDone); +} + +void SharedDictionaryOnDisk::SetState(State state) { + CHECK_NE(State::kLoading, state); + CHECK_EQ(State::kLoading, state_); + state_ = state; + auto readall_callbacks = std::move(readall_callbacks_); + for (auto& readall_callback : readall_callbacks) { + if (state_ == State::kDone) { + std::move(readall_callback).Run(net::OK); + } else if (state_ == State::kFailed) { + std::move(readall_callback).Run(net::ERR_FAILED); + } + } +} + +} // namespace network
diff --git a/services/network/shared_dictionary/shared_dictionary_on_disk.h b/services/network/shared_dictionary/shared_dictionary_on_disk.h new file mode 100644 index 0000000..555b678 --- /dev/null +++ b/services/network/shared_dictionary/shared_dictionary_on_disk.h
@@ -0,0 +1,64 @@ +// 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 SERVICES_NETWORK_SHARED_DICTIONARY_SHARED_DICTIONARY_ON_DISK_H_ +#define SERVICES_NETWORK_SHARED_DICTIONARY_SHARED_DICTIONARY_ON_DISK_H_ + +#include "services/network/shared_dictionary/shared_dictionary.h" + +#include "base/component_export.h" +#include "base/unguessable_token.h" +#include "net/base/hash_value.h" +#include "net/disk_cache/disk_cache.h" + +namespace net { +class IOBufferWithSize; +} // namespace net + +namespace network { + +class SharedDictionaryDiskCache; + +// A SharedDictionary that can be retrieved from the SharedDictionaryDiskCache. +// This class starts loading the disk cache entry in the constructor. So +// ReadAll() may synchronously return OK if the data has been loaded into memory +// when the method is called. +class COMPONENT_EXPORT(NETWORK_SERVICE) SharedDictionaryOnDisk + : public SharedDictionary { + public: + SharedDictionaryOnDisk(size_t size, + const net::SHA256HashValue& hash, + const base::UnguessableToken& disk_cache_key_token, + SharedDictionaryDiskCache* disk_cahe); + + ~SharedDictionaryOnDisk() override; + + // SharedDictionary + int ReadAll(base::OnceCallback<void(int)> callback) override; + scoped_refptr<net::IOBuffer> data() const override; + size_t size() const override; + const net::SHA256HashValue& hash() const override; + + private: + enum class State { kLoading, kDone, kFailed }; + + void OnEntry(disk_cache::EntryResult result); + void OnDataRead(int result); + + void SetState(State state); + + State state_ = State::kLoading; + + const size_t size_; + const net::SHA256HashValue hash_; + + std::vector<base::OnceCallback<void(int)>> readall_callbacks_; + disk_cache::ScopedEntryPtr entry_; + scoped_refptr<net::IOBufferWithSize> data_; + base::WeakPtrFactory<SharedDictionaryOnDisk> weak_factory_{this}; +}; + +} // namespace network + +#endif // SERVICES_NETWORK_SHARED_DICTIONARY_SHARED_DICTIONARY_ON_DISK_H_
diff --git a/services/network/shared_dictionary/shared_dictionary_on_disk_unittest.cc b/services/network/shared_dictionary/shared_dictionary_on_disk_unittest.cc new file mode 100644 index 0000000..754814a --- /dev/null +++ b/services/network/shared_dictionary/shared_dictionary_on_disk_unittest.cc
@@ -0,0 +1,575 @@ +// 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. + +#include "services/network/shared_dictionary/shared_dictionary_on_disk.h" + +#include "base/run_loop.h" +#include "base/test/bind.h" +#include "base/unguessable_token.h" +#include "net/base/hash_value.h" +#include "net/base/io_buffer.h" +#include "net/disk_cache/mock/mock_backend_impl.h" +#include "net/disk_cache/mock/mock_entry_impl.h" +#include "services/network/shared_dictionary/shared_dictionary_disk_cache.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace network { +namespace { + +const std::string kTestData = "hello world"; + +class FakeSharedDictionaryDiskCache : public SharedDictionaryDiskCache { + public: + explicit FakeSharedDictionaryDiskCache() = default; + ~FakeSharedDictionaryDiskCache() override = default; + void Initialize() { + SharedDictionaryDiskCache::Initialize(base::FilePath(), +#if BUILDFLAG(IS_ANDROID) + /*app_status_listener=*/nullptr, +#endif // BUILDFLAG(IS_ANDROID) + /*file_operations_factory=*/nullptr); + } + disk_cache::BackendMock* backend() { return mock_cache_ptr_; } + + protected: + disk_cache::BackendResult CreateCacheBackend( + const base::FilePath& cache_directory_path, +#if BUILDFLAG(IS_ANDROID) + base::android::ApplicationStatusListener* app_status_listener, +#endif // BUILDFLAG(IS_ANDROID) + scoped_refptr<disk_cache::BackendFileOperationsFactory> + file_operations_factory, + disk_cache::BackendResultCallback callback) override { + auto mock_cache = + std::make_unique<disk_cache::BackendMock>(net::CacheType::APP_CACHE); + mock_cache_ptr_ = mock_cache.get(); + return disk_cache::BackendResult::Make(std::move(mock_cache)); + } + + private: + raw_ptr<disk_cache::BackendMock> mock_cache_ptr_; +}; + +TEST(SharedDictionaryOnDiskTest, AsyncOpenEntryAsyncReadData) { + size_t expected_size = kTestData.size(); + net::SHA256HashValue hash({{0x00, 0x01}}); + base::UnguessableToken disk_cache_key_token = + base::UnguessableToken::Create(); + + auto disk_cache = std::make_unique<FakeSharedDictionaryDiskCache>(); + disk_cache->Initialize(); + + disk_cache::EntryResultCallback open_entry_callback; + EXPECT_CALL(*disk_cache->backend(), OpenEntry) + .WillOnce([&](const std::string& key, net::RequestPriority priority, + disk_cache::EntryResultCallback callback) { + open_entry_callback = std::move(callback); + return disk_cache::EntryResult::MakeError(net::ERR_IO_PENDING); + }); + + std::unique_ptr<disk_cache::EntryMock> entry = + std::make_unique<disk_cache::EntryMock>(); + net::CompletionOnceCallback read_all_callback; + scoped_refptr<net::IOBuffer> buffer; + + EXPECT_CALL(*entry, GetDataSize).WillOnce([&](int index) -> int32_t { + return expected_size; + }); + + EXPECT_CALL(*entry, ReadData) + .WillOnce([&](int index, int offset, net::IOBuffer* buf, int buf_len, + net::CompletionOnceCallback callback) -> int { + EXPECT_EQ(1, index); + EXPECT_EQ(0, offset); + EXPECT_EQ(base::checked_cast<int>(expected_size), buf_len); + buffer = buf; + read_all_callback = std::move(callback); + return net::ERR_IO_PENDING; + }); + + auto dictionary = std::make_unique<SharedDictionaryOnDisk>( + expected_size, hash, disk_cache_key_token, disk_cache.get()); + EXPECT_EQ(expected_size, dictionary->size()); + EXPECT_EQ(hash, dictionary->hash()); + + bool read_all_finished = false; + EXPECT_EQ(net::ERR_IO_PENDING, + dictionary->ReadAll(base::BindLambdaForTesting([&](int rv) { + EXPECT_EQ(net::OK, rv); + read_all_finished = true; + }))); + + ASSERT_TRUE(open_entry_callback); + std::move(open_entry_callback) + .Run(disk_cache::EntryResult::MakeOpened(entry.release())); + ASSERT_TRUE(buffer); + ASSERT_TRUE(read_all_callback); + memcpy(buffer->data(), kTestData.c_str(), kTestData.size()); + std::move(read_all_callback).Run(base::checked_cast<int>(expected_size)); + EXPECT_TRUE(read_all_finished); + EXPECT_EQ(kTestData, + std::string(dictionary->data()->data(), dictionary->size())); + + // ReadAll() synchronously returns OK now. + EXPECT_EQ(net::OK, dictionary->ReadAll(base::BindLambdaForTesting( + [&](int rv) { ASSERT_TRUE(false); }))); +} + +TEST(SharedDictionaryOnDiskTest, SyncOpenEntryAsyncReadData) { + size_t expected_size = kTestData.size(); + net::SHA256HashValue hash({{0x00, 0x01}}); + base::UnguessableToken disk_cache_key_token = + base::UnguessableToken::Create(); + + auto disk_cache = std::make_unique<FakeSharedDictionaryDiskCache>(); + disk_cache->Initialize(); + + std::unique_ptr<disk_cache::EntryMock> entry = + std::make_unique<disk_cache::EntryMock>(); + net::CompletionOnceCallback read_all_callback; + scoped_refptr<net::IOBuffer> buffer; + + EXPECT_CALL(*entry, GetDataSize).WillOnce([&](int index) -> int32_t { + return expected_size; + }); + + EXPECT_CALL(*entry, ReadData) + .WillOnce([&](int index, int offset, net::IOBuffer* buf, int buf_len, + net::CompletionOnceCallback callback) -> int { + EXPECT_EQ(1, index); + EXPECT_EQ(0, offset); + EXPECT_EQ(base::checked_cast<int>(expected_size), buf_len); + buffer = buf; + read_all_callback = std::move(callback); + return net::ERR_IO_PENDING; + }); + + EXPECT_CALL(*disk_cache->backend(), OpenEntry) + .WillOnce([&](const std::string& key, net::RequestPriority priority, + disk_cache::EntryResultCallback callback) { + return disk_cache::EntryResult::MakeOpened(entry.release()); + }); + + auto dictionary = std::make_unique<SharedDictionaryOnDisk>( + expected_size, hash, disk_cache_key_token, disk_cache.get()); + + bool read_all_finished = false; + EXPECT_EQ(net::ERR_IO_PENDING, + dictionary->ReadAll(base::BindLambdaForTesting([&](int rv) { + EXPECT_EQ(net::OK, rv); + read_all_finished = true; + }))); + + ASSERT_TRUE(buffer); + ASSERT_TRUE(read_all_callback); + memcpy(buffer->data(), kTestData.c_str(), kTestData.size()); + std::move(read_all_callback).Run(base::checked_cast<int>(expected_size)); + EXPECT_TRUE(read_all_finished); + EXPECT_EQ(kTestData, + std::string(dictionary->data()->data(), dictionary->size())); + + // ReadAll() synchronously returns OK now. + EXPECT_EQ(net::OK, dictionary->ReadAll(base::BindLambdaForTesting( + [&](int rv) { ASSERT_TRUE(false); }))); +} + +TEST(SharedDictionaryOnDiskTest, AsyncOpenEntrySyncReadData) { + size_t expected_size = kTestData.size(); + net::SHA256HashValue hash({{0x00, 0x01}}); + base::UnguessableToken disk_cache_key_token = + base::UnguessableToken::Create(); + + auto disk_cache = std::make_unique<FakeSharedDictionaryDiskCache>(); + disk_cache->Initialize(); + + disk_cache::EntryResultCallback open_entry_callback; + EXPECT_CALL(*disk_cache->backend(), OpenEntry) + .WillOnce([&](const std::string& key, net::RequestPriority priority, + disk_cache::EntryResultCallback callback) { + open_entry_callback = std::move(callback); + return disk_cache::EntryResult::MakeError(net::ERR_IO_PENDING); + }); + + std::unique_ptr<disk_cache::EntryMock> entry = + std::make_unique<disk_cache::EntryMock>(); + + EXPECT_CALL(*entry, GetDataSize).WillOnce([&](int index) -> int32_t { + return expected_size; + }); + + EXPECT_CALL(*entry, ReadData) + .WillOnce([&](int index, int offset, net::IOBuffer* buf, int buf_len, + net::CompletionOnceCallback callback) -> int { + EXPECT_EQ(1, index); + EXPECT_EQ(0, offset); + EXPECT_EQ(base::checked_cast<int>(expected_size), buf_len); + memcpy(buf->data(), kTestData.c_str(), kTestData.size()); + return base::checked_cast<int>(expected_size); + }); + + auto dictionary = std::make_unique<SharedDictionaryOnDisk>( + expected_size, hash, disk_cache_key_token, disk_cache.get()); + + bool read_all_finished = false; + EXPECT_EQ(net::ERR_IO_PENDING, + dictionary->ReadAll(base::BindLambdaForTesting([&](int rv) { + EXPECT_EQ(net::OK, rv); + read_all_finished = true; + }))); + + ASSERT_TRUE(open_entry_callback); + std::move(open_entry_callback) + .Run(disk_cache::EntryResult::MakeOpened(entry.release())); + EXPECT_TRUE(read_all_finished); + EXPECT_EQ(kTestData, + std::string(dictionary->data()->data(), dictionary->size())); + + // ReadAll() synchronously returns OK now. + EXPECT_EQ(net::OK, dictionary->ReadAll(base::BindLambdaForTesting( + [&](int rv) { ASSERT_TRUE(false); }))); +} + +TEST(SharedDictionaryOnDiskTest, SyncOpenEntrySyncReadData) { + size_t expected_size = kTestData.size(); + net::SHA256HashValue hash({{0x00, 0x01}}); + base::UnguessableToken disk_cache_key_token = + base::UnguessableToken::Create(); + + auto disk_cache = std::make_unique<FakeSharedDictionaryDiskCache>(); + disk_cache->Initialize(); + + std::unique_ptr<disk_cache::EntryMock> entry = + std::make_unique<disk_cache::EntryMock>(); + + EXPECT_CALL(*entry, GetDataSize).WillOnce([&](int index) -> int32_t { + return expected_size; + }); + + EXPECT_CALL(*entry, ReadData) + .WillOnce([&](int index, int offset, net::IOBuffer* buf, int buf_len, + net::CompletionOnceCallback callback) -> int { + EXPECT_EQ(1, index); + EXPECT_EQ(0, offset); + EXPECT_EQ(base::checked_cast<int>(expected_size), buf_len); + memcpy(buf->data(), kTestData.c_str(), kTestData.size()); + return base::checked_cast<int>(expected_size); + }); + + EXPECT_CALL(*disk_cache->backend(), OpenEntry) + .WillOnce([&](const std::string& key, net::RequestPriority priority, + disk_cache::EntryResultCallback callback) { + return disk_cache::EntryResult::MakeOpened(entry.release()); + }); + + auto dictionary = std::make_unique<SharedDictionaryOnDisk>( + expected_size, hash, disk_cache_key_token, disk_cache.get()); + + // ReadAll() synchronously returns OK. + EXPECT_EQ(net::OK, dictionary->ReadAll(base::BindLambdaForTesting( + [&](int rv) { ASSERT_TRUE(false); }))); + EXPECT_EQ(kTestData, + std::string(dictionary->data()->data(), dictionary->size())); +} + +TEST(SharedDictionaryOnDiskTest, AsyncOpenEntryFailure) { + size_t expected_size = kTestData.size(); + net::SHA256HashValue hash({{0x00, 0x01}}); + base::UnguessableToken disk_cache_key_token = + base::UnguessableToken::Create(); + + auto disk_cache = std::make_unique<FakeSharedDictionaryDiskCache>(); + disk_cache->Initialize(); + + disk_cache::EntryResultCallback open_entry_callback; + EXPECT_CALL(*disk_cache->backend(), OpenEntry) + .WillOnce([&](const std::string& key, net::RequestPriority priority, + disk_cache::EntryResultCallback callback) { + open_entry_callback = std::move(callback); + return disk_cache::EntryResult::MakeError(net::ERR_IO_PENDING); + }); + + auto dictionary = std::make_unique<SharedDictionaryOnDisk>( + expected_size, hash, disk_cache_key_token, disk_cache.get()); + bool read_all_finished = false; + EXPECT_EQ(net::ERR_IO_PENDING, + dictionary->ReadAll(base::BindLambdaForTesting([&](int rv) { + EXPECT_EQ(net::ERR_FAILED, rv); + read_all_finished = true; + }))); + + ASSERT_TRUE(open_entry_callback); + std::move(open_entry_callback) + .Run(disk_cache::EntryResult::MakeError(net::ERR_FAILED)); + EXPECT_TRUE(read_all_finished); + + // ReadAll() synchronously returns ERR_FAILED now. + EXPECT_EQ(net::ERR_FAILED, dictionary->ReadAll(base::BindLambdaForTesting( + [&](int rv) { ASSERT_TRUE(false); }))); +} + +TEST(SharedDictionaryOnDiskTest, SyncOpenEntryFailure) { + size_t expected_size = kTestData.size(); + net::SHA256HashValue hash({{0x00, 0x01}}); + base::UnguessableToken disk_cache_key_token = + base::UnguessableToken::Create(); + + auto disk_cache = std::make_unique<FakeSharedDictionaryDiskCache>(); + disk_cache->Initialize(); + + EXPECT_CALL(*disk_cache->backend(), OpenEntry) + .WillOnce([&](const std::string& key, net::RequestPriority priority, + disk_cache::EntryResultCallback callback) { + return disk_cache::EntryResult::MakeError(net::ERR_FAILED); + }); + + auto dictionary = std::make_unique<SharedDictionaryOnDisk>( + expected_size, hash, disk_cache_key_token, disk_cache.get()); + + EXPECT_EQ(net::ERR_FAILED, dictionary->ReadAll(base::BindLambdaForTesting( + [&](int rv) { ASSERT_TRUE(false); }))); +} + +TEST(SharedDictionaryOnDiskTest, AsyncOpenEntryAsyncReadDataFailure) { + size_t expected_size = kTestData.size(); + net::SHA256HashValue hash({{0x00, 0x01}}); + base::UnguessableToken disk_cache_key_token = + base::UnguessableToken::Create(); + + auto disk_cache = std::make_unique<FakeSharedDictionaryDiskCache>(); + disk_cache->Initialize(); + + disk_cache::EntryResultCallback open_entry_callback; + EXPECT_CALL(*disk_cache->backend(), OpenEntry) + .WillOnce([&](const std::string& key, net::RequestPriority priority, + disk_cache::EntryResultCallback callback) { + open_entry_callback = std::move(callback); + return disk_cache::EntryResult::MakeError(net::ERR_IO_PENDING); + }); + + std::unique_ptr<disk_cache::EntryMock> entry = + std::make_unique<disk_cache::EntryMock>(); + net::CompletionOnceCallback read_all_callback; + + EXPECT_CALL(*entry, GetDataSize).WillOnce([&](int index) -> int32_t { + return expected_size; + }); + + EXPECT_CALL(*entry, ReadData) + .WillOnce([&](int index, int offset, net::IOBuffer* buf, int buf_len, + net::CompletionOnceCallback callback) -> int { + EXPECT_EQ(1, index); + EXPECT_EQ(0, offset); + EXPECT_EQ(base::checked_cast<int>(expected_size), buf_len); + read_all_callback = std::move(callback); + return net::ERR_IO_PENDING; + }); + + auto dictionary = std::make_unique<SharedDictionaryOnDisk>( + expected_size, hash, disk_cache_key_token, disk_cache.get()); + + bool read_all_finished = false; + EXPECT_EQ(net::ERR_IO_PENDING, + dictionary->ReadAll(base::BindLambdaForTesting([&](int rv) { + EXPECT_EQ(net::ERR_FAILED, rv); + read_all_finished = true; + }))); + + ASSERT_TRUE(open_entry_callback); + std::move(open_entry_callback) + .Run(disk_cache::EntryResult::MakeOpened(entry.release())); + ASSERT_TRUE(read_all_callback); + std::move(read_all_callback).Run(net::ERR_FAILED); + EXPECT_TRUE(read_all_finished); + + // ReadAll() synchronously returns ERR_FAILED now. + EXPECT_EQ(net::ERR_FAILED, dictionary->ReadAll(base::BindLambdaForTesting( + [&](int rv) { ASSERT_TRUE(false); }))); +} + +TEST(SharedDictionaryOnDiskTest, AsyncOpenEntrySyncReadDataFailure) { + size_t expected_size = kTestData.size(); + net::SHA256HashValue hash({{0x00, 0x01}}); + base::UnguessableToken disk_cache_key_token = + base::UnguessableToken::Create(); + + auto disk_cache = std::make_unique<FakeSharedDictionaryDiskCache>(); + disk_cache->Initialize(); + + disk_cache::EntryResultCallback open_entry_callback; + EXPECT_CALL(*disk_cache->backend(), OpenEntry) + .WillOnce([&](const std::string& key, net::RequestPriority priority, + disk_cache::EntryResultCallback callback) { + open_entry_callback = std::move(callback); + return disk_cache::EntryResult::MakeError(net::ERR_IO_PENDING); + }); + + std::unique_ptr<disk_cache::EntryMock> entry = + std::make_unique<disk_cache::EntryMock>(); + + EXPECT_CALL(*entry, GetDataSize).WillOnce([&](int index) -> int32_t { + return expected_size; + }); + + EXPECT_CALL(*entry, ReadData) + .WillOnce([&](int index, int offset, net::IOBuffer* buf, int buf_len, + net::CompletionOnceCallback callback) -> int { + EXPECT_EQ(1, index); + EXPECT_EQ(0, offset); + EXPECT_EQ(base::checked_cast<int>(expected_size), buf_len); + return net::ERR_FAILED; + }); + + auto dictionary = std::make_unique<SharedDictionaryOnDisk>( + expected_size, hash, disk_cache_key_token, disk_cache.get()); + + bool read_all_finished = false; + EXPECT_EQ(net::ERR_IO_PENDING, + dictionary->ReadAll(base::BindLambdaForTesting([&](int rv) { + EXPECT_EQ(net::ERR_FAILED, rv); + read_all_finished = true; + }))); + + ASSERT_TRUE(open_entry_callback); + std::move(open_entry_callback) + .Run(disk_cache::EntryResult::MakeOpened(entry.release())); + EXPECT_TRUE(read_all_finished); + + // ReadAll() synchronously returns ERR_FAILED now. + EXPECT_EQ(net::ERR_FAILED, dictionary->ReadAll(base::BindLambdaForTesting( + [&](int rv) { ASSERT_TRUE(false); }))); +} +TEST(SharedDictionaryOnDiskTest, SyncOpenEntryAsyncReadDataFailure) { + size_t expected_size = kTestData.size(); + net::SHA256HashValue hash({{0x00, 0x01}}); + base::UnguessableToken disk_cache_key_token = + base::UnguessableToken::Create(); + + auto disk_cache = std::make_unique<FakeSharedDictionaryDiskCache>(); + disk_cache->Initialize(); + + std::unique_ptr<disk_cache::EntryMock> entry = + std::make_unique<disk_cache::EntryMock>(); + net::CompletionOnceCallback read_all_callback; + + EXPECT_CALL(*entry, GetDataSize).WillOnce([&](int index) -> int32_t { + return expected_size; + }); + + EXPECT_CALL(*entry, ReadData) + .WillOnce([&](int index, int offset, net::IOBuffer* buf, int buf_len, + net::CompletionOnceCallback callback) -> int { + EXPECT_EQ(1, index); + EXPECT_EQ(0, offset); + EXPECT_EQ(base::checked_cast<int>(expected_size), buf_len); + read_all_callback = std::move(callback); + return net::ERR_IO_PENDING; + }); + + EXPECT_CALL(*disk_cache->backend(), OpenEntry) + .WillOnce([&](const std::string& key, net::RequestPriority priority, + disk_cache::EntryResultCallback callback) { + return disk_cache::EntryResult::MakeOpened(entry.release()); + }); + + auto dictionary = std::make_unique<SharedDictionaryOnDisk>( + expected_size, hash, disk_cache_key_token, disk_cache.get()); + + bool read_all_finished = false; + EXPECT_EQ(net::ERR_IO_PENDING, + dictionary->ReadAll(base::BindLambdaForTesting([&](int rv) { + EXPECT_EQ(net::ERR_FAILED, rv); + read_all_finished = true; + }))); + + ASSERT_TRUE(read_all_callback); + std::move(read_all_callback).Run(net::ERR_FAILED); + EXPECT_TRUE(read_all_finished); + + // ReadAll() synchronously returns ERR_FAILED now. + EXPECT_EQ(net::ERR_FAILED, dictionary->ReadAll(base::BindLambdaForTesting( + [&](int rv) { ASSERT_TRUE(false); }))); +} + +TEST(SharedDictionaryOnDiskTest, SyncOpenEntrySyncReadDataFailure) { + size_t expected_size = kTestData.size(); + net::SHA256HashValue hash({{0x00, 0x01}}); + base::UnguessableToken disk_cache_key_token = + base::UnguessableToken::Create(); + + auto disk_cache = std::make_unique<FakeSharedDictionaryDiskCache>(); + disk_cache->Initialize(); + + std::unique_ptr<disk_cache::EntryMock> entry = + std::make_unique<disk_cache::EntryMock>(); + + EXPECT_CALL(*entry, GetDataSize).WillOnce([&](int index) -> int32_t { + return expected_size; + }); + + EXPECT_CALL(*entry, ReadData) + .WillOnce([&](int index, int offset, net::IOBuffer* buf, int buf_len, + net::CompletionOnceCallback callback) -> int { + EXPECT_EQ(1, index); + EXPECT_EQ(0, offset); + EXPECT_EQ(base::checked_cast<int>(expected_size), buf_len); + return net::ERR_FAILED; + }); + + EXPECT_CALL(*disk_cache->backend(), OpenEntry) + .WillOnce([&](const std::string& key, net::RequestPriority priority, + disk_cache::EntryResultCallback callback) { + return disk_cache::EntryResult::MakeOpened(entry.release()); + }); + + auto dictionary = std::make_unique<SharedDictionaryOnDisk>( + expected_size, hash, disk_cache_key_token, disk_cache.get()); + + // ReadAll() synchronously returns ERR_FAILED. + EXPECT_EQ(net::ERR_FAILED, dictionary->ReadAll(base::BindLambdaForTesting( + [&](int rv) { ASSERT_TRUE(false); }))); +} + +TEST(SharedDictionaryOnDiskTest, UnexpectedDataSize) { + size_t expected_size = kTestData.size(); + net::SHA256HashValue hash({{0x00, 0x01}}); + base::UnguessableToken disk_cache_key_token = + base::UnguessableToken::Create(); + + auto disk_cache = std::make_unique<FakeSharedDictionaryDiskCache>(); + disk_cache->Initialize(); + + disk_cache::EntryResultCallback open_entry_callback; + EXPECT_CALL(*disk_cache->backend(), OpenEntry) + .WillOnce([&](const std::string& key, net::RequestPriority priority, + disk_cache::EntryResultCallback callback) { + open_entry_callback = std::move(callback); + return disk_cache::EntryResult::MakeError(net::ERR_IO_PENDING); + }); + + std::unique_ptr<disk_cache::EntryMock> entry = + std::make_unique<disk_cache::EntryMock>(); + + EXPECT_CALL(*entry, GetDataSize).WillOnce([&](int index) -> int32_t { + return expected_size + 1; // Returns wrong size. + }); + + auto dictionary = std::make_unique<SharedDictionaryOnDisk>( + expected_size, hash, disk_cache_key_token, disk_cache.get()); + + bool read_all_finished = false; + EXPECT_EQ(net::ERR_IO_PENDING, + dictionary->ReadAll(base::BindLambdaForTesting([&](int rv) { + EXPECT_EQ(net::ERR_FAILED, rv); + read_all_finished = true; + }))); + + ASSERT_TRUE(open_entry_callback); + std::move(open_entry_callback) + .Run(disk_cache::EntryResult::MakeOpened(entry.release())); + EXPECT_TRUE(read_all_finished); +} + +} // namespace + +} // namespace network
diff --git a/testing/buildbot/PRESUBMIT.py b/testing/buildbot/PRESUBMIT.py index be24cc0..f2c1f27 100644 --- a/testing/buildbot/PRESUBMIT.py +++ b/testing/buildbot/PRESUBMIT.py
@@ -56,6 +56,14 @@ def CheckTests(input_api, output_api): + for f in input_api.AffectedFiles(): + # If the only files changed here match //testing/buildbot/*.(pyl|json), + # then we can assume the unit tests are unaffected. + if (len(f.LocalPath().split(input_api.os_path.sep)) != 3 + or not f.LocalPath().endswith(('.json', '.pyl'))): + break + else: + return [] glob = input_api.os_path.join(input_api.PresubmitLocalPath(), '*test.py') tests = input_api.canned_checks.GetUnitTests(input_api, output_api,
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json index f2bd1c8..fe543860 100644 --- a/testing/buildbot/chromium.chromiumos.json +++ b/testing/buildbot/chromium.chromiumos.json
@@ -5734,9 +5734,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5758.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5759.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 115.0.5758.0", + "description": "Run with ash-chrome version 115.0.5759.0", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -5747,8 +5747,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v115.0.5758.0", - "revision": "version:115.0.5758.0" + "location": "lacros_version_skew_tests_v115.0.5759.0", + "revision": "version:115.0.5759.0" } ], "dimension_sets": [ @@ -5899,9 +5899,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5758.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5759.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 115.0.5758.0", + "description": "Run with ash-chrome version 115.0.5759.0", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -5912,8 +5912,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v115.0.5758.0", - "revision": "version:115.0.5758.0" + "location": "lacros_version_skew_tests_v115.0.5759.0", + "revision": "version:115.0.5759.0" } ], "dimension_sets": [ @@ -6046,9 +6046,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5758.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5759.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 115.0.5758.0", + "description": "Run with ash-chrome version 115.0.5759.0", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -6059,8 +6059,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v115.0.5758.0", - "revision": "version:115.0.5758.0" + "location": "lacros_version_skew_tests_v115.0.5759.0", + "revision": "version:115.0.5759.0" } ], "dimension_sets": [
diff --git a/testing/buildbot/chromium.coverage.json b/testing/buildbot/chromium.coverage.json index 2f374f5..a26bef8 100644 --- a/testing/buildbot/chromium.coverage.json +++ b/testing/buildbot/chromium.coverage.json
@@ -25539,9 +25539,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5758.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5759.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 115.0.5758.0", + "description": "Run with ash-chrome version 115.0.5759.0", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -25552,8 +25552,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v115.0.5758.0", - "revision": "version:115.0.5758.0" + "location": "lacros_version_skew_tests_v115.0.5759.0", + "revision": "version:115.0.5759.0" } ], "dimension_sets": [ @@ -25704,9 +25704,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5758.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5759.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 115.0.5758.0", + "description": "Run with ash-chrome version 115.0.5759.0", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -25717,8 +25717,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v115.0.5758.0", - "revision": "version:115.0.5758.0" + "location": "lacros_version_skew_tests_v115.0.5759.0", + "revision": "version:115.0.5759.0" } ], "dimension_sets": [ @@ -25851,9 +25851,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5758.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5759.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 115.0.5758.0", + "description": "Run with ash-chrome version 115.0.5759.0", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -25864,8 +25864,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v115.0.5758.0", - "revision": "version:115.0.5758.0" + "location": "lacros_version_skew_tests_v115.0.5759.0", + "revision": "version:115.0.5759.0" } ], "dimension_sets": [
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index def565e..dfb231e 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -41594,9 +41594,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5758.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5759.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 115.0.5758.0", + "description": "Run with ash-chrome version 115.0.5759.0", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -41606,8 +41606,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v115.0.5758.0", - "revision": "version:115.0.5758.0" + "location": "lacros_version_skew_tests_v115.0.5759.0", + "revision": "version:115.0.5759.0" } ], "dimension_sets": [ @@ -41759,9 +41759,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5758.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5759.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 115.0.5758.0", + "description": "Run with ash-chrome version 115.0.5759.0", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -41771,8 +41771,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v115.0.5758.0", - "revision": "version:115.0.5758.0" + "location": "lacros_version_skew_tests_v115.0.5759.0", + "revision": "version:115.0.5759.0" } ], "dimension_sets": [ @@ -41906,9 +41906,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5758.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5759.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 115.0.5758.0", + "description": "Run with ash-chrome version 115.0.5759.0", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -41918,8 +41918,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v115.0.5758.0", - "revision": "version:115.0.5758.0" + "location": "lacros_version_skew_tests_v115.0.5759.0", + "revision": "version:115.0.5759.0" } ], "dimension_sets": [ @@ -43383,9 +43383,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5758.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5759.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 115.0.5758.0", + "description": "Run with ash-chrome version 115.0.5759.0", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -43395,8 +43395,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v115.0.5758.0", - "revision": "version:115.0.5758.0" + "location": "lacros_version_skew_tests_v115.0.5759.0", + "revision": "version:115.0.5759.0" } ], "dimension_sets": [ @@ -43548,9 +43548,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5758.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5759.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 115.0.5758.0", + "description": "Run with ash-chrome version 115.0.5759.0", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -43560,8 +43560,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v115.0.5758.0", - "revision": "version:115.0.5758.0" + "location": "lacros_version_skew_tests_v115.0.5759.0", + "revision": "version:115.0.5759.0" } ], "dimension_sets": [ @@ -43695,9 +43695,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5758.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5759.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 115.0.5758.0", + "description": "Run with ash-chrome version 115.0.5759.0", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -43707,8 +43707,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v115.0.5758.0", - "revision": "version:115.0.5758.0" + "location": "lacros_version_skew_tests_v115.0.5759.0", + "revision": "version:115.0.5759.0" } ], "dimension_sets": [ @@ -44443,9 +44443,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5758.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5759.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 115.0.5758.0", + "description": "Run with ash-chrome version 115.0.5759.0", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -44455,8 +44455,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v115.0.5758.0", - "revision": "version:115.0.5758.0" + "location": "lacros_version_skew_tests_v115.0.5759.0", + "revision": "version:115.0.5759.0" } ], "dimension_sets": [
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json index 4590e50..896e317 100644 --- a/testing/buildbot/chromium.memory.json +++ b/testing/buildbot/chromium.memory.json
@@ -9460,7 +9460,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "os": "Ubuntu-18.04" + "os": "Ubuntu-22.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -18116,12 +18116,12 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5758.0/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5759.0/test_ash_chrome", "--test-launcher-print-test-stdio=always", "--combine-ash-logs-on-bots", "--asan-symbolize-output" ], - "description": "Run with ash-chrome version 115.0.5758.0", + "description": "Run with ash-chrome version 115.0.5759.0", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -18132,8 +18132,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v115.0.5758.0", - "revision": "version:115.0.5758.0" + "location": "lacros_version_skew_tests_v115.0.5759.0", + "revision": "version:115.0.5759.0" } ], "dimension_sets": [ @@ -18301,12 +18301,12 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5758.0/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5759.0/test_ash_chrome", "--test-launcher-print-test-stdio=always", "--combine-ash-logs-on-bots", "--asan-symbolize-output" ], - "description": "Run with ash-chrome version 115.0.5758.0", + "description": "Run with ash-chrome version 115.0.5759.0", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -18317,8 +18317,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v115.0.5758.0", - "revision": "version:115.0.5758.0" + "location": "lacros_version_skew_tests_v115.0.5759.0", + "revision": "version:115.0.5759.0" } ], "dimension_sets": [ @@ -18463,12 +18463,12 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5758.0/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5759.0/test_ash_chrome", "--test-launcher-print-test-stdio=always", "--combine-ash-logs-on-bots", "--asan-symbolize-output" ], - "description": "Run with ash-chrome version 115.0.5758.0", + "description": "Run with ash-chrome version 115.0.5759.0", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -18479,8 +18479,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v115.0.5758.0", - "revision": "version:115.0.5758.0" + "location": "lacros_version_skew_tests_v115.0.5759.0", + "revision": "version:115.0.5759.0" } ], "dimension_sets": [
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl index 549ecf8..6a9f1b19 100644 --- a/testing/buildbot/test_suite_exceptions.pyl +++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -2620,6 +2620,12 @@ 'Linux TSan Tests': { # These are slow on the TSan bots for some reason, crbug.com/1257927 'swarming': { + 'dimension_sets': [ + { + # TODO(crbug.com/1412588): Move the remainder to Jammy. + 'os': 'Ubuntu-22.04', + }, + ], 'shards': 32, # Adjusted for testing, see https://crbug.com/1179567 }, },
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl index adba743d..f0e58c2 100644 --- a/testing/buildbot/variants.pyl +++ b/testing/buildbot/variants.pyl
@@ -22,16 +22,16 @@ }, 'LACROS_VERSION_SKEW_CANARY': { 'args': [ - '--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5758.0/test_ash_chrome', + '--ash-chrome-path-override=../../lacros_version_skew_tests_v115.0.5759.0/test_ash_chrome', ], - 'description': 'Run with ash-chrome version 115.0.5758.0', + 'description': 'Run with ash-chrome version 115.0.5759.0', 'identifier': 'Lacros version skew testing ash canary', 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip', - 'location': 'lacros_version_skew_tests_v115.0.5758.0', - 'revision': 'version:115.0.5758.0', + 'location': 'lacros_version_skew_tests_v115.0.5759.0', + 'revision': 'version:115.0.5759.0', }, ], },
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 2af418c3..1d34fd9 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -3842,18 +3842,9 @@ ], "experiments": [ { - "name": "EnabledGroupOnlyBlueDotPromoEnabled2023_02_09", + "name": "EnabledGroupAllDBPromosEnabled2023_05_08", "params": { - "user-group": "only-blue-dot-promo-enabled" - }, - "enable_features": [ - "DefaultBrowserBlueDotPromo" - ] - }, - { - "name": "ControlGroupAllDBPromosDisabled2023_02_09", - "params": { - "user-group": "all-db-promos-disabled" + "user-group": "all-db-promos-enabled" }, "enable_features": [ "DefaultBrowserBlueDotPromo" @@ -4344,27 +4335,6 @@ ] } ], - "DisableCanvasOverdrawOptimization": [ - { - "platforms": [ - "fuchsia", - "linux", - "mac", - "windows", - "chromeos", - "chromeos_lacros", - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "DisableCanvasOverdrawOptimization" - ] - } - ] - } - ], "DisableGles2ForOopR": [ { "platforms": [ @@ -4854,6 +4824,26 @@ ] } ], + "EnableCrossSiteFlagNetworkIsolationKey": [ + { + "platforms": [ + "android", + "chromeos", + "chromeos_lacros", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "EnableCrossSiteFlagNetworkIsolationKey" + ] + } + ] + } + ], "EnableEncryptedReportingClientForUpload": [ { "platforms": [ @@ -4906,6 +4896,22 @@ ] } ], + "EnableMSAAOnNewIntelGPUs": [ + { + "platforms": [ + "windows", + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "EnableMSAAOnNewIntelGPUs" + ] + } + ] + } + ], "EnableOOPVDDisableVAAPILock": [ { "platforms": [ @@ -8247,6 +8253,31 @@ ] } ], + "MemoryCacheStrongReference": [ + { + "platforms": [ + "android", + "chromeos", + "chromeos_lacros", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "AllResourceTypesAllPages_20230426", + "enable_features": [ + "MemoryCacheStrongReference" + ], + "disable_features": [ + "MemoryCacheStrongReferenceFilterImages", + "MemoryCacheStrongReferenceFilterScripts", + "MemoryCacheStrongReferenceSingleUnload" + ] + } + ] + } + ], "MerchantWidePromotion": [ { "platforms": [ @@ -10961,6 +10992,21 @@ ] } ], + "ReduceToolbarUpdatesForSameDocNavigations": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "ReduceToolbarUpdatesForSameDocNavigations" + ] + } + ] + } + ], "ReduceUserAgentAndroidVersionDeviceModel": [ { "platforms": [
diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD.gn index 852f7127..bb63c74 100644 --- a/third_party/android_deps/BUILD.gn +++ b/third_party/android_deps/BUILD.gn
@@ -175,8 +175,6 @@ jar_path = "libs/com_google_code_findbugs_jsr305/jsr305-3.0.2.jar" output_name = "com_google_code_findbugs_jsr305" supports_android = true - - # Needed to break dependency cycle for errorprone_plugin_java. enable_bytecode_checks = false } @@ -185,6 +183,7 @@ jar_path = "libs/com_google_code_gson_gson/gson-2.9.0.jar" output_name = "com_google_code_gson_gson" supports_android = true + enable_bytecode_checks = false } # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. @@ -192,6 +191,7 @@ jar_path = "libs/com_google_dagger_dagger/dagger-2.30.jar" output_name = "com_google_dagger_dagger" supports_android = true + enable_bytecode_checks = false deps = [ ":javax_inject_javax_inject_java" ] } @@ -228,11 +228,9 @@ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("com_google_errorprone_error_prone_annotations_java") { - jar_path = "libs/com_google_errorprone_error_prone_annotations/error_prone_annotations-2.14.0.jar" + jar_path = "libs/com_google_errorprone_error_prone_annotations/error_prone_annotations-2.18.0.jar" output_name = "com_google_errorprone_error_prone_annotations" supports_android = true - - # Needed to break dependency cycle for errorprone_plugin_java. enable_bytecode_checks = false } @@ -287,14 +285,12 @@ jar_path = "libs/com_google_guava_failureaccess/failureaccess-1.0.1.jar" output_name = "com_google_guava_failureaccess" supports_android = true - - # Needed to break dependency cycle for errorprone_plugin_java. enable_bytecode_checks = false } # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("com_google_guava_guava_java") { - jar_path = "libs/com_google_guava_guava/guava-31.0.1-jre.jar" + jar_path = "libs/com_google_guava_guava/guava-31.1-jre.jar" output_name = "com_google_guava_guava" enable_bytecode_checks = false deps = [ @@ -317,8 +313,6 @@ jar_path = "libs/com_google_guava_listenablefuture/listenablefuture-1.0.jar" output_name = "com_google_guava_listenablefuture" supports_android = true - - # Needed to break dependency cycle for errorprone_plugin_java. enable_bytecode_checks = false } @@ -328,8 +322,6 @@ "libs/com_google_j2objc_j2objc_annotations/j2objc-annotations-1.3.jar" output_name = "com_google_j2objc_j2objc_annotations" supports_android = true - - # Needed to break dependency cycle for errorprone_plugin_java. enable_bytecode_checks = false } @@ -345,6 +337,7 @@ jar_path = "libs/javax_annotation_jsr250_api/jsr250-api-1.0.jar" output_name = "javax_annotation_jsr250_api" supports_android = true + enable_bytecode_checks = false } # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. @@ -352,6 +345,7 @@ jar_path = "libs/javax_inject_javax_inject/javax.inject-1.jar" output_name = "javax_inject_javax_inject" supports_android = true + enable_bytecode_checks = false } # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. @@ -359,6 +353,7 @@ jar_path = "libs/org_checkerframework_checker_compat_qual/checker-compat-qual-2.5.5.jar" output_name = "org_checkerframework_checker_compat_qual" supports_android = true + enable_bytecode_checks = false } # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. @@ -366,25 +361,22 @@ jar_path = "libs/org_checkerframework_checker_qual/checker-qual-3.25.0.jar" output_name = "org_checkerframework_checker_qual" supports_android = true - - # Needed to break dependency cycle for errorprone_plugin_java. enable_bytecode_checks = false } # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_ow2_asm_asm_java") { - jar_path = "libs/org_ow2_asm_asm/asm-9.2.jar" + jar_path = "libs/org_ow2_asm_asm/asm-9.5.jar" output_name = "org_ow2_asm_asm" enable_bytecode_checks = false } # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_ow2_asm_asm_commons_java") { - jar_path = "libs/org_ow2_asm_asm_commons/asm-commons-9.2.jar" + jar_path = "libs/org_ow2_asm_asm_commons/asm-commons-9.5.jar" output_name = "org_ow2_asm_asm_commons" enable_bytecode_checks = false deps = [ - ":org_ow2_asm_asm_analysis_java", ":org_ow2_asm_asm_java", ":org_ow2_asm_asm_tree_java", ] @@ -392,7 +384,7 @@ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_ow2_asm_asm_tree_java") { - jar_path = "libs/org_ow2_asm_asm_tree/asm-tree-9.2.jar" + jar_path = "libs/org_ow2_asm_asm_tree/asm-tree-9.5.jar" output_name = "org_ow2_asm_asm_tree" enable_bytecode_checks = false deps = [ ":org_ow2_asm_asm_java" ] @@ -400,7 +392,7 @@ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_ow2_asm_asm_util_java") { - jar_path = "libs/org_ow2_asm_asm_util/asm-util-9.2.jar" + jar_path = "libs/org_ow2_asm_asm_util/asm-util-9.5.jar" output_name = "org_ow2_asm_asm_util" enable_bytecode_checks = false deps = [ @@ -459,7 +451,7 @@ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("com_google_auto_value_auto_value_annotations_java") { - jar_path = "libs/com_google_auto_value_auto_value_annotations/auto-value-annotations-1.9.jar" + jar_path = "libs/com_google_auto_value_auto_value_annotations/auto-value-annotations-1.10.1.jar" output_name = "com_google_auto_value_auto_value_annotations" enable_bytecode_checks = false @@ -651,7 +643,7 @@ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_ow2_asm_asm_analysis_java") { - jar_path = "libs/org_ow2_asm_asm_analysis/asm-analysis-9.2.jar" + jar_path = "libs/org_ow2_asm_asm_analysis/asm-analysis-9.5.jar" output_name = "org_ow2_asm_asm_analysis" enable_bytecode_checks = false @@ -684,6 +676,7 @@ jar_path = "libs/android_arch_lifecycle_common/common-1.1.1.jar" output_name = "android_arch_lifecycle_common" supports_android = true + enable_bytecode_checks = false deps = [ ":com_android_support_support_annotations_java" ] } @@ -692,6 +685,7 @@ jar_path = "libs/android_arch_lifecycle_common_java8/common-java8-1.1.1.jar" output_name = "android_arch_lifecycle_common_java8" supports_android = true + enable_bytecode_checks = false deps = [ ":android_arch_lifecycle_common_java", ":com_android_support_support_annotations_java", @@ -702,6 +696,7 @@ android_aar_prebuilt("android_arch_lifecycle_runtime_java") { aar_path = "libs/android_arch_lifecycle_runtime/runtime-1.1.1.aar" info_path = "libs/android_arch_lifecycle_runtime/android_arch_lifecycle_runtime.info" + enable_bytecode_checks = false deps = [ ":android_arch_core_common_java", ":android_arch_lifecycle_common_java", @@ -713,6 +708,7 @@ android_aar_prebuilt("android_arch_lifecycle_viewmodel_java") { aar_path = "libs/android_arch_lifecycle_viewmodel/viewmodel-1.1.1.aar" info_path = "libs/android_arch_lifecycle_viewmodel/android_arch_lifecycle_viewmodel.info" + enable_bytecode_checks = false deps = [ ":com_android_support_support_annotations_java" ] } @@ -720,6 +716,7 @@ android_aar_prebuilt("com_android_support_asynclayoutinflater_java") { aar_path = "libs/com_android_support_asynclayoutinflater/asynclayoutinflater-28.0.0.aar" info_path = "libs/com_android_support_asynclayoutinflater/com_android_support_asynclayoutinflater.info" + enable_bytecode_checks = false deps = [ ":com_android_support_support_annotations_java", ":com_android_support_support_compat_java", @@ -732,6 +729,7 @@ jar_path = "libs/com_android_support_collections/collections-28.0.0.jar" output_name = "com_android_support_collections" supports_android = true + enable_bytecode_checks = false deps = [ ":com_android_support_support_annotations_java" ] } @@ -739,6 +737,7 @@ android_aar_prebuilt("com_android_support_coordinatorlayout_java") { aar_path = "libs/com_android_support_coordinatorlayout/coordinatorlayout-28.0.0.aar" info_path = "libs/com_android_support_coordinatorlayout/com_android_support_coordinatorlayout.info" + enable_bytecode_checks = false deps = [ ":com_android_support_customview_java", ":com_android_support_support_annotations_java", @@ -754,6 +753,7 @@ android_aar_prebuilt("com_android_support_customview_java") { aar_path = "libs/com_android_support_customview/customview-28.0.0.aar" info_path = "libs/com_android_support_customview/com_android_support_customview.info" + enable_bytecode_checks = false deps = [ ":com_android_support_support_annotations_java", ":com_android_support_support_compat_java", @@ -766,6 +766,7 @@ aar_path = "libs/com_android_support_design/design-28.0.0.aar" info_path = "libs/com_android_support_design/com_android_support_design.info" + enable_bytecode_checks = false deps = [ ":com_android_support_appcompat_v7_java", ":com_android_support_cardview_v7_java", @@ -784,6 +785,7 @@ android_aar_prebuilt("com_android_support_drawerlayout_java") { aar_path = "libs/com_android_support_drawerlayout/drawerlayout-28.0.0.aar" info_path = "libs/com_android_support_drawerlayout/com_android_support_drawerlayout.info" + enable_bytecode_checks = false deps = [ ":com_android_support_customview_java", ":com_android_support_support_annotations_java", @@ -796,6 +798,7 @@ android_aar_prebuilt("com_android_support_interpolator_java") { aar_path = "libs/com_android_support_interpolator/interpolator-28.0.0.aar" info_path = "libs/com_android_support_interpolator/com_android_support_interpolator.info" + enable_bytecode_checks = false deps = [ ":com_android_support_support_annotations_java" ] resource_overlay = true } @@ -804,6 +807,7 @@ android_aar_prebuilt("com_android_support_localbroadcastmanager_java") { aar_path = "libs/com_android_support_localbroadcastmanager/localbroadcastmanager-28.0.0.aar" info_path = "libs/com_android_support_localbroadcastmanager/com_android_support_localbroadcastmanager.info" + enable_bytecode_checks = false deps = [ ":com_android_support_support_annotations_java" ] resource_overlay = true } @@ -813,6 +817,7 @@ aar_path = "libs/com_android_support_multidex/multidex-1.0.0.aar" info_path = "libs/com_android_support_multidex/com_android_support_multidex.info" + enable_bytecode_checks = false resource_overlay = true } @@ -821,6 +826,7 @@ jar_path = "libs/com_android_support_support_annotations/support-annotations-28.0.0.jar" output_name = "com_android_support_support_annotations" supports_android = true + enable_bytecode_checks = false } # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. @@ -828,6 +834,7 @@ aar_path = "libs/com_android_support_support_compat/support-compat-28.0.0.aar" info_path = "libs/com_android_support_support_compat/com_android_support_support_compat.info" + enable_bytecode_checks = false deps = [ ":android_arch_lifecycle_runtime_java", ":com_android_support_collections_java", @@ -854,6 +861,7 @@ aar_path = "libs/com_android_support_support_core_ui/support-core-ui-28.0.0.aar" info_path = "libs/com_android_support_support_core_ui/com_android_support_support_core_ui.info" + enable_bytecode_checks = false deps = [ ":com_android_support_asynclayoutinflater_java", ":com_android_support_coordinatorlayout_java", @@ -875,6 +883,7 @@ android_aar_prebuilt("com_android_support_support_core_utils_java") { aar_path = "libs/com_android_support_support_core_utils/support-core-utils-28.0.0.aar" info_path = "libs/com_android_support_support_core_utils/com_android_support_support_core_utils.info" + enable_bytecode_checks = false deps = [ ":com_android_support_documentfile_java", ":com_android_support_loader_java", @@ -891,6 +900,7 @@ aar_path = "libs/com_android_support_support_fragment/support-fragment-28.0.0.aar" info_path = "libs/com_android_support_support_fragment/com_android_support_support_fragment.info" + enable_bytecode_checks = false deps = [ ":android_arch_lifecycle_viewmodel_java", ":com_android_support_loader_java", @@ -906,6 +916,7 @@ android_aar_prebuilt("com_android_support_support_v4_java") { aar_path = "libs/com_android_support_support_v4/support-v4-28.0.0.aar" info_path = "libs/com_android_support_support_v4/com_android_support_support_v4.info" + enable_bytecode_checks = false deps = [ ":com_android_support_support_compat_java", ":com_android_support_support_core_ui_java", @@ -920,6 +931,7 @@ android_aar_prebuilt("com_android_support_swiperefreshlayout_java") { aar_path = "libs/com_android_support_swiperefreshlayout/swiperefreshlayout-28.0.0.aar" info_path = "libs/com_android_support_swiperefreshlayout/com_android_support_swiperefreshlayout.info" + enable_bytecode_checks = false deps = [ ":com_android_support_interpolator_java", ":com_android_support_support_annotations_java", @@ -933,6 +945,7 @@ aar_path = "libs/com_android_support_viewpager/viewpager-28.0.0.aar" info_path = "libs/com_android_support_viewpager/com_android_support_viewpager.info" + enable_bytecode_checks = false deps = [ ":com_android_support_customview_java", ":com_android_support_support_annotations_java", @@ -946,6 +959,7 @@ "com_google_android_apps_common_testing_accessibility_framework_accessibility_test_framework_java") { aar_path = "libs/com_google_android_apps_common_testing_accessibility_framework_accessibility_test_framework/accessibility-test-framework-4.0.0.aar" info_path = "libs/com_google_android_apps_common_testing_accessibility_framework_accessibility_test_framework/com_google_android_accessibility_test_framework.info" + enable_bytecode_checks = false testonly = true deps = [ ":com_google_errorprone_error_prone_annotations_java", @@ -965,6 +979,7 @@ android_aar_prebuilt("google_play_services_auth_java") { aar_path = "libs/com_google_android_gms_play_services_auth/play-services-auth-20.1.0.aar" info_path = "libs/com_google_android_gms_play_services_auth/com_google_android_gms_play_services_auth.info" + enable_bytecode_checks = false deps = [ ":google_play_services_auth_api_phone_java", ":google_play_services_auth_base_java", @@ -980,6 +995,7 @@ android_aar_prebuilt("google_play_services_auth_api_phone_java") { aar_path = "libs/com_google_android_gms_play_services_auth_api_phone/play-services-auth-api-phone-18.0.1.aar" info_path = "libs/com_google_android_gms_play_services_auth_api_phone/com_google_android_gms_play_services_auth_api_phone.info" + enable_bytecode_checks = false deps = [ ":google_play_services_base_java", ":google_play_services_basement_java", @@ -991,6 +1007,7 @@ android_aar_prebuilt("google_play_services_auth_base_java") { aar_path = "libs/com_google_android_gms_play_services_auth_base/play-services-auth-base-18.0.2.aar" info_path = "libs/com_google_android_gms_play_services_auth_base/com_google_android_gms_play_services_auth_base.info" + enable_bytecode_checks = false deps = [ ":google_play_services_base_java", ":google_play_services_basement_java", @@ -1003,6 +1020,7 @@ android_aar_prebuilt("google_play_services_base_java") { aar_path = "libs/com_google_android_gms_play_services_base/play-services-base-18.0.1.aar" info_path = "libs/com_google_android_gms_play_services_base/com_google_android_gms_play_services_base.info" + enable_bytecode_checks = false deps = [ ":google_play_services_basement_java", ":google_play_services_tasks_java", @@ -1018,6 +1036,7 @@ android_aar_prebuilt("google_play_services_basement_java") { aar_path = "libs/com_google_android_gms_play_services_basement/play-services-basement-18.1.0.aar" info_path = "libs/com_google_android_gms_play_services_basement/com_google_android_gms_play_services_basement.info" + enable_bytecode_checks = false deps = [ "//third_party/androidx:androidx_collection_collection_java", "//third_party/androidx:androidx_core_core_java", @@ -1043,6 +1062,7 @@ android_aar_prebuilt("google_play_services_cast_java") { aar_path = "libs/com_google_android_gms_play_services_cast/play-services-cast-17.0.0.aar" info_path = "libs/com_google_android_gms_play_services_cast/com_google_android_gms_play_services_cast.info" + enable_bytecode_checks = false deps = [ ":google_play_services_base_java", ":google_play_services_basement_java", @@ -1057,6 +1077,7 @@ android_aar_prebuilt("google_play_services_cast_framework_java") { aar_path = "libs/com_google_android_gms_play_services_cast_framework/play-services-cast-framework-17.0.0.aar" info_path = "libs/com_google_android_gms_play_services_cast_framework/com_google_android_gms_play_services_cast_framework.info" + enable_bytecode_checks = false deps = [ ":google_play_services_base_java", ":google_play_services_basement_java", @@ -1075,6 +1096,7 @@ android_aar_prebuilt("google_play_services_gcm_java") { aar_path = "libs/com_google_android_gms_play_services_gcm/play-services-gcm-17.0.0.aar" info_path = "libs/com_google_android_gms_play_services_gcm/com_google_android_gms_play_services_gcm.info" + enable_bytecode_checks = false deps = [ ":google_play_services_base_java", ":google_play_services_basement_java", @@ -1090,6 +1112,7 @@ android_aar_prebuilt("google_play_services_iid_java") { aar_path = "libs/com_google_android_gms_play_services_iid/play-services-iid-17.0.0.aar" info_path = "libs/com_google_android_gms_play_services_iid/com_google_android_gms_play_services_iid.info" + enable_bytecode_checks = false deps = [ ":google_play_services_base_java", ":google_play_services_basement_java", @@ -1104,6 +1127,7 @@ android_aar_prebuilt("google_play_services_instantapps_java") { aar_path = "libs/com_google_android_gms_play_services_instantapps/play-services-instantapps-18.0.1.aar" info_path = "libs/com_google_android_gms_play_services_instantapps/com_google_android_gms_play_services_instantapps.info" + enable_bytecode_checks = false deps = [ ":google_play_services_base_java", ":google_play_services_basement_java", @@ -1115,6 +1139,7 @@ android_aar_prebuilt("google_play_services_location_java") { aar_path = "libs/com_google_android_gms_play_services_location/play-services-location-19.0.1.aar" info_path = "libs/com_google_android_gms_play_services_location/com_google_android_gms_play_services_location.info" + enable_bytecode_checks = false deps = [ ":google_play_services_base_java", ":google_play_services_basement_java", @@ -1127,6 +1152,7 @@ android_aar_prebuilt("google_play_services_tasks_java") { aar_path = "libs/com_google_android_gms_play_services_tasks/play-services-tasks-18.0.2.aar" info_path = "libs/com_google_android_gms_play_services_tasks/com_google_android_gms_play_services_tasks.info" + enable_bytecode_checks = false deps = [ ":google_play_services_basement_java" ] } @@ -1134,6 +1160,7 @@ android_aar_prebuilt("google_play_services_vision_java") { aar_path = "libs/com_google_android_gms_play_services_vision/play-services-vision-20.1.3.aar" info_path = "libs/com_google_android_gms_play_services_vision/com_google_android_gms_play_services_vision.info" + enable_bytecode_checks = false deps = [ ":google_play_services_base_java", ":google_play_services_basement_java", @@ -1145,6 +1172,7 @@ android_aar_prebuilt("google_play_services_vision_common_java") { aar_path = "libs/com_google_android_gms_play_services_vision_common/play-services-vision-common-19.1.3.aar" info_path = "libs/com_google_android_gms_play_services_vision_common/com_google_android_gms_play_services_vision_common.info" + enable_bytecode_checks = false deps = [ ":google_play_services_base_java", ":google_play_services_basement_java", @@ -1159,6 +1187,7 @@ aar_path = "libs/com_google_android_material_material/material-1.7.0-alpha02.aar" info_path = "libs/com_google_android_material_material/com_google_android_material_material.info" + enable_bytecode_checks = false # Target is swapped out when internal code is enabled. # Please depend on //third_party/android_deps:material_design_java instead. @@ -1181,9 +1210,6 @@ "//third_party/androidx:androidx_viewpager2_viewpager2_java", ] - # Needed until next material update, see crbug.com/1349521. - enable_bytecode_checks = false - # Reduce binary size. https:crbug.com/954584 ignore_proguard_configs = true proguard_configs = [ "material_design.flags" ] @@ -1203,6 +1229,7 @@ android_aar_prebuilt("com_google_android_play_feature_delivery_java") { aar_path = "libs/com_google_android_play_feature_delivery/feature-delivery-2.0.1.aar" info_path = "libs/com_google_android_play_feature_delivery/com_google_android_play_feature_delivery.info" + enable_bytecode_checks = false deps = [ ":com_google_android_play_core_common_java", ":google_play_services_basement_java", @@ -1214,6 +1241,7 @@ android_aar_prebuilt("google_firebase_firebase_iid_java") { aar_path = "libs/com_google_firebase_firebase_iid/firebase-iid-21.0.1.aar" info_path = "libs/com_google_firebase_firebase_iid/com_google_firebase_firebase_iid.info" + enable_bytecode_checks = false deps = [ ":google_firebase_firebase_common_java", ":google_firebase_firebase_components_java", @@ -1234,6 +1262,7 @@ android_aar_prebuilt("google_firebase_firebase_messaging_java") { aar_path = "libs/com_google_firebase_firebase_messaging/firebase-messaging-21.0.1.aar" info_path = "libs/com_google_firebase_firebase_messaging/com_google_firebase_firebase_messaging.info" + enable_bytecode_checks = false deps = [ ":google_android_datatransport_transport_api_java", ":google_firebase_firebase_common_java", @@ -1251,10 +1280,6 @@ "//third_party/androidx:androidx_collection_collection_java", "//third_party/androidx:androidx_core_core_java", ] - - # We removed the datatransport dependency to reduce binary size. - # The library works without it as it's only used for logging. - enable_bytecode_checks = false } # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. @@ -1262,6 +1287,7 @@ jar_path = "libs/com_google_guava_guava_android/guava-31.1-android.jar" output_name = "com_google_guava_guava_android" supports_android = true + enable_bytecode_checks = false # Target is swapped out when internal code is enabled. # Please depend on //third_party/android_deps:guava_android_java instead. @@ -1295,6 +1321,7 @@ jar_path = "libs/com_google_protobuf_protobuf_javalite/protobuf-javalite-3.21.1.jar" output_name = "com_google_protobuf_protobuf_javalite" supports_android = true + enable_bytecode_checks = false # Target is swapped out when internal code is enabled. # Please depend on //third_party/android_deps:protobuf_lite_runtime_java instead. @@ -1317,10 +1344,8 @@ "libs/com_googlecode_java_diff_utils_diffutils/diffutils-1.3.0.jar" output_name = "com_googlecode_java_diff_utils_diffutils" supports_android = true - testonly = true - - # Needed to break dependency cycle for errorprone_plugin_java. enable_bytecode_checks = false + testonly = true } # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. @@ -1329,6 +1354,7 @@ "libs/com_squareup_wire_wire_runtime_jvm/wire-runtime-jvm-4.5.1.jar" output_name = "com_squareup_wire_wire_runtime_jvm" supports_android = true + enable_bytecode_checks = false testonly = true deps = [ ":com_squareup_okio_okio_jvm_java", @@ -1342,6 +1368,7 @@ jar_path = "libs/io_grpc_grpc_api/grpc-api-1.49.0.jar" output_name = "io_grpc_grpc_api" supports_android = true + enable_bytecode_checks = false deps = [ ":com_google_code_findbugs_jsr305_java", ":com_google_errorprone_error_prone_annotations_java", @@ -1357,6 +1384,7 @@ android_aar_prebuilt("io_grpc_grpc_binder_java") { aar_path = "libs/io_grpc_grpc_binder/grpc-binder-1.49.0.aar" info_path = "libs/io_grpc_grpc_binder/io_grpc_grpc_binder.info" + enable_bytecode_checks = false deps = [ ":io_grpc_grpc_core_java", "//third_party/android_deps:guava_android_java", @@ -1371,6 +1399,7 @@ jar_path = "libs/io_grpc_grpc_context/grpc-context-1.49.0.jar" output_name = "io_grpc_grpc_context" supports_android = true + enable_bytecode_checks = false # https://crbug.com/1412551 requires_android = true @@ -1381,6 +1410,7 @@ jar_path = "libs/io_grpc_grpc_protobuf_lite/grpc-protobuf-lite-1.49.0.jar" output_name = "io_grpc_grpc_protobuf_lite" supports_android = true + enable_bytecode_checks = false deps = [ ":com_google_code_findbugs_jsr305_java", ":io_grpc_grpc_api_java", @@ -1397,6 +1427,7 @@ jar_path = "libs/io_grpc_grpc_stub/grpc-stub-1.49.0.jar" output_name = "io_grpc_grpc_stub" supports_android = true + enable_bytecode_checks = false deps = [ ":com_google_errorprone_error_prone_annotations_java", ":io_grpc_grpc_api_java", @@ -1412,6 +1443,7 @@ jar_path = "libs/javax_annotation_javax_annotation_api/javax.annotation-api-1.3.2.jar" output_name = "javax_annotation_javax_annotation_api" supports_android = true + enable_bytecode_checks = false } # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. @@ -1419,6 +1451,7 @@ jar_path = "libs/org_ccil_cowan_tagsoup_tagsoup/tagsoup-1.2.1.jar" output_name = "org_ccil_cowan_tagsoup_tagsoup" supports_android = true + enable_bytecode_checks = false testonly = true } @@ -1427,6 +1460,7 @@ jar_path = "libs/org_checkerframework_checker_util/checker-util-3.25.0.jar" output_name = "org_checkerframework_checker_util" supports_android = true + enable_bytecode_checks = false deps = [ ":org_checkerframework_checker_qual_java" ] } @@ -1435,8 +1469,6 @@ jar_path = "libs/org_codehaus_mojo_animal_sniffer_annotations/animal-sniffer-annotations-1.21.jar" output_name = "org_codehaus_mojo_animal_sniffer_annotations" supports_android = true - - # Needed to break dependency cycle for errorprone_plugin_java. enable_bytecode_checks = false } @@ -1453,6 +1485,7 @@ jar_path = "libs/org_jetbrains_kotlin_kotlin_stdlib_jdk7/kotlin-stdlib-jdk7-1.8.20.jar" output_name = "org_jetbrains_kotlin_kotlin_stdlib_jdk7" supports_android = true + enable_bytecode_checks = false deps = [ "//third_party/kotlin_stdlib:kotlin_stdlib_java" ] } @@ -1461,6 +1494,7 @@ jar_path = "libs/org_jetbrains_kotlin_kotlin_stdlib_jdk8/kotlin-stdlib-jdk8-1.8.20.jar" output_name = "org_jetbrains_kotlin_kotlin_stdlib_jdk8" supports_android = true + enable_bytecode_checks = false deps = [ ":org_jetbrains_kotlin_kotlin_stdlib_jdk7_java", "//third_party/kotlin_stdlib:kotlin_stdlib_java", @@ -1472,6 +1506,7 @@ jar_path = "libs/org_jetbrains_kotlinx_kotlinx_coroutines_android/kotlinx-coroutines-android-1.6.4.jar" output_name = "org_jetbrains_kotlinx_kotlinx_coroutines_android" supports_android = true + enable_bytecode_checks = false deps = [ ":org_jetbrains_kotlin_kotlin_stdlib_jdk8_java", ":org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_java", @@ -1484,6 +1519,7 @@ jar_path = "libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm/kotlinx-coroutines-core-jvm-1.6.4.jar" output_name = "org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm" supports_android = true + enable_bytecode_checks = false deps = [ ":org_jetbrains_kotlin_kotlin_stdlib_jdk8_java", "//third_party/kotlin_stdlib:kotlin_stdlib_java", @@ -1495,6 +1531,7 @@ jar_path = "libs/org_jetbrains_kotlinx_kotlinx_coroutines_guava/kotlinx-coroutines-guava-1.6.4.jar" output_name = "org_jetbrains_kotlinx_kotlinx_coroutines_guava" supports_android = true + enable_bytecode_checks = false deps = [ ":org_jetbrains_kotlin_kotlin_stdlib_jdk8_java", ":org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_java", @@ -1508,6 +1545,7 @@ jar_path = "libs/org_jsoup_jsoup/jsoup-1.15.1.jar" output_name = "org_jsoup_jsoup" supports_android = true + enable_bytecode_checks = false testonly = true } @@ -1516,6 +1554,7 @@ jar_path = "libs/org_mockito_mockito_android/mockito-android-5.3.1.jar" output_name = "org_mockito_mockito_android" supports_android = true + enable_bytecode_checks = false testonly = true deps = [ ":org_mockito_mockito_core_java", @@ -1531,6 +1570,7 @@ jar_path = "libs/org_mockito_mockito_core/mockito-core-5.3.1.jar" output_name = "org_mockito_mockito_core" supports_android = true + enable_bytecode_checks = false testonly = true deps = [ ":net_bytebuddy_byte_buddy_agent_java", @@ -1538,9 +1578,6 @@ ":org_objenesis_objenesis_java", ] - # Can't find org.opentest4j.AssertionFailedError classes. - enable_bytecode_checks = false - # Uses java.time which does not exist until API 26. # Modifications are added in third_party/mockito. jar_excluded_patterns = [ @@ -1554,20 +1591,22 @@ jar_path = "libs/org_mockito_mockito_subclass/mockito-subclass-5.3.1.jar" output_name = "org_mockito_mockito_subclass" supports_android = true + enable_bytecode_checks = false testonly = true deps = [ ":org_mockito_mockito_core_java" ] } # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_robolectric_robolectric_java") { - jar_path = "libs/org_robolectric_robolectric/robolectric-4.8.1.jar" + jar_path = "libs/org_robolectric_robolectric/robolectric-4.10.2.jar" output_name = "org_robolectric_robolectric" enable_bytecode_checks = false testonly = true deps = [ ":javax_annotation_javax_annotation_api_java", ":javax_inject_javax_inject_java", - ":org_bouncycastle_bcprov_jdk15on_java", + ":org_bouncycastle_bcprov_jdk18on_java", + ":org_conscrypt_conscrypt_openjdk_uber_java", ":org_robolectric_annotations_java", ":org_robolectric_junit_java", ":org_robolectric_pluginapi_java", @@ -1585,7 +1624,7 @@ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_robolectric_shadows_playservices_java") { - jar_path = "libs/org_robolectric_shadows_playservices/shadows-playservices-4.8.1.jar" + jar_path = "libs/org_robolectric_shadows_playservices/shadows-playservices-4.10.2.jar" output_name = "org_robolectric_shadows_playservices" enable_bytecode_checks = false testonly = true @@ -1598,7 +1637,7 @@ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_robolectric_utils_java") { - jar_path = "libs/org_robolectric_utils/utils-4.8.1.jar" + jar_path = "libs/org_robolectric_utils/utils-4.10.2.jar" output_name = "org_robolectric_utils" enable_bytecode_checks = false testonly = true @@ -1618,6 +1657,7 @@ jar_path = "libs/android_arch_core_common/common-1.1.1.jar" output_name = "android_arch_core_common" supports_android = true + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -1632,6 +1672,7 @@ android_aar_prebuilt("android_arch_core_runtime_java") { aar_path = "libs/android_arch_core_runtime/runtime-1.1.1.aar" info_path = "libs/android_arch_core_runtime/android_arch_core_runtime.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -1649,6 +1690,7 @@ android_aar_prebuilt("android_arch_lifecycle_livedata_java") { aar_path = "libs/android_arch_lifecycle_livedata/livedata-1.1.1.aar" info_path = "libs/android_arch_lifecycle_livedata/android_arch_lifecycle_livedata.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -1668,6 +1710,7 @@ aar_path = "libs/android_arch_lifecycle_livedata_core/livedata-core-1.1.1.aar" info_path = "libs/android_arch_lifecycle_livedata_core/android_arch_lifecycle_livedata_core.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -1686,6 +1729,7 @@ android_aar_prebuilt("com_android_support_animated_vector_drawable_java") { aar_path = "libs/com_android_support_animated_vector_drawable/animated-vector-drawable-28.0.0.aar" info_path = "libs/com_android_support_animated_vector_drawable/com_android_support_animated_vector_drawable.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -1704,6 +1748,7 @@ android_aar_prebuilt("com_android_support_appcompat_v7_java") { aar_path = "libs/com_android_support_appcompat_v7/appcompat-v7-28.0.0.aar" info_path = "libs/com_android_support_appcompat_v7/com_android_support_appcompat_v7.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -1728,6 +1773,7 @@ android_aar_prebuilt("com_android_support_cardview_v7_java") { aar_path = "libs/com_android_support_cardview_v7/cardview-v7-28.0.0.aar" info_path = "libs/com_android_support_cardview_v7/com_android_support_cardview_v7.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -1743,6 +1789,7 @@ android_aar_prebuilt("com_android_support_cursoradapter_java") { aar_path = "libs/com_android_support_cursoradapter/cursoradapter-28.0.0.aar" info_path = "libs/com_android_support_cursoradapter/com_android_support_cursoradapter.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -1758,6 +1805,7 @@ android_aar_prebuilt("com_android_support_documentfile_java") { aar_path = "libs/com_android_support_documentfile/documentfile-28.0.0.aar" info_path = "libs/com_android_support_documentfile/com_android_support_documentfile.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -1774,6 +1822,7 @@ aar_path = "libs/com_android_support_loader/loader-28.0.0.aar" info_path = "libs/com_android_support_loader/com_android_support_loader.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -1794,6 +1843,7 @@ android_aar_prebuilt("com_android_support_print_java") { aar_path = "libs/com_android_support_print/print-28.0.0.aar" info_path = "libs/com_android_support_print/com_android_support_print.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -1810,6 +1860,7 @@ aar_path = "libs/com_android_support_recyclerview_v7/recyclerview-v7-28.0.0.aar" info_path = "libs/com_android_support_recyclerview_v7/com_android_support_recyclerview_v7.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -1829,6 +1880,7 @@ android_aar_prebuilt("com_android_support_slidingpanelayout_java") { aar_path = "libs/com_android_support_slidingpanelayout/slidingpanelayout-28.0.0.aar" info_path = "libs/com_android_support_slidingpanelayout/com_android_support_slidingpanelayout.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -1848,6 +1900,7 @@ android_aar_prebuilt("com_android_support_support_media_compat_java") { aar_path = "libs/com_android_support_support_media_compat/support-media-compat-28.0.0.aar" info_path = "libs/com_android_support_support_media_compat/com_android_support_support_media_compat.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -1870,6 +1923,7 @@ android_aar_prebuilt("com_android_support_support_vector_drawable_java") { aar_path = "libs/com_android_support_support_vector_drawable/support-vector-drawable-28.0.0.aar" info_path = "libs/com_android_support_support_vector_drawable/com_android_support_support_vector_drawable.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -1888,6 +1942,7 @@ android_aar_prebuilt("com_android_support_transition_java") { aar_path = "libs/com_android_support_transition/transition-28.0.0.aar" info_path = "libs/com_android_support_transition/com_android_support_transition.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -1907,6 +1962,7 @@ android_aar_prebuilt("com_android_support_versionedparcelable_java") { aar_path = "libs/com_android_support_versionedparcelable/versionedparcelable-28.0.0.aar" info_path = "libs/com_android_support_versionedparcelable/com_android_support_versionedparcelable.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -1933,6 +1989,7 @@ jar_path = "libs/com_google_android_annotations/annotations-4.1.1.4.jar" output_name = "com_google_android_annotations" supports_android = true + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -1946,6 +2003,7 @@ android_aar_prebuilt("google_android_datatransport_transport_api_java") { aar_path = "libs/com_google_android_datatransport_transport_api/transport-api-2.2.1.aar" info_path = "libs/com_google_android_datatransport_transport_api/com_google_android_datatransport_transport_api.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -1960,6 +2018,7 @@ android_aar_prebuilt("google_play_services_clearcut_java") { aar_path = "libs/com_google_android_gms_play_services_clearcut/play-services-clearcut-17.0.0.aar" info_path = "libs/com_google_android_gms_play_services_clearcut/com_google_android_gms_play_services_clearcut.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -1980,6 +2039,7 @@ android_aar_prebuilt("google_play_services_cloud_messaging_java") { aar_path = "libs/com_google_android_gms_play_services_cloud_messaging/play-services-cloud-messaging-16.0.0.aar" info_path = "libs/com_google_android_gms_play_services_cloud_messaging/com_google_android_gms_play_services_cloud_messaging.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -1997,6 +2057,7 @@ android_aar_prebuilt("google_play_services_flags_java") { aar_path = "libs/com_google_android_gms_play_services_flags/play-services-flags-17.0.0.aar" info_path = "libs/com_google_android_gms_play_services_flags/com_google_android_gms_play_services_flags.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -2014,6 +2075,7 @@ android_aar_prebuilt("google_play_services_phenotype_java") { aar_path = "libs/com_google_android_gms_play_services_phenotype/play-services-phenotype-17.0.0.aar" info_path = "libs/com_google_android_gms_play_services_phenotype/com_google_android_gms_play_services_phenotype.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -2033,6 +2095,7 @@ android_aar_prebuilt("google_play_services_places_placereport_java") { aar_path = "libs/com_google_android_gms_play_services_places_placereport/play-services-places-placereport-17.0.0.aar" info_path = "libs/com_google_android_gms_play_services_places_placereport/com_google_android_gms_play_services_places_placereport.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -2047,6 +2110,7 @@ android_aar_prebuilt("google_play_services_stats_java") { aar_path = "libs/com_google_android_gms_play_services_stats/play-services-stats-17.0.0.aar" info_path = "libs/com_google_android_gms_play_services_stats/com_google_android_gms_play_services_stats.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -2064,6 +2128,7 @@ android_aar_prebuilt("com_google_android_play_core_common_java") { aar_path = "libs/com_google_android_play_core_common/core-common-2.0.2.aar" info_path = "libs/com_google_android_play_core_common/com_google_android_play_core_common.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -2078,6 +2143,7 @@ jar_path = "libs/com_google_firebase_firebase_annotations/firebase-annotations-16.0.0.jar" output_name = "com_google_firebase_firebase_annotations" supports_android = true + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -2092,6 +2158,7 @@ aar_path = "libs/com_google_firebase_firebase_common/firebase-common-19.5.0.aar" info_path = "libs/com_google_firebase_firebase_common/com_google_firebase_firebase_common.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -2104,16 +2171,13 @@ ":google_play_services_basement_java", ":google_play_services_tasks_java", ] - - # Ignore missing kotlin.KotlinVersion definition in - # com.google.firebase.platforminfo.KotlinDetector. - enable_bytecode_checks = false } # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. android_aar_prebuilt("google_firebase_firebase_components_java") { aar_path = "libs/com_google_firebase_firebase_components/firebase-components-16.1.0.aar" info_path = "libs/com_google_firebase_firebase_components/com_google_firebase_firebase_components.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -2125,9 +2189,6 @@ ":google_firebase_firebase_annotations_java", "//third_party/androidx:androidx_annotation_annotation_java", ] - - # Can't find com.google.firebase.components.Component$ComponentType. - enable_bytecode_checks = false } # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. @@ -2135,6 +2196,7 @@ jar_path = "libs/com_google_firebase_firebase_encoders/firebase-encoders-16.1.0.jar" output_name = "com_google_firebase_firebase_encoders" supports_android = true + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -2152,6 +2214,7 @@ android_aar_prebuilt("google_firebase_firebase_encoders_json_java") { aar_path = "libs/com_google_firebase_firebase_encoders_json/firebase-encoders-json-17.1.0.aar" info_path = "libs/com_google_firebase_firebase_encoders_json/com_google_firebase_firebase_encoders_json.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -2169,6 +2232,7 @@ android_aar_prebuilt("google_firebase_firebase_iid_interop_java") { aar_path = "libs/com_google_firebase_firebase_iid_interop/firebase-iid-interop-17.0.0.aar" info_path = "libs/com_google_firebase_firebase_iid_interop/com_google_firebase_firebase_iid_interop.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -2186,6 +2250,7 @@ android_aar_prebuilt("google_firebase_firebase_installations_java") { aar_path = "libs/com_google_firebase_firebase_installations/firebase-installations-16.3.5.aar" info_path = "libs/com_google_firebase_firebase_installations/com_google_firebase_firebase_installations.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -2199,15 +2264,13 @@ ":google_firebase_firebase_installations_interop_java", ":google_play_services_tasks_java", ] - - # Can't find com.google.auto.value.AutoValue$Builder. - enable_bytecode_checks = false } # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. android_aar_prebuilt("google_firebase_firebase_installations_interop_java") { aar_path = "libs/com_google_firebase_firebase_installations_interop/firebase-installations-interop-16.0.1.aar" info_path = "libs/com_google_firebase_firebase_installations_interop/com_google_firebase_firebase_installations_interop.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -2219,15 +2282,13 @@ ":google_firebase_firebase_annotations_java", ":google_play_services_tasks_java", ] - - # Can't find com.google.auto.value.AutoValue$Builder. - enable_bytecode_checks = false } # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. android_aar_prebuilt("google_firebase_firebase_measurement_connector_java") { aar_path = "libs/com_google_firebase_firebase_measurement_connector/firebase-measurement-connector-18.0.0.aar" info_path = "libs/com_google_firebase_firebase_measurement_connector/com_google_firebase_firebase_measurement_connector.info" + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -2243,6 +2304,7 @@ jar_path = "libs/com_squareup_javawriter/javawriter-2.1.1.jar" output_name = "com_squareup_javawriter" supports_android = true + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -2258,6 +2320,7 @@ jar_path = "libs/com_squareup_okio_okio_jvm/okio-jvm-3.0.0.jar" output_name = "com_squareup_okio_okio_jvm" supports_android = true + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -2277,6 +2340,7 @@ jar_path = "libs/io_grpc_grpc_core/grpc-core-1.49.0.jar" output_name = "io_grpc_grpc_core" supports_android = true + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -2303,6 +2367,7 @@ jar_path = "libs/io_perfmark_perfmark_api/perfmark-api-0.25.0.jar" output_name = "io_perfmark_perfmark_api" supports_android = true + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -2317,6 +2382,7 @@ jar_path = "libs/net_bytebuddy_byte_buddy/byte-buddy-1.14.4.jar" output_name = "net_bytebuddy_byte_buddy" supports_android = true + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -2325,9 +2391,6 @@ "//third_party/androidx:*", ] testonly = true - - # Can't find com.sun.jna / dalvik.system classes. - enable_bytecode_checks = false } # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. @@ -2335,6 +2398,7 @@ jar_path = "libs/net_bytebuddy_byte_buddy_agent/byte-buddy-agent-1.14.4.jar" output_name = "net_bytebuddy_byte_buddy_agent" supports_android = true + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -2343,15 +2407,12 @@ "//third_party/androidx:*", ] testonly = true - - # Can't find com.sun.jna / dalvik.system classes. - enable_bytecode_checks = false } # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. - java_prebuilt("org_bouncycastle_bcprov_jdk15on_java") { - jar_path = "libs/org_bouncycastle_bcprov_jdk15on/bcprov-jdk15on-1.68.jar" - output_name = "org_bouncycastle_bcprov_jdk15on" + java_prebuilt("org_bouncycastle_bcprov_jdk18on_java") { + jar_path = "libs/org_bouncycastle_bcprov_jdk18on/bcprov-jdk18on-1.72.jar" + output_name = "org_bouncycastle_bcprov_jdk18on" enable_bytecode_checks = false # To remove visibility constraint, add this dependency to @@ -2368,6 +2429,7 @@ jar_path = "libs/org_hamcrest_hamcrest/hamcrest-2.2.jar" output_name = "org_hamcrest_hamcrest" supports_android = true + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -2383,6 +2445,7 @@ jar_path = "libs/org_objenesis_objenesis/objenesis-3.3.jar" output_name = "org_objenesis_objenesis" supports_android = true + enable_bytecode_checks = false # To remove visibility constraint, add this dependency to # //third_party/android_deps/build.gradle. @@ -2395,7 +2458,7 @@ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_robolectric_annotations_java") { - jar_path = "libs/org_robolectric_annotations/annotations-4.8.1.jar" + jar_path = "libs/org_robolectric_annotations/annotations-4.10.2.jar" output_name = "org_robolectric_annotations" enable_bytecode_checks = false @@ -2411,7 +2474,7 @@ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_robolectric_junit_java") { - jar_path = "libs/org_robolectric_junit/junit-4.8.1.jar" + jar_path = "libs/org_robolectric_junit/junit-4.10.2.jar" output_name = "org_robolectric_junit" enable_bytecode_checks = false @@ -2434,7 +2497,7 @@ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_robolectric_nativeruntime_java") { - jar_path = "libs/org_robolectric_nativeruntime/nativeruntime-4.8.1.jar" + jar_path = "libs/org_robolectric_nativeruntime/nativeruntime-4.10.2.jar" output_name = "org_robolectric_nativeruntime" enable_bytecode_checks = false @@ -2447,14 +2510,32 @@ testonly = true deps = [ ":com_google_guava_guava_java", + ":org_robolectric_nativeruntime_dist_compat_java", ":org_robolectric_utils_java", + ":org_robolectric_utils_reflector_java", ] is_robolectric = true } # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. + java_prebuilt("org_robolectric_nativeruntime_dist_compat_java") { + jar_path = "libs/org_robolectric_nativeruntime_dist_compat/nativeruntime-dist-compat-1.0.1.jar" + output_name = "org_robolectric_nativeruntime_dist_compat" + enable_bytecode_checks = false + + # To remove visibility constraint, add this dependency to + # //third_party/android_deps/build.gradle. + visibility = [ + ":*", + "//third_party/androidx:*", + ] + testonly = true + is_robolectric = true + } + + # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_robolectric_pluginapi_java") { - jar_path = "libs/org_robolectric_pluginapi/pluginapi-4.8.1.jar" + jar_path = "libs/org_robolectric_pluginapi/pluginapi-4.10.2.jar" output_name = "org_robolectric_pluginapi" enable_bytecode_checks = false @@ -2474,7 +2555,7 @@ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_robolectric_plugins_maven_dependency_resolver_java") { - jar_path = "libs/org_robolectric_plugins_maven_dependency_resolver/plugins-maven-dependency-resolver-4.8.1.jar" + jar_path = "libs/org_robolectric_plugins_maven_dependency_resolver/plugins-maven-dependency-resolver-4.10.2.jar" output_name = "org_robolectric_plugins_maven_dependency_resolver" enable_bytecode_checks = false @@ -2495,7 +2576,7 @@ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_robolectric_resources_java") { - jar_path = "libs/org_robolectric_resources/resources-4.8.1.jar" + jar_path = "libs/org_robolectric_resources/resources-4.10.2.jar" output_name = "org_robolectric_resources" enable_bytecode_checks = false @@ -2517,7 +2598,7 @@ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_robolectric_sandbox_java") { - jar_path = "libs/org_robolectric_sandbox/sandbox-4.8.1.jar" + jar_path = "libs/org_robolectric_sandbox/sandbox-4.10.2.jar" output_name = "org_robolectric_sandbox" enable_bytecode_checks = false @@ -2544,7 +2625,7 @@ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_robolectric_shadowapi_java") { - jar_path = "libs/org_robolectric_shadowapi/shadowapi-4.8.1.jar" + jar_path = "libs/org_robolectric_shadowapi/shadowapi-4.10.2.jar" output_name = "org_robolectric_shadowapi" enable_bytecode_checks = false @@ -2565,7 +2646,7 @@ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_robolectric_shadows_framework_java") { jar_path = - "libs/org_robolectric_shadows_framework/shadows-framework-4.8.1.jar" + "libs/org_robolectric_shadows_framework/shadows-framework-4.10.2.jar" output_name = "org_robolectric_shadows_framework" enable_bytecode_checks = false @@ -2597,7 +2678,7 @@ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_robolectric_utils_reflector_java") { - jar_path = "libs/org_robolectric_utils_reflector/utils-reflector-4.8.1.jar" + jar_path = "libs/org_robolectric_utils_reflector/utils-reflector-4.10.2.jar" output_name = "org_robolectric_utils_reflector" enable_bytecode_checks = false
diff --git a/third_party/android_deps/additional_readme_paths.json b/third_party/android_deps/additional_readme_paths.json index f919c80..e27daee 100644 --- a/third_party/android_deps/additional_readme_paths.json +++ b/third_party/android_deps/additional_readme_paths.json
@@ -123,7 +123,7 @@ "libs/net_bytebuddy_byte_buddy", "libs/net_bytebuddy_byte_buddy_agent", "libs/net_ltgt_gradle_incap_incap", - "libs/org_bouncycastle_bcprov_jdk15on", + "libs/org_bouncycastle_bcprov_jdk18on", "libs/org_ccil_cowan_tagsoup_tagsoup", "libs/org_checkerframework_checker_compat_qual", "libs/org_checkerframework_checker_qual", @@ -153,6 +153,7 @@ "libs/org_robolectric_annotations", "libs/org_robolectric_junit", "libs/org_robolectric_nativeruntime", + "libs/org_robolectric_nativeruntime_dist_compat", "libs/org_robolectric_pluginapi", "libs/org_robolectric_plugins_maven_dependency_resolver", "libs/org_robolectric_resources",
diff --git a/third_party/android_deps/build.gradle b/third_party/android_deps/build.gradle index 6d41e45..1ba34c0e 100644 --- a/third_party/android_deps/build.gradle +++ b/third_party/android_deps/build.gradle
@@ -192,7 +192,7 @@ // Depended on by downstream guava_java rewrite. androidTestCompile "org.checkerframework:checker-qual:3.25.0" - String robolectricVersion = '4.8.1' + String robolectricVersion = '4.10.2' // Use testCompile to avoid having support_android = true set on // robolectric dependencies. testCompile "org.robolectric:robolectric:${robolectricVersion}"
diff --git a/third_party/android_deps/buildSrc/src/main/groovy/BuildConfigGenerator.groovy b/third_party/android_deps/buildSrc/src/main/groovy/BuildConfigGenerator.groovy index 2a97fae..17604b5 100644 --- a/third_party/android_deps/buildSrc/src/main/groovy/BuildConfigGenerator.groovy +++ b/third_party/android_deps/buildSrc/src/main/groovy/BuildConfigGenerator.groovy
@@ -516,10 +516,6 @@ """.stripIndent(/* forceGroovyBehavior */ true)) if (dependency.supportsAndroid) { sb.append(' supports_android = true\n') - } else { - // Save some time by not validating classpaths of desktop .jars. Also required to break a dependency - // cycle for errorprone. - sb.append(' enable_bytecode_checks = false\n') } } else if (dependency.extension == 'aar') { sb.append("""\ @@ -532,7 +528,16 @@ java_group("${targetName}") { """.stripIndent(/* forceGroovyBehavior */ true)) } else { - throw new IllegalStateException('Dependency type should be JAR or AAR') + throw new IllegalStateException('Dependency type should be JAR or AAR or group') + } + + // Skip jdeps analysis of direct deps for third-party prebuilt targets. Many of these targets from maven are + // missing direct dependencies for its code, but this code is typically not called in practice and is removed + // by R8. Rely on R8's TraceReferences check to catch any actually missing dependencies. Although it would be + // helpful to have the full list of correct direct deps for these prebuilt targets, in practice it is too + // onerous to maintain for each third party maven prebuilt target. + if (dependency.extension == 'jar' || dependency.extension == 'aar') { + sb.append(' enable_bytecode_checks = false\n') } sb.append(generateBuildTargetVisibilityDeclaration(dependency)) @@ -692,9 +697,6 @@ case 'androidx_privacysandbox_ads_ads_adservices': sb.append(' alternative_android_sdk_dep = "//third_party/android_sdk:android_privacy_sandbox_sdk_java"\n') break - case 'androidx_room_room_runtime': - sb.append(' enable_bytecode_checks = false\n') - break case 'androidx_transition_transition': // Not specified in the POM, compileOnly dependency not supposed to be used unless // the library is present: b/70887421 @@ -719,9 +721,6 @@ case 'com_google_android_material_material': sb.with { append('\n') - append(' # Needed until next material update, see crbug.com/1349521.\n') - append(' enable_bytecode_checks = false\n') - append('\n') append(' # Reduce binary size. https:crbug.com/954584\n') append(' ignore_proguard_configs = true\n') append(' proguard_configs = ["material_design.flags"]\n') @@ -800,18 +799,6 @@ append(' jar_excluded_patterns += ["*/ListenableFuture.class"]\n') } break - case 'com_google_code_findbugs_jsr305': - case 'com_google_errorprone_error_prone_annotations': - case 'com_google_guava_failureaccess': - case 'com_google_j2objc_j2objc_annotations': - case 'com_google_guava_listenablefuture': - case 'com_googlecode_java_diff_utils_diffutils': - case 'org_checkerframework_checker_qual': - case 'org_codehaus_mojo_animal_sniffer_annotations': - sb.append('\n') - sb.append(' # Needed to break dependency cycle for errorprone_plugin_java.\n') - sb.append(' enable_bytecode_checks = false\n') - break case 'androidx_test_rules': // Target needs Android SDK deps which exist in third_party/android_sdk. sb.append('''\ @@ -823,11 +810,6 @@ | |'''.stripMargin()) break - case 'androidx_test_espresso_espresso_contrib': - case 'androidx_test_espresso_espresso_web': - case 'androidx_window_window': - sb.append(' enable_bytecode_checks = false\n') - break case 'net_sf_kxml_kxml2': sb.append(' # Target needs to exclude *xmlpull* files as already included in Android SDK.\n') sb.append(' jar_excluded_patterns = [ "*xmlpull*" ]\n') @@ -870,21 +852,12 @@ append(' ]') } break - case 'androidx_slidingpanelayout_slidingpanelayout': - case 'androidx_window_window_java': - // Every target that has a dep on androidx_window_window will need these checks turned off. - sb.append(' enable_bytecode_checks = false\n') - break case 'androidx_credentials_credentials': sb.append('\n') // We are overriding 1.0.0-SNAPSHOT to 1.2.0-alpha03 which has different deps. // TODO(1433052): remove after 1.2.0 becomes part of the normal release structure. sb.append(' deps += [":androidx_core_core_java"]\n') break - case 'androidx_asynclayoutinflater_asynclayoutinflater': - sb.append('\n') - sb.append(' # References AppCompatActivity using reflection, if exists.\n') - sb.append(' enable_bytecode_checks = false\n') case 'androidx_startup_startup_runtime': sb.append(' # Keeps emoji2 code. See http://crbug.com/1205141\n') sb.append(' ignore_proguard_configs = true\n') @@ -895,32 +868,6 @@ sb.append(' "//third_party/android_deps:*"\n') sb.append(' ]') break - case 'com_android_tools_desugar_jdk_libs_configuration': - sb.append(' enable_bytecode_checks = false\n') - break - case 'com_google_firebase_firebase_common': - sb.append('\n') - sb.append(' # Ignore missing kotlin.KotlinVersion definition in\n') - sb.append(' # com.google.firebase.platforminfo.KotlinDetector.\n') - sb.append(' enable_bytecode_checks = false\n') - break - case 'com_google_firebase_firebase_components': - sb.append('\n') - sb.append(' # Can\'t find com.google.firebase.components.Component$ComponentType.\n') - sb.append(' enable_bytecode_checks = false\n') - break - case 'com_google_firebase_firebase_installations': - case 'com_google_firebase_firebase_installations_interop': - sb.append('\n') - sb.append(' # Can\'t find com.google.auto.value.AutoValue$Builder.\n') - sb.append(' enable_bytecode_checks = false\n') - break - case 'com_google_firebase_firebase_messaging': - sb.append('\n') - sb.append(' # We removed the datatransport dependency to reduce binary size.\n') - sb.append(' # The library works without it as it\'s only used for logging.\n') - sb.append(' enable_bytecode_checks = false\n') - break case 'com_android_tools_sdk_common': case 'com_android_tools_common': case 'com_android_tools_layoutlib_layoutlib_api': @@ -930,11 +877,6 @@ sb.append(' # this for other purposes, change buildCompileNoDeps in build.gradle.\n') sb.append(' visibility = [ "//build/android/unused_resources:*" ]\n') break - case 'net_bytebuddy_byte_buddy_agent': - case 'net_bytebuddy_byte_buddy': - sb.append(' # Can\'t find com.sun.jna / dalvik.system classes.\n') - sb.append(' enable_bytecode_checks = false\n') - break case 'org_jetbrains_kotlinx_kotlinx_coroutines_android': case 'org_jetbrains_kotlinx_kotlinx_coroutines_guava': sb.append('requires_android = true') @@ -944,8 +886,6 @@ sb.append(' requires_android = true\n') break case 'org_mockito_mockito_core': - sb.append(' # Can\'t find org.opentest4j.AssertionFailedError classes.\n') - sb.append(' enable_bytecode_checks = false\n') sb.append(' # Uses java.time which does not exist until API 26.\n') sb.append(' # Modifications are added in third_party/mockito.\n') sb.append(' jar_excluded_patterns = [\n')
diff --git a/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy b/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy index 5532f45..debaeefd 100644 --- a/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy +++ b/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy
@@ -116,6 +116,11 @@ url: 'https://github.com/bcgit/bc-java', licensePath: 'licenses/Bouncy_Castle-2015.txt', licenseName: 'MIT'), + org_bouncycastle_bcprov_jdk18on: new PropertyOverride( + cpePrefix: 'cpe:/a:bouncycastle:legion-of-the-bouncy-castle:1.72', + url: 'https://github.com/bcgit/bc-java', + licensePath: 'licenses/Bouncy_Castle-2015.txt', + licenseName: 'MIT'), org_codehaus_mojo_animal_sniffer_annotations: new PropertyOverride( url: 'http://www.mojohaus.org/animal-sniffer/animal-sniffer-annotations/', description: 'Animal Sniffer Annotations allow marking methods which Animal Sniffer should ignore ' + @@ -219,6 +224,9 @@ org_robolectric_nativeruntime: new PropertyOverride( licensePath: 'licenses/Codehaus_License-2009.txt', licenseName: 'MIT'), + org_robolectric_nativeruntime_dist_compat: new PropertyOverride( + licensePath: 'licenses/Codehaus_License-2009.txt', + licenseName: 'MIT'), org_robolectric_pluginapi: new PropertyOverride( licensePath: 'licenses/Codehaus_License-2009.txt', licenseName: 'MIT'),
diff --git a/third_party/android_deps/libs/com_google_auto_value_auto_value_annotations/README.chromium b/third_party/android_deps/libs/com_google_auto_value_auto_value_annotations/README.chromium index 8304de3..bf5fba4 100644 --- a/third_party/android_deps/libs/com_google_auto_value_auto_value_annotations/README.chromium +++ b/third_party/android_deps/libs/com_google_auto_value_auto_value_annotations/README.chromium
@@ -1,7 +1,7 @@ Name: AutoValue Annotations Short Name: auto-value-annotations URL: https://github.com/google/auto/tree/master/value -Version: 1.9 +Version: 1.10.1 License: Apache 2.0 License File: NOT_SHIPPED CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/com_google_auto_value_auto_value_annotations/cipd.yaml b/third_party/android_deps/libs/com_google_auto_value_auto_value_annotations/cipd.yaml index 31273ee8..f3fdc69 100644 --- a/third_party/android_deps/libs/com_google_auto_value_auto_value_annotations/cipd.yaml +++ b/third_party/android_deps/libs/com_google_auto_value_auto_value_annotations/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@1.9.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@1.10.1.cr1 package: chromium/third_party/android_deps/libs/com_google_auto_value_auto_value_annotations description: "AutoValue Annotations" data: -- file: auto-value-annotations-1.9.jar +- file: auto-value-annotations-1.10.1.jar
diff --git a/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations/README.chromium b/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations/README.chromium index a9b1129..2232ad23 100644 --- a/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations/README.chromium +++ b/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations/README.chromium
@@ -1,7 +1,7 @@ Name: error-prone annotations Short Name: error_prone_annotations URL: https://errorprone.info/ -Version: 2.14.0 +Version: 2.18.0 License: Apache 2.0 License File: LICENSE CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations/cipd.yaml b/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations/cipd.yaml index 86f36a48..13a4c3cc 100644 --- a/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations/cipd.yaml +++ b/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@2.14.0.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@2.18.0.cr1 package: chromium/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations description: "error-prone annotations" data: -- file: error_prone_annotations-2.14.0.jar +- file: error_prone_annotations-2.18.0.jar
diff --git a/third_party/android_deps/libs/com_google_guava_guava/README.chromium b/third_party/android_deps/libs/com_google_guava_guava/README.chromium index a0277182..503a8a8 100644 --- a/third_party/android_deps/libs/com_google_guava_guava/README.chromium +++ b/third_party/android_deps/libs/com_google_guava_guava/README.chromium
@@ -1,7 +1,7 @@ Name: Guava: Google Core Libraries for Java Short Name: guava URL: https://github.com/google/guava -Version: 31.0.1-jre +Version: 31.1-jre License: Apache 2.0 License File: NOT_SHIPPED CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/com_google_guava_guava/cipd.yaml b/third_party/android_deps/libs/com_google_guava_guava/cipd.yaml index 627f211..d261f90503 100644 --- a/third_party/android_deps/libs/com_google_guava_guava/cipd.yaml +++ b/third_party/android_deps/libs/com_google_guava_guava/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@31.0.1-jre.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@31.1-jre.cr1 package: chromium/third_party/android_deps/libs/com_google_guava_guava description: "Guava: Google Core Libraries for Java" data: -- file: guava-31.0.1-jre.jar +- file: guava-31.1-jre.jar
diff --git a/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on/3pp/3pp.pb b/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk18on/3pp/3pp.pb similarity index 100% rename from third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on/3pp/3pp.pb rename to third_party/android_deps/libs/org_bouncycastle_bcprov_jdk18on/3pp/3pp.pb
diff --git a/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on/3pp/fetch.py b/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk18on/3pp/fetch.py similarity index 98% rename from third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on/3pp/fetch.py rename to third_party/android_deps/libs/org_bouncycastle_bcprov_jdk18on/3pp/fetch.py index 851dd64..7122ad6 100755 --- a/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on/3pp/fetch.py +++ b/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk18on/3pp/fetch.py
@@ -14,7 +14,7 @@ _REPO_URL = 'https://repo.maven.apache.org/maven2' _GROUP_NAME = 'org/bouncycastle' -_MODULE_NAME = 'bcprov-jdk15on' +_MODULE_NAME = 'bcprov-jdk18on' _FILE_EXT = 'jar' _OVERRIDE_LATEST = None _PATCH_VERSION = 'cr1'
diff --git a/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on/LICENSE b/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk18on/LICENSE similarity index 100% rename from third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on/LICENSE rename to third_party/android_deps/libs/org_bouncycastle_bcprov_jdk18on/LICENSE
diff --git a/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on/OWNERS b/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk18on/OWNERS similarity index 100% rename from third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on/OWNERS rename to third_party/android_deps/libs/org_bouncycastle_bcprov_jdk18on/OWNERS
diff --git a/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on/README.chromium b/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk18on/README.chromium similarity index 65% rename from third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on/README.chromium rename to third_party/android_deps/libs/org_bouncycastle_bcprov_jdk18on/README.chromium index f1436bd..22f08f4 100644 --- a/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on/README.chromium +++ b/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk18on/README.chromium
@@ -1,14 +1,14 @@ Name: Bouncy Castle Provider -Short Name: bcprov-jdk15on +Short Name: bcprov-jdk18on URL: https://github.com/bcgit/bc-java -Version: 1.68 +Version: 1.72 License: MIT License File: NOT_SHIPPED -CPEPrefix: cpe:/a:bouncycastle:legion-of-the-bouncy-castle:1.68 +CPEPrefix: cpe:/a:bouncycastle:legion-of-the-bouncy-castle:1.72 Security Critical: no Description: -The Bouncy Castle Crypto package is a Java implementation of cryptographic algorithms. This jar contains JCE provider and lightweight API for the Bouncy Castle Cryptography APIs for JDK 1.5 and up. +The Bouncy Castle Crypto package is a Java implementation of cryptographic algorithms. This jar contains JCE provider and lightweight API for the Bouncy Castle Cryptography APIs for JDK 1.8 and up. Local Modifications: No modifications.
diff --git a/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on/cipd.yaml b/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk18on/cipd.yaml similarity index 73% rename from third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on/cipd.yaml rename to third_party/android_deps/libs/org_bouncycastle_bcprov_jdk18on/cipd.yaml index 5b67e28..7051504 100644 --- a/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on/cipd.yaml +++ b/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk18on/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@1.68.cr1 -package: chromium/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on +# cipd create --pkg-def cipd.yaml -tag version:2@1.72.cr1 +package: chromium/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk18on description: "Bouncy Castle Provider" data: -- file: bcprov-jdk15on-1.68.jar +- file: bcprov-jdk18on-1.72.jar
diff --git a/third_party/android_deps/libs/org_ow2_asm_asm/README.chromium b/third_party/android_deps/libs/org_ow2_asm_asm/README.chromium index 310f30e..8308fb7 100644 --- a/third_party/android_deps/libs/org_ow2_asm_asm/README.chromium +++ b/third_party/android_deps/libs/org_ow2_asm_asm/README.chromium
@@ -1,7 +1,7 @@ Name: asm Short Name: asm URL: http://asm.ow2.io/ -Version: 9.2 +Version: 9.5 License: BSD License File: NOT_SHIPPED CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/org_ow2_asm_asm/cipd.yaml b/third_party/android_deps/libs/org_ow2_asm_asm/cipd.yaml index b9032a5..b18eba0a 100644 --- a/third_party/android_deps/libs/org_ow2_asm_asm/cipd.yaml +++ b/third_party/android_deps/libs/org_ow2_asm_asm/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@9.2.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@9.5.cr1 package: chromium/third_party/android_deps/libs/org_ow2_asm_asm description: "asm" data: -- file: asm-9.2.jar +- file: asm-9.5.jar
diff --git a/third_party/android_deps/libs/org_ow2_asm_asm_analysis/README.chromium b/third_party/android_deps/libs/org_ow2_asm_asm_analysis/README.chromium index be91647..ca5d893 100644 --- a/third_party/android_deps/libs/org_ow2_asm_asm_analysis/README.chromium +++ b/third_party/android_deps/libs/org_ow2_asm_asm_analysis/README.chromium
@@ -1,7 +1,7 @@ Name: asm-analysis Short Name: asm-analysis URL: http://asm.ow2.io/ -Version: 9.2 +Version: 9.5 License: BSD License File: NOT_SHIPPED CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/org_ow2_asm_asm_analysis/cipd.yaml b/third_party/android_deps/libs/org_ow2_asm_asm_analysis/cipd.yaml index dd4400e..9d7d700 100644 --- a/third_party/android_deps/libs/org_ow2_asm_asm_analysis/cipd.yaml +++ b/third_party/android_deps/libs/org_ow2_asm_asm_analysis/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@9.2.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@9.5.cr1 package: chromium/third_party/android_deps/libs/org_ow2_asm_asm_analysis description: "asm-analysis" data: -- file: asm-analysis-9.2.jar +- file: asm-analysis-9.5.jar
diff --git a/third_party/android_deps/libs/org_ow2_asm_asm_commons/README.chromium b/third_party/android_deps/libs/org_ow2_asm_asm_commons/README.chromium index 8ddeded..a65fb81 100644 --- a/third_party/android_deps/libs/org_ow2_asm_asm_commons/README.chromium +++ b/third_party/android_deps/libs/org_ow2_asm_asm_commons/README.chromium
@@ -1,7 +1,7 @@ Name: asm-commons Short Name: asm-commons URL: http://asm.ow2.io/ -Version: 9.2 +Version: 9.5 License: BSD License File: NOT_SHIPPED CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/org_ow2_asm_asm_commons/cipd.yaml b/third_party/android_deps/libs/org_ow2_asm_asm_commons/cipd.yaml index 6c5a733..b6b19843 100644 --- a/third_party/android_deps/libs/org_ow2_asm_asm_commons/cipd.yaml +++ b/third_party/android_deps/libs/org_ow2_asm_asm_commons/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@9.2.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@9.5.cr1 package: chromium/third_party/android_deps/libs/org_ow2_asm_asm_commons description: "asm-commons" data: -- file: asm-commons-9.2.jar +- file: asm-commons-9.5.jar
diff --git a/third_party/android_deps/libs/org_ow2_asm_asm_tree/README.chromium b/third_party/android_deps/libs/org_ow2_asm_asm_tree/README.chromium index 68ff5fa..a5861c9 100644 --- a/third_party/android_deps/libs/org_ow2_asm_asm_tree/README.chromium +++ b/third_party/android_deps/libs/org_ow2_asm_asm_tree/README.chromium
@@ -1,7 +1,7 @@ Name: asm-tree Short Name: asm-tree URL: http://asm.ow2.io/ -Version: 9.2 +Version: 9.5 License: BSD License File: NOT_SHIPPED CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/org_ow2_asm_asm_tree/cipd.yaml b/third_party/android_deps/libs/org_ow2_asm_asm_tree/cipd.yaml index 270b1485..0b1b14a 100644 --- a/third_party/android_deps/libs/org_ow2_asm_asm_tree/cipd.yaml +++ b/third_party/android_deps/libs/org_ow2_asm_asm_tree/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@9.2.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@9.5.cr1 package: chromium/third_party/android_deps/libs/org_ow2_asm_asm_tree description: "asm-tree" data: -- file: asm-tree-9.2.jar +- file: asm-tree-9.5.jar
diff --git a/third_party/android_deps/libs/org_ow2_asm_asm_util/README.chromium b/third_party/android_deps/libs/org_ow2_asm_asm_util/README.chromium index 5c8724252..4dd6e9a 100644 --- a/third_party/android_deps/libs/org_ow2_asm_asm_util/README.chromium +++ b/third_party/android_deps/libs/org_ow2_asm_asm_util/README.chromium
@@ -1,7 +1,7 @@ Name: asm-util Short Name: asm-util URL: http://asm.ow2.io/ -Version: 9.2 +Version: 9.5 License: BSD License File: NOT_SHIPPED CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/org_ow2_asm_asm_util/cipd.yaml b/third_party/android_deps/libs/org_ow2_asm_asm_util/cipd.yaml index 23bff93..45a8b9f 100644 --- a/third_party/android_deps/libs/org_ow2_asm_asm_util/cipd.yaml +++ b/third_party/android_deps/libs/org_ow2_asm_asm_util/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@9.2.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@9.5.cr1 package: chromium/third_party/android_deps/libs/org_ow2_asm_asm_util description: "asm-util" data: -- file: asm-util-9.2.jar +- file: asm-util-9.5.jar
diff --git a/third_party/android_deps/libs/org_robolectric_annotations/README.chromium b/third_party/android_deps/libs/org_robolectric_annotations/README.chromium index aeca79a..66d856bc 100644 --- a/third_party/android_deps/libs/org_robolectric_annotations/README.chromium +++ b/third_party/android_deps/libs/org_robolectric_annotations/README.chromium
@@ -1,7 +1,7 @@ Name: annotations Short Name: annotations URL: http://robolectric.org -Version: 4.8.1 +Version: 4.10.2 License: MIT License File: NOT_SHIPPED CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/org_robolectric_annotations/cipd.yaml b/third_party/android_deps/libs/org_robolectric_annotations/cipd.yaml index 88843ba..ce25556f 100644 --- a/third_party/android_deps/libs/org_robolectric_annotations/cipd.yaml +++ b/third_party/android_deps/libs/org_robolectric_annotations/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@4.8.1.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@4.10.2.cr1 package: chromium/third_party/android_deps/libs/org_robolectric_annotations description: "annotations" data: -- file: annotations-4.8.1.jar +- file: annotations-4.10.2.jar
diff --git a/third_party/android_deps/libs/org_robolectric_junit/README.chromium b/third_party/android_deps/libs/org_robolectric_junit/README.chromium index 115d2a51..5383d2c5 100644 --- a/third_party/android_deps/libs/org_robolectric_junit/README.chromium +++ b/third_party/android_deps/libs/org_robolectric_junit/README.chromium
@@ -1,7 +1,7 @@ Name: junit Short Name: junit URL: http://robolectric.org -Version: 4.8.1 +Version: 4.10.2 License: MIT License File: NOT_SHIPPED CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/org_robolectric_junit/cipd.yaml b/third_party/android_deps/libs/org_robolectric_junit/cipd.yaml index 8b40192..6738bb4 100644 --- a/third_party/android_deps/libs/org_robolectric_junit/cipd.yaml +++ b/third_party/android_deps/libs/org_robolectric_junit/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@4.8.1.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@4.10.2.cr1 package: chromium/third_party/android_deps/libs/org_robolectric_junit description: "junit" data: -- file: junit-4.8.1.jar +- file: junit-4.10.2.jar
diff --git a/third_party/android_deps/libs/org_robolectric_nativeruntime/README.chromium b/third_party/android_deps/libs/org_robolectric_nativeruntime/README.chromium index b837dd9..b6993d5 100644 --- a/third_party/android_deps/libs/org_robolectric_nativeruntime/README.chromium +++ b/third_party/android_deps/libs/org_robolectric_nativeruntime/README.chromium
@@ -1,7 +1,7 @@ Name: nativeruntime Short Name: nativeruntime URL: http://robolectric.org -Version: 4.8.1 +Version: 4.10.2 License: MIT License File: NOT_SHIPPED CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/org_robolectric_nativeruntime/cipd.yaml b/third_party/android_deps/libs/org_robolectric_nativeruntime/cipd.yaml index 9f40612f..0597591c 100644 --- a/third_party/android_deps/libs/org_robolectric_nativeruntime/cipd.yaml +++ b/third_party/android_deps/libs/org_robolectric_nativeruntime/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@4.8.1.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@4.10.2.cr1 package: chromium/third_party/android_deps/libs/org_robolectric_nativeruntime description: "nativeruntime" data: -- file: nativeruntime-4.8.1.jar +- file: nativeruntime-4.10.2.jar
diff --git a/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on/3pp/3pp.pb b/third_party/android_deps/libs/org_robolectric_nativeruntime_dist_compat/3pp/3pp.pb similarity index 100% copy from third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on/3pp/3pp.pb copy to third_party/android_deps/libs/org_robolectric_nativeruntime_dist_compat/3pp/3pp.pb
diff --git a/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on/3pp/fetch.py b/third_party/android_deps/libs/org_robolectric_nativeruntime_dist_compat/3pp/fetch.py similarity index 96% copy from third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on/3pp/fetch.py copy to third_party/android_deps/libs/org_robolectric_nativeruntime_dist_compat/3pp/fetch.py index 851dd64..8ee89de 100755 --- a/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on/3pp/fetch.py +++ b/third_party/android_deps/libs/org_robolectric_nativeruntime_dist_compat/3pp/fetch.py
@@ -13,8 +13,8 @@ import urllib.request _REPO_URL = 'https://repo.maven.apache.org/maven2' -_GROUP_NAME = 'org/bouncycastle' -_MODULE_NAME = 'bcprov-jdk15on' +_GROUP_NAME = 'org/robolectric' +_MODULE_NAME = 'nativeruntime-dist-compat' _FILE_EXT = 'jar' _OVERRIDE_LATEST = None _PATCH_VERSION = 'cr1'
diff --git a/third_party/android_deps/libs/org_robolectric_nativeruntime_dist_compat/LICENSE b/third_party/android_deps/libs/org_robolectric_nativeruntime_dist_compat/LICENSE new file mode 100644 index 0000000..370fb55 --- /dev/null +++ b/third_party/android_deps/libs/org_robolectric_nativeruntime_dist_compat/LICENSE
@@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2009 codehaus.org. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.
diff --git a/third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on/OWNERS b/third_party/android_deps/libs/org_robolectric_nativeruntime_dist_compat/OWNERS similarity index 100% copy from third_party/android_deps/libs/org_bouncycastle_bcprov_jdk15on/OWNERS copy to third_party/android_deps/libs/org_robolectric_nativeruntime_dist_compat/OWNERS
diff --git a/third_party/android_deps/libs/org_robolectric_nativeruntime_dist_compat/README.chromium b/third_party/android_deps/libs/org_robolectric_nativeruntime_dist_compat/README.chromium new file mode 100644 index 0000000..64303b4 --- /dev/null +++ b/third_party/android_deps/libs/org_robolectric_nativeruntime_dist_compat/README.chromium
@@ -0,0 +1,14 @@ +Name: Robolectric Nativeruntime Distribution Compat +Short Name: nativeruntime-dist-compat +URL: https://source.android.com/ +Version: 1.0.1 +License: MIT +License File: NOT_SHIPPED +CPEPrefix: unknown +Security Critical: no + +Description: +Robolectric Nativeruntime Distribution Compat + +Local Modifications: +No modifications.
diff --git a/third_party/android_deps/libs/org_robolectric_nativeruntime_dist_compat/cipd.yaml b/third_party/android_deps/libs/org_robolectric_nativeruntime_dist_compat/cipd.yaml new file mode 100644 index 0000000..317a129 --- /dev/null +++ b/third_party/android_deps/libs/org_robolectric_nativeruntime_dist_compat/cipd.yaml
@@ -0,0 +1,10 @@ +# 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. + +# To create CIPD package run the following command. +# cipd create --pkg-def cipd.yaml -tag version:2@1.0.1.cr1 +package: chromium/third_party/android_deps/libs/org_robolectric_nativeruntime_dist_compat +description: "Robolectric Nativeruntime Distribution Compat" +data: +- file: nativeruntime-dist-compat-1.0.1.jar
diff --git a/third_party/android_deps/libs/org_robolectric_pluginapi/README.chromium b/third_party/android_deps/libs/org_robolectric_pluginapi/README.chromium index 90ba001..0bbc55b 100644 --- a/third_party/android_deps/libs/org_robolectric_pluginapi/README.chromium +++ b/third_party/android_deps/libs/org_robolectric_pluginapi/README.chromium
@@ -1,7 +1,7 @@ Name: pluginapi Short Name: pluginapi URL: http://robolectric.org -Version: 4.8.1 +Version: 4.10.2 License: MIT License File: NOT_SHIPPED CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/org_robolectric_pluginapi/cipd.yaml b/third_party/android_deps/libs/org_robolectric_pluginapi/cipd.yaml index d419f246..9114135 100644 --- a/third_party/android_deps/libs/org_robolectric_pluginapi/cipd.yaml +++ b/third_party/android_deps/libs/org_robolectric_pluginapi/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@4.8.1.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@4.10.2.cr1 package: chromium/third_party/android_deps/libs/org_robolectric_pluginapi description: "pluginapi" data: -- file: pluginapi-4.8.1.jar +- file: pluginapi-4.10.2.jar
diff --git a/third_party/android_deps/libs/org_robolectric_plugins_maven_dependency_resolver/README.chromium b/third_party/android_deps/libs/org_robolectric_plugins_maven_dependency_resolver/README.chromium index 4f1a222..e45e7ce 100644 --- a/third_party/android_deps/libs/org_robolectric_plugins_maven_dependency_resolver/README.chromium +++ b/third_party/android_deps/libs/org_robolectric_plugins_maven_dependency_resolver/README.chromium
@@ -1,7 +1,7 @@ Name: maven-dependency-resolver Short Name: plugins-maven-dependency-resolver URL: http://robolectric.org -Version: 4.8.1 +Version: 4.10.2 License: MIT License File: NOT_SHIPPED CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/org_robolectric_plugins_maven_dependency_resolver/cipd.yaml b/third_party/android_deps/libs/org_robolectric_plugins_maven_dependency_resolver/cipd.yaml index e40a239..ee530fd 100644 --- a/third_party/android_deps/libs/org_robolectric_plugins_maven_dependency_resolver/cipd.yaml +++ b/third_party/android_deps/libs/org_robolectric_plugins_maven_dependency_resolver/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@4.8.1.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@4.10.2.cr1 package: chromium/third_party/android_deps/libs/org_robolectric_plugins_maven_dependency_resolver description: "maven-dependency-resolver" data: -- file: plugins-maven-dependency-resolver-4.8.1.jar +- file: plugins-maven-dependency-resolver-4.10.2.jar
diff --git a/third_party/android_deps/libs/org_robolectric_resources/README.chromium b/third_party/android_deps/libs/org_robolectric_resources/README.chromium index 8025291..6bec6e3 100644 --- a/third_party/android_deps/libs/org_robolectric_resources/README.chromium +++ b/third_party/android_deps/libs/org_robolectric_resources/README.chromium
@@ -1,7 +1,7 @@ Name: resources Short Name: resources URL: http://robolectric.org -Version: 4.8.1 +Version: 4.10.2 License: MIT License File: NOT_SHIPPED CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/org_robolectric_resources/cipd.yaml b/third_party/android_deps/libs/org_robolectric_resources/cipd.yaml index 68c36ea..c47b98b7 100644 --- a/third_party/android_deps/libs/org_robolectric_resources/cipd.yaml +++ b/third_party/android_deps/libs/org_robolectric_resources/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@4.8.1.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@4.10.2.cr1 package: chromium/third_party/android_deps/libs/org_robolectric_resources description: "resources" data: -- file: resources-4.8.1.jar +- file: resources-4.10.2.jar
diff --git a/third_party/android_deps/libs/org_robolectric_robolectric/README.chromium b/third_party/android_deps/libs/org_robolectric_robolectric/README.chromium index 20253ea..eedc4fd 100644 --- a/third_party/android_deps/libs/org_robolectric_robolectric/README.chromium +++ b/third_party/android_deps/libs/org_robolectric_robolectric/README.chromium
@@ -1,7 +1,7 @@ Name: robolectric Short Name: robolectric URL: http://robolectric.org -Version: 4.8.1 +Version: 4.10.2 License: MIT License File: NOT_SHIPPED CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/org_robolectric_robolectric/cipd.yaml b/third_party/android_deps/libs/org_robolectric_robolectric/cipd.yaml index 6dfca55..28e4a91 100644 --- a/third_party/android_deps/libs/org_robolectric_robolectric/cipd.yaml +++ b/third_party/android_deps/libs/org_robolectric_robolectric/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@4.8.1.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@4.10.2.cr1 package: chromium/third_party/android_deps/libs/org_robolectric_robolectric description: "robolectric" data: -- file: robolectric-4.8.1.jar +- file: robolectric-4.10.2.jar
diff --git a/third_party/android_deps/libs/org_robolectric_sandbox/README.chromium b/third_party/android_deps/libs/org_robolectric_sandbox/README.chromium index 6c2f61b6..530536e 100644 --- a/third_party/android_deps/libs/org_robolectric_sandbox/README.chromium +++ b/third_party/android_deps/libs/org_robolectric_sandbox/README.chromium
@@ -1,7 +1,7 @@ Name: sandbox Short Name: sandbox URL: http://robolectric.org -Version: 4.8.1 +Version: 4.10.2 License: MIT License File: NOT_SHIPPED CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/org_robolectric_sandbox/cipd.yaml b/third_party/android_deps/libs/org_robolectric_sandbox/cipd.yaml index 26eeac1f..5367ed48 100644 --- a/third_party/android_deps/libs/org_robolectric_sandbox/cipd.yaml +++ b/third_party/android_deps/libs/org_robolectric_sandbox/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@4.8.1.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@4.10.2.cr1 package: chromium/third_party/android_deps/libs/org_robolectric_sandbox description: "sandbox" data: -- file: sandbox-4.8.1.jar +- file: sandbox-4.10.2.jar
diff --git a/third_party/android_deps/libs/org_robolectric_shadowapi/README.chromium b/third_party/android_deps/libs/org_robolectric_shadowapi/README.chromium index e69c3899..46b8019b 100644 --- a/third_party/android_deps/libs/org_robolectric_shadowapi/README.chromium +++ b/third_party/android_deps/libs/org_robolectric_shadowapi/README.chromium
@@ -1,7 +1,7 @@ Name: shadowapi Short Name: shadowapi URL: http://robolectric.org -Version: 4.8.1 +Version: 4.10.2 License: MIT License File: NOT_SHIPPED CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/org_robolectric_shadowapi/cipd.yaml b/third_party/android_deps/libs/org_robolectric_shadowapi/cipd.yaml index 7fdab9a..7f57d4dc 100644 --- a/third_party/android_deps/libs/org_robolectric_shadowapi/cipd.yaml +++ b/third_party/android_deps/libs/org_robolectric_shadowapi/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@4.8.1.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@4.10.2.cr1 package: chromium/third_party/android_deps/libs/org_robolectric_shadowapi description: "shadowapi" data: -- file: shadowapi-4.8.1.jar +- file: shadowapi-4.10.2.jar
diff --git a/third_party/android_deps/libs/org_robolectric_shadows_framework/README.chromium b/third_party/android_deps/libs/org_robolectric_shadows_framework/README.chromium index b347f5da..dbaa7f3 100644 --- a/third_party/android_deps/libs/org_robolectric_shadows_framework/README.chromium +++ b/third_party/android_deps/libs/org_robolectric_shadows_framework/README.chromium
@@ -1,7 +1,7 @@ Name: framework Short Name: shadows-framework URL: http://robolectric.org -Version: 4.8.1 +Version: 4.10.2 License: MIT License File: NOT_SHIPPED CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/org_robolectric_shadows_framework/cipd.yaml b/third_party/android_deps/libs/org_robolectric_shadows_framework/cipd.yaml index 4ee742b3..d079b83 100644 --- a/third_party/android_deps/libs/org_robolectric_shadows_framework/cipd.yaml +++ b/third_party/android_deps/libs/org_robolectric_shadows_framework/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@4.8.1.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@4.10.2.cr1 package: chromium/third_party/android_deps/libs/org_robolectric_shadows_framework description: "framework" data: -- file: shadows-framework-4.8.1.jar +- file: shadows-framework-4.10.2.jar
diff --git a/third_party/android_deps/libs/org_robolectric_shadows_playservices/README.chromium b/third_party/android_deps/libs/org_robolectric_shadows_playservices/README.chromium index ced6929b..104928ed 100644 --- a/third_party/android_deps/libs/org_robolectric_shadows_playservices/README.chromium +++ b/third_party/android_deps/libs/org_robolectric_shadows_playservices/README.chromium
@@ -1,7 +1,7 @@ Name: playservices Short Name: shadows-playservices URL: http://robolectric.org -Version: 4.8.1 +Version: 4.10.2 License: MIT License File: NOT_SHIPPED CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/org_robolectric_shadows_playservices/cipd.yaml b/third_party/android_deps/libs/org_robolectric_shadows_playservices/cipd.yaml index e551091..534d741c 100644 --- a/third_party/android_deps/libs/org_robolectric_shadows_playservices/cipd.yaml +++ b/third_party/android_deps/libs/org_robolectric_shadows_playservices/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@4.8.1.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@4.10.2.cr1 package: chromium/third_party/android_deps/libs/org_robolectric_shadows_playservices description: "playservices" data: -- file: shadows-playservices-4.8.1.jar +- file: shadows-playservices-4.10.2.jar
diff --git a/third_party/android_deps/libs/org_robolectric_utils/README.chromium b/third_party/android_deps/libs/org_robolectric_utils/README.chromium index c16cc5d3..d338434a 100644 --- a/third_party/android_deps/libs/org_robolectric_utils/README.chromium +++ b/third_party/android_deps/libs/org_robolectric_utils/README.chromium
@@ -1,7 +1,7 @@ Name: utils Short Name: utils URL: http://robolectric.org -Version: 4.8.1 +Version: 4.10.2 License: MIT License File: NOT_SHIPPED CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/org_robolectric_utils/cipd.yaml b/third_party/android_deps/libs/org_robolectric_utils/cipd.yaml index 197ed29..e045e4ff 100644 --- a/third_party/android_deps/libs/org_robolectric_utils/cipd.yaml +++ b/third_party/android_deps/libs/org_robolectric_utils/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@4.8.1.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@4.10.2.cr1 package: chromium/third_party/android_deps/libs/org_robolectric_utils description: "utils" data: -- file: utils-4.8.1.jar +- file: utils-4.10.2.jar
diff --git a/third_party/android_deps/libs/org_robolectric_utils_reflector/README.chromium b/third_party/android_deps/libs/org_robolectric_utils_reflector/README.chromium index 7d82f45..dc26c04 100644 --- a/third_party/android_deps/libs/org_robolectric_utils_reflector/README.chromium +++ b/third_party/android_deps/libs/org_robolectric_utils_reflector/README.chromium
@@ -1,7 +1,7 @@ Name: reflector Short Name: utils-reflector URL: http://robolectric.org -Version: 4.8.1 +Version: 4.10.2 License: MIT License File: NOT_SHIPPED CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/org_robolectric_utils_reflector/cipd.yaml b/third_party/android_deps/libs/org_robolectric_utils_reflector/cipd.yaml index 79665d7e..0fe7028 100644 --- a/third_party/android_deps/libs/org_robolectric_utils_reflector/cipd.yaml +++ b/third_party/android_deps/libs/org_robolectric_utils_reflector/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@4.8.1.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@4.10.2.cr1 package: chromium/third_party/android_deps/libs/org_robolectric_utils_reflector description: "reflector" data: -- file: utils-reflector-4.8.1.jar +- file: utils-reflector-4.10.2.jar
diff --git a/third_party/bidimapper/README.chromium b/third_party/bidimapper/README.chromium index 94ee79a..61a2bbfa 100644 --- a/third_party/bidimapper/README.chromium +++ b/third_party/bidimapper/README.chromium
@@ -1,10 +1,10 @@ Name: Implementation of WebDriver BiDi standard Short Name: chromium-bidi -URL: https://github.com/GoogleChromeLabs/chromium-bidi/archive/cf61814923d6ce44ba198d2296003028e17a472b.zip +URL: https://github.com/GoogleChromeLabs/chromium-bidi/archive/175fa98da68f37a5194b5f54b286abbfd5402437.zip Version: 0 -Date: 2023-04-12 -Revision: cf61814923d6ce44ba198d2296003028e17a472b -SHA-512: 72c6c5cd5ade0b586b6789ef06c4c2b50c02b31a0173f0f780962b9c777c7652681714bd442ec11402cd47b9866f03a546a29af081bfc1ab5ef552969c7d12d5 +Date: 2023-05-08 +Revision: 175fa98da68f37a5194b5f54b286abbfd5402437 +SHA-512: 39f4f9df108166afec30818e22d6bba122d33c6d7dc92c71178a99624c84e5f7624c59b53b94b9653380694aff83f1543420be2d2a2d57fb96a05f1c7b93e074 License: Apache 2.0 License File: LICENSE Security Critical: no
diff --git a/third_party/bidimapper/mapper.js b/third_party/bidimapper/mapper.js index 2f9012b5..f4796a4f 100644 --- a/third_party/bidimapper/mapper.js +++ b/third_party/bidimapper/mapper.js
@@ -1,4 +1,4 @@ -var mapperTab=function(){"use strict";var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t={},s={},n={},r={},a={},i={},o={};!function(e){var t;Object.defineProperty(e,"__esModule",{value:!0}),e.getParsedType=e.ZodParsedType=e.objectUtil=e.util=void 0,function(e){e.assertEqual=e=>e,e.assertIs=function(e){},e.assertNever=function(e){throw new Error},e.arrayToEnum=e=>{const t={};for(const s of e)t[s]=s;return t},e.getValidEnumValues=t=>{const s=e.objectKeys(t).filter((e=>"number"!=typeof t[t[e]])),n={};for(const e of s)n[e]=t[e];return e.objectValues(n)},e.objectValues=t=>e.objectKeys(t).map((function(e){return t[e]})),e.objectKeys="function"==typeof Object.keys?e=>Object.keys(e):e=>{const t=[];for(const s in e)Object.prototype.hasOwnProperty.call(e,s)&&t.push(s);return t},e.find=(e,t)=>{for(const s of e)if(t(s))return s},e.isInteger="function"==typeof Number.isInteger?e=>Number.isInteger(e):e=>"number"==typeof e&&isFinite(e)&&Math.floor(e)===e,e.joinValues=function(e,t=" | "){return e.map((e=>"string"==typeof e?`'${e}'`:e)).join(t)},e.jsonStringifyReplacer=(e,t)=>"bigint"==typeof t?t.toString():t}(t=e.util||(e.util={})),(e.objectUtil||(e.objectUtil={})).mergeShapes=(e,t)=>({...e,...t}),e.ZodParsedType=t.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]);e.getParsedType=t=>{switch(typeof t){case"undefined":return e.ZodParsedType.undefined;case"string":return e.ZodParsedType.string;case"number":return isNaN(t)?e.ZodParsedType.nan:e.ZodParsedType.number;case"boolean":return e.ZodParsedType.boolean;case"function":return e.ZodParsedType.function;case"bigint":return e.ZodParsedType.bigint;case"symbol":return e.ZodParsedType.symbol;case"object":return Array.isArray(t)?e.ZodParsedType.array:null===t?e.ZodParsedType.null:t.then&&"function"==typeof t.then&&t.catch&&"function"==typeof t.catch?e.ZodParsedType.promise:"undefined"!=typeof Map&&t instanceof Map?e.ZodParsedType.map:"undefined"!=typeof Set&&t instanceof Set?e.ZodParsedType.set:"undefined"!=typeof Date&&t instanceof Date?e.ZodParsedType.date:e.ZodParsedType.object;default:return e.ZodParsedType.unknown}}}(o);var d={};Object.defineProperty(d,"__esModule",{value:!0}),d.ZodError=d.quotelessJson=d.ZodIssueCode=void 0;const c=o;d.ZodIssueCode=c.util.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);d.quotelessJson=e=>JSON.stringify(e,null,2).replace(/"([^"]+)":/g,"$1:");class u extends Error{constructor(e){super(),this.issues=[],this.addIssue=e=>{this.issues=[...this.issues,e]},this.addIssues=(e=[])=>{this.issues=[...this.issues,...e]};const t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=e}get errors(){return this.issues}format(e){const t=e||function(e){return e.message},s={_errors:[]},n=e=>{for(const r of e.issues)if("invalid_union"===r.code)r.unionErrors.map(n);else if("invalid_return_type"===r.code)n(r.returnTypeError);else if("invalid_arguments"===r.code)n(r.argumentsError);else if(0===r.path.length)s._errors.push(t(r));else{let e=s,n=0;for(;n<r.path.length;){const s=r.path[n];n===r.path.length-1?(e[s]=e[s]||{_errors:[]},e[s]._errors.push(t(r))):e[s]=e[s]||{_errors:[]},e=e[s],n++}}};return n(this),s}toString(){return this.message}get message(){return JSON.stringify(this.issues,c.util.jsonStringifyReplacer,2)}get isEmpty(){return 0===this.issues.length}flatten(e=(e=>e.message)){const t={},s=[];for(const n of this.issues)n.path.length>0?(t[n.path[0]]=t[n.path[0]]||[],t[n.path[0]].push(e(n))):s.push(e(n));return{formErrors:s,fieldErrors:t}}get formErrors(){return this.flatten()}}d.ZodError=u,u.create=e=>new u(e),Object.defineProperty(i,"__esModule",{value:!0});const l=o,p=d;i.default=(e,t)=>{let s;switch(e.code){case p.ZodIssueCode.invalid_type:s=e.received===l.ZodParsedType.undefined?"Required":`Expected ${e.expected}, received ${e.received}`;break;case p.ZodIssueCode.invalid_literal:s=`Invalid literal value, expected ${JSON.stringify(e.expected,l.util.jsonStringifyReplacer)}`;break;case p.ZodIssueCode.unrecognized_keys:s=`Unrecognized key(s) in object: ${l.util.joinValues(e.keys,", ")}`;break;case p.ZodIssueCode.invalid_union:s="Invalid input";break;case p.ZodIssueCode.invalid_union_discriminator:s=`Invalid discriminator value. Expected ${l.util.joinValues(e.options)}`;break;case p.ZodIssueCode.invalid_enum_value:s=`Invalid enum value. Expected ${l.util.joinValues(e.options)}, received '${e.received}'`;break;case p.ZodIssueCode.invalid_arguments:s="Invalid function arguments";break;case p.ZodIssueCode.invalid_return_type:s="Invalid function return type";break;case p.ZodIssueCode.invalid_date:s="Invalid date";break;case p.ZodIssueCode.invalid_string:"object"==typeof e.validation?"includes"in e.validation?(s=`Invalid input: must include "${e.validation.includes}"`,"number"==typeof e.validation.position&&(s=`${s} at one or more positions greater than or equal to ${e.validation.position}`)):"startsWith"in e.validation?s=`Invalid input: must start with "${e.validation.startsWith}"`:"endsWith"in e.validation?s=`Invalid input: must end with "${e.validation.endsWith}"`:l.util.assertNever(e.validation):s="regex"!==e.validation?`Invalid ${e.validation}`:"Invalid";break;case p.ZodIssueCode.too_small:s="array"===e.type?`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:"string"===e.type?`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:"number"===e.type?`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:"date"===e.type?`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:"Invalid input";break;case p.ZodIssueCode.too_big:s="array"===e.type?`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:"string"===e.type?`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:"number"===e.type?`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:"bigint"===e.type?`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:"date"===e.type?`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`:"Invalid input";break;case p.ZodIssueCode.custom:s="Invalid input";break;case p.ZodIssueCode.invalid_intersection_types:s="Intersection results could not be merged";break;case p.ZodIssueCode.not_multiple_of:s=`Number must be a multiple of ${e.multipleOf}`;break;case p.ZodIssueCode.not_finite:s="Number must be finite";break;default:s=t.defaultError,l.util.assertNever(e)}return{message:s}};var h=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0}),a.getErrorMap=a.setErrorMap=a.defaultErrorMap=void 0;const m=h(i);a.defaultErrorMap=m.default;let g=m.default;a.setErrorMap=function(e){g=e},a.getErrorMap=function(){return g};var f={};!function(t){var s=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.isAsync=t.isValid=t.isDirty=t.isAborted=t.OK=t.DIRTY=t.INVALID=t.ParseStatus=t.addIssueToContext=t.EMPTY_PATH=t.makeIssue=void 0;const n=a,r=s(i);t.makeIssue=e=>{const{data:t,path:s,errorMaps:n,issueData:r}=e,a=[...s,...r.path||[]],i={...r,path:a};let o="";const d=n.filter((e=>!!e)).slice().reverse();for(const e of d)o=e(i,{data:t,defaultError:o}).message;return{...r,path:a,message:r.message||o}},t.EMPTY_PATH=[],t.addIssueToContext=function(e,s){const a=(0,t.makeIssue)({issueData:s,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,(0,n.getErrorMap)(),r.default].filter((e=>!!e))});e.common.issues.push(a)};class o{constructor(){this.value="valid"}dirty(){"valid"===this.value&&(this.value="dirty")}abort(){"aborted"!==this.value&&(this.value="aborted")}static mergeArray(e,s){const n=[];for(const r of s){if("aborted"===r.status)return t.INVALID;"dirty"===r.status&&e.dirty(),n.push(r.value)}return{status:e.value,value:n}}static async mergeObjectAsync(e,t){const s=[];for(const e of t)s.push({key:await e.key,value:await e.value});return o.mergeObjectSync(e,s)}static mergeObjectSync(e,s){const n={};for(const r of s){const{key:s,value:a}=r;if("aborted"===s.status)return t.INVALID;if("aborted"===a.status)return t.INVALID;"dirty"===s.status&&e.dirty(),"dirty"===a.status&&e.dirty(),(void 0!==a.value||r.alwaysSet)&&(n[s.value]=a.value)}return{status:e.value,value:n}}}t.ParseStatus=o,t.INVALID=Object.freeze({status:"aborted"});t.DIRTY=e=>({status:"dirty",value:e});t.OK=e=>({status:"valid",value:e});t.isAborted=e=>"aborted"===e.status;t.isDirty=e=>"dirty"===e.status;t.isValid=e=>"valid"===e.status;t.isAsync=e=>"undefined"!=typeof Promise&&e instanceof Promise}(f);var v={};Object.defineProperty(v,"__esModule",{value:!0});var y,x={},b={};y=b,Object.defineProperty(y,"__esModule",{value:!0}),y.errorUtil=void 0,function(e){e.errToObj=e=>"string"==typeof e?{message:e}:e||{},e.toString=e=>"string"==typeof e?e:null==e?void 0:e.message}(y.errorUtil||(y.errorUtil={})),function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.discriminatedUnion=e.date=e.boolean=e.bigint=e.array=e.any=e.coerce=e.ZodFirstPartyTypeKind=e.late=e.ZodSchema=e.Schema=e.custom=e.ZodPipeline=e.ZodBranded=e.BRAND=e.ZodNaN=e.ZodCatch=e.ZodDefault=e.ZodNullable=e.ZodOptional=e.ZodTransformer=e.ZodEffects=e.ZodPromise=e.ZodNativeEnum=e.ZodEnum=e.ZodLiteral=e.ZodLazy=e.ZodFunction=e.ZodSet=e.ZodMap=e.ZodRecord=e.ZodTuple=e.ZodIntersection=e.ZodDiscriminatedUnion=e.ZodUnion=e.ZodObject=e.ZodArray=e.ZodVoid=e.ZodNever=e.ZodUnknown=e.ZodAny=e.ZodNull=e.ZodUndefined=e.ZodSymbol=e.ZodDate=e.ZodBoolean=e.ZodBigInt=e.ZodNumber=e.ZodString=e.ZodType=void 0,e.NEVER=e.void=e.unknown=e.union=e.undefined=e.tuple=e.transformer=e.symbol=e.string=e.strictObject=e.set=e.record=e.promise=e.preprocess=e.pipeline=e.ostring=e.optional=e.onumber=e.oboolean=e.object=e.number=e.nullable=e.null=e.never=e.nativeEnum=e.nan=e.map=e.literal=e.lazy=e.intersection=e.instanceof=e.function=e.enum=e.effect=void 0;const t=a,s=b,n=f,r=o,i=d;class c{constructor(e,t,s,n){this._cachedPath=[],this.parent=e,this.data=t,this._path=s,this._key=n}get path(){return this._cachedPath.length||(this._key instanceof Array?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}const u=(e,t)=>{if((0,n.isValid)(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const t=new i.ZodError(e.common.issues);return this._error=t,this._error}}};function l(e){if(!e)return{};const{errorMap:t,invalid_type_error:s,required_error:n,description:r}=e;if(t&&(s||n))throw new Error('Can\'t use "invalid_type_error" or "required_error" in conjunction with custom error map.');if(t)return{errorMap:t,description:r};return{errorMap:(e,t)=>"invalid_type"!==e.code?{message:t.defaultError}:void 0===t.data?{message:null!=n?n:t.defaultError}:{message:null!=s?s:t.defaultError},description:r}}class p{constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this)}get description(){return this._def.description}_getType(e){return(0,r.getParsedType)(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:(0,r.getParsedType)(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new n.ParseStatus,ctx:{common:e.parent.common,data:e.data,parsedType:(0,r.getParsedType)(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){const t=this._parse(e);if((0,n.isAsync)(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(e){const t=this._parse(e);return Promise.resolve(t)}parse(e,t){const s=this.safeParse(e,t);if(s.success)return s.data;throw s.error}safeParse(e,t){var s;const n={common:{issues:[],async:null!==(s=null==t?void 0:t.async)&&void 0!==s&&s,contextualErrorMap:null==t?void 0:t.errorMap},path:(null==t?void 0:t.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,r.getParsedType)(e)},a=this._parseSync({data:e,path:n.path,parent:n});return u(n,a)}async parseAsync(e,t){const s=await this.safeParseAsync(e,t);if(s.success)return s.data;throw s.error}async safeParseAsync(e,t){const s={common:{issues:[],contextualErrorMap:null==t?void 0:t.errorMap,async:!0},path:(null==t?void 0:t.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,r.getParsedType)(e)},a=this._parse({data:e,path:s.path,parent:s}),i=await((0,n.isAsync)(a)?a:Promise.resolve(a));return u(s,i)}refine(e,t){const s=e=>"string"==typeof t||void 0===t?{message:t}:"function"==typeof t?t(e):t;return this._refinement(((t,n)=>{const r=e(t),a=()=>n.addIssue({code:i.ZodIssueCode.custom,...s(t)});return"undefined"!=typeof Promise&&r instanceof Promise?r.then((e=>!!e||(a(),!1))):!!r||(a(),!1)}))}refinement(e,t){return this._refinement(((s,n)=>!!e(s)||(n.addIssue("function"==typeof t?t(s,n):t),!1)))}_refinement(e){return new te({schema:this,typeName:ce.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}optional(){return se.create(this,this._def)}nullable(){return ne.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return j.create(this,this._def)}promise(){return ee.create(this,this._def)}or(e){return L.create([this,e],this._def)}and(e){return $.create(this,e,this._def)}transform(e){return new te({...l(this._def),schema:this,typeName:ce.ZodEffects,effect:{type:"transform",transform:e}})}default(e){const t="function"==typeof e?e:()=>e;return new re({...l(this._def),innerType:this,defaultValue:t,typeName:ce.ZodDefault})}brand(){return new oe({typeName:ce.ZodBranded,type:this,...l(this._def)})}catch(e){const t="function"==typeof e?e:()=>e;return new ae({...l(this._def),innerType:this,catchValue:t,typeName:ce.ZodCatch})}describe(e){return new(0,this.constructor)({...this._def,description:e})}pipe(e){return de.create(this,e)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}e.ZodType=p,e.Schema=p,e.ZodSchema=p;const h=/^c[^\s-]{8,}$/i,m=/^[a-z][a-z0-9]*$/,g=/[0-9A-HJKMNP-TV-Z]{26}/,v=/^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i,y=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\])|(\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\.[A-Za-z]{2,})+))$/,x=/^(\p{Extended_Pictographic}|\p{Emoji_Component})+$/u,C=/^(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))$/,w=/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;class _ extends p{constructor(){super(...arguments),this._regex=(e,t,n)=>this.refinement((t=>e.test(t)),{validation:t,code:i.ZodIssueCode.invalid_string,...s.errorUtil.errToObj(n)}),this.nonempty=e=>this.min(1,s.errorUtil.errToObj(e)),this.trim=()=>new _({...this._def,checks:[...this._def.checks,{kind:"trim"}]}),this.toLowerCase=()=>new _({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]}),this.toUpperCase=()=>new _({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}_parse(e){this._def.coerce&&(e.data=String(e.data));if(this._getType(e)!==r.ZodParsedType.string){const t=this._getOrReturnCtx(e);return(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:r.ZodParsedType.string,received:t.parsedType}),n.INVALID}const t=new n.ParseStatus;let s;for(const c of this._def.checks)if("min"===c.kind)e.data.length<c.value&&(s=this._getOrReturnCtx(e,s),(0,n.addIssueToContext)(s,{code:i.ZodIssueCode.too_small,minimum:c.value,type:"string",inclusive:!0,exact:!1,message:c.message}),t.dirty());else if("max"===c.kind)e.data.length>c.value&&(s=this._getOrReturnCtx(e,s),(0,n.addIssueToContext)(s,{code:i.ZodIssueCode.too_big,maximum:c.value,type:"string",inclusive:!0,exact:!1,message:c.message}),t.dirty());else if("length"===c.kind){const r=e.data.length>c.value,a=e.data.length<c.value;(r||a)&&(s=this._getOrReturnCtx(e,s),r?(0,n.addIssueToContext)(s,{code:i.ZodIssueCode.too_big,maximum:c.value,type:"string",inclusive:!0,exact:!0,message:c.message}):a&&(0,n.addIssueToContext)(s,{code:i.ZodIssueCode.too_small,minimum:c.value,type:"string",inclusive:!0,exact:!0,message:c.message}),t.dirty())}else if("email"===c.kind)y.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,n.addIssueToContext)(s,{validation:"email",code:i.ZodIssueCode.invalid_string,message:c.message}),t.dirty());else if("emoji"===c.kind)x.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,n.addIssueToContext)(s,{validation:"emoji",code:i.ZodIssueCode.invalid_string,message:c.message}),t.dirty());else if("uuid"===c.kind)v.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,n.addIssueToContext)(s,{validation:"uuid",code:i.ZodIssueCode.invalid_string,message:c.message}),t.dirty());else if("cuid"===c.kind)h.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,n.addIssueToContext)(s,{validation:"cuid",code:i.ZodIssueCode.invalid_string,message:c.message}),t.dirty());else if("cuid2"===c.kind)m.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,n.addIssueToContext)(s,{validation:"cuid2",code:i.ZodIssueCode.invalid_string,message:c.message}),t.dirty());else if("ulid"===c.kind)g.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,n.addIssueToContext)(s,{validation:"ulid",code:i.ZodIssueCode.invalid_string,message:c.message}),t.dirty());else if("url"===c.kind)try{new URL(e.data)}catch(r){s=this._getOrReturnCtx(e,s),(0,n.addIssueToContext)(s,{validation:"url",code:i.ZodIssueCode.invalid_string,message:c.message}),t.dirty()}else if("regex"===c.kind){c.regex.lastIndex=0;c.regex.test(e.data)||(s=this._getOrReturnCtx(e,s),(0,n.addIssueToContext)(s,{validation:"regex",code:i.ZodIssueCode.invalid_string,message:c.message}),t.dirty())}else if("trim"===c.kind)e.data=e.data.trim();else if("includes"===c.kind)e.data.includes(c.value,c.position)||(s=this._getOrReturnCtx(e,s),(0,n.addIssueToContext)(s,{code:i.ZodIssueCode.invalid_string,validation:{includes:c.value,position:c.position},message:c.message}),t.dirty());else if("toLowerCase"===c.kind)e.data=e.data.toLowerCase();else if("toUpperCase"===c.kind)e.data=e.data.toUpperCase();else if("startsWith"===c.kind)e.data.startsWith(c.value)||(s=this._getOrReturnCtx(e,s),(0,n.addIssueToContext)(s,{code:i.ZodIssueCode.invalid_string,validation:{startsWith:c.value},message:c.message}),t.dirty());else if("endsWith"===c.kind)e.data.endsWith(c.value)||(s=this._getOrReturnCtx(e,s),(0,n.addIssueToContext)(s,{code:i.ZodIssueCode.invalid_string,validation:{endsWith:c.value},message:c.message}),t.dirty());else if("datetime"===c.kind){((d=c).precision?d.offset?new RegExp(`^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{${d.precision}}(([+-]\\d{2}(:?\\d{2})?)|Z)$`):new RegExp(`^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{${d.precision}}Z$`):0===d.precision?d.offset?new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(([+-]\\d{2}(:?\\d{2})?)|Z)$"):new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"):d.offset?new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(([+-]\\d{2}(:?\\d{2})?)|Z)$"):new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z$")).test(e.data)||(s=this._getOrReturnCtx(e,s),(0,n.addIssueToContext)(s,{code:i.ZodIssueCode.invalid_string,validation:"datetime",message:c.message}),t.dirty())}else"ip"===c.kind?(a=e.data,("v4"!==(o=c.version)&&o||!C.test(a))&&("v6"!==o&&o||!w.test(a))&&(s=this._getOrReturnCtx(e,s),(0,n.addIssueToContext)(s,{validation:"ip",code:i.ZodIssueCode.invalid_string,message:c.message}),t.dirty())):r.util.assertNever(c);var a,o,d;return{status:t.value,value:e.data}}_addCheck(e){return new _({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...s.errorUtil.errToObj(e)})}url(e){return this._addCheck({kind:"url",...s.errorUtil.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...s.errorUtil.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...s.errorUtil.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...s.errorUtil.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...s.errorUtil.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...s.errorUtil.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...s.errorUtil.errToObj(e)})}datetime(e){var t;return"string"==typeof e?this._addCheck({kind:"datetime",precision:null,offset:!1,message:e}):this._addCheck({kind:"datetime",precision:void 0===(null==e?void 0:e.precision)?null:null==e?void 0:e.precision,offset:null!==(t=null==e?void 0:e.offset)&&void 0!==t&&t,...s.errorUtil.errToObj(null==e?void 0:e.message)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...s.errorUtil.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:null==t?void 0:t.position,...s.errorUtil.errToObj(null==t?void 0:t.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...s.errorUtil.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...s.errorUtil.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...s.errorUtil.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...s.errorUtil.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...s.errorUtil.errToObj(t)})}get isDatetime(){return!!this._def.checks.find((e=>"datetime"===e.kind))}get isEmail(){return!!this._def.checks.find((e=>"email"===e.kind))}get isURL(){return!!this._def.checks.find((e=>"url"===e.kind))}get isEmoji(){return!!this._def.checks.find((e=>"emoji"===e.kind))}get isUUID(){return!!this._def.checks.find((e=>"uuid"===e.kind))}get isCUID(){return!!this._def.checks.find((e=>"cuid"===e.kind))}get isCUID2(){return!!this._def.checks.find((e=>"cuid2"===e.kind))}get isULID(){return!!this._def.checks.find((e=>"ulid"===e.kind))}get isIP(){return!!this._def.checks.find((e=>"ip"===e.kind))}get minLength(){let e=null;for(const t of this._def.checks)"min"===t.kind&&(null===e||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(const t of this._def.checks)"max"===t.kind&&(null===e||t.value<e)&&(e=t.value);return e}}function I(e,t){const s=(e.toString().split(".")[1]||"").length,n=(t.toString().split(".")[1]||"").length,r=s>n?s:n;return parseInt(e.toFixed(r).replace(".",""))%parseInt(t.toFixed(r).replace(".",""))/Math.pow(10,r)}e.ZodString=_,_.create=e=>{var t;return new _({checks:[],typeName:ce.ZodString,coerce:null!==(t=null==e?void 0:e.coerce)&&void 0!==t&&t,...l(e)})};class S extends p{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){this._def.coerce&&(e.data=Number(e.data));if(this._getType(e)!==r.ZodParsedType.number){const t=this._getOrReturnCtx(e);return(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:r.ZodParsedType.number,received:t.parsedType}),n.INVALID}let t;const s=new n.ParseStatus;for(const a of this._def.checks)if("int"===a.kind)r.util.isInteger(e.data)||(t=this._getOrReturnCtx(e,t),(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:"integer",received:"float",message:a.message}),s.dirty());else if("min"===a.kind){(a.inclusive?e.data<a.value:e.data<=a.value)&&(t=this._getOrReturnCtx(e,t),(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.too_small,minimum:a.value,type:"number",inclusive:a.inclusive,exact:!1,message:a.message}),s.dirty())}else if("max"===a.kind){(a.inclusive?e.data>a.value:e.data>=a.value)&&(t=this._getOrReturnCtx(e,t),(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.too_big,maximum:a.value,type:"number",inclusive:a.inclusive,exact:!1,message:a.message}),s.dirty())}else"multipleOf"===a.kind?0!==I(e.data,a.value)&&(t=this._getOrReturnCtx(e,t),(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.not_multiple_of,multipleOf:a.value,message:a.message}),s.dirty()):"finite"===a.kind?Number.isFinite(e.data)||(t=this._getOrReturnCtx(e,t),(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.not_finite,message:a.message}),s.dirty()):r.util.assertNever(a);return{status:s.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,s.errorUtil.toString(t))}gt(e,t){return this.setLimit("min",e,!1,s.errorUtil.toString(t))}lte(e,t){return this.setLimit("max",e,!0,s.errorUtil.toString(t))}lt(e,t){return this.setLimit("max",e,!1,s.errorUtil.toString(t))}setLimit(e,t,n,r){return new S({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:s.errorUtil.toString(r)}]})}_addCheck(e){return new S({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:s.errorUtil.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:s.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:s.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:s.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:s.errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:s.errorUtil.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:s.errorUtil.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:s.errorUtil.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:s.errorUtil.toString(e)})}get minValue(){let e=null;for(const t of this._def.checks)"min"===t.kind&&(null===e||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(const t of this._def.checks)"max"===t.kind&&(null===e||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find((e=>"int"===e.kind||"multipleOf"===e.kind&&r.util.isInteger(e.value)))}get isFinite(){let e=null,t=null;for(const s of this._def.checks){if("finite"===s.kind||"int"===s.kind||"multipleOf"===s.kind)return!0;"min"===s.kind?(null===t||s.value>t)&&(t=s.value):"max"===s.kind&&(null===e||s.value<e)&&(e=s.value)}return Number.isFinite(t)&&Number.isFinite(e)}}e.ZodNumber=S,S.create=e=>new S({checks:[],typeName:ce.ZodNumber,coerce:(null==e?void 0:e.coerce)||!1,...l(e)});class E extends p{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){this._def.coerce&&(e.data=BigInt(e.data));if(this._getType(e)!==r.ZodParsedType.bigint){const t=this._getOrReturnCtx(e);return(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:r.ZodParsedType.bigint,received:t.parsedType}),n.INVALID}let t;const s=new n.ParseStatus;for(const a of this._def.checks)if("min"===a.kind){(a.inclusive?e.data<a.value:e.data<=a.value)&&(t=this._getOrReturnCtx(e,t),(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.too_small,type:"bigint",minimum:a.value,inclusive:a.inclusive,message:a.message}),s.dirty())}else if("max"===a.kind){(a.inclusive?e.data>a.value:e.data>=a.value)&&(t=this._getOrReturnCtx(e,t),(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.too_big,type:"bigint",maximum:a.value,inclusive:a.inclusive,message:a.message}),s.dirty())}else"multipleOf"===a.kind?e.data%a.value!==BigInt(0)&&(t=this._getOrReturnCtx(e,t),(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.not_multiple_of,multipleOf:a.value,message:a.message}),s.dirty()):r.util.assertNever(a);return{status:s.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,s.errorUtil.toString(t))}gt(e,t){return this.setLimit("min",e,!1,s.errorUtil.toString(t))}lte(e,t){return this.setLimit("max",e,!0,s.errorUtil.toString(t))}lt(e,t){return this.setLimit("max",e,!1,s.errorUtil.toString(t))}setLimit(e,t,n,r){return new E({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:s.errorUtil.toString(r)}]})}_addCheck(e){return new E({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:s.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:s.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:s.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:s.errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:s.errorUtil.toString(t)})}get minValue(){let e=null;for(const t of this._def.checks)"min"===t.kind&&(null===e||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(const t of this._def.checks)"max"===t.kind&&(null===e||t.value<e)&&(e=t.value);return e}}e.ZodBigInt=E,E.create=e=>{var t;return new E({checks:[],typeName:ce.ZodBigInt,coerce:null!==(t=null==e?void 0:e.coerce)&&void 0!==t&&t,...l(e)})};class T extends p{_parse(e){this._def.coerce&&(e.data=Boolean(e.data));if(this._getType(e)!==r.ZodParsedType.boolean){const t=this._getOrReturnCtx(e);return(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:r.ZodParsedType.boolean,received:t.parsedType}),n.INVALID}return(0,n.OK)(e.data)}}e.ZodBoolean=T,T.create=e=>new T({typeName:ce.ZodBoolean,coerce:(null==e?void 0:e.coerce)||!1,...l(e)});class P extends p{_parse(e){this._def.coerce&&(e.data=new Date(e.data));if(this._getType(e)!==r.ZodParsedType.date){const t=this._getOrReturnCtx(e);return(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:r.ZodParsedType.date,received:t.parsedType}),n.INVALID}if(isNaN(e.data.getTime())){const t=this._getOrReturnCtx(e);return(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_date}),n.INVALID}const t=new n.ParseStatus;let s;for(const a of this._def.checks)"min"===a.kind?e.data.getTime()<a.value&&(s=this._getOrReturnCtx(e,s),(0,n.addIssueToContext)(s,{code:i.ZodIssueCode.too_small,message:a.message,inclusive:!0,exact:!1,minimum:a.value,type:"date"}),t.dirty()):"max"===a.kind?e.data.getTime()>a.value&&(s=this._getOrReturnCtx(e,s),(0,n.addIssueToContext)(s,{code:i.ZodIssueCode.too_big,message:a.message,inclusive:!0,exact:!1,maximum:a.value,type:"date"}),t.dirty()):r.util.assertNever(a);return{status:t.value,value:new Date(e.data.getTime())}}_addCheck(e){return new P({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:s.errorUtil.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:s.errorUtil.toString(t)})}get minDate(){let e=null;for(const t of this._def.checks)"min"===t.kind&&(null===e||t.value>e)&&(e=t.value);return null!=e?new Date(e):null}get maxDate(){let e=null;for(const t of this._def.checks)"max"===t.kind&&(null===e||t.value<e)&&(e=t.value);return null!=e?new Date(e):null}}e.ZodDate=P,P.create=e=>new P({checks:[],coerce:(null==e?void 0:e.coerce)||!1,typeName:ce.ZodDate,...l(e)});class k extends p{_parse(e){if(this._getType(e)!==r.ZodParsedType.symbol){const t=this._getOrReturnCtx(e);return(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:r.ZodParsedType.symbol,received:t.parsedType}),n.INVALID}return(0,n.OK)(e.data)}}e.ZodSymbol=k,k.create=e=>new k({typeName:ce.ZodSymbol,...l(e)});class N extends p{_parse(e){if(this._getType(e)!==r.ZodParsedType.undefined){const t=this._getOrReturnCtx(e);return(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:r.ZodParsedType.undefined,received:t.parsedType}),n.INVALID}return(0,n.OK)(e.data)}}e.ZodUndefined=N,N.create=e=>new N({typeName:ce.ZodUndefined,...l(e)});class Z extends p{_parse(e){if(this._getType(e)!==r.ZodParsedType.null){const t=this._getOrReturnCtx(e);return(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:r.ZodParsedType.null,received:t.parsedType}),n.INVALID}return(0,n.OK)(e.data)}}e.ZodNull=Z,Z.create=e=>new Z({typeName:ce.ZodNull,...l(e)});class O extends p{constructor(){super(...arguments),this._any=!0}_parse(e){return(0,n.OK)(e.data)}}e.ZodAny=O,O.create=e=>new O({typeName:ce.ZodAny,...l(e)});class M extends p{constructor(){super(...arguments),this._unknown=!0}_parse(e){return(0,n.OK)(e.data)}}e.ZodUnknown=M,M.create=e=>new M({typeName:ce.ZodUnknown,...l(e)});class D extends p{_parse(e){const t=this._getOrReturnCtx(e);return(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:r.ZodParsedType.never,received:t.parsedType}),n.INVALID}}e.ZodNever=D,D.create=e=>new D({typeName:ce.ZodNever,...l(e)});class R extends p{_parse(e){if(this._getType(e)!==r.ZodParsedType.undefined){const t=this._getOrReturnCtx(e);return(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:r.ZodParsedType.void,received:t.parsedType}),n.INVALID}return(0,n.OK)(e.data)}}e.ZodVoid=R,R.create=e=>new R({typeName:ce.ZodVoid,...l(e)});class j extends p{_parse(e){const{ctx:t,status:s}=this._processInputParams(e),a=this._def;if(t.parsedType!==r.ZodParsedType.array)return(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:r.ZodParsedType.array,received:t.parsedType}),n.INVALID;if(null!==a.exactLength){const e=t.data.length>a.exactLength.value,r=t.data.length<a.exactLength.value;(e||r)&&((0,n.addIssueToContext)(t,{code:e?i.ZodIssueCode.too_big:i.ZodIssueCode.too_small,minimum:r?a.exactLength.value:void 0,maximum:e?a.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:a.exactLength.message}),s.dirty())}if(null!==a.minLength&&t.data.length<a.minLength.value&&((0,n.addIssueToContext)(t,{code:i.ZodIssueCode.too_small,minimum:a.minLength.value,type:"array",inclusive:!0,exact:!1,message:a.minLength.message}),s.dirty()),null!==a.maxLength&&t.data.length>a.maxLength.value&&((0,n.addIssueToContext)(t,{code:i.ZodIssueCode.too_big,maximum:a.maxLength.value,type:"array",inclusive:!0,exact:!1,message:a.maxLength.message}),s.dirty()),t.common.async)return Promise.all([...t.data].map(((e,s)=>a.type._parseAsync(new c(t,e,t.path,s))))).then((e=>n.ParseStatus.mergeArray(s,e)));const o=[...t.data].map(((e,s)=>a.type._parseSync(new c(t,e,t.path,s))));return n.ParseStatus.mergeArray(s,o)}get element(){return this._def.type}min(e,t){return new j({...this._def,minLength:{value:e,message:s.errorUtil.toString(t)}})}max(e,t){return new j({...this._def,maxLength:{value:e,message:s.errorUtil.toString(t)}})}length(e,t){return new j({...this._def,exactLength:{value:e,message:s.errorUtil.toString(t)}})}nonempty(e){return this.min(1,e)}}function A(e){if(e instanceof z){const t={};for(const s in e.shape){const n=e.shape[s];t[s]=se.create(A(n))}return new z({...e._def,shape:()=>t})}return e instanceof j?new j({...e._def,type:A(e.element)}):e instanceof se?se.create(A(e.unwrap())):e instanceof ne?ne.create(A(e.unwrap())):e instanceof F?F.create(e.items.map((e=>A(e)))):e}e.ZodArray=j,j.create=(e,t)=>new j({type:e,minLength:null,maxLength:null,exactLength:null,typeName:ce.ZodArray,...l(t)});class z extends p{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(null!==this._cached)return this._cached;const e=this._def.shape(),t=r.util.objectKeys(e);return this._cached={shape:e,keys:t}}_parse(e){if(this._getType(e)!==r.ZodParsedType.object){const t=this._getOrReturnCtx(e);return(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:r.ZodParsedType.object,received:t.parsedType}),n.INVALID}const{status:t,ctx:s}=this._processInputParams(e),{shape:a,keys:o}=this._getCached(),d=[];if(!(this._def.catchall instanceof D&&"strip"===this._def.unknownKeys))for(const e in s.data)o.includes(e)||d.push(e);const u=[];for(const e of o){const t=a[e],n=s.data[e];u.push({key:{status:"valid",value:e},value:t._parse(new c(s,n,s.path,e)),alwaysSet:e in s.data})}if(this._def.catchall instanceof D){const e=this._def.unknownKeys;if("passthrough"===e)for(const e of d)u.push({key:{status:"valid",value:e},value:{status:"valid",value:s.data[e]}});else if("strict"===e)d.length>0&&((0,n.addIssueToContext)(s,{code:i.ZodIssueCode.unrecognized_keys,keys:d}),t.dirty());else if("strip"!==e)throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const e=this._def.catchall;for(const t of d){const n=s.data[t];u.push({key:{status:"valid",value:t},value:e._parse(new c(s,n,s.path,t)),alwaysSet:t in s.data})}}return s.common.async?Promise.resolve().then((async()=>{const e=[];for(const t of u){const s=await t.key;e.push({key:s,value:await t.value,alwaysSet:t.alwaysSet})}return e})).then((e=>n.ParseStatus.mergeObjectSync(t,e))):n.ParseStatus.mergeObjectSync(t,u)}get shape(){return this._def.shape()}strict(e){return s.errorUtil.errToObj,new z({...this._def,unknownKeys:"strict",...void 0!==e?{errorMap:(t,n)=>{var r,a,i,o;const d=null!==(i=null===(a=(r=this._def).errorMap)||void 0===a?void 0:a.call(r,t,n).message)&&void 0!==i?i:n.defaultError;return"unrecognized_keys"===t.code?{message:null!==(o=s.errorUtil.errToObj(e).message)&&void 0!==o?o:d}:{message:d}}}:{}})}strip(){return new z({...this._def,unknownKeys:"strip"})}passthrough(){return new z({...this._def,unknownKeys:"passthrough"})}extend(e){return new z({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new z({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:ce.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new z({...this._def,catchall:e})}pick(e){const t={};return r.util.objectKeys(e).forEach((s=>{e[s]&&this.shape[s]&&(t[s]=this.shape[s])})),new z({...this._def,shape:()=>t})}omit(e){const t={};return r.util.objectKeys(this.shape).forEach((s=>{e[s]||(t[s]=this.shape[s])})),new z({...this._def,shape:()=>t})}deepPartial(){return A(this)}partial(e){const t={};return r.util.objectKeys(this.shape).forEach((s=>{const n=this.shape[s];e&&!e[s]?t[s]=n:t[s]=n.optional()})),new z({...this._def,shape:()=>t})}required(e){const t={};return r.util.objectKeys(this.shape).forEach((s=>{if(e&&!e[s])t[s]=this.shape[s];else{let e=this.shape[s];for(;e instanceof se;)e=e._def.innerType;t[s]=e}})),new z({...this._def,shape:()=>t})}keyof(){return Y(r.util.objectKeys(this.shape))}}e.ZodObject=z,z.create=(e,t)=>new z({shape:()=>e,unknownKeys:"strip",catchall:D.create(),typeName:ce.ZodObject,...l(t)}),z.strictCreate=(e,t)=>new z({shape:()=>e,unknownKeys:"strict",catchall:D.create(),typeName:ce.ZodObject,...l(t)}),z.lazycreate=(e,t)=>new z({shape:e,unknownKeys:"strip",catchall:D.create(),typeName:ce.ZodObject,...l(t)});class L extends p{_parse(e){const{ctx:t}=this._processInputParams(e),s=this._def.options;if(t.common.async)return Promise.all(s.map((async e=>{const s={...t,common:{...t.common,issues:[]},parent:null};return{result:await e._parseAsync({data:t.data,path:t.path,parent:s}),ctx:s}}))).then((function(e){for(const t of e)if("valid"===t.result.status)return t.result;for(const s of e)if("dirty"===s.result.status)return t.common.issues.push(...s.ctx.common.issues),s.result;const s=e.map((e=>new i.ZodError(e.ctx.common.issues)));return(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_union,unionErrors:s}),n.INVALID}));{let e;const r=[];for(const n of s){const s={...t,common:{...t.common,issues:[]},parent:null},a=n._parseSync({data:t.data,path:t.path,parent:s});if("valid"===a.status)return a;"dirty"!==a.status||e||(e={result:a,ctx:s}),s.common.issues.length&&r.push(s.common.issues)}if(e)return t.common.issues.push(...e.ctx.common.issues),e.result;const a=r.map((e=>new i.ZodError(e)));return(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_union,unionErrors:a}),n.INVALID}}get options(){return this._def.options}}e.ZodUnion=L,L.create=(e,t)=>new L({options:e,typeName:ce.ZodUnion,...l(t)});const B=e=>e instanceof H?B(e.schema):e instanceof te?B(e.innerType()):e instanceof G?[e.value]:e instanceof Q?e.options:e instanceof X?Object.keys(e.enum):e instanceof re?B(e._def.innerType):e instanceof N?[void 0]:e instanceof Z?[null]:null;class V extends p{_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==r.ZodParsedType.object)return(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:r.ZodParsedType.object,received:t.parsedType}),n.INVALID;const s=this.discriminator,a=t.data[s],o=this.optionsMap.get(a);return o?t.common.async?o._parseAsync({data:t.data,path:t.path,parent:t}):o._parseSync({data:t.data,path:t.path,parent:t}):((0,n.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[s]}),n.INVALID)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,t,s){const n=new Map;for(const s of t){const t=B(s.shape[e]);if(!t)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(const r of t){if(n.has(r))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(r)}`);n.set(r,s)}}return new V({typeName:ce.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:n,...l(s)})}}function U(e,t){const s=(0,r.getParsedType)(e),n=(0,r.getParsedType)(t);if(e===t)return{valid:!0,data:e};if(s===r.ZodParsedType.object&&n===r.ZodParsedType.object){const s=r.util.objectKeys(t),n=r.util.objectKeys(e).filter((e=>-1!==s.indexOf(e))),a={...e,...t};for(const s of n){const n=U(e[s],t[s]);if(!n.valid)return{valid:!1};a[s]=n.data}return{valid:!0,data:a}}if(s===r.ZodParsedType.array&&n===r.ZodParsedType.array){if(e.length!==t.length)return{valid:!1};const s=[];for(let n=0;n<e.length;n++){const r=U(e[n],t[n]);if(!r.valid)return{valid:!1};s.push(r.data)}return{valid:!0,data:s}}return s===r.ZodParsedType.date&&n===r.ZodParsedType.date&&+e==+t?{valid:!0,data:e}:{valid:!1}}e.ZodDiscriminatedUnion=V;class $ extends p{_parse(e){const{status:t,ctx:s}=this._processInputParams(e),r=(e,r)=>{if((0,n.isAborted)(e)||(0,n.isAborted)(r))return n.INVALID;const a=U(e.value,r.value);return a.valid?(((0,n.isDirty)(e)||(0,n.isDirty)(r))&&t.dirty(),{status:t.value,value:a.data}):((0,n.addIssueToContext)(s,{code:i.ZodIssueCode.invalid_intersection_types}),n.INVALID)};return s.common.async?Promise.all([this._def.left._parseAsync({data:s.data,path:s.path,parent:s}),this._def.right._parseAsync({data:s.data,path:s.path,parent:s})]).then((([e,t])=>r(e,t))):r(this._def.left._parseSync({data:s.data,path:s.path,parent:s}),this._def.right._parseSync({data:s.data,path:s.path,parent:s}))}}e.ZodIntersection=$,$.create=(e,t,s)=>new $({left:e,right:t,typeName:ce.ZodIntersection,...l(s)});class F extends p{_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==r.ZodParsedType.array)return(0,n.addIssueToContext)(s,{code:i.ZodIssueCode.invalid_type,expected:r.ZodParsedType.array,received:s.parsedType}),n.INVALID;if(s.data.length<this._def.items.length)return(0,n.addIssueToContext)(s,{code:i.ZodIssueCode.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.INVALID;!this._def.rest&&s.data.length>this._def.items.length&&((0,n.addIssueToContext)(s,{code:i.ZodIssueCode.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());const a=[...s.data].map(((e,t)=>{const n=this._def.items[t]||this._def.rest;return n?n._parse(new c(s,e,s.path,t)):null})).filter((e=>!!e));return s.common.async?Promise.all(a).then((e=>n.ParseStatus.mergeArray(t,e))):n.ParseStatus.mergeArray(t,a)}get items(){return this._def.items}rest(e){return new F({...this._def,rest:e})}}e.ZodTuple=F,F.create=(e,t)=>{if(!Array.isArray(e))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new F({items:e,typeName:ce.ZodTuple,rest:null,...l(t)})};class q extends p{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==r.ZodParsedType.object)return(0,n.addIssueToContext)(s,{code:i.ZodIssueCode.invalid_type,expected:r.ZodParsedType.object,received:s.parsedType}),n.INVALID;const a=[],o=this._def.keyType,d=this._def.valueType;for(const e in s.data)a.push({key:o._parse(new c(s,e,s.path,e)),value:d._parse(new c(s,s.data[e],s.path,e))});return s.common.async?n.ParseStatus.mergeObjectAsync(t,a):n.ParseStatus.mergeObjectSync(t,a)}get element(){return this._def.valueType}static create(e,t,s){return new q(t instanceof p?{keyType:e,valueType:t,typeName:ce.ZodRecord,...l(s)}:{keyType:_.create(),valueType:e,typeName:ce.ZodRecord,...l(t)})}}e.ZodRecord=q;class W extends p{_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==r.ZodParsedType.map)return(0,n.addIssueToContext)(s,{code:i.ZodIssueCode.invalid_type,expected:r.ZodParsedType.map,received:s.parsedType}),n.INVALID;const a=this._def.keyType,o=this._def.valueType,d=[...s.data.entries()].map((([e,t],n)=>({key:a._parse(new c(s,e,s.path,[n,"key"])),value:o._parse(new c(s,t,s.path,[n,"value"]))})));if(s.common.async){const e=new Map;return Promise.resolve().then((async()=>{for(const s of d){const r=await s.key,a=await s.value;if("aborted"===r.status||"aborted"===a.status)return n.INVALID;"dirty"!==r.status&&"dirty"!==a.status||t.dirty(),e.set(r.value,a.value)}return{status:t.value,value:e}}))}{const e=new Map;for(const s of d){const r=s.key,a=s.value;if("aborted"===r.status||"aborted"===a.status)return n.INVALID;"dirty"!==r.status&&"dirty"!==a.status||t.dirty(),e.set(r.value,a.value)}return{status:t.value,value:e}}}}e.ZodMap=W,W.create=(e,t,s)=>new W({valueType:t,keyType:e,typeName:ce.ZodMap,...l(s)});class K extends p{_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==r.ZodParsedType.set)return(0,n.addIssueToContext)(s,{code:i.ZodIssueCode.invalid_type,expected:r.ZodParsedType.set,received:s.parsedType}),n.INVALID;const a=this._def;null!==a.minSize&&s.data.size<a.minSize.value&&((0,n.addIssueToContext)(s,{code:i.ZodIssueCode.too_small,minimum:a.minSize.value,type:"set",inclusive:!0,exact:!1,message:a.minSize.message}),t.dirty()),null!==a.maxSize&&s.data.size>a.maxSize.value&&((0,n.addIssueToContext)(s,{code:i.ZodIssueCode.too_big,maximum:a.maxSize.value,type:"set",inclusive:!0,exact:!1,message:a.maxSize.message}),t.dirty());const o=this._def.valueType;function d(e){const s=new Set;for(const r of e){if("aborted"===r.status)return n.INVALID;"dirty"===r.status&&t.dirty(),s.add(r.value)}return{status:t.value,value:s}}const u=[...s.data.values()].map(((e,t)=>o._parse(new c(s,e,s.path,t))));return s.common.async?Promise.all(u).then((e=>d(e))):d(u)}min(e,t){return new K({...this._def,minSize:{value:e,message:s.errorUtil.toString(t)}})}max(e,t){return new K({...this._def,maxSize:{value:e,message:s.errorUtil.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}}e.ZodSet=K,K.create=(e,t)=>new K({valueType:e,minSize:null,maxSize:null,typeName:ce.ZodSet,...l(t)});class J extends p{constructor(){super(...arguments),this.validate=this.implement}_parse(e){const{ctx:s}=this._processInputParams(e);if(s.parsedType!==r.ZodParsedType.function)return(0,n.addIssueToContext)(s,{code:i.ZodIssueCode.invalid_type,expected:r.ZodParsedType.function,received:s.parsedType}),n.INVALID;function a(e,r){return(0,n.makeIssue)({data:e,path:s.path,errorMaps:[s.common.contextualErrorMap,s.schemaErrorMap,(0,t.getErrorMap)(),t.defaultErrorMap].filter((e=>!!e)),issueData:{code:i.ZodIssueCode.invalid_arguments,argumentsError:r}})}function o(e,r){return(0,n.makeIssue)({data:e,path:s.path,errorMaps:[s.common.contextualErrorMap,s.schemaErrorMap,(0,t.getErrorMap)(),t.defaultErrorMap].filter((e=>!!e)),issueData:{code:i.ZodIssueCode.invalid_return_type,returnTypeError:r}})}const d={errorMap:s.common.contextualErrorMap},c=s.data;return this._def.returns instanceof ee?(0,n.OK)((async(...e)=>{const t=new i.ZodError([]),s=await this._def.args.parseAsync(e,d).catch((s=>{throw t.addIssue(a(e,s)),t})),n=await c(...s);return await this._def.returns._def.type.parseAsync(n,d).catch((e=>{throw t.addIssue(o(n,e)),t}))})):(0,n.OK)(((...e)=>{const t=this._def.args.safeParse(e,d);if(!t.success)throw new i.ZodError([a(e,t.error)]);const s=c(...t.data),n=this._def.returns.safeParse(s,d);if(!n.success)throw new i.ZodError([o(s,n.error)]);return n.data}))}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new J({...this._def,args:F.create(e).rest(M.create())})}returns(e){return new J({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,t,s){return new J({args:e||F.create([]).rest(M.create()),returns:t||M.create(),typeName:ce.ZodFunction,...l(s)})}}e.ZodFunction=J;class H extends p{get schema(){return this._def.getter()}_parse(e){const{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}}e.ZodLazy=H,H.create=(e,t)=>new H({getter:e,typeName:ce.ZodLazy,...l(t)});class G extends p{_parse(e){if(e.data!==this._def.value){const t=this._getOrReturnCtx(e);return(0,n.addIssueToContext)(t,{received:t.data,code:i.ZodIssueCode.invalid_literal,expected:this._def.value}),n.INVALID}return{status:"valid",value:e.data}}get value(){return this._def.value}}function Y(e,t){return new Q({values:e,typeName:ce.ZodEnum,...l(t)})}e.ZodLiteral=G,G.create=(e,t)=>new G({value:e,typeName:ce.ZodLiteral,...l(t)});class Q extends p{_parse(e){if("string"!=typeof e.data){const t=this._getOrReturnCtx(e),s=this._def.values;return(0,n.addIssueToContext)(t,{expected:r.util.joinValues(s),received:t.parsedType,code:i.ZodIssueCode.invalid_type}),n.INVALID}if(-1===this._def.values.indexOf(e.data)){const t=this._getOrReturnCtx(e),s=this._def.values;return(0,n.addIssueToContext)(t,{received:t.data,code:i.ZodIssueCode.invalid_enum_value,options:s}),n.INVALID}return(0,n.OK)(e.data)}get options(){return this._def.values}get enum(){const e={};for(const t of this._def.values)e[t]=t;return e}get Values(){const e={};for(const t of this._def.values)e[t]=t;return e}get Enum(){const e={};for(const t of this._def.values)e[t]=t;return e}extract(e){return Q.create(e)}exclude(e){return Q.create(this.options.filter((t=>!e.includes(t))))}}e.ZodEnum=Q,Q.create=Y;class X extends p{_parse(e){const t=r.util.getValidEnumValues(this._def.values),s=this._getOrReturnCtx(e);if(s.parsedType!==r.ZodParsedType.string&&s.parsedType!==r.ZodParsedType.number){const e=r.util.objectValues(t);return(0,n.addIssueToContext)(s,{expected:r.util.joinValues(e),received:s.parsedType,code:i.ZodIssueCode.invalid_type}),n.INVALID}if(-1===t.indexOf(e.data)){const e=r.util.objectValues(t);return(0,n.addIssueToContext)(s,{received:s.data,code:i.ZodIssueCode.invalid_enum_value,options:e}),n.INVALID}return(0,n.OK)(e.data)}get enum(){return this._def.values}}e.ZodNativeEnum=X,X.create=(e,t)=>new X({values:e,typeName:ce.ZodNativeEnum,...l(t)});class ee extends p{unwrap(){return this._def.type}_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==r.ZodParsedType.promise&&!1===t.common.async)return(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:r.ZodParsedType.promise,received:t.parsedType}),n.INVALID;const s=t.parsedType===r.ZodParsedType.promise?t.data:Promise.resolve(t.data);return(0,n.OK)(s.then((e=>this._def.type.parseAsync(e,{path:t.path,errorMap:t.common.contextualErrorMap}))))}}e.ZodPromise=ee,ee.create=(e,t)=>new ee({type:e,typeName:ce.ZodPromise,...l(t)});class te extends p{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===ce.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){const{status:t,ctx:s}=this._processInputParams(e),a=this._def.effect||null;if("preprocess"===a.type){const e=a.transform(s.data);return s.common.async?Promise.resolve(e).then((e=>this._def.schema._parseAsync({data:e,path:s.path,parent:s}))):this._def.schema._parseSync({data:e,path:s.path,parent:s})}const i={addIssue:e=>{(0,n.addIssueToContext)(s,e),e.fatal?t.abort():t.dirty()},get path(){return s.path}};if(i.addIssue=i.addIssue.bind(i),"refinement"===a.type){const e=e=>{const t=a.refinement(e,i);if(s.common.async)return Promise.resolve(t);if(t instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return e};if(!1===s.common.async){const r=this._def.schema._parseSync({data:s.data,path:s.path,parent:s});return"aborted"===r.status?n.INVALID:("dirty"===r.status&&t.dirty(),e(r.value),{status:t.value,value:r.value})}return this._def.schema._parseAsync({data:s.data,path:s.path,parent:s}).then((s=>"aborted"===s.status?n.INVALID:("dirty"===s.status&&t.dirty(),e(s.value).then((()=>({status:t.value,value:s.value}))))))}if("transform"===a.type){if(!1===s.common.async){const e=this._def.schema._parseSync({data:s.data,path:s.path,parent:s});if(!(0,n.isValid)(e))return e;const r=a.transform(e.value,i);if(r instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:r}}return this._def.schema._parseAsync({data:s.data,path:s.path,parent:s}).then((e=>(0,n.isValid)(e)?Promise.resolve(a.transform(e.value,i)).then((e=>({status:t.value,value:e}))):e))}r.util.assertNever(a)}}e.ZodEffects=te,e.ZodTransformer=te,te.create=(e,t,s)=>new te({schema:e,typeName:ce.ZodEffects,effect:t,...l(s)}),te.createWithPreprocess=(e,t,s)=>new te({schema:t,effect:{type:"preprocess",transform:e},typeName:ce.ZodEffects,...l(s)});class se extends p{_parse(e){return this._getType(e)===r.ZodParsedType.undefined?(0,n.OK)(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}e.ZodOptional=se,se.create=(e,t)=>new se({innerType:e,typeName:ce.ZodOptional,...l(t)});class ne extends p{_parse(e){return this._getType(e)===r.ZodParsedType.null?(0,n.OK)(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}e.ZodNullable=ne,ne.create=(e,t)=>new ne({innerType:e,typeName:ce.ZodNullable,...l(t)});class re extends p{_parse(e){const{ctx:t}=this._processInputParams(e);let s=t.data;return t.parsedType===r.ZodParsedType.undefined&&(s=this._def.defaultValue()),this._def.innerType._parse({data:s,path:t.path,parent:t})}removeDefault(){return this._def.innerType}}e.ZodDefault=re,re.create=(e,t)=>new re({innerType:e,typeName:ce.ZodDefault,defaultValue:"function"==typeof t.default?t.default:()=>t.default,...l(t)});class ae extends p{_parse(e){const{ctx:t}=this._processInputParams(e),s={...t,common:{...t.common,issues:[]}},r=this._def.innerType._parse({data:s.data,path:s.path,parent:{...s}});return(0,n.isAsync)(r)?r.then((e=>({status:"valid",value:"valid"===e.status?e.value:this._def.catchValue({get error(){return new i.ZodError(s.common.issues)},input:s.data})}))):{status:"valid",value:"valid"===r.status?r.value:this._def.catchValue({get error(){return new i.ZodError(s.common.issues)},input:s.data})}}removeCatch(){return this._def.innerType}}e.ZodCatch=ae,ae.create=(e,t)=>new ae({innerType:e,typeName:ce.ZodCatch,catchValue:"function"==typeof t.catch?t.catch:()=>t.catch,...l(t)});class ie extends p{_parse(e){if(this._getType(e)!==r.ZodParsedType.nan){const t=this._getOrReturnCtx(e);return(0,n.addIssueToContext)(t,{code:i.ZodIssueCode.invalid_type,expected:r.ZodParsedType.nan,received:t.parsedType}),n.INVALID}return{status:"valid",value:e.data}}}e.ZodNaN=ie,ie.create=e=>new ie({typeName:ce.ZodNaN,...l(e)}),e.BRAND=Symbol("zod_brand");class oe extends p{_parse(e){const{ctx:t}=this._processInputParams(e),s=t.data;return this._def.type._parse({data:s,path:t.path,parent:t})}unwrap(){return this._def.type}}e.ZodBranded=oe;class de extends p{_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.common.async){return(async()=>{const e=await this._def.in._parseAsync({data:s.data,path:s.path,parent:s});return"aborted"===e.status?n.INVALID:"dirty"===e.status?(t.dirty(),(0,n.DIRTY)(e.value)):this._def.out._parseAsync({data:e.value,path:s.path,parent:s})})()}{const e=this._def.in._parseSync({data:s.data,path:s.path,parent:s});return"aborted"===e.status?n.INVALID:"dirty"===e.status?(t.dirty(),{status:"dirty",value:e.value}):this._def.out._parseSync({data:e.value,path:s.path,parent:s})}}static create(e,t){return new de({in:e,out:t,typeName:ce.ZodPipeline})}}e.ZodPipeline=de;var ce;e.custom=(e,t={},s)=>e?O.create().superRefine(((n,r)=>{var a,i;if(!e(n)){const e="function"==typeof t?t(n):"string"==typeof t?{message:t}:t,o=null===(i=null!==(a=e.fatal)&&void 0!==a?a:s)||void 0===i||i,d="string"==typeof e?{message:e}:e;r.addIssue({code:"custom",...d,fatal:o})}})):O.create(),e.late={object:z.lazycreate},function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline"}(ce=e.ZodFirstPartyTypeKind||(e.ZodFirstPartyTypeKind={}));e.instanceof=(t,s={message:`Input not instance of ${t.name}`})=>(0,e.custom)((e=>e instanceof t),s);const ue=_.create;e.string=ue;const le=S.create;e.number=le;const pe=ie.create;e.nan=pe;const he=E.create;e.bigint=he;const me=T.create;e.boolean=me;const ge=P.create;e.date=ge;const fe=k.create;e.symbol=fe;const ve=N.create;e.undefined=ve;const ye=Z.create;e.null=ye;const xe=O.create;e.any=xe;const be=M.create;e.unknown=be;const Ce=D.create;e.never=Ce;const we=R.create;e.void=we;const _e=j.create;e.array=_e;const Ie=z.create;e.object=Ie;const Se=z.strictCreate;e.strictObject=Se;const Ee=L.create;e.union=Ee;const Te=V.create;e.discriminatedUnion=Te;const Pe=$.create;e.intersection=Pe;const ke=F.create;e.tuple=ke;const Ne=q.create;e.record=Ne;const Ze=W.create;e.map=Ze;const Oe=K.create;e.set=Oe;const Me=J.create;e.function=Me;const De=H.create;e.lazy=De;const Re=G.create;e.literal=Re;const je=Q.create;e.enum=je;const Ae=X.create;e.nativeEnum=Ae;const ze=ee.create;e.promise=ze;const Le=te.create;e.effect=Le,e.transformer=Le;const Be=se.create;e.optional=Be;const Ve=ne.create;e.nullable=Ve;const Ue=te.createWithPreprocess;e.preprocess=Ue;const $e=de.create;e.pipeline=$e;e.ostring=()=>ue().optional();e.onumber=()=>le().optional();e.oboolean=()=>me().optional(),e.coerce={string:e=>_.create({...e,coerce:!0}),number:e=>S.create({...e,coerce:!0}),boolean:e=>T.create({...e,coerce:!0}),bigint:e=>E.create({...e,coerce:!0}),date:e=>P.create({...e,coerce:!0})},e.NEVER=n.INVALID}(x),function(t){var s=e&&e.__createBinding||(Object.create?function(e,t,s,n){void 0===n&&(n=s),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[s]}})}:function(e,t,s,n){void 0===n&&(n=s),e[n]=t[s]}),n=e&&e.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||s(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),n(a,t),n(f,t),n(v,t),n(o,t),n(x,t),n(d,t)}(r),function(t){var s=e&&e.__createBinding||(Object.create?function(e,t,s,n){void 0===n&&(n=s),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[s]}})}:function(e,t,s,n){void 0===n&&(n=s),e[n]=t[s]}),n=e&&e.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=e&&e.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&s(t,e,r);return n(t,e),t},i=e&&e.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||s(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),t.z=void 0;const o=a(r);t.z=o,i(r,t),t.default=o}(n);var C={};!function(e){var t,s,n,r,a,i;Object.defineProperty(e,"__esModule",{value:!0}),e.CDP=e.Network=e.Log=e.BrowsingContext=e.Script=e.Message=void 0,function(e){let t;!function(e){e.InvalidArgument="invalid argument",e.InvalidSessionId="invalid session id",e.NoSuchAlert="no such alert",e.NoSuchFrame="no such frame",e.NoSuchNode="no such node",e.NoSuchScript="no such script",e.SessionNotCreated="session not created",e.UnknownCommand="unknown command",e.UnknownError="unknown error",e.UnsupportedOperation="unsupported operation"}(t=e.ErrorCode||(e.ErrorCode={}));class s{error;message;stacktrace;constructor(e,t,s){this.error=e,this.message=t,this.stacktrace=s}toErrorResponse(e){return{id:e,error:this.error,message:this.message,stacktrace:this.stacktrace}}}e.ErrorResponse=s;e.InvalidArgumentException=class extends s{constructor(e,s){super(t.InvalidArgument,e,s)}};e.InvalidSessionIdException=class extends s{constructor(e,s){super(t.InvalidSessionId,e,s)}};e.NoSuchAlertException=class extends s{constructor(e,s){super(t.NoSuchAlert,e,s)}};e.NoSuchFrameException=class extends s{constructor(e){super(t.NoSuchFrame,e)}};e.NoSuchNodeException=class extends s{constructor(e,s){super(t.NoSuchNode,e,s)}};e.NoSuchScriptException=class extends s{constructor(e,s){super(t.NoSuchScript,e,s)}};e.SessionNotCreatedException=class extends s{constructor(e,s){super(t.SessionNotCreated,e,s)}};e.UnknownCommandException=class extends s{constructor(e,s){super(t.UnknownCommand,e,s)}};e.UnknownErrorException=class extends s{constructor(e,s){super(t.UnknownError,e,s)}};e.UnsupportedOperationException=class extends s{constructor(e,s){super(t.UnsupportedOperation,e,s)}}}(e.Message||(e.Message={})),((t=e.Script||(e.Script={})).EventNames||(t.EventNames={})).MessageEvent="script.message",t.AllEvents="script",s=e.BrowsingContext||(e.BrowsingContext={}),(n=s.EventNames||(s.EventNames={})).LoadEvent="browsingContext.load",n.DomContentLoadedEvent="browsingContext.domContentLoaded",n.ContextCreatedEvent="browsingContext.contextCreated",n.ContextDestroyedEvent="browsingContext.contextDestroyed",s.AllEvents="browsingContext",(r=e.Log||(e.Log={})).AllEvents="log",function(e){e.LogEntryAddedEvent="log.entryAdded"}(r.EventNames||(r.EventNames={})),(a=e.Network||(e.Network={})).AllEvents="network",function(e){e.BeforeRequestSentEvent="network.beforeRequestSent",e.ResponseCompletedEvent="network.responseCompleted",e.FetchErrorEvent="network.fetchError"}(a.EventNames||(a.EventNames={})),(i=e.CDP||(e.CDP={})).AllEvents="cdp",function(e){e.EventReceivedEvent="cdp.eventReceived"}(i.EventNames||(i.EventNames={}))}(C),function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Session=e.CDP=e.BrowsingContext=e.Script=e.CommonDataTypes=e.parseObject=void 0;const t=n,s=C;function r(e,t){const n=t.safeParse(e);if(n.success)return n.data;const r=n.error.errors.map((e=>`${e.message} in ${e.path.map((e=>JSON.stringify(e))).join("/")}.`)).join(" ");throw new s.Message.InvalidArgumentException(r)}var a;e.parseObject=r,function(e){e.SharedReferenceSchema=t.z.object({sharedId:t.z.string().min(1)}),e.RemoteReferenceSchema=t.z.object({handle:t.z.string().min(1)});const s=t.z.object({type:t.z.literal("undefined")}),n=t.z.object({type:t.z.literal("null")}),r=t.z.object({type:t.z.literal("string"),value:t.z.string()}),a=t.z.enum(["NaN","-0","Infinity","-Infinity"]),i=t.z.object({type:t.z.literal("number"),value:t.z.union([a,t.z.number()])}),o=t.z.object({type:t.z.literal("boolean"),value:t.z.boolean()}),d=t.z.object({type:t.z.literal("bigint"),value:t.z.string()}),c=t.z.union([s,n,r,i,o,d]);e.LocalValueSchema=t.z.lazy((()=>t.z.union([c,p,h,g,f,v,y])));const u=t.z.union([e.SharedReferenceSchema,e.RemoteReferenceSchema,e.LocalValueSchema]),l=t.z.array(u),p=t.z.lazy((()=>t.z.object({type:t.z.literal("array"),value:l}))),h=t.z.object({type:t.z.literal("date"),value:t.z.string().min(1)}),m=t.z.lazy((()=>t.z.tuple([t.z.union([t.z.string(),u]),u]))),g=t.z.object({type:t.z.literal("map"),value:t.z.array(m)}),f=t.z.object({type:t.z.literal("object"),value:t.z.array(m)}),v=t.z.lazy((()=>t.z.object({type:t.z.literal("regexp"),value:t.z.object({pattern:t.z.string(),flags:t.z.string().optional()})}))),y=t.z.lazy((()=>t.z.object({type:t.z.literal("set"),value:l})));e.BrowsingContextSchema=t.z.string(),e.MaxDepthSchema=t.z.number().int().nonnegative().max(9007199254740991)}(a=e.CommonDataTypes||(e.CommonDataTypes={})),function(e){const s=t.z.enum(["window","dedicated-worker","shared-worker","service-worker","worker","paint-worklet","audio-worklet","worklet"]);e.GetRealmsParametersSchema=t.z.object({context:a.BrowsingContextSchema.optional(),type:s.optional()}),e.parseGetRealmsParams=function(t){return r(t,e.GetRealmsParametersSchema)};const n=t.z.object({context:a.BrowsingContextSchema,sandbox:t.z.string().optional()}),i=t.z.object({realm:t.z.string().min(1)}),o=t.z.union([i,n]),d=t.z.enum(["root","none"]),c=t.z.object({expression:t.z.string(),awaitPromise:t.z.boolean(),target:o,resultOwnership:d.optional()});e.parseEvaluateParams=function(e){return r(e,c)};const u=t.z.object({target:o,handles:t.z.array(t.z.string())});e.parseDisownParams=function(e){return r(e,u)},e.PreloadScriptSchema=t.z.string(),e.AddPreloadScriptParametersSchema=t.z.object({expression:t.z.string(),sandbox:t.z.string().optional(),context:a.BrowsingContextSchema.optional()}),e.parseAddPreloadScriptParams=function(t){return r(t,e.AddPreloadScriptParametersSchema)},e.RemovePreloadScriptParametersSchema=t.z.object({script:e.PreloadScriptSchema}),e.parseRemovePreloadScriptParams=function(t){return r(t,e.RemovePreloadScriptParametersSchema)};const l=t.z.string(),p=t.z.object({channel:l,maxDepth:t.z.number().int().min(1).max(1).optional(),ownership:d.optional()});e.ChannelSchema=t.z.object({type:t.z.literal("channel"),value:p});const h=t.z.union([a.RemoteReferenceSchema,a.SharedReferenceSchema,a.LocalValueSchema,e.ChannelSchema]),m=t.z.object({functionDeclaration:t.z.string(),target:o,arguments:t.z.array(h).optional(),this:h.optional(),awaitPromise:t.z.boolean(),resultOwnership:d.optional()});e.parseCallFunctionParams=function(e){return r(e,m)}}(e.Script||(e.Script={})),function(e){const s=t.z.object({maxDepth:a.MaxDepthSchema.optional(),root:a.BrowsingContextSchema.optional()});e.parseGetTreeParams=function(e){return r(e,s)};const n=t.z.enum(["none","interactive","complete"]),i=t.z.object({context:a.BrowsingContextSchema,url:t.z.string().url(),wait:n.optional()});e.parseNavigateParams=function(e){return r(e,i)};const o=t.z.object({type:t.z.enum(["tab","window"]),referenceContext:a.BrowsingContextSchema.optional()});e.parseCreateParams=function(e){return r(e,o)};const d=t.z.object({context:a.BrowsingContextSchema});e.parseCloseParams=function(e){return r(e,d)};const c=t.z.object({context:a.BrowsingContextSchema});e.parseCaptureScreenshotParams=function(e){return r(e,c)};const u=t.z.object({height:t.z.number().min(0).default(27.94).optional(),width:t.z.number().min(0).default(21.59).optional()}),l=t.z.object({bottom:t.z.number().min(0).default(1).optional(),left:t.z.number().min(0).default(1).optional(),right:t.z.number().min(0).default(1).optional(),top:t.z.number().min(0).default(1).optional()}),p=t.z.array(t.z.union([t.z.string().min(1),t.z.number().int().nonnegative()])).refine((e=>e.every((e=>{const t=String(e).match(/^(?:(?:\d+)|(?:\d+[-])|(?:[-]\d+)|(?:(?<start>\d+)[-](?<end>\d+)))$/),{start:s,end:n}=t?.groups??{};return!(s&&n&&Number(s)>Number(n))&&t})))),h=t.z.object({context:a.BrowsingContextSchema,background:t.z.boolean().default(!1).optional(),margin:l.optional(),orientation:t.z.enum(["portrait","landscape"]).default("portrait").optional(),page:u.optional(),pageRanges:p.default([]).optional(),scale:t.z.number().min(.1).max(2).default(1).optional(),shrinkToFit:t.z.boolean().default(!0).optional()});e.parsePrintParams=function(e){return r(e,h)}}(e.BrowsingContext||(e.BrowsingContext={})),function(e){const s=t.z.object({cdpMethod:t.z.string(),cdpParams:t.z.object({}).passthrough(),cdpSession:t.z.string().optional()});e.parseSendCommandParams=function(e){return r(e,s)};const n=t.z.object({context:a.BrowsingContextSchema});e.parseGetSessionParams=function(e){return r(e,n)}}(e.CDP||(e.CDP={})),function(e){const n=t.z.enum([s.BrowsingContext.AllEvents,...Object.values(s.BrowsingContext.EventNames),s.Log.AllEvents,...Object.values(s.Log.EventNames),s.CDP.AllEvents,...Object.values(s.CDP.EventNames),s.Network.AllEvents,...Object.values(s.Network.EventNames),s.Script.AllEvents,...Object.values(s.Script.EventNames)]),i=t.z.object({events:t.z.array(n),contexts:t.z.array(a.BrowsingContextSchema).optional()});e.parseSubscribeParams=function(e){return r(e,i)}}(e.Session||(e.Session={}))}(s);var w={},_={},I=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(_,"__esModule",{value:!0}),_.EventEmitter=void 0;const S=I((function(e){return{all:e=e||new Map,on:function(t,s){var n=e.get(t);n?n.push(s):e.set(t,[s])},off:function(t,s){var n=e.get(t);n&&(s?n.splice(n.indexOf(s)>>>0,1):e.set(t,[]))},emit:function(t,s){var n=e.get(t);n&&n.slice().map((function(e){e(s)})),(n=e.get("*"))&&n.slice().map((function(e){e(t,s)}))}}}));_.EventEmitter=class{#e=(0,S.default)();on(e,t){return this.#e.on(e,t),this}once(e,t){const s=n=>{t(n),this.off(e,s)};return this.on(e,s)}off(e,t){return this.#e.off(e,t),this}emit(e,t){this.#e.emit(e,t)}};var E={},T={};!function(e){var t;Object.defineProperty(e,"__esModule",{value:!0}),e.LogType=void 0,(t=e.LogType||(e.LogType={})).bidi="BiDi Messages",t.browsingContexts="Browsing Contexts",t.cdp="CDP",t.system="System"}(T),Object.defineProperty(E,"__esModule",{value:!0}),E.ProcessingQueue=void 0;const P=T;E.ProcessingQueue=class{#t;#s;#n;#r=[];#a=!1;constructor(e,t=(()=>Promise.resolve()),s){this.#t=t,this.#n=e,this.#s=s}add(e){this.#r.push(e),this.#i()}async#i(){if(!this.#a){for(this.#a=!0;this.#r.length>0;){const e=this.#r.shift();void 0!==e&&await e.then((e=>this.#n(e))).catch((e=>{this.#s?.(P.LogType.system,"Event was not processed:",e),this.#t(e)}))}this.#a=!1}}};var k={},N={},Z={},O={};Object.defineProperty(O,"__esModule",{value:!0}),O.inchesFromCm=void 0,O.inchesFromCm=function(e){return e/2.54};var M={};Object.defineProperty(M,"__esModule",{value:!0}),M.Deferred=void 0;class D{#o=!1;#d;#c=()=>{};#u=()=>{};get isFinished(){return this.#o}constructor(){this.#d=new Promise(((e,t)=>{this.#c=e,this.#u=t})),this.#d.catch((()=>{}))}then(e,t){return this.#d.then(e,t)}catch(e){return this.#d.catch(e)}resolve(e){this.#o=!0,this.#c(e)}reject(e){this.#o=!0,this.#u(e)}finally(e){return this.#d.finally(e)}[Symbol.toStringTag]="Promise"}M.Deferred=D;var R={},j={};!function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.ScriptEvaluator=e.SHARED_ID_DIVIDER=void 0;const t=C;e.SHARED_ID_DIVIDER="_element_";class s{#l;constructor(e){this.#l=e}static async stringifyObject(e,t){return(await t.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String((e=>String(e))),awaitPromise:!1,arguments:[e],returnByValue:!0,executionContextId:t.executionContextId})).result.value}async serializeCdpObject(e,t,n){const r=s.#p(e),a=await n.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String((e=>e)),awaitPromise:!1,arguments:[r],generateWebDriverValue:!0,executionContextId:n.executionContextId});return n.cdpToBidiValue(a,t)}async scriptEvaluate(e,t,s,n){const r=await e.cdpClient.sendCommand("Runtime.evaluate",{contextId:e.executionContextId,expression:t,awaitPromise:s,generateWebDriverValue:!0});return r.exceptionDetails?{exceptionDetails:await this.#h(r.exceptionDetails,0,n,e),type:"exception",realm:e.realmId}:{type:"success",result:e.cdpToBidiValue(r,n),realm:e.realmId}}async callFunction(e,s,n,r,a,i){const o=`(...args)=>{ return _callFunction((\n${s}\n), args);\n\t function _callFunction(f, args) {\n\t const deserializedThis = args.shift();\n\t const deserializedArgs = args;\n\t return f.apply(deserializedThis, deserializedArgs);\n\t }}`,d=[await this.#m(n,e)];let c;d.push(...await Promise.all(r.map((async t=>this.#m(t,e)))));try{c=await e.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:o,awaitPromise:a,arguments:d,generateWebDriverValue:!0,executionContextId:e.executionContextId})}catch(e){if(-32e3===e.code&&["Could not find object with given id","Argument should belong to the same JavaScript world as target object"].includes(e.message))throw new t.Message.InvalidArgumentException("Handle was not found.");throw e}return c.exceptionDetails?{exceptionDetails:await this.#h(c.exceptionDetails,1,i,e),type:"exception",realm:e.realmId}:{type:"success",result:e.cdpToBidiValue(c,i),realm:e.realmId}}static#p(e){return void 0!==e.objectId?{objectId:e.objectId}:void 0!==e.unserializableValue?{unserializableValue:e.unserializableValue}:{value:e.value}}async#m(s,n){if("sharedId"in s){const[r,a]=s.sharedId.split(e.SHARED_ID_DIVIDER),i=parseInt(a??"");if(isNaN(i)||void 0===i||void 0===r)throw new t.Message.InvalidArgumentException(`SharedId "${s.sharedId}" should have format "{navigableId}${e.SHARED_ID_DIVIDER}{backendNodeId}".`);if(n.navigableId!==r)throw new t.Message.NoSuchNodeException(`SharedId "${s.sharedId}" belongs to different document. Current document is ${n.navigableId}.`);try{return{objectId:(await n.cdpClient.sendCommand("DOM.resolveNode",{backendNodeId:i,executionContextId:n.executionContextId})).object.objectId}}catch(e){if(-32e3===e.code&&"No node with given id found"===e.message)throw new t.Message.NoSuchNodeException(`SharedId "${s.sharedId}" was not found.`);throw e}}if("handle"in s)return{objectId:s.handle};switch(s.type){case"undefined":return{unserializableValue:"undefined"};case"null":return{unserializableValue:"null"};case"string":return{value:s.value};case"number":return"NaN"===s.value?{unserializableValue:"NaN"}:"-0"===s.value?{unserializableValue:"-0"}:"Infinity"===s.value?{unserializableValue:"Infinity"}:"-Infinity"===s.value?{unserializableValue:"-Infinity"}:{value:s.value};case"boolean":return{value:Boolean(s.value)};case"bigint":return{unserializableValue:`BigInt(${JSON.stringify(s.value)})`};case"date":return{unserializableValue:`new Date(Date.parse(${JSON.stringify(s.value)}))`};case"regexp":return{unserializableValue:`new RegExp(${JSON.stringify(s.value.pattern)}, ${JSON.stringify(s.value.flags)})`};case"map":{const e=await this.#g(s.value,n);return{objectId:(await n.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String(((...e)=>{const t=new Map;for(let s=0;s<e.length;s+=2)t.set(e[s],e[s+1]);return t})),awaitPromise:!1,arguments:e,returnByValue:!1,executionContextId:n.executionContextId})).result.objectId}}case"object":{const e=await this.#g(s.value,n);return{objectId:(await n.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String(((...e)=>{const t={};for(let s=0;s<e.length;s+=2){t[e[s]]=e[s+1]}return t})),awaitPromise:!1,arguments:e,returnByValue:!1,executionContextId:n.executionContextId})).result.objectId}}case"array":{const e=await this.#f(s.value,n);return{objectId:(await n.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String(((...e)=>e)),awaitPromise:!1,arguments:e,returnByValue:!1,executionContextId:n.executionContextId})).result.objectId}}case"set":{const e=await this.#f(s.value,n);return{objectId:(await n.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String(((...e)=>new Set(e))),awaitPromise:!1,arguments:e,returnByValue:!1,executionContextId:n.executionContextId})).result.objectId}}case"channel":{const e=(await n.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String((()=>{const e=[];let t=null;return{async getMessage(){const s=e.length>0?Promise.resolve():new Promise((e=>{t=e}));return await s,e.shift()},sendMessage(s){e.push(s),null!==t&&(t(),t=null)}}})),returnByValue:!1,executionContextId:n.executionContextId,generateWebDriverValue:!1})).result.objectId;this.#v(s,e,n);return{objectId:(await n.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String((e=>e.sendMessage)),arguments:[{objectId:e}],returnByValue:!1,executionContextId:n.executionContextId,generateWebDriverValue:!1})).result.objectId}}default:throw new Error(`Value ${JSON.stringify(s)} is not deserializable.`)}}async#g(e,t){const s=[];for(const n of e){const e=n[0],r=n[1];let a;a="string"==typeof e?{value:e}:await this.#m(e,t);const i=await this.#m(r,t);s.push(a),s.push(i)}return s}async#f(e,t){const s=[];for(const n of e)s.push(await this.#m(n,t));return s}async#v(e,s,n){const r=e.value.channel;for(;;){const a=await n.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String((async e=>e.getMessage())),arguments:[{objectId:s}],awaitPromise:!0,executionContextId:n.executionContextId,generateWebDriverValue:!0});this.#l.registerEvent({method:t.Script.EventNames.MessageEvent,params:{channel:r,data:n.cdpToBidiValue(a,e.value.ownership??"none"),source:{realm:n.realmId,context:n.browsingContextId}}},n.browsingContextId)}}async#h(e,t,n,r){const a=e.stackTrace?.callFrames.map((e=>({url:e.url,functionName:e.functionName,lineNumber:e.lineNumber-t,columnNumber:e.columnNumber}))),i=await this.serializeCdpObject(e.exception,n,r),o=await s.stringifyObject(e.exception,r);return{exception:i,columnNumber:e.columnNumber,lineNumber:e.lineNumber-t,stackTrace:{callFrames:a||[]},text:o||e.text}}}e.ScriptEvaluator=s}(j),Object.defineProperty(R,"__esModule",{value:!0}),R.Realm=void 0;const A=j;R.Realm=class{#y;#x;#b;#C;#w;#_;#I;#S;#l;#E;sandbox;cdpSessionId;constructor(e,t,s,n,r,a,i,o,d,c,u){this.#b=s,this.#C=n,this.#w=r,this.sandbox=o,this.#_=a,this.#I=i,this.cdpSessionId=d,this.#S=c,this.#y=e,this.#x=t,this.#l=u,this.#E=new A.ScriptEvaluator(this.#l),this.#y.realmMap.set(this.#b,this)}async disown(e){if(this.#y.knownHandlesToRealm.get(e)===this.realmId){try{await this.cdpClient.sendCommand("Runtime.releaseObject",{objectId:e})}catch(e){if(-32e3!==e.code||"Invalid remote object id"!==e.message)throw e}this.#y.knownHandlesToRealm.delete(e)}}cdpToBidiValue(e,t){const s=e.result.webDriverValue,n=this.webDriverValueToBiDi(s);if(e.result.objectId){const s=e.result.objectId;"root"===t?(n.handle=s,this.#y.knownHandlesToRealm.set(s,this.realmId)):this.cdpClient.sendCommand("Runtime.releaseObject",{objectId:s})}return n}webDriverValueToBiDi(e){const t=e;if("platformobject"===t.type)return{type:"object"};const s=t.value;if(void 0===s)return t;if("node"===t.type&&(Object.hasOwn(s,"backendNodeId")&&(s.sharedId=`${this.navigableId}${A.SHARED_ID_DIVIDER}${s.backendNodeId}`,delete s.backendNodeId),Object.hasOwn(s,"children")))for(const e in s.children)s.children[e]=this.webDriverValueToBiDi(s.children[e]);if(["array","set"].includes(e.type))for(const e in s)s[e]=this.webDriverValueToBiDi(s[e]);if(["object","map"].includes(e.type))for(const e in s)s[e]=[this.webDriverValueToBiDi(s[e][0]),this.webDriverValueToBiDi(s[e][1])];return t}toBiDi(){return{realm:this.realmId,origin:this.origin,type:this.type,context:this.browsingContextId,...void 0===this.sandbox?{}:{sandbox:this.sandbox}}}get realmId(){return this.#b}get navigableId(){return this.#x.findContext(this.#C)?.navigableId??"UNKNOWN"}get browsingContextId(){return this.#C}get executionContextId(){return this.#w}get origin(){return this.#_}get type(){return this.#I}get cdpClient(){return this.#S}async callFunction(e,t,s,n,r){const a=this.#x.getKnownContext(this.browsingContextId);return await a.awaitUnblocked(),{result:await this.#E.callFunction(this,e,t,s,n,r)}}async scriptEvaluate(e,t,s){const n=this.#x.getKnownContext(this.browsingContextId);return await n.awaitUnblocked(),{result:await this.#E.scriptEvaluate(this,e,t,s)}}async serializeCdpObject(e,t){return this.#E.serializeCdpObject(e,t,this)}async stringifyObject(e){return A.ScriptEvaluator.stringifyObject(e,this)}},Object.defineProperty(Z,"__esModule",{value:!0}),Z.BrowsingContextImpl=void 0;const z=O,L=C,B=T,V=M,U=R;class ${#T={documentInitialized:new V.Deferred,Page:{navigatedWithinDocument:new V.Deferred,lifecycleEvent:{DOMContentLoaded:new V.Deferred,load:new V.Deferred}}};#P;#k;#l;#N=new Map;#y;#Z="about:blank";#O=null;#M;#D;#x;#s;get#R(){if(void 0===this.#D)throw new Error(`No default realm for browsing context ${this.#P}`);return this.#D}constructor(e,t,s,n,r,a,i){this.#M=e,this.#y=t,this.#P=s,this.#k=n,this.#l=r,this.#x=a,this.#s=i,this.#j()}static create(e,t,s,n,r,a,i){const o=new $(e,t,s,n,r,a,i);a.addContext(o),r.registerEvent({method:L.BrowsingContext.EventNames.ContextCreatedEvent,params:o.serializeToBidiValue()},o.contextId)}get navigableId(){return this.#O}updateCdpTarget(e){this.#M=e,this.#j()}async delete(){if(await this.#A(),this.#y.deleteRealms({browsingContextId:this.contextId}),null!==this.parentId){this.#x.getKnownContext(this.parentId).#N.delete(this.contextId)}this.#l.registerEvent({method:L.BrowsingContext.EventNames.ContextDestroyedEvent,params:this.serializeToBidiValue()},this.contextId),this.#x.removeContext(this.contextId)}async#A(){await Promise.all(this.children.map((e=>e.delete())))}get contextId(){return this.#P}get parentId(){return this.#k}get cdpTarget(){return this.#M}get children(){return Array.from(this.#N.values())}get url(){return this.#Z}addChild(e){this.#N.set(e.contextId,e)}async awaitLoaded(){await this.#T.Page.lifecycleEvent.load}async awaitUnblocked(){return this.#M.targetUnblocked}serializeToBidiValue(e=0,t=!0){return{context:this.#P,url:this.url,children:e>0?this.children.map((t=>t.serializeToBidiValue(e-1,!1))):null,...t?{parent:this.#k}:{}}}#j(){this.#M.cdpClient.on("Target.targetInfoChanged",(e=>{this.contextId===e.targetInfo.targetId&&(this.#Z=e.targetInfo.url)})),this.#M.cdpClient.on("Page.frameNavigated",(async e=>{this.contextId===e.frame.id&&(this.#Z=e.frame.url+(e.frame.urlFragment??""),await this.#A(),this.#y.deleteRealms({browsingContextId:this.contextId}))})),this.#M.cdpClient.on("Page.navigatedWithinDocument",(e=>{this.contextId===e.frameId&&(this.#Z=e.url,this.#T.Page.navigatedWithinDocument.resolve(e))})),this.#M.cdpClient.on("Page.lifecycleEvent",(e=>{if(this.contextId!==e.frameId)return;const t=(new Date).getTime();if("init"===e.name&&(this.#z(e.loaderId),this.#T.documentInitialized.resolve()),"commit"!==e.name){if(e.loaderId===this.#O)switch(e.name){case"DOMContentLoaded":this.#T.Page.lifecycleEvent.DOMContentLoaded.resolve(e),this.#l.registerEvent({method:L.BrowsingContext.EventNames.DomContentLoadedEvent,params:{context:this.contextId,navigation:this.#O,timestamp:t,url:this.#Z}},this.contextId);break;case"load":this.#T.Page.lifecycleEvent.load.resolve(e),this.#l.registerEvent({method:L.BrowsingContext.EventNames.LoadEvent,params:{context:this.contextId,navigation:this.#O,timestamp:t,url:this.#Z}},this.contextId)}}else this.#O=e.loaderId})),this.#M.cdpClient.on("Runtime.executionContextCreated",(e=>{if(e.context.auxData.frameId!==this.contextId)return;if(!["default","isolated"].includes(e.context.auxData.type))return;const t=new U.Realm(this.#y,this.#x,e.context.uniqueId,this.contextId,e.context.id,this.#L(e),"window","isolated"===e.context.auxData.type?e.context.name:void 0,this.#M.cdpSessionId,this.#M.cdpClient,this.#l);e.context.auxData.isDefault&&(this.#D=t)})),this.#M.cdpClient.on("Runtime.executionContextDestroyed",(e=>{this.#y.deleteRealms({cdpSessionId:this.#M.cdpSessionId,executionContextId:e.executionContextId})}))}#L(e){return"isolated"===e.context.auxData.type?this.#R.origin:["://",""].includes(e.context.origin)?"null":e.context.origin}#z(e){void 0!==e&&this.#O!==e?(this.#T.documentInitialized.isFinished?this.#T.documentInitialized=new V.Deferred:this.#s?.(B.LogType.browsingContexts,"Document changed"),this.#T.Page.lifecycleEvent.DOMContentLoaded.isFinished?this.#T.Page.lifecycleEvent.DOMContentLoaded=new V.Deferred:this.#s?.(B.LogType.browsingContexts,"Document changed"),this.#T.Page.lifecycleEvent.load.isFinished?this.#T.Page.lifecycleEvent.load=new V.Deferred:this.#s?.(B.LogType.browsingContexts,"Document changed"),this.#O=e):this.#T.Page.navigatedWithinDocument.isFinished&&(this.#T.Page.navigatedWithinDocument=new V.Deferred)}async navigate(e,t){await this.awaitUnblocked();const s=await this.#M.cdpClient.sendCommand("Page.navigate",{url:e,frameId:this.contextId});if(s.errorText)throw new L.Message.UnknownErrorException(s.errorText);switch(this.#z(s.loaderId),t){case"none":break;case"interactive":void 0===s.loaderId?await this.#T.Page.navigatedWithinDocument:await this.#T.Page.lifecycleEvent.DOMContentLoaded;break;case"complete":void 0===s.loaderId?await this.#T.Page.navigatedWithinDocument:await this.#T.Page.lifecycleEvent.load}return{result:{navigation:s.loaderId||null,url:e}}}async getOrCreateSandbox(e){if(void 0===e||""===e)return this.#R;let t=this.#y.findRealms({browsingContextId:this.contextId,sandbox:e});if(0===t.length&&(await this.#M.cdpClient.sendCommand("Page.createIsolatedWorld",{frameId:this.contextId,worldName:e}),t=this.#y.findRealms({browsingContextId:this.contextId,sandbox:e})),1!==t.length)throw Error(`Sandbox ${e} wasn't created.`);return t[0]}async captureScreenshot(){const[,e]=await Promise.all([this.#M.cdpClient.sendCommand("Page.bringToFront"),this.#M.cdpClient.sendCommand("Page.captureScreenshot",{})]);return{result:{data:e.data}}}async print(e){const t={printBackground:e.background,landscape:"landscape"===e.orientation,pageRanges:e.pageRanges?.join(",")??"",scale:e.scale,preferCSSPageSize:!e.shrinkToFit};e.margin?.bottom&&(t.marginBottom=(0,z.inchesFromCm)(e.margin.bottom)),e.margin?.left&&(t.marginLeft=(0,z.inchesFromCm)(e.margin.left)),e.margin?.right&&(t.marginRight=(0,z.inchesFromCm)(e.margin.right)),e.margin?.top&&(t.marginTop=(0,z.inchesFromCm)(e.margin.top)),e.page?.height&&(t.paperHeight=(0,z.inchesFromCm)(e.page.height)),e.page?.width&&(t.paperWidth=(0,z.inchesFromCm)(e.page.width));return{result:{data:(await this.#M.cdpClient.sendCommand("Page.printToPDF",t)).data}}}async addPreloadScript(e){return{result:{script:(await this.#M.cdpClient.sendCommand("Page.addScriptToEvaluateOnNewDocument",{source:`(${e.expression})();`,worldName:e.sandbox})).identifier}}}}Z.BrowsingContextImpl=$;var F={},q={},W={};Object.defineProperty(W,"__esModule",{value:!0}),W.getRemoteValuesText=W.logMessageFormatter=void 0;const K=["%s","%d","%i","%f","%o","%O","%c"];function J(e){return K.some((t=>e.includes(t)))}function H(e){let t="";const s=e[0].value.toString(),n=e.slice(1,void 0),r=s.split(new RegExp(K.map((e=>`(${e})`)).join("|"),"g"));for(const s of r)if(void 0!==s&&""!==s)if(J(s)){const r=n.shift();if(void 0===r)throw new Error(`Less value is provided: "${Q(e,!1)}"`);"%s"===s?t+=Y(r):"%d"===s||"%i"===s?"bigint"===r.type||"number"===r.type||"string"===r.type?t+=parseInt(r.value.toString(),10):t+="NaN":"%f"===s?"bigint"===r.type||"number"===r.type||"string"===r.type?t+=parseFloat(r.value.toString()):t+="NaN":t+=G(r)}else t+=s;if(n.length>0)throw new Error(`More value is provided: "${Q(e,!1)}"`);return t}function G(e){if("array"!==e.type&&"bigint"!==e.type&&"date"!==e.type&&"number"!==e.type&&"object"!==e.type&&"string"!==e.type)return Y(e);if("bigint"===e.type)return`${e.value.toString()}n`;if("number"===e.type)return e.value.toString();if(["date","string"].includes(e.type))return JSON.stringify(e.value);if("object"===e.type)return`{${e.value.map((e=>`${JSON.stringify(e[0])}:${G(e[1])}`)).join(",")}}`;if("array"===e.type)return`[${e.value?.map((e=>G(e))).join(",")??""}]`;throw Error(`Invalid value type: ${e.toString()}`)}function Y(e){if(!Object.hasOwn(e,"value"))return e.type;switch(e.type){case"string":case"number":case"boolean":case"bigint":return String(e.value);case"regexp":return`/${e.value.pattern}/${e.value.flags??""}`;case"date":return new Date(e.value).toString();case"object":return`Object(${e.value?.length??""})`;case"array":return`Array(${e.value?.length??""})`;case"map":return`Map(${e.value.length})`;case"set":return`Set(${e.value.length})`;case"node":return"node";default:return e.type}}function Q(e,t){const s=e[0];return s?"string"===s.type&&J(s.value.toString())&&t?H(e):e.map((e=>Y(e))).join(" "):""}W.logMessageFormatter=H,W.getRemoteValuesText=Q,Object.defineProperty(q,"__esModule",{value:!0}),q.LogManager=void 0;const X=C,ee=W;function te(e){const t=e?.callFrames.map((e=>({columnNumber:e.columnNumber,functionName:e.functionName,lineNumber:e.lineNumber,url:e.url})));return t?{callFrames:t}:void 0}class se{#l;#y;#M;constructor(e,t,s){this.#M=e,this.#y=t,this.#l=s}static create(e,t,s){const n=new se(e,t,s);return n.#B(),n}#B(){this.#V()}#V(){this.#M.cdpClient.on("Runtime.consoleAPICalled",(e=>{const t=this.#y.findRealm({cdpSessionId:this.#M.cdpSessionId,executionContextId:e.executionContextId}),s=void 0===t?Promise.resolve(e.args):Promise.all(e.args.map((e=>t.serializeCdpObject(e,"none"))));this.#l.registerPromiseEvent(s.then((s=>{return{method:X.Log.EventNames.LogEntryAddedEvent,params:{level:(n=e.type,["assert","error"].includes(n)?"error":["debug","trace"].includes(n)?"debug":["warn","warning"].includes(n)?"warn":"info"),source:{realm:t?.realmId??"UNKNOWN",context:t?.browsingContextId??"UNKNOWN"},text:(0,ee.getRemoteValuesText)(s,!0),timestamp:Math.round(e.timestamp),stackTrace:te(e.stackTrace),type:"console",method:"warning"===e.type?"warn":e.type,args:s}};var n})),t?.browsingContextId??"UNKNOWN",X.Log.EventNames.LogEntryAddedEvent)})),this.#M.cdpClient.on("Runtime.exceptionThrown",(e=>{const t=this.#y.findRealm({cdpSessionId:this.#M.cdpSessionId,executionContextId:e.exceptionDetails.executionContextId}),s=(async()=>e.exceptionDetails.exception?void 0===t?JSON.stringify(e.exceptionDetails.exception):t.stringifyObject(e.exceptionDetails.exception):e.exceptionDetails.text)();this.#l.registerPromiseEvent(s.then((s=>({method:X.Log.EventNames.LogEntryAddedEvent,params:{level:"error",source:{realm:t?.realmId??"UNKNOWN",context:t?.browsingContextId??"UNKNOWN"},text:s,timestamp:Math.round(e.timestamp),stackTrace:te(e.exceptionDetails.stackTrace),type:"javascript"}}))),t?.browsingContextId??"UNKNOWN",X.Log.EventNames.LogEntryAddedEvent)}))}}q.LogManager=se;var ne={},re={};Object.defineProperty(re,"__esModule",{value:!0}),re.NetworkRequest=void 0;const ae=M,ie=C;class oe{static#U="UNKNOWN";requestId;#l;#$;#F;#q;#W;#K;#J;constructor(e,t){this.requestId=e,this.#l=t,this.#K=new ae.Deferred,this.#J=new ae.Deferred}onRequestWillBeSentEvent(e){if(void 0!==this.#$)throw new Error("RequestWillBeSentEvent is already set");this.#$=e,void 0!==this.#F&&this.#K.resolve(),this.#H()}onRequestWillBeSentExtraInfoEvent(e){if(void 0!==this.#F)throw new Error("RequestWillBeSentExtraInfoEvent is already set");this.#F=e,void 0!==this.#$&&this.#K.resolve()}onResponseReceivedEvent(e){if(void 0!==this.#q)throw new Error("ResponseReceivedEvent is already set");this.#q=e,void 0!==this.#W&&this.#J.resolve(),this.#G()}onResponseReceivedEventExtraInfo(e){if(void 0!==this.#W)throw new Error("ResponseReceivedExtraInfoEvent is already set");this.#W=e,void 0!==this.#q&&this.#J.resolve()}onLoadingFailedEvent(e){this.#K.resolve(),this.#J.reject(e);const t={...this.#Y(),errorText:e.errorText};this.#l.registerEvent({method:ie.Network.EventNames.FetchErrorEvent,params:t},this.#$?.frameId??null)}#H(){this.#Q()||this.#l.registerPromiseEvent(this.#K.then((()=>this.#X())),this.#$?.frameId??null,ie.Network.EventNames.BeforeRequestSentEvent)}#X(){if(void 0===this.#$)throw new Error("RequestWillBeSentEvent is not set");const e={...this.#Y(),initiator:{type:this.#ee()}};return{method:ie.Network.EventNames.BeforeRequestSentEvent,params:e}}#Y(){return{context:this.#$?.frameId??null,navigation:this.#$?.loaderId??null,redirectCount:0,request:this.#te(),timestamp:Math.round(1e3*(this.#$?.wallTime??0))}}#te(){const e=void 0===this.#F?[]:oe.#se(this.#F.associatedCookies);return{request:this.#$?.requestId??oe.#U,url:this.#$?.request.url??oe.#U,method:this.#$?.request.method??oe.#U,headers:Object.keys(this.#$?.request.headers??[]).map((e=>({name:e,value:this.#$?.request.headers[e]}))),cookies:e,headersSize:-1,bodySize:0,timings:{timeOrigin:0,requestTime:0,redirectStart:0,redirectEnd:0,fetchStart:0,dnsStart:0,dnsEnd:0,connectStart:0,connectEnd:0,tlsStart:0,tlsEnd:0,requestStart:0,responseStart:0,responseEnd:0}}}#ee(){switch(this.#$?.initiator.type){case"parser":case"script":case"preflight":return this.#$?.initiator.type;default:return"other"}}static#ne(e){switch(e){case"Strict":return"strict";case"Lax":return"lax";default:return"none"}}static#se(e){return e.map((e=>({name:e.cookie.name,value:e.cookie.value,domain:e.cookie.domain,path:e.cookie.path,expires:e.cookie.expires,size:e.cookie.size,httpOnly:e.cookie.httpOnly,secure:e.cookie.secure,sameSite:oe.#ne(e.cookie.sameSite)})))}#G(){this.#Q()||this.#l.registerPromiseEvent(this.#J.then((()=>this.#re())),this.#q?.frameId??null,ie.Network.EventNames.ResponseCompletedEvent)}#re(){if(void 0===this.#q)throw new Error("ResponseReceivedEvent is not set");if(void 0===this.#$)throw new Error("RequestWillBeSentEvent is not set");return{method:ie.Network.EventNames.ResponseCompletedEvent,params:{...this.#Y(),response:{url:this.#q.response.url,protocol:this.#q.response.protocol,status:this.#q.response.status,statusText:this.#q.response.statusText,fromCache:this.#q.response.fromDiskCache||this.#q.response.fromPrefetchCache,headers:this.#ae(this.#q.response.headers),mimeType:this.#q.response.mimeType,bytesReceived:this.#q.response.encodedDataLength,headersSize:this.#W?.headersText?.length??-1,bodySize:-1,content:{size:-1}}}}}#ae(e){return Object.keys(e).map((t=>({name:t,value:e[t]})))}#Q(){return this.#$?.request.url.endsWith("/favicon.ico")??!1}}re.NetworkRequest=oe,Object.defineProperty(ne,"__esModule",{value:!0}),ne.NetworkProcessor=void 0;const de=re;class ce{#l;#ie=new Map;constructor(e){this.#l=e}static async create(e,t){const s=new ce(t);return e.on("Network.requestWillBeSent",(e=>{s.#oe(e.requestId).onRequestWillBeSentEvent(e)})),e.on("Network.requestWillBeSentExtraInfo",(e=>{s.#oe(e.requestId).onRequestWillBeSentExtraInfoEvent(e)})),e.on("Network.responseReceived",(e=>{s.#oe(e.requestId).onResponseReceivedEvent(e)})),e.on("Network.responseReceivedExtraInfo",(e=>{s.#oe(e.requestId).onResponseReceivedEventExtraInfo(e)})),e.on("Network.loadingFailed",(e=>{s.#oe(e.requestId).onLoadingFailedEvent(e)})),await e.sendCommand("Network.enable"),s}#oe(e){if(!this.#ie.has(e)){const t=new de.NetworkRequest(e,this.#l);this.#ie.set(e,t)}return this.#ie.get(e)}}ne.NetworkProcessor=ce,Object.defineProperty(F,"__esModule",{value:!0}),F.CdpTarget=void 0;const ue=q,le=C,pe=M,he=ne;class me{#de;#ce;#S;#l;#ue;#le;static create(e,t,s,n,r){const a=new me(e,t,s,r);return ue.LogManager.create(a,n,r),a.#pe(),a.#he(),a}constructor(e,t,s,n){this.#ce=e,this.#S=t,this.#ue=s,this.#l=n,this.#le=!1,this.#de=new pe.Deferred}get targetUnblocked(){return this.#de}get targetId(){return this.#ce}get cdpClient(){return this.#S}get cdpSessionId(){return this.#ue}async#he(){this.#l.isNetworkDomainEnabled&&await this.enableNetworkDomain(),await this.#S.sendCommand("Runtime.enable"),await this.#S.sendCommand("Page.enable"),await this.#S.sendCommand("Page.setLifecycleEventsEnabled",{enabled:!0}),await this.#S.sendCommand("Target.setAutoAttach",{autoAttach:!0,waitForDebuggerOnStart:!0,flatten:!0}),await this.#S.sendCommand("Runtime.runIfWaitingForDebugger"),this.#de.resolve()}async enableNetworkDomain(){this.#le||(this.#le=!0,await he.NetworkProcessor.create(this.cdpClient,this.#l))}#pe(){this.#S.on("*",((e,t)=>{this.#l.registerEvent({method:le.CDP.EventNames.EventReceivedEvent,params:{cdpMethod:e,cdpParams:t||{},cdpSession:this.#ue}},null)}))}}F.CdpTarget=me,Object.defineProperty(N,"__esModule",{value:!0}),N.BrowsingContextProcessor=void 0;const ge=C,fe=T,ve=Z,ye=F;N.BrowsingContextProcessor=class{#x;#me;#l;#s;#y;#ge;constructor(e,t,s,n,r,a){this.#x=r,this.#me=t,this.#l=n,this.#s=a,this.#y=e,this.#ge=s,this.#pe(this.#me.browserClient())}#pe(e){e.on("Target.attachedToTarget",(async t=>{await this.#fe(t,e)})),e.on("Target.detachedFromTarget",(async e=>{await this.#ve(e)})),e.on("Page.frameAttached",(e=>{this.#ye(e)})),e.on("Page.frameDetached",(async e=>{await this.#xe(e)}))}#ye(e){const t=this.#x.findContext(e.parentFrameId);void 0!==t&&ve.BrowsingContextImpl.create(t.cdpTarget,this.#y,e.frameId,e.parentFrameId,this.#l,this.#x,this.#s)}async#xe(e){"swap"!==e.reason&&await(this.#x.findContext(e.frameId)?.delete())}async#fe(e,t){const{sessionId:s,targetInfo:n}=e,r=this.#me.getCdpClient(s);if(!this.#be(n))return await r.sendCommand("Runtime.runIfWaitingForDebugger"),void await t.sendCommand("Target.detachFromTarget",e);this.#s?.(fe.LogType.browsingContexts,"AttachedToTarget event received:",JSON.stringify(e,null,2)),this.#pe(r);const a=ye.CdpTarget.create(n.targetId,r,s,this.#y,this.#l);this.#x.hasKnownContext(n.targetId)?this.#x.getKnownContext(n.targetId).updateCdpTarget(a):ve.BrowsingContextImpl.create(a,this.#y,n.targetId,null,this.#l,this.#x,this.#s)}async#ve(e){const t=e.targetId;await(this.#x.findContext(t)?.delete())}process_browsingContext_getTree(e){return{result:{contexts:(void 0===e.root?this.#x.getTopLevelContexts():[this.#x.getKnownContext(e.root)]).map((t=>t.serializeToBidiValue(e.maxDepth??Number.MAX_VALUE)))}}}async process_browsingContext_create(e){const t=this.#me.browserClient();let s;if(void 0!==e.referenceContext&&(s=this.#x.getKnownContext(e.referenceContext),null!==s.parentId))throw new ge.Message.InvalidArgumentException("referenceContext should be a top-level context");const n=(await t.sendCommand("Target.createTarget",{url:"about:blank",newWindow:"window"===e.type})).targetId,r=this.#x.getKnownContext(n);return await r.awaitLoaded(),{result:r.serializeToBidiValue(1)}}async process_browsingContext_navigate(e){return this.#x.getKnownContext(e.context).navigate(e.url,void 0===e.wait?"none":e.wait)}async process_browsingContext_captureScreenshot(e){return this.#x.getKnownContext(e.context).captureScreenshot()}async process_browsingContext_print(e){return this.#x.getKnownContext(e.context).print(e)}async#Ce(e){if("realm"in e)return this.#y.getRealm({realmId:e.realm});return this.#x.getKnownContext(e.context).getOrCreateSandbox(e.sandbox)}async process_script_addPreloadScript(e){const t=[],s=[];return e.context?t.push(this.#x.getKnownContext(e.context)):t.push(...this.#x.getAllContexts()),s.push(...await Promise.all(t.map((t=>t.addPreloadScript(e))))),s[0]}async process_script_removePreloadScript(e){throw new ge.Message.UnknownErrorException("Not implemented.")}async process_script_evaluate(e){return(await this.#Ce(e.target)).scriptEvaluate(e.expression,e.awaitPromise,e.resultOwnership??"none")}process_script_getRealms(e){void 0!==e.context&&this.#x.getKnownContext(e.context);const t=this.#y.findRealms({browsingContextId:e.context,type:e.type}).map((e=>e.toBiDi()));return{result:{realms:t}}}async process_script_callFunction(e){return(await this.#Ce(e.target)).callFunction(e.functionDeclaration,e.this||{type:"undefined"},e.arguments||[],e.awaitPromise,e.resultOwnership??"none")}async process_script_disown(e){const t=await this.#Ce(e.target);return await Promise.all(e.handles.map((async e=>t.disown(e)))),{result:{}}}async process_browsingContext_close(e){const t=this.#me.browserClient();if(null!==this.#x.getKnownContext(e.context).parentId)throw new ge.Message.InvalidArgumentException("Not a top-level browsing context cannot be closed.");const s=new Promise((s=>{const n=r=>{r.targetId===e.context&&(t.off("Target.detachedFromTarget",n),s())};t.on("Target.detachedFromTarget",n)}));return await t.sendCommand("Target.closeTarget",{targetId:e.context}),await s,{result:{}}}#be(e){return e.targetId!==this.#ge&&["page","iframe"].includes(e.type)}async process_cdp_sendCommand(e){const t=e.cdpSession?this.#me.getCdpClient(e.cdpSession):this.#me.browserClient();return{result:await t.sendCommand(e.cdpMethod,e.cdpParams),cdpSession:e.cdpSession}}process_cdp_getSession(e){const t=e.context,s=this.#x.getKnownContext(t).cdpTarget.cdpSessionId;return void 0===s?{result:{cdpSession:null}}:{result:{cdpSession:s}}}};var xe={};Object.defineProperty(xe,"__esModule",{value:!0}),xe.OutgoingBidiMessage=void 0;class be{#we;#_e;constructor(e,t){this.#we=e,this.#_e=t}static async createFromPromise(e,t){return e.then((e=>new be(e,t)))}static createResolved(e,t){return Promise.resolve(new be(e,t))}get message(){return this.#we}get channel(){return this.#_e}}xe.OutgoingBidiMessage=be,Object.defineProperty(k,"__esModule",{value:!0}),k.CommandProcessor=void 0;const Ce=C,we=T,_e=_,Ie=N,Se=xe;class Ee{parseAddPreloadScriptParams(e){return e}parseRemovePreloadScriptParams(e){return e}parseGetRealmsParams(e){return e}parseCallFunctionParams(e){return e}parseEvaluateParams(e){return e}parseDisownParams(e){return e}parseSendCommandParams(e){return e}parseGetSessionParams(e){return e}parseSubscribeParams(e){return e}parseNavigateParams(e){return e}parseGetTreeParams(e){return e}parseCreateParams(e){return e}parseCloseParams(e){return e}parseCaptureScreenshotParams(e){return e}parsePrintParams(e){return e}}class Te extends _e.EventEmitter{#Ie;#l;#Se;#s;constructor(e,t,s,n,r=new Ee,a,i){super(),this.#l=s,this.#s=i,this.#Ie=new Ie.BrowsingContextProcessor(e,t,n,s,a,i),this.#Se=r}static#Ee(){return{result:{ready:!1,message:"already connected"}}}async#Te(e,t){return await this.#l.subscribe(e.events,e.contexts??[null],t),{result:{}}}async#Pe(e,t){return await this.#l.unsubscribe(e.events,e.contexts??[null],t),{result:{}}}async#ke(e){switch(e.method){case"session.status":return Te.#Ee();case"session.subscribe":return this.#Te(this.#Se.parseSubscribeParams(e.params),e.channel??null);case"session.unsubscribe":return this.#Pe(this.#Se.parseSubscribeParams(e.params),e.channel??null);case"browsingContext.create":return this.#Ie.process_browsingContext_create(this.#Se.parseCreateParams(e.params));case"browsingContext.close":return this.#Ie.process_browsingContext_close(this.#Se.parseCloseParams(e.params));case"browsingContext.getTree":return this.#Ie.process_browsingContext_getTree(this.#Se.parseGetTreeParams(e.params));case"browsingContext.navigate":return this.#Ie.process_browsingContext_navigate(this.#Se.parseNavigateParams(e.params));case"browsingContext.captureScreenshot":return this.#Ie.process_browsingContext_captureScreenshot(this.#Se.parseCaptureScreenshotParams(e.params));case"browsingContext.print":return this.#Ie.process_browsingContext_print(this.#Se.parsePrintParams(e.params));case"script.addPreloadScript":return this.#Ie.process_script_addPreloadScript(this.#Se.parseAddPreloadScriptParams(e.params));case"script.removePreloadScript":return this.#Ie.process_script_removePreloadScript(this.#Se.parseRemovePreloadScriptParams(e.params));case"script.getRealms":return this.#Ie.process_script_getRealms(this.#Se.parseGetRealmsParams(e.params));case"script.callFunction":return this.#Ie.process_script_callFunction(this.#Se.parseCallFunctionParams(e.params));case"script.evaluate":return this.#Ie.process_script_evaluate(this.#Se.parseEvaluateParams(e.params));case"script.disown":return this.#Ie.process_script_disown(this.#Se.parseDisownParams(e.params));case"cdp.sendCommand":return this.#Ie.process_cdp_sendCommand(this.#Se.parseSendCommandParams(e.params));case"cdp.getSession":return this.#Ie.process_cdp_getSession(this.#Se.parseGetSessionParams(e.params));default:throw new Ce.Message.UnknownCommandException(`Unknown command '${e.method}'.`)}}async processCommand(e){try{const t=await this.#ke(e),s={id:e.id,...t};this.emit("response",Se.OutgoingBidiMessage.createResolved(s,e.channel??null))}catch(t){if(t instanceof Ce.Message.ErrorResponse){const s=t;this.emit("response",Se.OutgoingBidiMessage.createResolved(s.toErrorResponse(e.id),e.channel??null))}else{const s=t;this.#s?.(we.LogType.bidi,s),this.emit("response",Se.OutgoingBidiMessage.createResolved(new Ce.Message.ErrorResponse(Ce.Message.ErrorCode.UnknownError,s.message).toErrorResponse(e.id),e.channel??null))}}}}k.CommandProcessor=Te;var Pe={};Object.defineProperty(Pe,"__esModule",{value:!0}),Pe.BrowsingContextStorage=void 0;const ke=C;Pe.BrowsingContextStorage=class{#Ne=new Map;getTopLevelContexts(){return Array.from(this.#Ne.values()).filter((e=>null===e.parentId))}getAllContexts(){return Array.from(this.#Ne.values())}removeContext(e){this.#Ne.delete(e)}addContext(e){this.#Ne.set(e.contextId,e),null!==e.parentId&&this.getKnownContext(e.parentId).addChild(e)}hasKnownContext(e){return this.#Ne.has(e)}findContext(e){return this.#Ne.get(e)}getKnownContext(e){const t=this.findContext(e);if(void 0===t)throw new ke.Message.NoSuchFrameException(`Context ${e} not found`);return t}};var Ne={},Ze={};Object.defineProperty(Ze,"__esModule",{value:!0}),Ze.Buffer=void 0;Ze.Buffer=class{#Ze;#Oe=[];#Me;constructor(e,t=(()=>{})){this.#Ze=e,this.#Me=t}get(){return this.#Oe}add(e){for(this.#Oe.push(e);this.#Oe.length>this.#Ze;){const e=this.#Oe.shift();void 0!==e&&this.#Me(e)}}};var Oe={};Object.defineProperty(Oe,"__esModule",{value:!0}),Oe.IdWrapper=void 0;class Me{static#De=0;#Re;constructor(){this.#Re=++Me.#De}get id(){return this.#Re}}Oe.IdWrapper=Me;var De={};Object.defineProperty(De,"__esModule",{value:!0}),De.SubscriptionManager=De.unrollEvents=De.cartesianProduct=void 0;const Re=C;function je(...e){return e.reduce(((e,t)=>e.flatMap((e=>t.map((t=>[e,t].flat()))))))}function Ae(e){const t=[];for(const s of e)switch(s){case Re.BrowsingContext.AllEvents:t.push(...Object.values(Re.BrowsingContext.EventNames));break;case Re.CDP.AllEvents:t.push(...Object.values(Re.CDP.EventNames));break;case Re.Log.AllEvents:t.push(...Object.values(Re.Log.EventNames));break;case Re.Network.AllEvents:t.push(...Object.values(Re.Network.EventNames));break;case Re.Script.AllEvents:t.push(...Object.values(Re.Script.EventNames));break;default:t.push(s)}return t}De.cartesianProduct=je,De.unrollEvents=Ae;De.SubscriptionManager=class{#je=0;#Ae=new Map;#x;constructor(e){this.#x=e}getChannelsSubscribedToEvent(e,t){return Array.from(this.#Ae.keys()).map((s=>({priority:this.#ze(e,t,s),channel:s}))).filter((({priority:e})=>null!==e)).sort(((e,t)=>e.priority-t.priority)).map((({channel:e})=>e))}#ze(e,t,s){const n=this.#Ae.get(s);if(void 0===n)return null;const r=this.#Le(t),a=[...new Set([null,r])].map((t=>n.get(t)?.get(e))).filter((e=>void 0!==e));return 0===a.length?null:Math.min(...a)}#Le(e){if(null===e)return null;const t=this.#x.findContext(e)?.parentId??null;return null!==t?this.#Le(t):e}subscribe(e,t,s){if(t=this.#Le(t),e===Re.BrowsingContext.AllEvents)return void Object.values(Re.BrowsingContext.EventNames).map((e=>this.subscribe(e,t,s)));if(e===Re.CDP.AllEvents)return void Object.values(Re.CDP.EventNames).map((e=>this.subscribe(e,t,s)));if(e===Re.Log.AllEvents)return void Object.values(Re.Log.EventNames).map((e=>this.subscribe(e,t,s)));if(e===Re.Network.AllEvents)return void Object.values(Re.Network.EventNames).map((e=>this.subscribe(e,t,s)));if(e===Re.Script.AllEvents)return void Object.values(Re.Script.EventNames).map((e=>this.subscribe(e,t,s)));this.#Ae.has(s)||this.#Ae.set(s,new Map);const n=this.#Ae.get(s);n.has(t)||n.set(t,new Map);const r=n.get(t);r.has(e)||r.set(e,this.#je++)}unsubscribeAll(e,t,s){for(const e of t)null!==e&&this.#x.getKnownContext(e);je(Ae(e),t).map((([e,t])=>this.#Be(e,t,s))).forEach((e=>e()))}unsubscribe(e,t,s){this.unsubscribeAll([e],[t],s)}#Be(e,t,s){if(t=this.#Le(t),!this.#Ae.has(s))throw new Re.Message.InvalidArgumentException(`Cannot unsubscribe from ${e}, ${null===t?"null":t}. No subscription found.`);const n=this.#Ae.get(s);if(!n.has(t))throw new Re.Message.InvalidArgumentException(`Cannot unsubscribe from ${e}, ${null===t?"null":t}. No subscription found.`);const r=n.get(t);if(!r.has(e))throw new Re.Message.InvalidArgumentException(`Cannot unsubscribe from ${e}, ${null===t?"null":t}. No subscription found.`);return()=>{r.delete(e),0===r.size&&n.delete(e),0===n.size&&this.#Ae.delete(s)}}},Object.defineProperty(Ne,"__esModule",{value:!0}),Ne.EventManager=void 0;const ze=Ze,Le=Oe,Be=xe,Ve=De;class Ue{#Ve;#P;#Ue;constructor(e,t){this.#Ve=new Le.IdWrapper,this.#P=t,this.#Ue=e}get id(){return this.#Ve.id}get contextId(){return this.#P}get event(){return this.#Ue}}const $e=new Map([["log.entryAdded",100]]);class Fe{static#$e="network";#Fe=new Map;#qe=new Map;#We=new Map;#Ke;#Je;#He;constructor(e){this.#Je=e,this.#Ke=new Ve.SubscriptionManager(e.getBrowsingContextStorage()),this.#He=!1}get isNetworkDomainEnabled(){return this.#He}static#Ge(e,t,s){return JSON.stringify({eventName:e,browsingContext:t,channel:s})}registerEvent(e,t){this.registerPromiseEvent(Promise.resolve(e),t,e.method)}registerPromiseEvent(e,t,s){const n=new Ue(e,t),r=this.#Ke.getChannelsSubscribedToEvent(s,t);this.#Ye(n,s);for(const t of r)this.#Je.emitOutgoingMessage(Be.OutgoingBidiMessage.createFromPromise(e,t)),this.#Qe(n,t,s)}async subscribe(e,t,s){for(const e of t)null!==e&&this.#Je.getBrowsingContextStorage().getKnownContext(e);for(const n of e)for(const e of t){await this.#Xe(n,e),this.#Ke.subscribe(n,e,s);for(const t of this.#et(n,e,s))this.#Je.emitOutgoingMessage(Be.OutgoingBidiMessage.createFromPromise(t.event,s)),this.#Qe(t,s,n)}}async#Xe(e,t){e.startsWith(Fe.#$e)&&(null===t?(this.#He=!0,await Promise.all(this.#Je.getBrowsingContextStorage().getAllContexts().map((e=>e.cdpTarget.enableNetworkDomain())))):await this.#Je.getBrowsingContextStorage().getKnownContext(t).cdpTarget.enableNetworkDomain())}unsubscribe(e,t,s){this.#Ke.unsubscribeAll(e,t,s)}#Ye(e,t){if(!$e.has(t))return;const s=Fe.#Ge(t,e.contextId);this.#qe.has(s)||this.#qe.set(s,new ze.Buffer($e.get(t))),this.#qe.get(s).add(e),this.#Fe.has(t)||this.#Fe.set(t,new Set),this.#Fe.get(t).add(e.contextId)}#Qe(e,t,s){if(!$e.has(s))return;const n=Fe.#Ge(s,e.contextId,t);this.#We.set(n,Math.max(this.#We.get(n)??0,e.id))}#et(e,t,s){const n=Fe.#Ge(e,t),r=Fe.#Ge(e,t,s),a=this.#We.get(r)??-1/0,i=this.#qe.get(n)?.get().filter((e=>e.id>a))??[];return null===t&&Array.from(this.#Fe.get(e)?.keys()??[]).filter((e=>null!==e&&this.#Je.getBrowsingContextStorage().hasKnownContext(e))).map((t=>this.#et(e,t,s))).forEach((e=>i.push(...e))),i.sort(((e,t)=>e.id-t.id))}}Ne.EventManager=Fe;var qe={};Object.defineProperty(qe,"__esModule",{value:!0}),qe.RealmStorage=void 0;const We=C;qe.RealmStorage=class{#tt=new Map;#st=new Map;get knownHandlesToRealm(){return this.#tt}get realmMap(){return this.#st}findRealms(e){return Array.from(this.#st.values()).filter((t=>(void 0===e.realmId||e.realmId===t.realmId)&&((void 0===e.browsingContextId||e.browsingContextId===t.browsingContextId)&&((void 0===e.navigableId||e.navigableId===t.navigableId)&&((void 0===e.executionContextId||e.executionContextId===t.executionContextId)&&((void 0===e.origin||e.origin===t.origin)&&((void 0===e.type||e.type===t.type)&&((void 0===e.sandbox||e.sandbox===t.sandbox)&&(void 0===e.cdpSessionId||e.cdpSessionId===t.cdpSessionId)))))))))}findRealm(e){const t=this.findRealms(e);if(1===t.length)return t[0]}getRealm(e){const t=this.findRealm(e);if(void 0===t)throw new We.Message.NoSuchFrameException(`Realm ${JSON.stringify(e)} not found`);return t}deleteRealms(e){this.findRealms(e).map((e=>{this.#st.delete(e.realmId),Array.from(this.#tt.entries()).filter((([,t])=>t===e.realmId)).map((([e])=>this.#tt.delete(e)))}))}},Object.defineProperty(w,"__esModule",{value:!0}),w.BidiServer=void 0;const Ke=_,Je=E,He=k,Ge=Pe,Ye=Ne,Qe=qe;class Xe extends Ke.EventEmitter{#nt;#rt;#at;#x;#y;#s;#it=e=>{this.#at.processCommand(e)};#ot=async e=>{const t=e.message;null!==e.channel&&(t.channel=e.channel),await this.#rt.sendMessage(t)};constructor(e,t,s,n,r){super(),this.#s=r,this.#x=new Ge.BrowsingContextStorage,this.#y=new Qe.RealmStorage,this.#nt=new Je.ProcessingQueue(this.#ot,(()=>Promise.resolve()),this.#s),this.#rt=e,this.#rt.setOnMessage(this.#it),this.#at=new He.CommandProcessor(this.#y,t,new Ye.EventManager(this),s,n,this.#x,this.#s),this.#at.on("response",(e=>{this.emitOutgoingMessage(e)}))}static async createAndStart(e,t,s,n,r){const a=new Xe(e,t,s,n,r),i=t.browserClient();return await i.sendCommand("Target.setDiscoverTargets",{discover:!0}),await i.sendCommand("Target.setAutoAttach",{autoAttach:!0,waitForDebuggerOnStart:!0,flatten:!0}),await a.topLevelContextsLoaded(),a}async topLevelContextsLoaded(){await Promise.all(this.#x.getTopLevelContexts().map((e=>e.awaitLoaded())))}emitOutgoingMessage(e){this.#nt.add(e)}close(){this.#rt.close()}getBrowsingContextStorage(){return this.#x}}w.BidiServer=Xe;var et={},tt={};Object.defineProperty(tt,"__esModule",{value:!0}),tt.CdpClient=void 0;const st=_;class nt extends st.EventEmitter{#me;#dt;constructor(e,t){super(),this.#me=e,this.#dt=t}static create(e,t){return new nt(e,t)}sendCommand(e,...t){const s=t[0];return this.#me.sendCommand(e,s,this.#dt)}}tt.CdpClient=nt;var rt={};Object.defineProperty(rt,"__esModule",{value:!0}),rt.CdpConnection=void 0;const at=tt;rt.CdpConnection=class{#rt;#ct;#ut=new Map;#lt=new Map;#pt;#ht=0;constructor(e,t=(()=>{})){this.#rt=e,this.#pt=t,this.#rt.setOnMessage(this.#mt),this.#ct=at.CdpClient.create(this,null)}close(){this.#rt.close();for(const[,{reject:e}]of this.#lt)e(new Error("Disconnected"));this.#lt.clear(),this.#ut.clear()}browserClient(){return this.#ct}getCdpClient(e){const t=this.#ut.get(e);if(!t)throw new Error("Unknown CDP session ID");return t}sendCommand(e,t,s){return new Promise(((n,r)=>{const a=this.#ht++;this.#lt.set(a,{resolve:n,reject:r});const i={id:a,method:e,params:t};s&&(i.sessionId=s);const o=JSON.stringify(i),d=JSON.stringify(i,null,2);this.#rt.sendMessage(o),this.#pt("sent ▸",d)}))}#mt=e=>{const t=JSON.parse(e),s=JSON.stringify(t,null,2);if(this.#pt("received ◂",s),"Target.attachedToTarget"===t.method){const{sessionId:e}=t.params;this.#ut.set(e,at.CdpClient.create(this,e))}else if("Target.detachedFromTarget"===t.method){const{sessionId:e}=t.params;this.#ut.get(e)&&this.#ut.delete(e)}if(void 0!==t.id){const e=this.#lt.get(t.id);e&&(t.result?e.resolve(t.result):t.error&&e.reject(t.error))}else if(t.method){const e=t.sessionId?this.#ut.get(t.sessionId):this.#ct;e&&e.emit(t.method,t.params||{})}}};var it={};Object.defineProperty(it,"__esModule",{value:!0}),it.WebSocketTransport=void 0;it.WebSocketTransport=class{#mt=null;#gt;constructor(e){this.#gt=e,this.#gt.on("message",(e=>{this.#mt?.(e)}))}setOnMessage(e){this.#mt=e}sendMessage(e){this.#gt.send(e)}close(){this.#mt=null,this.#gt.close()}},function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.WebSocketTransport=e.CdpConnection=e.CdpClient=void 0;var t=tt;Object.defineProperty(e,"CdpClient",{enumerable:!0,get:function(){return t.CdpClient}});var s=rt;Object.defineProperty(e,"CdpConnection",{enumerable:!0,get:function(){return s.CdpConnection}});var n=it;Object.defineProperty(e,"WebSocketTransport",{enumerable:!0,get:function(){return n.WebSocketTransport}})}(et);var ot={};Object.defineProperty(ot,"__esModule",{value:!0}),ot.log=ot.generatePage=void 0;const dt=T;function ct(e){const t=`${e}_log`,s=document.getElementById(t);if(s)return s;const n=document.getElementById("details"),r=document.createElement("div");r.className="divider",n.appendChild(r);const a=document.createElement("div");return a.className="item",a.innerHTML=`<h3>${e}</h3><div id="${t}" class="log"></div>`,n.appendChild(a),document.getElementById(t)}ot.generatePage=function(){globalThis.document?.documentElement&&(window.document.documentElement.innerHTML='<!DOCTYPE html><title>BiDi-CDP Mapper</title><style>body{font-family: Roboto, serif; font-size: 13px; color: #202124;}.log{padding: 12px; font-family: Menlo, Consolas, Monaco, Liberation Mono, Lucida Console, monospace; font-size: 11px; line-height: 180%; background: #f1f3f4; border-radius: 4px;}.pre{overflow-wrap: break-word; padding: 10px;}.card{margin: 60px auto; padding: 2px 0; max-width: 900px; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15), 0 1px 6px rgba(0, 0, 0, 0.2); border-radius: 8px;}.divider{height: 1px; background: #f0f0f0;}.item{padding: 16px 20px;}</style><div class="card"><div class="item"><h1>BiDi-CDP Mapper is controlling this tab</h1><p>Closing or reloading it will stop the BiDi process. <a target="_blank" title="BiDi-CDP Mapper GitHub Repository" href="https://github.com/GoogleChromeLabs/chromium-bidi">Details.</a></p></div><div class="divider"></div><details id="details"><summary class="item">Debug information</summary></details></div>',ct(dt.LogType.system),ct(dt.LogType.bidi),ct(dt.LogType.browsingContexts),ct(dt.LogType.cdp))},ot.log=function(t,...s){if(!globalThis.document?.documentElement)return;e.window?.sendDebugMessage?.(JSON.stringify({logType:t,messages:s}));const n=ct(t),r=document.createElement("div");r.className="pre",r.textContent=s.join(" "),n.appendChild(r)}; +var mapperTab=function(){"use strict";var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e){if(e.__esModule)return e;var t=e.default;if("function"==typeof t){var n=function e(){if(this instanceof e){var n=[null];return n.push.apply(n,arguments),new(Function.bind.apply(t,n))}return t.apply(this,arguments)};n.prototype=t.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(e).forEach((function(t){var s=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,s.get?s:{enumerable:!0,get:function(){return e[t]}})})),n}var n={},s={},r={},a={},i={},o={},d={};!function(e){var t;Object.defineProperty(e,"__esModule",{value:!0}),e.getParsedType=e.ZodParsedType=e.objectUtil=e.util=void 0,function(e){e.assertEqual=e=>e,e.assertIs=function(e){},e.assertNever=function(e){throw new Error},e.arrayToEnum=e=>{const t={};for(const n of e)t[n]=n;return t},e.getValidEnumValues=t=>{const n=e.objectKeys(t).filter((e=>"number"!=typeof t[t[e]])),s={};for(const e of n)s[e]=t[e];return e.objectValues(s)},e.objectValues=t=>e.objectKeys(t).map((function(e){return t[e]})),e.objectKeys="function"==typeof Object.keys?e=>Object.keys(e):e=>{const t=[];for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push(n);return t},e.find=(e,t)=>{for(const n of e)if(t(n))return n},e.isInteger="function"==typeof Number.isInteger?e=>Number.isInteger(e):e=>"number"==typeof e&&isFinite(e)&&Math.floor(e)===e,e.joinValues=function(e,t=" | "){return e.map((e=>"string"==typeof e?`'${e}'`:e)).join(t)},e.jsonStringifyReplacer=(e,t)=>"bigint"==typeof t?t.toString():t}(t=e.util||(e.util={})),(e.objectUtil||(e.objectUtil={})).mergeShapes=(e,t)=>({...e,...t}),e.ZodParsedType=t.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]);e.getParsedType=t=>{switch(typeof t){case"undefined":return e.ZodParsedType.undefined;case"string":return e.ZodParsedType.string;case"number":return isNaN(t)?e.ZodParsedType.nan:e.ZodParsedType.number;case"boolean":return e.ZodParsedType.boolean;case"function":return e.ZodParsedType.function;case"bigint":return e.ZodParsedType.bigint;case"symbol":return e.ZodParsedType.symbol;case"object":return Array.isArray(t)?e.ZodParsedType.array:null===t?e.ZodParsedType.null:t.then&&"function"==typeof t.then&&t.catch&&"function"==typeof t.catch?e.ZodParsedType.promise:"undefined"!=typeof Map&&t instanceof Map?e.ZodParsedType.map:"undefined"!=typeof Set&&t instanceof Set?e.ZodParsedType.set:"undefined"!=typeof Date&&t instanceof Date?e.ZodParsedType.date:e.ZodParsedType.object;default:return e.ZodParsedType.unknown}}}(d);var c={};Object.defineProperty(c,"__esModule",{value:!0}),c.ZodError=c.quotelessJson=c.ZodIssueCode=void 0;const u=d;c.ZodIssueCode=u.util.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);c.quotelessJson=e=>JSON.stringify(e,null,2).replace(/"([^"]+)":/g,"$1:");class l extends Error{constructor(e){super(),this.issues=[],this.addIssue=e=>{this.issues=[...this.issues,e]},this.addIssues=(e=[])=>{this.issues=[...this.issues,...e]};const t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=e}get errors(){return this.issues}format(e){const t=e||function(e){return e.message},n={_errors:[]},s=e=>{for(const r of e.issues)if("invalid_union"===r.code)r.unionErrors.map(s);else if("invalid_return_type"===r.code)s(r.returnTypeError);else if("invalid_arguments"===r.code)s(r.argumentsError);else if(0===r.path.length)n._errors.push(t(r));else{let e=n,s=0;for(;s<r.path.length;){const n=r.path[s];s===r.path.length-1?(e[n]=e[n]||{_errors:[]},e[n]._errors.push(t(r))):e[n]=e[n]||{_errors:[]},e=e[n],s++}}};return s(this),n}toString(){return this.message}get message(){return JSON.stringify(this.issues,u.util.jsonStringifyReplacer,2)}get isEmpty(){return 0===this.issues.length}flatten(e=(e=>e.message)){const t={},n=[];for(const s of this.issues)s.path.length>0?(t[s.path[0]]=t[s.path[0]]||[],t[s.path[0]].push(e(s))):n.push(e(s));return{formErrors:n,fieldErrors:t}}get formErrors(){return this.flatten()}}c.ZodError=l,l.create=e=>new l(e),Object.defineProperty(o,"__esModule",{value:!0});const p=d,h=c;o.default=(e,t)=>{let n;switch(e.code){case h.ZodIssueCode.invalid_type:n=e.received===p.ZodParsedType.undefined?"Required":`Expected ${e.expected}, received ${e.received}`;break;case h.ZodIssueCode.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,p.util.jsonStringifyReplacer)}`;break;case h.ZodIssueCode.unrecognized_keys:n=`Unrecognized key(s) in object: ${p.util.joinValues(e.keys,", ")}`;break;case h.ZodIssueCode.invalid_union:n="Invalid input";break;case h.ZodIssueCode.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${p.util.joinValues(e.options)}`;break;case h.ZodIssueCode.invalid_enum_value:n=`Invalid enum value. Expected ${p.util.joinValues(e.options)}, received '${e.received}'`;break;case h.ZodIssueCode.invalid_arguments:n="Invalid function arguments";break;case h.ZodIssueCode.invalid_return_type:n="Invalid function return type";break;case h.ZodIssueCode.invalid_date:n="Invalid date";break;case h.ZodIssueCode.invalid_string:"object"==typeof e.validation?"includes"in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,"number"==typeof e.validation.position&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):"startsWith"in e.validation?n=`Invalid input: must start with "${e.validation.startsWith}"`:"endsWith"in e.validation?n=`Invalid input: must end with "${e.validation.endsWith}"`:p.util.assertNever(e.validation):n="regex"!==e.validation?`Invalid ${e.validation}`:"Invalid";break;case h.ZodIssueCode.too_small:n="array"===e.type?`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:"string"===e.type?`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:"number"===e.type?`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:"date"===e.type?`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:"Invalid input";break;case h.ZodIssueCode.too_big:n="array"===e.type?`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:"string"===e.type?`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:"number"===e.type?`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:"bigint"===e.type?`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:"date"===e.type?`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`:"Invalid input";break;case h.ZodIssueCode.custom:n="Invalid input";break;case h.ZodIssueCode.invalid_intersection_types:n="Intersection results could not be merged";break;case h.ZodIssueCode.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case h.ZodIssueCode.not_finite:n="Number must be finite";break;default:n=t.defaultError,p.util.assertNever(e)}return{message:n}};var m=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(i,"__esModule",{value:!0}),i.getErrorMap=i.setErrorMap=i.defaultErrorMap=void 0;const g=m(o);i.defaultErrorMap=g.default;let f=g.default;i.setErrorMap=function(e){f=e},i.getErrorMap=function(){return f};var v={};!function(t){var n=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.isAsync=t.isValid=t.isDirty=t.isAborted=t.OK=t.DIRTY=t.INVALID=t.ParseStatus=t.addIssueToContext=t.EMPTY_PATH=t.makeIssue=void 0;const s=i,r=n(o);t.makeIssue=e=>{const{data:t,path:n,errorMaps:s,issueData:r}=e,a=[...n,...r.path||[]],i={...r,path:a};let o="";const d=s.filter((e=>!!e)).slice().reverse();for(const e of d)o=e(i,{data:t,defaultError:o}).message;return{...r,path:a,message:r.message||o}},t.EMPTY_PATH=[],t.addIssueToContext=function(e,n){const a=(0,t.makeIssue)({issueData:n,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,(0,s.getErrorMap)(),r.default].filter((e=>!!e))});e.common.issues.push(a)};class a{constructor(){this.value="valid"}dirty(){"valid"===this.value&&(this.value="dirty")}abort(){"aborted"!==this.value&&(this.value="aborted")}static mergeArray(e,n){const s=[];for(const r of n){if("aborted"===r.status)return t.INVALID;"dirty"===r.status&&e.dirty(),s.push(r.value)}return{status:e.value,value:s}}static async mergeObjectAsync(e,t){const n=[];for(const e of t)n.push({key:await e.key,value:await e.value});return a.mergeObjectSync(e,n)}static mergeObjectSync(e,n){const s={};for(const r of n){const{key:n,value:a}=r;if("aborted"===n.status)return t.INVALID;if("aborted"===a.status)return t.INVALID;"dirty"===n.status&&e.dirty(),"dirty"===a.status&&e.dirty(),(void 0!==a.value||r.alwaysSet)&&(s[n.value]=a.value)}return{status:e.value,value:s}}}t.ParseStatus=a,t.INVALID=Object.freeze({status:"aborted"});t.DIRTY=e=>({status:"dirty",value:e});t.OK=e=>({status:"valid",value:e});t.isAborted=e=>"aborted"===e.status;t.isDirty=e=>"dirty"===e.status;t.isValid=e=>"valid"===e.status;t.isAsync=e=>"undefined"!=typeof Promise&&e instanceof Promise}(v);var y={};Object.defineProperty(y,"__esModule",{value:!0});var b,x={},C={};b=C,Object.defineProperty(b,"__esModule",{value:!0}),b.errorUtil=void 0,function(e){e.errToObj=e=>"string"==typeof e?{message:e}:e||{},e.toString=e=>"string"==typeof e?e:null==e?void 0:e.message}(b.errorUtil||(b.errorUtil={})),function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.discriminatedUnion=e.date=e.boolean=e.bigint=e.array=e.any=e.coerce=e.ZodFirstPartyTypeKind=e.late=e.ZodSchema=e.Schema=e.custom=e.ZodPipeline=e.ZodBranded=e.BRAND=e.ZodNaN=e.ZodCatch=e.ZodDefault=e.ZodNullable=e.ZodOptional=e.ZodTransformer=e.ZodEffects=e.ZodPromise=e.ZodNativeEnum=e.ZodEnum=e.ZodLiteral=e.ZodLazy=e.ZodFunction=e.ZodSet=e.ZodMap=e.ZodRecord=e.ZodTuple=e.ZodIntersection=e.ZodDiscriminatedUnion=e.ZodUnion=e.ZodObject=e.ZodArray=e.ZodVoid=e.ZodNever=e.ZodUnknown=e.ZodAny=e.ZodNull=e.ZodUndefined=e.ZodSymbol=e.ZodDate=e.ZodBoolean=e.ZodBigInt=e.ZodNumber=e.ZodString=e.ZodType=void 0,e.NEVER=e.void=e.unknown=e.union=e.undefined=e.tuple=e.transformer=e.symbol=e.string=e.strictObject=e.set=e.record=e.promise=e.preprocess=e.pipeline=e.ostring=e.optional=e.onumber=e.oboolean=e.object=e.number=e.nullable=e.null=e.never=e.nativeEnum=e.nan=e.map=e.literal=e.lazy=e.intersection=e.instanceof=e.function=e.enum=e.effect=void 0;const t=i,n=C,s=v,r=d,a=c;class o{constructor(e,t,n,s){this._cachedPath=[],this.parent=e,this.data=t,this._path=n,this._key=s}get path(){return this._cachedPath.length||(this._key instanceof Array?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}const u=(e,t)=>{if((0,s.isValid)(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const t=new a.ZodError(e.common.issues);return this._error=t,this._error}}};function l(e){if(!e)return{};const{errorMap:t,invalid_type_error:n,required_error:s,description:r}=e;if(t&&(n||s))throw new Error('Can\'t use "invalid_type_error" or "required_error" in conjunction with custom error map.');if(t)return{errorMap:t,description:r};return{errorMap:(e,t)=>"invalid_type"!==e.code?{message:t.defaultError}:void 0===t.data?{message:null!=s?s:t.defaultError}:{message:null!=n?n:t.defaultError},description:r}}class p{constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this)}get description(){return this._def.description}_getType(e){return(0,r.getParsedType)(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:(0,r.getParsedType)(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new s.ParseStatus,ctx:{common:e.parent.common,data:e.data,parsedType:(0,r.getParsedType)(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){const t=this._parse(e);if((0,s.isAsync)(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(e){const t=this._parse(e);return Promise.resolve(t)}parse(e,t){const n=this.safeParse(e,t);if(n.success)return n.data;throw n.error}safeParse(e,t){var n;const s={common:{issues:[],async:null!==(n=null==t?void 0:t.async)&&void 0!==n&&n,contextualErrorMap:null==t?void 0:t.errorMap},path:(null==t?void 0:t.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,r.getParsedType)(e)},a=this._parseSync({data:e,path:s.path,parent:s});return u(s,a)}async parseAsync(e,t){const n=await this.safeParseAsync(e,t);if(n.success)return n.data;throw n.error}async safeParseAsync(e,t){const n={common:{issues:[],contextualErrorMap:null==t?void 0:t.errorMap,async:!0},path:(null==t?void 0:t.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:(0,r.getParsedType)(e)},a=this._parse({data:e,path:n.path,parent:n}),i=await((0,s.isAsync)(a)?a:Promise.resolve(a));return u(n,i)}refine(e,t){const n=e=>"string"==typeof t||void 0===t?{message:t}:"function"==typeof t?t(e):t;return this._refinement(((t,s)=>{const r=e(t),i=()=>s.addIssue({code:a.ZodIssueCode.custom,...n(t)});return"undefined"!=typeof Promise&&r instanceof Promise?r.then((e=>!!e||(i(),!1))):!!r||(i(),!1)}))}refinement(e,t){return this._refinement(((n,s)=>!!e(n)||(s.addIssue("function"==typeof t?t(n,s):t),!1)))}_refinement(e){return new ne({schema:this,typeName:ue.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}optional(){return se.create(this,this._def)}nullable(){return re.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return A.create(this,this._def)}promise(){return te.create(this,this._def)}or(e){return B.create([this,e],this._def)}and(e){return F.create(this,e,this._def)}transform(e){return new ne({...l(this._def),schema:this,typeName:ue.ZodEffects,effect:{type:"transform",transform:e}})}default(e){const t="function"==typeof e?e:()=>e;return new ae({...l(this._def),innerType:this,defaultValue:t,typeName:ue.ZodDefault})}brand(){return new de({typeName:ue.ZodBranded,type:this,...l(this._def)})}catch(e){const t="function"==typeof e?e:()=>e;return new ie({...l(this._def),innerType:this,catchValue:t,typeName:ue.ZodCatch})}describe(e){return new(0,this.constructor)({...this._def,description:e})}pipe(e){return ce.create(this,e)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}e.ZodType=p,e.Schema=p,e.ZodSchema=p;const h=/^c[^\s-]{8,}$/i,m=/^[a-z][a-z0-9]*$/,g=/[0-9A-HJKMNP-TV-Z]{26}/,f=/^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i,y=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\])|(\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\.[A-Za-z]{2,})+))$/,b=/^(\p{Extended_Pictographic}|\p{Emoji_Component})+$/u,x=/^(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))$/,w=/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;function _(e,t){return!("v4"!==t&&t||!x.test(e))||!("v6"!==t&&t||!w.test(e))}class I extends p{constructor(){super(...arguments),this._regex=(e,t,s)=>this.refinement((t=>e.test(t)),{validation:t,code:a.ZodIssueCode.invalid_string,...n.errorUtil.errToObj(s)}),this.nonempty=e=>this.min(1,n.errorUtil.errToObj(e)),this.trim=()=>new I({...this._def,checks:[...this._def.checks,{kind:"trim"}]}),this.toLowerCase=()=>new I({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]}),this.toUpperCase=()=>new I({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}_parse(e){this._def.coerce&&(e.data=String(e.data));if(this._getType(e)!==r.ZodParsedType.string){const t=this._getOrReturnCtx(e);return(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.invalid_type,expected:r.ZodParsedType.string,received:t.parsedType}),s.INVALID}const t=new s.ParseStatus;let n;for(const o of this._def.checks)if("min"===o.kind)e.data.length<o.value&&(n=this._getOrReturnCtx(e,n),(0,s.addIssueToContext)(n,{code:a.ZodIssueCode.too_small,minimum:o.value,type:"string",inclusive:!0,exact:!1,message:o.message}),t.dirty());else if("max"===o.kind)e.data.length>o.value&&(n=this._getOrReturnCtx(e,n),(0,s.addIssueToContext)(n,{code:a.ZodIssueCode.too_big,maximum:o.value,type:"string",inclusive:!0,exact:!1,message:o.message}),t.dirty());else if("length"===o.kind){const r=e.data.length>o.value,i=e.data.length<o.value;(r||i)&&(n=this._getOrReturnCtx(e,n),r?(0,s.addIssueToContext)(n,{code:a.ZodIssueCode.too_big,maximum:o.value,type:"string",inclusive:!0,exact:!0,message:o.message}):i&&(0,s.addIssueToContext)(n,{code:a.ZodIssueCode.too_small,minimum:o.value,type:"string",inclusive:!0,exact:!0,message:o.message}),t.dirty())}else if("email"===o.kind)y.test(e.data)||(n=this._getOrReturnCtx(e,n),(0,s.addIssueToContext)(n,{validation:"email",code:a.ZodIssueCode.invalid_string,message:o.message}),t.dirty());else if("emoji"===o.kind)b.test(e.data)||(n=this._getOrReturnCtx(e,n),(0,s.addIssueToContext)(n,{validation:"emoji",code:a.ZodIssueCode.invalid_string,message:o.message}),t.dirty());else if("uuid"===o.kind)f.test(e.data)||(n=this._getOrReturnCtx(e,n),(0,s.addIssueToContext)(n,{validation:"uuid",code:a.ZodIssueCode.invalid_string,message:o.message}),t.dirty());else if("cuid"===o.kind)h.test(e.data)||(n=this._getOrReturnCtx(e,n),(0,s.addIssueToContext)(n,{validation:"cuid",code:a.ZodIssueCode.invalid_string,message:o.message}),t.dirty());else if("cuid2"===o.kind)m.test(e.data)||(n=this._getOrReturnCtx(e,n),(0,s.addIssueToContext)(n,{validation:"cuid2",code:a.ZodIssueCode.invalid_string,message:o.message}),t.dirty());else if("ulid"===o.kind)g.test(e.data)||(n=this._getOrReturnCtx(e,n),(0,s.addIssueToContext)(n,{validation:"ulid",code:a.ZodIssueCode.invalid_string,message:o.message}),t.dirty());else if("url"===o.kind)try{new URL(e.data)}catch(r){n=this._getOrReturnCtx(e,n),(0,s.addIssueToContext)(n,{validation:"url",code:a.ZodIssueCode.invalid_string,message:o.message}),t.dirty()}else if("regex"===o.kind){o.regex.lastIndex=0;o.regex.test(e.data)||(n=this._getOrReturnCtx(e,n),(0,s.addIssueToContext)(n,{validation:"regex",code:a.ZodIssueCode.invalid_string,message:o.message}),t.dirty())}else if("trim"===o.kind)e.data=e.data.trim();else if("includes"===o.kind)e.data.includes(o.value,o.position)||(n=this._getOrReturnCtx(e,n),(0,s.addIssueToContext)(n,{code:a.ZodIssueCode.invalid_string,validation:{includes:o.value,position:o.position},message:o.message}),t.dirty());else if("toLowerCase"===o.kind)e.data=e.data.toLowerCase();else if("toUpperCase"===o.kind)e.data=e.data.toUpperCase();else if("startsWith"===o.kind)e.data.startsWith(o.value)||(n=this._getOrReturnCtx(e,n),(0,s.addIssueToContext)(n,{code:a.ZodIssueCode.invalid_string,validation:{startsWith:o.value},message:o.message}),t.dirty());else if("endsWith"===o.kind)e.data.endsWith(o.value)||(n=this._getOrReturnCtx(e,n),(0,s.addIssueToContext)(n,{code:a.ZodIssueCode.invalid_string,validation:{endsWith:o.value},message:o.message}),t.dirty());else if("datetime"===o.kind){((i=o).precision?i.offset?new RegExp(`^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{${i.precision}}(([+-]\\d{2}(:?\\d{2})?)|Z)$`):new RegExp(`^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{${i.precision}}Z$`):0===i.precision?i.offset?new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(([+-]\\d{2}(:?\\d{2})?)|Z)$"):new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"):i.offset?new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(([+-]\\d{2}(:?\\d{2})?)|Z)$"):new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z$")).test(e.data)||(n=this._getOrReturnCtx(e,n),(0,s.addIssueToContext)(n,{code:a.ZodIssueCode.invalid_string,validation:"datetime",message:o.message}),t.dirty())}else"ip"===o.kind?_(e.data,o.version)||(n=this._getOrReturnCtx(e,n),(0,s.addIssueToContext)(n,{validation:"ip",code:a.ZodIssueCode.invalid_string,message:o.message}),t.dirty()):r.util.assertNever(o);var i;return{status:t.value,value:e.data}}_addCheck(e){return new I({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...n.errorUtil.errToObj(e)})}url(e){return this._addCheck({kind:"url",...n.errorUtil.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...n.errorUtil.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...n.errorUtil.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...n.errorUtil.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...n.errorUtil.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...n.errorUtil.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...n.errorUtil.errToObj(e)})}datetime(e){var t;return"string"==typeof e?this._addCheck({kind:"datetime",precision:null,offset:!1,message:e}):this._addCheck({kind:"datetime",precision:void 0===(null==e?void 0:e.precision)?null:null==e?void 0:e.precision,offset:null!==(t=null==e?void 0:e.offset)&&void 0!==t&&t,...n.errorUtil.errToObj(null==e?void 0:e.message)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...n.errorUtil.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:null==t?void 0:t.position,...n.errorUtil.errToObj(null==t?void 0:t.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...n.errorUtil.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...n.errorUtil.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...n.errorUtil.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...n.errorUtil.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...n.errorUtil.errToObj(t)})}get isDatetime(){return!!this._def.checks.find((e=>"datetime"===e.kind))}get isEmail(){return!!this._def.checks.find((e=>"email"===e.kind))}get isURL(){return!!this._def.checks.find((e=>"url"===e.kind))}get isEmoji(){return!!this._def.checks.find((e=>"emoji"===e.kind))}get isUUID(){return!!this._def.checks.find((e=>"uuid"===e.kind))}get isCUID(){return!!this._def.checks.find((e=>"cuid"===e.kind))}get isCUID2(){return!!this._def.checks.find((e=>"cuid2"===e.kind))}get isULID(){return!!this._def.checks.find((e=>"ulid"===e.kind))}get isIP(){return!!this._def.checks.find((e=>"ip"===e.kind))}get minLength(){let e=null;for(const t of this._def.checks)"min"===t.kind&&(null===e||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(const t of this._def.checks)"max"===t.kind&&(null===e||t.value<e)&&(e=t.value);return e}}function S(e,t){const n=(e.toString().split(".")[1]||"").length,s=(t.toString().split(".")[1]||"").length,r=n>s?n:s;return parseInt(e.toFixed(r).replace(".",""))%parseInt(t.toFixed(r).replace(".",""))/Math.pow(10,r)}e.ZodString=I,I.create=e=>{var t;return new I({checks:[],typeName:ue.ZodString,coerce:null!==(t=null==e?void 0:e.coerce)&&void 0!==t&&t,...l(e)})};class T extends p{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){this._def.coerce&&(e.data=Number(e.data));if(this._getType(e)!==r.ZodParsedType.number){const t=this._getOrReturnCtx(e);return(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.invalid_type,expected:r.ZodParsedType.number,received:t.parsedType}),s.INVALID}let t;const n=new s.ParseStatus;for(const i of this._def.checks)if("int"===i.kind)r.util.isInteger(e.data)||(t=this._getOrReturnCtx(e,t),(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.invalid_type,expected:"integer",received:"float",message:i.message}),n.dirty());else if("min"===i.kind){(i.inclusive?e.data<i.value:e.data<=i.value)&&(t=this._getOrReturnCtx(e,t),(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),n.dirty())}else if("max"===i.kind){(i.inclusive?e.data>i.value:e.data>=i.value)&&(t=this._getOrReturnCtx(e,t),(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),n.dirty())}else"multipleOf"===i.kind?0!==S(e.data,i.value)&&(t=this._getOrReturnCtx(e,t),(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.not_multiple_of,multipleOf:i.value,message:i.message}),n.dirty()):"finite"===i.kind?Number.isFinite(e.data)||(t=this._getOrReturnCtx(e,t),(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.not_finite,message:i.message}),n.dirty()):r.util.assertNever(i);return{status:n.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,n.errorUtil.toString(t))}gt(e,t){return this.setLimit("min",e,!1,n.errorUtil.toString(t))}lte(e,t){return this.setLimit("max",e,!0,n.errorUtil.toString(t))}lt(e,t){return this.setLimit("max",e,!1,n.errorUtil.toString(t))}setLimit(e,t,s,r){return new T({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:s,message:n.errorUtil.toString(r)}]})}_addCheck(e){return new T({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:n.errorUtil.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:n.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:n.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:n.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:n.errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:n.errorUtil.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:n.errorUtil.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:n.errorUtil.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:n.errorUtil.toString(e)})}get minValue(){let e=null;for(const t of this._def.checks)"min"===t.kind&&(null===e||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(const t of this._def.checks)"max"===t.kind&&(null===e||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find((e=>"int"===e.kind||"multipleOf"===e.kind&&r.util.isInteger(e.value)))}get isFinite(){let e=null,t=null;for(const n of this._def.checks){if("finite"===n.kind||"int"===n.kind||"multipleOf"===n.kind)return!0;"min"===n.kind?(null===t||n.value>t)&&(t=n.value):"max"===n.kind&&(null===e||n.value<e)&&(e=n.value)}return Number.isFinite(t)&&Number.isFinite(e)}}e.ZodNumber=T,T.create=e=>new T({checks:[],typeName:ue.ZodNumber,coerce:(null==e?void 0:e.coerce)||!1,...l(e)});class E extends p{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){this._def.coerce&&(e.data=BigInt(e.data));if(this._getType(e)!==r.ZodParsedType.bigint){const t=this._getOrReturnCtx(e);return(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.invalid_type,expected:r.ZodParsedType.bigint,received:t.parsedType}),s.INVALID}let t;const n=new s.ParseStatus;for(const i of this._def.checks)if("min"===i.kind){(i.inclusive?e.data<i.value:e.data<=i.value)&&(t=this._getOrReturnCtx(e,t),(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),n.dirty())}else if("max"===i.kind){(i.inclusive?e.data>i.value:e.data>=i.value)&&(t=this._getOrReturnCtx(e,t),(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),n.dirty())}else"multipleOf"===i.kind?e.data%i.value!==BigInt(0)&&(t=this._getOrReturnCtx(e,t),(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.not_multiple_of,multipleOf:i.value,message:i.message}),n.dirty()):r.util.assertNever(i);return{status:n.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,n.errorUtil.toString(t))}gt(e,t){return this.setLimit("min",e,!1,n.errorUtil.toString(t))}lte(e,t){return this.setLimit("max",e,!0,n.errorUtil.toString(t))}lt(e,t){return this.setLimit("max",e,!1,n.errorUtil.toString(t))}setLimit(e,t,s,r){return new E({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:s,message:n.errorUtil.toString(r)}]})}_addCheck(e){return new E({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:n.errorUtil.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:n.errorUtil.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:n.errorUtil.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:n.errorUtil.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:n.errorUtil.toString(t)})}get minValue(){let e=null;for(const t of this._def.checks)"min"===t.kind&&(null===e||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(const t of this._def.checks)"max"===t.kind&&(null===e||t.value<e)&&(e=t.value);return e}}e.ZodBigInt=E,E.create=e=>{var t;return new E({checks:[],typeName:ue.ZodBigInt,coerce:null!==(t=null==e?void 0:e.coerce)&&void 0!==t&&t,...l(e)})};class P extends p{_parse(e){this._def.coerce&&(e.data=Boolean(e.data));if(this._getType(e)!==r.ZodParsedType.boolean){const t=this._getOrReturnCtx(e);return(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.invalid_type,expected:r.ZodParsedType.boolean,received:t.parsedType}),s.INVALID}return(0,s.OK)(e.data)}}e.ZodBoolean=P,P.create=e=>new P({typeName:ue.ZodBoolean,coerce:(null==e?void 0:e.coerce)||!1,...l(e)});class k extends p{_parse(e){this._def.coerce&&(e.data=new Date(e.data));if(this._getType(e)!==r.ZodParsedType.date){const t=this._getOrReturnCtx(e);return(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.invalid_type,expected:r.ZodParsedType.date,received:t.parsedType}),s.INVALID}if(isNaN(e.data.getTime())){const t=this._getOrReturnCtx(e);return(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.invalid_date}),s.INVALID}const t=new s.ParseStatus;let n;for(const i of this._def.checks)"min"===i.kind?e.data.getTime()<i.value&&(n=this._getOrReturnCtx(e,n),(0,s.addIssueToContext)(n,{code:a.ZodIssueCode.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),t.dirty()):"max"===i.kind?e.data.getTime()>i.value&&(n=this._getOrReturnCtx(e,n),(0,s.addIssueToContext)(n,{code:a.ZodIssueCode.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),t.dirty()):r.util.assertNever(i);return{status:t.value,value:new Date(e.data.getTime())}}_addCheck(e){return new k({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:n.errorUtil.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:n.errorUtil.toString(t)})}get minDate(){let e=null;for(const t of this._def.checks)"min"===t.kind&&(null===e||t.value>e)&&(e=t.value);return null!=e?new Date(e):null}get maxDate(){let e=null;for(const t of this._def.checks)"max"===t.kind&&(null===e||t.value<e)&&(e=t.value);return null!=e?new Date(e):null}}e.ZodDate=k,k.create=e=>new k({checks:[],coerce:(null==e?void 0:e.coerce)||!1,typeName:ue.ZodDate,...l(e)});class N extends p{_parse(e){if(this._getType(e)!==r.ZodParsedType.symbol){const t=this._getOrReturnCtx(e);return(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.invalid_type,expected:r.ZodParsedType.symbol,received:t.parsedType}),s.INVALID}return(0,s.OK)(e.data)}}e.ZodSymbol=N,N.create=e=>new N({typeName:ue.ZodSymbol,...l(e)});class Z extends p{_parse(e){if(this._getType(e)!==r.ZodParsedType.undefined){const t=this._getOrReturnCtx(e);return(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.invalid_type,expected:r.ZodParsedType.undefined,received:t.parsedType}),s.INVALID}return(0,s.OK)(e.data)}}e.ZodUndefined=Z,Z.create=e=>new Z({typeName:ue.ZodUndefined,...l(e)});class O extends p{_parse(e){if(this._getType(e)!==r.ZodParsedType.null){const t=this._getOrReturnCtx(e);return(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.invalid_type,expected:r.ZodParsedType.null,received:t.parsedType}),s.INVALID}return(0,s.OK)(e.data)}}e.ZodNull=O,O.create=e=>new O({typeName:ue.ZodNull,...l(e)});class M extends p{constructor(){super(...arguments),this._any=!0}_parse(e){return(0,s.OK)(e.data)}}e.ZodAny=M,M.create=e=>new M({typeName:ue.ZodAny,...l(e)});class D extends p{constructor(){super(...arguments),this._unknown=!0}_parse(e){return(0,s.OK)(e.data)}}e.ZodUnknown=D,D.create=e=>new D({typeName:ue.ZodUnknown,...l(e)});class R extends p{_parse(e){const t=this._getOrReturnCtx(e);return(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.invalid_type,expected:r.ZodParsedType.never,received:t.parsedType}),s.INVALID}}e.ZodNever=R,R.create=e=>new R({typeName:ue.ZodNever,...l(e)});class j extends p{_parse(e){if(this._getType(e)!==r.ZodParsedType.undefined){const t=this._getOrReturnCtx(e);return(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.invalid_type,expected:r.ZodParsedType.void,received:t.parsedType}),s.INVALID}return(0,s.OK)(e.data)}}e.ZodVoid=j,j.create=e=>new j({typeName:ue.ZodVoid,...l(e)});class A extends p{_parse(e){const{ctx:t,status:n}=this._processInputParams(e),i=this._def;if(t.parsedType!==r.ZodParsedType.array)return(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.invalid_type,expected:r.ZodParsedType.array,received:t.parsedType}),s.INVALID;if(null!==i.exactLength){const e=t.data.length>i.exactLength.value,r=t.data.length<i.exactLength.value;(e||r)&&((0,s.addIssueToContext)(t,{code:e?a.ZodIssueCode.too_big:a.ZodIssueCode.too_small,minimum:r?i.exactLength.value:void 0,maximum:e?i.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:i.exactLength.message}),n.dirty())}if(null!==i.minLength&&t.data.length<i.minLength.value&&((0,s.addIssueToContext)(t,{code:a.ZodIssueCode.too_small,minimum:i.minLength.value,type:"array",inclusive:!0,exact:!1,message:i.minLength.message}),n.dirty()),null!==i.maxLength&&t.data.length>i.maxLength.value&&((0,s.addIssueToContext)(t,{code:a.ZodIssueCode.too_big,maximum:i.maxLength.value,type:"array",inclusive:!0,exact:!1,message:i.maxLength.message}),n.dirty()),t.common.async)return Promise.all([...t.data].map(((e,n)=>i.type._parseAsync(new o(t,e,t.path,n))))).then((e=>s.ParseStatus.mergeArray(n,e)));const d=[...t.data].map(((e,n)=>i.type._parseSync(new o(t,e,t.path,n))));return s.ParseStatus.mergeArray(n,d)}get element(){return this._def.type}min(e,t){return new A({...this._def,minLength:{value:e,message:n.errorUtil.toString(t)}})}max(e,t){return new A({...this._def,maxLength:{value:e,message:n.errorUtil.toString(t)}})}length(e,t){return new A({...this._def,exactLength:{value:e,message:n.errorUtil.toString(t)}})}nonempty(e){return this.min(1,e)}}function z(e){if(e instanceof L){const t={};for(const n in e.shape){const s=e.shape[n];t[n]=se.create(z(s))}return new L({...e._def,shape:()=>t})}return e instanceof A?new A({...e._def,type:z(e.element)}):e instanceof se?se.create(z(e.unwrap())):e instanceof re?re.create(z(e.unwrap())):e instanceof q?q.create(e.items.map((e=>z(e)))):e}e.ZodArray=A,A.create=(e,t)=>new A({type:e,minLength:null,maxLength:null,exactLength:null,typeName:ue.ZodArray,...l(t)});class L extends p{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(null!==this._cached)return this._cached;const e=this._def.shape(),t=r.util.objectKeys(e);return this._cached={shape:e,keys:t}}_parse(e){if(this._getType(e)!==r.ZodParsedType.object){const t=this._getOrReturnCtx(e);return(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.invalid_type,expected:r.ZodParsedType.object,received:t.parsedType}),s.INVALID}const{status:t,ctx:n}=this._processInputParams(e),{shape:i,keys:d}=this._getCached(),c=[];if(!(this._def.catchall instanceof R&&"strip"===this._def.unknownKeys))for(const e in n.data)d.includes(e)||c.push(e);const u=[];for(const e of d){const t=i[e],s=n.data[e];u.push({key:{status:"valid",value:e},value:t._parse(new o(n,s,n.path,e)),alwaysSet:e in n.data})}if(this._def.catchall instanceof R){const e=this._def.unknownKeys;if("passthrough"===e)for(const e of c)u.push({key:{status:"valid",value:e},value:{status:"valid",value:n.data[e]}});else if("strict"===e)c.length>0&&((0,s.addIssueToContext)(n,{code:a.ZodIssueCode.unrecognized_keys,keys:c}),t.dirty());else if("strip"!==e)throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const e=this._def.catchall;for(const t of c){const s=n.data[t];u.push({key:{status:"valid",value:t},value:e._parse(new o(n,s,n.path,t)),alwaysSet:t in n.data})}}return n.common.async?Promise.resolve().then((async()=>{const e=[];for(const t of u){const n=await t.key;e.push({key:n,value:await t.value,alwaysSet:t.alwaysSet})}return e})).then((e=>s.ParseStatus.mergeObjectSync(t,e))):s.ParseStatus.mergeObjectSync(t,u)}get shape(){return this._def.shape()}strict(e){return n.errorUtil.errToObj,new L({...this._def,unknownKeys:"strict",...void 0!==e?{errorMap:(t,s)=>{var r,a,i,o;const d=null!==(i=null===(a=(r=this._def).errorMap)||void 0===a?void 0:a.call(r,t,s).message)&&void 0!==i?i:s.defaultError;return"unrecognized_keys"===t.code?{message:null!==(o=n.errorUtil.errToObj(e).message)&&void 0!==o?o:d}:{message:d}}}:{}})}strip(){return new L({...this._def,unknownKeys:"strip"})}passthrough(){return new L({...this._def,unknownKeys:"passthrough"})}extend(e){return new L({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new L({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:ue.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new L({...this._def,catchall:e})}pick(e){const t={};return r.util.objectKeys(e).forEach((n=>{e[n]&&this.shape[n]&&(t[n]=this.shape[n])})),new L({...this._def,shape:()=>t})}omit(e){const t={};return r.util.objectKeys(this.shape).forEach((n=>{e[n]||(t[n]=this.shape[n])})),new L({...this._def,shape:()=>t})}deepPartial(){return z(this)}partial(e){const t={};return r.util.objectKeys(this.shape).forEach((n=>{const s=this.shape[n];e&&!e[n]?t[n]=s:t[n]=s.optional()})),new L({...this._def,shape:()=>t})}required(e){const t={};return r.util.objectKeys(this.shape).forEach((n=>{if(e&&!e[n])t[n]=this.shape[n];else{let e=this.shape[n];for(;e instanceof se;)e=e._def.innerType;t[n]=e}})),new L({...this._def,shape:()=>t})}keyof(){return Q(r.util.objectKeys(this.shape))}}e.ZodObject=L,L.create=(e,t)=>new L({shape:()=>e,unknownKeys:"strip",catchall:R.create(),typeName:ue.ZodObject,...l(t)}),L.strictCreate=(e,t)=>new L({shape:()=>e,unknownKeys:"strict",catchall:R.create(),typeName:ue.ZodObject,...l(t)}),L.lazycreate=(e,t)=>new L({shape:e,unknownKeys:"strip",catchall:R.create(),typeName:ue.ZodObject,...l(t)});class B extends p{_parse(e){const{ctx:t}=this._processInputParams(e),n=this._def.options;if(t.common.async)return Promise.all(n.map((async e=>{const n={...t,common:{...t.common,issues:[]},parent:null};return{result:await e._parseAsync({data:t.data,path:t.path,parent:n}),ctx:n}}))).then((function(e){for(const t of e)if("valid"===t.result.status)return t.result;for(const n of e)if("dirty"===n.result.status)return t.common.issues.push(...n.ctx.common.issues),n.result;const n=e.map((e=>new a.ZodError(e.ctx.common.issues)));return(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.invalid_union,unionErrors:n}),s.INVALID}));{let e;const r=[];for(const s of n){const n={...t,common:{...t.common,issues:[]},parent:null},a=s._parseSync({data:t.data,path:t.path,parent:n});if("valid"===a.status)return a;"dirty"!==a.status||e||(e={result:a,ctx:n}),n.common.issues.length&&r.push(n.common.issues)}if(e)return t.common.issues.push(...e.ctx.common.issues),e.result;const i=r.map((e=>new a.ZodError(e)));return(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.invalid_union,unionErrors:i}),s.INVALID}}get options(){return this._def.options}}e.ZodUnion=B,B.create=(e,t)=>new B({options:e,typeName:ue.ZodUnion,...l(t)});const V=e=>e instanceof G?V(e.schema):e instanceof ne?V(e.innerType()):e instanceof Y?[e.value]:e instanceof X?e.options:e instanceof ee?Object.keys(e.enum):e instanceof ae?V(e._def.innerType):e instanceof Z?[void 0]:e instanceof O?[null]:null;class U extends p{_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==r.ZodParsedType.object)return(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.invalid_type,expected:r.ZodParsedType.object,received:t.parsedType}),s.INVALID;const n=this.discriminator,i=t.data[n],o=this.optionsMap.get(i);return o?t.common.async?o._parseAsync({data:t.data,path:t.path,parent:t}):o._parseSync({data:t.data,path:t.path,parent:t}):((0,s.addIssueToContext)(t,{code:a.ZodIssueCode.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[n]}),s.INVALID)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,t,n){const s=new Map;for(const n of t){const t=V(n.shape[e]);if(!t)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(const r of t){if(s.has(r))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(r)}`);s.set(r,n)}}return new U({typeName:ue.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:s,...l(n)})}}function $(e,t){const n=(0,r.getParsedType)(e),s=(0,r.getParsedType)(t);if(e===t)return{valid:!0,data:e};if(n===r.ZodParsedType.object&&s===r.ZodParsedType.object){const n=r.util.objectKeys(t),s=r.util.objectKeys(e).filter((e=>-1!==n.indexOf(e))),a={...e,...t};for(const n of s){const s=$(e[n],t[n]);if(!s.valid)return{valid:!1};a[n]=s.data}return{valid:!0,data:a}}if(n===r.ZodParsedType.array&&s===r.ZodParsedType.array){if(e.length!==t.length)return{valid:!1};const n=[];for(let s=0;s<e.length;s++){const r=$(e[s],t[s]);if(!r.valid)return{valid:!1};n.push(r.data)}return{valid:!0,data:n}}return n===r.ZodParsedType.date&&s===r.ZodParsedType.date&&+e==+t?{valid:!0,data:e}:{valid:!1}}e.ZodDiscriminatedUnion=U;class F extends p{_parse(e){const{status:t,ctx:n}=this._processInputParams(e),r=(e,r)=>{if((0,s.isAborted)(e)||(0,s.isAborted)(r))return s.INVALID;const i=$(e.value,r.value);return i.valid?(((0,s.isDirty)(e)||(0,s.isDirty)(r))&&t.dirty(),{status:t.value,value:i.data}):((0,s.addIssueToContext)(n,{code:a.ZodIssueCode.invalid_intersection_types}),s.INVALID)};return n.common.async?Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then((([e,t])=>r(e,t))):r(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}}e.ZodIntersection=F,F.create=(e,t,n)=>new F({left:e,right:t,typeName:ue.ZodIntersection,...l(n)});class q extends p{_parse(e){const{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==r.ZodParsedType.array)return(0,s.addIssueToContext)(n,{code:a.ZodIssueCode.invalid_type,expected:r.ZodParsedType.array,received:n.parsedType}),s.INVALID;if(n.data.length<this._def.items.length)return(0,s.addIssueToContext)(n,{code:a.ZodIssueCode.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),s.INVALID;!this._def.rest&&n.data.length>this._def.items.length&&((0,s.addIssueToContext)(n,{code:a.ZodIssueCode.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());const i=[...n.data].map(((e,t)=>{const s=this._def.items[t]||this._def.rest;return s?s._parse(new o(n,e,n.path,t)):null})).filter((e=>!!e));return n.common.async?Promise.all(i).then((e=>s.ParseStatus.mergeArray(t,e))):s.ParseStatus.mergeArray(t,i)}get items(){return this._def.items}rest(e){return new q({...this._def,rest:e})}}e.ZodTuple=q,q.create=(e,t)=>{if(!Array.isArray(e))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new q({items:e,typeName:ue.ZodTuple,rest:null,...l(t)})};class W extends p{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==r.ZodParsedType.object)return(0,s.addIssueToContext)(n,{code:a.ZodIssueCode.invalid_type,expected:r.ZodParsedType.object,received:n.parsedType}),s.INVALID;const i=[],d=this._def.keyType,c=this._def.valueType;for(const e in n.data)i.push({key:d._parse(new o(n,e,n.path,e)),value:c._parse(new o(n,n.data[e],n.path,e))});return n.common.async?s.ParseStatus.mergeObjectAsync(t,i):s.ParseStatus.mergeObjectSync(t,i)}get element(){return this._def.valueType}static create(e,t,n){return new W(t instanceof p?{keyType:e,valueType:t,typeName:ue.ZodRecord,...l(n)}:{keyType:I.create(),valueType:e,typeName:ue.ZodRecord,...l(t)})}}e.ZodRecord=W;class K extends p{_parse(e){const{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==r.ZodParsedType.map)return(0,s.addIssueToContext)(n,{code:a.ZodIssueCode.invalid_type,expected:r.ZodParsedType.map,received:n.parsedType}),s.INVALID;const i=this._def.keyType,d=this._def.valueType,c=[...n.data.entries()].map((([e,t],s)=>({key:i._parse(new o(n,e,n.path,[s,"key"])),value:d._parse(new o(n,t,n.path,[s,"value"]))})));if(n.common.async){const e=new Map;return Promise.resolve().then((async()=>{for(const n of c){const r=await n.key,a=await n.value;if("aborted"===r.status||"aborted"===a.status)return s.INVALID;"dirty"!==r.status&&"dirty"!==a.status||t.dirty(),e.set(r.value,a.value)}return{status:t.value,value:e}}))}{const e=new Map;for(const n of c){const r=n.key,a=n.value;if("aborted"===r.status||"aborted"===a.status)return s.INVALID;"dirty"!==r.status&&"dirty"!==a.status||t.dirty(),e.set(r.value,a.value)}return{status:t.value,value:e}}}}e.ZodMap=K,K.create=(e,t,n)=>new K({valueType:t,keyType:e,typeName:ue.ZodMap,...l(n)});class J extends p{_parse(e){const{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==r.ZodParsedType.set)return(0,s.addIssueToContext)(n,{code:a.ZodIssueCode.invalid_type,expected:r.ZodParsedType.set,received:n.parsedType}),s.INVALID;const i=this._def;null!==i.minSize&&n.data.size<i.minSize.value&&((0,s.addIssueToContext)(n,{code:a.ZodIssueCode.too_small,minimum:i.minSize.value,type:"set",inclusive:!0,exact:!1,message:i.minSize.message}),t.dirty()),null!==i.maxSize&&n.data.size>i.maxSize.value&&((0,s.addIssueToContext)(n,{code:a.ZodIssueCode.too_big,maximum:i.maxSize.value,type:"set",inclusive:!0,exact:!1,message:i.maxSize.message}),t.dirty());const d=this._def.valueType;function c(e){const n=new Set;for(const r of e){if("aborted"===r.status)return s.INVALID;"dirty"===r.status&&t.dirty(),n.add(r.value)}return{status:t.value,value:n}}const u=[...n.data.values()].map(((e,t)=>d._parse(new o(n,e,n.path,t))));return n.common.async?Promise.all(u).then((e=>c(e))):c(u)}min(e,t){return new J({...this._def,minSize:{value:e,message:n.errorUtil.toString(t)}})}max(e,t){return new J({...this._def,maxSize:{value:e,message:n.errorUtil.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}}e.ZodSet=J,J.create=(e,t)=>new J({valueType:e,minSize:null,maxSize:null,typeName:ue.ZodSet,...l(t)});class H extends p{constructor(){super(...arguments),this.validate=this.implement}_parse(e){const{ctx:n}=this._processInputParams(e);if(n.parsedType!==r.ZodParsedType.function)return(0,s.addIssueToContext)(n,{code:a.ZodIssueCode.invalid_type,expected:r.ZodParsedType.function,received:n.parsedType}),s.INVALID;function i(e,r){return(0,s.makeIssue)({data:e,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,(0,t.getErrorMap)(),t.defaultErrorMap].filter((e=>!!e)),issueData:{code:a.ZodIssueCode.invalid_arguments,argumentsError:r}})}function o(e,r){return(0,s.makeIssue)({data:e,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,(0,t.getErrorMap)(),t.defaultErrorMap].filter((e=>!!e)),issueData:{code:a.ZodIssueCode.invalid_return_type,returnTypeError:r}})}const d={errorMap:n.common.contextualErrorMap},c=n.data;return this._def.returns instanceof te?(0,s.OK)((async(...e)=>{const t=new a.ZodError([]),n=await this._def.args.parseAsync(e,d).catch((n=>{throw t.addIssue(i(e,n)),t})),s=await c(...n);return await this._def.returns._def.type.parseAsync(s,d).catch((e=>{throw t.addIssue(o(s,e)),t}))})):(0,s.OK)(((...e)=>{const t=this._def.args.safeParse(e,d);if(!t.success)throw new a.ZodError([i(e,t.error)]);const n=c(...t.data),s=this._def.returns.safeParse(n,d);if(!s.success)throw new a.ZodError([o(n,s.error)]);return s.data}))}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new H({...this._def,args:q.create(e).rest(D.create())})}returns(e){return new H({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,t,n){return new H({args:e||q.create([]).rest(D.create()),returns:t||D.create(),typeName:ue.ZodFunction,...l(n)})}}e.ZodFunction=H;class G extends p{get schema(){return this._def.getter()}_parse(e){const{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}}e.ZodLazy=G,G.create=(e,t)=>new G({getter:e,typeName:ue.ZodLazy,...l(t)});class Y extends p{_parse(e){if(e.data!==this._def.value){const t=this._getOrReturnCtx(e);return(0,s.addIssueToContext)(t,{received:t.data,code:a.ZodIssueCode.invalid_literal,expected:this._def.value}),s.INVALID}return{status:"valid",value:e.data}}get value(){return this._def.value}}function Q(e,t){return new X({values:e,typeName:ue.ZodEnum,...l(t)})}e.ZodLiteral=Y,Y.create=(e,t)=>new Y({value:e,typeName:ue.ZodLiteral,...l(t)});class X extends p{_parse(e){if("string"!=typeof e.data){const t=this._getOrReturnCtx(e),n=this._def.values;return(0,s.addIssueToContext)(t,{expected:r.util.joinValues(n),received:t.parsedType,code:a.ZodIssueCode.invalid_type}),s.INVALID}if(-1===this._def.values.indexOf(e.data)){const t=this._getOrReturnCtx(e),n=this._def.values;return(0,s.addIssueToContext)(t,{received:t.data,code:a.ZodIssueCode.invalid_enum_value,options:n}),s.INVALID}return(0,s.OK)(e.data)}get options(){return this._def.values}get enum(){const e={};for(const t of this._def.values)e[t]=t;return e}get Values(){const e={};for(const t of this._def.values)e[t]=t;return e}get Enum(){const e={};for(const t of this._def.values)e[t]=t;return e}extract(e){return X.create(e)}exclude(e){return X.create(this.options.filter((t=>!e.includes(t))))}}e.ZodEnum=X,X.create=Q;class ee extends p{_parse(e){const t=r.util.getValidEnumValues(this._def.values),n=this._getOrReturnCtx(e);if(n.parsedType!==r.ZodParsedType.string&&n.parsedType!==r.ZodParsedType.number){const e=r.util.objectValues(t);return(0,s.addIssueToContext)(n,{expected:r.util.joinValues(e),received:n.parsedType,code:a.ZodIssueCode.invalid_type}),s.INVALID}if(-1===t.indexOf(e.data)){const e=r.util.objectValues(t);return(0,s.addIssueToContext)(n,{received:n.data,code:a.ZodIssueCode.invalid_enum_value,options:e}),s.INVALID}return(0,s.OK)(e.data)}get enum(){return this._def.values}}e.ZodNativeEnum=ee,ee.create=(e,t)=>new ee({values:e,typeName:ue.ZodNativeEnum,...l(t)});class te extends p{unwrap(){return this._def.type}_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==r.ZodParsedType.promise&&!1===t.common.async)return(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.invalid_type,expected:r.ZodParsedType.promise,received:t.parsedType}),s.INVALID;const n=t.parsedType===r.ZodParsedType.promise?t.data:Promise.resolve(t.data);return(0,s.OK)(n.then((e=>this._def.type.parseAsync(e,{path:t.path,errorMap:t.common.contextualErrorMap}))))}}e.ZodPromise=te,te.create=(e,t)=>new te({type:e,typeName:ue.ZodPromise,...l(t)});class ne extends p{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===ue.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){const{status:t,ctx:n}=this._processInputParams(e),a=this._def.effect||null;if("preprocess"===a.type){const e=a.transform(n.data);return n.common.async?Promise.resolve(e).then((e=>this._def.schema._parseAsync({data:e,path:n.path,parent:n}))):this._def.schema._parseSync({data:e,path:n.path,parent:n})}const i={addIssue:e=>{(0,s.addIssueToContext)(n,e),e.fatal?t.abort():t.dirty()},get path(){return n.path}};if(i.addIssue=i.addIssue.bind(i),"refinement"===a.type){const e=e=>{const t=a.refinement(e,i);if(n.common.async)return Promise.resolve(t);if(t instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return e};if(!1===n.common.async){const r=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});return"aborted"===r.status?s.INVALID:("dirty"===r.status&&t.dirty(),e(r.value),{status:t.value,value:r.value})}return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then((n=>"aborted"===n.status?s.INVALID:("dirty"===n.status&&t.dirty(),e(n.value).then((()=>({status:t.value,value:n.value}))))))}if("transform"===a.type){if(!1===n.common.async){const e=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});if(!(0,s.isValid)(e))return e;const r=a.transform(e.value,i);if(r instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:r}}return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then((e=>(0,s.isValid)(e)?Promise.resolve(a.transform(e.value,i)).then((e=>({status:t.value,value:e}))):e))}r.util.assertNever(a)}}e.ZodEffects=ne,e.ZodTransformer=ne,ne.create=(e,t,n)=>new ne({schema:e,typeName:ue.ZodEffects,effect:t,...l(n)}),ne.createWithPreprocess=(e,t,n)=>new ne({schema:t,effect:{type:"preprocess",transform:e},typeName:ue.ZodEffects,...l(n)});class se extends p{_parse(e){return this._getType(e)===r.ZodParsedType.undefined?(0,s.OK)(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}e.ZodOptional=se,se.create=(e,t)=>new se({innerType:e,typeName:ue.ZodOptional,...l(t)});class re extends p{_parse(e){return this._getType(e)===r.ZodParsedType.null?(0,s.OK)(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}e.ZodNullable=re,re.create=(e,t)=>new re({innerType:e,typeName:ue.ZodNullable,...l(t)});class ae extends p{_parse(e){const{ctx:t}=this._processInputParams(e);let n=t.data;return t.parsedType===r.ZodParsedType.undefined&&(n=this._def.defaultValue()),this._def.innerType._parse({data:n,path:t.path,parent:t})}removeDefault(){return this._def.innerType}}e.ZodDefault=ae,ae.create=(e,t)=>new ae({innerType:e,typeName:ue.ZodDefault,defaultValue:"function"==typeof t.default?t.default:()=>t.default,...l(t)});class ie extends p{_parse(e){const{ctx:t}=this._processInputParams(e),n={...t,common:{...t.common,issues:[]}},r=this._def.innerType._parse({data:n.data,path:n.path,parent:{...n}});return(0,s.isAsync)(r)?r.then((e=>({status:"valid",value:"valid"===e.status?e.value:this._def.catchValue({get error(){return new a.ZodError(n.common.issues)},input:n.data})}))):{status:"valid",value:"valid"===r.status?r.value:this._def.catchValue({get error(){return new a.ZodError(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}}e.ZodCatch=ie,ie.create=(e,t)=>new ie({innerType:e,typeName:ue.ZodCatch,catchValue:"function"==typeof t.catch?t.catch:()=>t.catch,...l(t)});class oe extends p{_parse(e){if(this._getType(e)!==r.ZodParsedType.nan){const t=this._getOrReturnCtx(e);return(0,s.addIssueToContext)(t,{code:a.ZodIssueCode.invalid_type,expected:r.ZodParsedType.nan,received:t.parsedType}),s.INVALID}return{status:"valid",value:e.data}}}e.ZodNaN=oe,oe.create=e=>new oe({typeName:ue.ZodNaN,...l(e)}),e.BRAND=Symbol("zod_brand");class de extends p{_parse(e){const{ctx:t}=this._processInputParams(e),n=t.data;return this._def.type._parse({data:n,path:t.path,parent:t})}unwrap(){return this._def.type}}e.ZodBranded=de;class ce extends p{_parse(e){const{status:t,ctx:n}=this._processInputParams(e);if(n.common.async){return(async()=>{const e=await this._def.in._parseAsync({data:n.data,path:n.path,parent:n});return"aborted"===e.status?s.INVALID:"dirty"===e.status?(t.dirty(),(0,s.DIRTY)(e.value)):this._def.out._parseAsync({data:e.value,path:n.path,parent:n})})()}{const e=this._def.in._parseSync({data:n.data,path:n.path,parent:n});return"aborted"===e.status?s.INVALID:"dirty"===e.status?(t.dirty(),{status:"dirty",value:e.value}):this._def.out._parseSync({data:e.value,path:n.path,parent:n})}}static create(e,t){return new ce({in:e,out:t,typeName:ue.ZodPipeline})}}e.ZodPipeline=ce;var ue;e.custom=(e,t={},n)=>e?M.create().superRefine(((s,r)=>{var a,i;if(!e(s)){const e="function"==typeof t?t(s):"string"==typeof t?{message:t}:t,o=null===(i=null!==(a=e.fatal)&&void 0!==a?a:n)||void 0===i||i,d="string"==typeof e?{message:e}:e;r.addIssue({code:"custom",...d,fatal:o})}})):M.create(),e.late={object:L.lazycreate},function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline"}(ue=e.ZodFirstPartyTypeKind||(e.ZodFirstPartyTypeKind={}));e.instanceof=(t,n={message:`Input not instance of ${t.name}`})=>(0,e.custom)((e=>e instanceof t),n);const le=I.create;e.string=le;const pe=T.create;e.number=pe;const he=oe.create;e.nan=he;const me=E.create;e.bigint=me;const ge=P.create;e.boolean=ge;const fe=k.create;e.date=fe;const ve=N.create;e.symbol=ve;const ye=Z.create;e.undefined=ye;const be=O.create;e.null=be;const xe=M.create;e.any=xe;const Ce=D.create;e.unknown=Ce;const we=R.create;e.never=we;const _e=j.create;e.void=_e;const Ie=A.create;e.array=Ie;const Se=L.create;e.object=Se;const Te=L.strictCreate;e.strictObject=Te;const Ee=B.create;e.union=Ee;const Pe=U.create;e.discriminatedUnion=Pe;const ke=F.create;e.intersection=ke;const Ne=q.create;e.tuple=Ne;const Ze=W.create;e.record=Ze;const Oe=K.create;e.map=Oe;const Me=J.create;e.set=Me;const De=H.create;e.function=De;const Re=G.create;e.lazy=Re;const je=Y.create;e.literal=je;const Ae=X.create;e.enum=Ae;const ze=ee.create;e.nativeEnum=ze;const Le=te.create;e.promise=Le;const Be=ne.create;e.effect=Be,e.transformer=Be;const Ve=se.create;e.optional=Ve;const Ue=re.create;e.nullable=Ue;const $e=ne.createWithPreprocess;e.preprocess=$e;const Fe=ce.create;e.pipeline=Fe;e.ostring=()=>le().optional();e.onumber=()=>pe().optional();e.oboolean=()=>ge().optional(),e.coerce={string:e=>I.create({...e,coerce:!0}),number:e=>T.create({...e,coerce:!0}),boolean:e=>P.create({...e,coerce:!0}),bigint:e=>E.create({...e,coerce:!0}),date:e=>k.create({...e,coerce:!0})},e.NEVER=s.INVALID}(x),function(t){var n=e&&e.__createBinding||(Object.create?function(e,t,n,s){void 0===s&&(s=n),Object.defineProperty(e,s,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,s){void 0===s&&(s=n),e[s]=t[n]}),s=e&&e.__exportStar||function(e,t){for(var s in e)"default"===s||Object.prototype.hasOwnProperty.call(t,s)||n(t,e,s)};Object.defineProperty(t,"__esModule",{value:!0}),s(i,t),s(v,t),s(y,t),s(d,t),s(x,t),s(c,t)}(a),function(t){var n=e&&e.__createBinding||(Object.create?function(e,t,n,s){void 0===s&&(s=n),Object.defineProperty(e,s,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,s){void 0===s&&(s=n),e[s]=t[n]}),s=e&&e.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=e&&e.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return s(t,e),t},i=e&&e.__exportStar||function(e,t){for(var s in e)"default"===s||Object.prototype.hasOwnProperty.call(t,s)||n(t,e,s)};Object.defineProperty(t,"__esModule",{value:!0}),t.z=void 0;const o=r(a);t.z=o,i(a,t),t.default=o}(r);var w={};!function(e){var t,n,s,r,a,i;Object.defineProperty(e,"__esModule",{value:!0}),e.CDP=e.Network=e.Log=e.BrowsingContext=e.Script=e.Message=void 0,function(e){let t;!function(e){e.InvalidArgument="invalid argument",e.InvalidSessionId="invalid session id",e.NoSuchAlert="no such alert",e.NoSuchFrame="no such frame",e.NoSuchHandle="no such handle",e.NoSuchNode="no such node",e.NoSuchScript="no such script",e.SessionNotCreated="session not created",e.UnknownCommand="unknown command",e.UnknownError="unknown error",e.UnsupportedOperation="unsupported operation"}(t=e.ErrorCode||(e.ErrorCode={}));class n{error;message;stacktrace;constructor(e,t,n){this.error=e,this.message=t,this.stacktrace=n}toErrorResponse(e){return{id:e,error:this.error,message:this.message,stacktrace:this.stacktrace}}}e.ErrorResponse=n;e.InvalidArgumentException=class extends n{constructor(e,n){super(t.InvalidArgument,e,n)}};e.NoSuchHandleException=class extends n{constructor(e,n){super(t.NoSuchHandle,e,n)}};e.InvalidSessionIdException=class extends n{constructor(e,n){super(t.InvalidSessionId,e,n)}};e.NoSuchAlertException=class extends n{constructor(e,n){super(t.NoSuchAlert,e,n)}};e.NoSuchFrameException=class extends n{constructor(e){super(t.NoSuchFrame,e)}};e.NoSuchNodeException=class extends n{constructor(e,n){super(t.NoSuchNode,e,n)}};e.NoSuchScriptException=class extends n{constructor(e,n){super(t.NoSuchScript,e,n)}};e.SessionNotCreatedException=class extends n{constructor(e,n){super(t.SessionNotCreated,e,n)}};e.UnknownCommandException=class extends n{constructor(e,n){super(t.UnknownCommand,e,n)}};e.UnknownErrorException=class extends n{constructor(e,n){super(t.UnknownError,e,n)}};e.UnsupportedOperationException=class extends n{constructor(e,n){super(t.UnsupportedOperation,e,n)}}}(e.Message||(e.Message={})),((t=e.Script||(e.Script={})).EventNames||(t.EventNames={})).MessageEvent="script.message",t.AllEvents="script",n=e.BrowsingContext||(e.BrowsingContext={}),(s=n.EventNames||(n.EventNames={})).LoadEvent="browsingContext.load",s.DomContentLoadedEvent="browsingContext.domContentLoaded",s.ContextCreatedEvent="browsingContext.contextCreated",s.ContextDestroyedEvent="browsingContext.contextDestroyed",n.AllEvents="browsingContext",(r=e.Log||(e.Log={})).AllEvents="log",function(e){e.LogEntryAddedEvent="log.entryAdded"}(r.EventNames||(r.EventNames={})),(a=e.Network||(e.Network={})).AllEvents="network",function(e){e.BeforeRequestSentEvent="network.beforeRequestSent",e.ResponseCompletedEvent="network.responseCompleted",e.FetchErrorEvent="network.fetchError"}(a.EventNames||(a.EventNames={})),(i=e.CDP||(e.CDP={})).AllEvents="cdp",function(e){e.EventReceivedEvent="cdp.eventReceived"}(i.EventNames||(i.EventNames={}))}(w),function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Session=e.CDP=e.BrowsingContext=e.Script=e.CommonDataTypes=e.parseObject=void 0;const t=r,n=w;function s(e,t){const s=t.safeParse(e);if(s.success)return s.data;const r=s.error.errors.map((e=>`${e.message} in ${e.path.map((e=>JSON.stringify(e))).join("/")}.`)).join(" ");throw new n.Message.InvalidArgumentException(r)}var a;e.parseObject=s,function(e){e.SharedReferenceSchema=t.z.object({sharedId:t.z.string().min(1),handle:t.z.string().optional()}),e.RemoteReferenceSchema=t.z.object({handle:t.z.string().min(1)});const n=t.z.object({type:t.z.literal("undefined")}),s=t.z.object({type:t.z.literal("null")}),r=t.z.object({type:t.z.literal("string"),value:t.z.string()}),a=t.z.enum(["NaN","-0","Infinity","-Infinity"]),i=t.z.object({type:t.z.literal("number"),value:t.z.union([a,t.z.number()])}),o=t.z.object({type:t.z.literal("boolean"),value:t.z.boolean()}),d=t.z.object({type:t.z.literal("bigint"),value:t.z.string()}),c=t.z.union([n,s,r,i,o,d]);e.LocalValueSchema=t.z.lazy((()=>t.z.union([c,p,h,g,f,v,y])));const u=t.z.union([e.SharedReferenceSchema,e.RemoteReferenceSchema,e.LocalValueSchema]),l=t.z.array(u),p=t.z.object({type:t.z.literal("array"),value:l}),h=t.z.object({type:t.z.literal("date"),value:t.z.string().min(1)}),m=t.z.tuple([t.z.union([t.z.string(),u]),u]),g=t.z.object({type:t.z.literal("map"),value:t.z.array(m)}),f=t.z.object({type:t.z.literal("object"),value:t.z.array(m)}),v=t.z.object({type:t.z.literal("regexp"),value:t.z.object({pattern:t.z.string(),flags:t.z.string().optional()})}),y=t.z.lazy((()=>t.z.object({type:t.z.literal("set"),value:l})));e.BrowsingContextSchema=t.z.string(),e.MaxDepthSchema=t.z.number().int().nonnegative().max(9007199254740991)}(a=e.CommonDataTypes||(e.CommonDataTypes={})),function(e){const n=t.z.enum(["window","dedicated-worker","shared-worker","service-worker","worker","paint-worklet","audio-worklet","worklet"]);e.GetRealmsParametersSchema=t.z.object({context:a.BrowsingContextSchema.optional(),type:n.optional()}),e.parseGetRealmsParams=function(t){return s(t,e.GetRealmsParametersSchema)};const r=t.z.object({context:a.BrowsingContextSchema,sandbox:t.z.string().optional()}),i=t.z.object({realm:t.z.string().min(1)}),o=t.z.union([i,r]),d=t.z.enum(["root","none"]),c=t.z.object({expression:t.z.string(),awaitPromise:t.z.boolean(),target:o,resultOwnership:d.optional()});e.parseEvaluateParams=function(e){return s(e,c)};const u=t.z.object({target:o,handles:t.z.array(t.z.string())});e.parseDisownParams=function(e){return s(e,u)};const l=t.z.string(),p=t.z.object({channel:l,maxDepth:t.z.number().int().min(1).max(1).optional(),ownership:d.optional()});e.ChannelValueSchema=t.z.object({type:t.z.literal("channel"),value:p}),e.PreloadScriptSchema=t.z.string(),e.AddPreloadScriptParametersSchema=t.z.object({functionDeclaration:t.z.string(),arguments:t.z.array(e.ChannelValueSchema).optional(),sandbox:t.z.string().optional(),context:a.BrowsingContextSchema.optional()}),e.parseAddPreloadScriptParams=function(t){return s(t,e.AddPreloadScriptParametersSchema)},e.RemovePreloadScriptParametersSchema=t.z.object({script:e.PreloadScriptSchema}),e.parseRemovePreloadScriptParams=function(t){return s(t,e.RemovePreloadScriptParametersSchema)};const h=t.z.union([a.RemoteReferenceSchema,a.SharedReferenceSchema,a.LocalValueSchema,e.ChannelValueSchema]),m=t.z.object({functionDeclaration:t.z.string(),target:o,arguments:t.z.array(h).optional(),this:h.optional(),awaitPromise:t.z.boolean(),resultOwnership:d.optional()});e.parseCallFunctionParams=function(e){return s(e,m)}}(e.Script||(e.Script={})),function(e){const n=t.z.object({maxDepth:a.MaxDepthSchema.optional(),root:a.BrowsingContextSchema.optional()});e.parseGetTreeParams=function(e){return s(e,n)};const r=t.z.enum(["none","interactive","complete"]),i=t.z.object({context:a.BrowsingContextSchema,url:t.z.string().url(),wait:r.optional()});e.parseNavigateParams=function(e){return s(e,i)};const o=t.z.object({type:t.z.enum(["tab","window"]),referenceContext:a.BrowsingContextSchema.optional()});e.parseCreateParams=function(e){return s(e,o)};const d=t.z.object({context:a.BrowsingContextSchema});e.parseCloseParams=function(e){return s(e,d)};const c=t.z.object({context:a.BrowsingContextSchema});e.parseCaptureScreenshotParams=function(e){return s(e,c)};const u=t.z.object({height:t.z.number().min(0).default(27.94).optional(),width:t.z.number().min(0).default(21.59).optional()}),l=t.z.object({bottom:t.z.number().min(0).default(1).optional(),left:t.z.number().min(0).default(1).optional(),right:t.z.number().min(0).default(1).optional(),top:t.z.number().min(0).default(1).optional()}),p=t.z.array(t.z.union([t.z.string().min(1),t.z.number().int().nonnegative()])).refine((e=>e.every((e=>{const t=String(e).match(/^(?:(?:\d+)|(?:\d+[-])|(?:[-]\d+)|(?:(?<start>\d+)[-](?<end>\d+)))$/),{start:n,end:s}=t?.groups??{};return!(n&&s&&Number(n)>Number(s))&&t})))),h=t.z.object({context:a.BrowsingContextSchema,background:t.z.boolean().default(!1).optional(),margin:l.optional(),orientation:t.z.enum(["portrait","landscape"]).default("portrait").optional(),page:u.optional(),pageRanges:p.default([]).optional(),scale:t.z.number().min(.1).max(2).default(1).optional(),shrinkToFit:t.z.boolean().default(!0).optional()});e.parsePrintParams=function(e){return s(e,h)}}(e.BrowsingContext||(e.BrowsingContext={})),function(e){const n=t.z.object({cdpMethod:t.z.string(),cdpParams:t.z.object({}).passthrough(),cdpSession:t.z.string().optional()});e.parseSendCommandParams=function(e){return s(e,n)};const r=t.z.object({context:a.BrowsingContextSchema});e.parseGetSessionParams=function(e){return s(e,r)}}(e.CDP||(e.CDP={})),function(e){const r=t.z.enum([n.BrowsingContext.AllEvents,...Object.values(n.BrowsingContext.EventNames),n.Log.AllEvents,...Object.values(n.Log.EventNames),n.CDP.AllEvents,...Object.values(n.CDP.EventNames),n.Network.AllEvents,...Object.values(n.Network.EventNames),n.Script.AllEvents,...Object.values(n.Script.EventNames)]),i=t.z.object({events:t.z.array(r),contexts:t.z.array(a.BrowsingContextSchema).optional()});e.parseSubscribeParams=function(e){return s(e,i)}}(e.Session||(e.Session={}))}(s);var _={},I={},S=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(I,"__esModule",{value:!0}),I.EventEmitter=void 0;const T=S((function(e){return{all:e=e||new Map,on:function(t,n){var s=e.get(t);s?s.push(n):e.set(t,[n])},off:function(t,n){var s=e.get(t);s&&(n?s.splice(s.indexOf(n)>>>0,1):e.set(t,[]))},emit:function(t,n){var s=e.get(t);s&&s.slice().map((function(e){e(n)})),(s=e.get("*"))&&s.slice().map((function(e){e(t,n)}))}}}));I.EventEmitter=class{#e=(0,T.default)();on(e,t){return this.#e.on(e,t),this}once(e,t){const n=s=>{t(s),this.off(e,n)};return this.on(e,n)}off(e,t){return this.#e.off(e,t),this}emit(e,t){this.#e.emit(e,t)}};var E={},P={};!function(e){var t;Object.defineProperty(e,"__esModule",{value:!0}),e.LogType=void 0,(t=e.LogType||(e.LogType={})).bidi="BiDi Messages",t.browsingContexts="Browsing Contexts",t.cdp="CDP",t.system="System"}(P),Object.defineProperty(E,"__esModule",{value:!0}),E.ProcessingQueue=void 0;const k=P;E.ProcessingQueue=class{#t;#n;#s;#r=[];#a=!1;constructor(e,t=(()=>Promise.resolve()),n){this.#t=t,this.#s=e,this.#n=n}add(e){this.#r.push(e),this.#i()}async#i(){if(!this.#a){for(this.#a=!0;this.#r.length>0;){const e=this.#r.shift();void 0!==e&&await e.then((e=>this.#s(e))).catch((e=>{this.#n?.(k.LogType.system,"Event was not processed:",e),this.#t(e)}))}this.#a=!1}}};var N={},Z={},O={},M={};Object.defineProperty(M,"__esModule",{value:!0}),M.inchesFromCm=void 0,M.inchesFromCm=function(e){return e/2.54};var D={};Object.defineProperty(D,"__esModule",{value:!0}),D.Deferred=void 0;class R{#o=!1;#d;#c=()=>{};#u=()=>{};get isFinished(){return this.#o}constructor(){this.#d=new Promise(((e,t)=>{this.#c=e,this.#u=t})),this.#d.catch((()=>{}))}then(e,t){return this.#d.then(e,t)}catch(e){return this.#d.catch(e)}resolve(e){this.#o=!0,this.#c(e)}reject(e){this.#o=!0,this.#u(e)}finally(e){return this.#d.finally(e)}[Symbol.toStringTag]="Promise"}D.Deferred=R;var j={},A={};!function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.ScriptEvaluator=e.SHARED_ID_DIVIDER=void 0;const t=w;e.SHARED_ID_DIVIDER="_element_";class n{#l;constructor(e){this.#l=e}static async stringifyObject(e,t){return(await t.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String((e=>String(e))),awaitPromise:!1,arguments:[e],returnByValue:!0,executionContextId:t.executionContextId})).result.value}async serializeCdpObject(e,t,s){const r=n.#p(e),a=await s.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String((e=>e)),awaitPromise:!1,arguments:[r],generateWebDriverValue:!0,executionContextId:s.executionContextId});return s.cdpToBidiValue(a,t)}async scriptEvaluate(e,t,n,s){const r=await e.cdpClient.sendCommand("Runtime.evaluate",{contextId:e.executionContextId,expression:t,awaitPromise:n,generateWebDriverValue:!0});return r.exceptionDetails?{exceptionDetails:await this.#h(r.exceptionDetails,0,s,e),type:"exception",realm:e.realmId}:{type:"success",result:e.cdpToBidiValue(r,s),realm:e.realmId}}async callFunction(e,n,s,r,a,i){const o=`(...args)=>{ return _callFunction((\n${n}\n), args);\n function _callFunction(f, args) {\n const deserializedThis = args.shift();\n const deserializedArgs = args;\n return f.apply(deserializedThis, deserializedArgs);\n }}`,d=[await this.#m(s,e)];let c;d.push(...await Promise.all(r.map((async t=>this.#m(t,e)))));try{c=await e.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:o,awaitPromise:a,arguments:d,generateWebDriverValue:!0,executionContextId:e.executionContextId})}catch(e){if(-32e3===e.code&&["Could not find object with given id","Argument should belong to the same JavaScript world as target object","Invalid remote object id"].includes(e.message))throw new t.Message.NoSuchHandleException("Handle was not found.");throw e}return c.exceptionDetails?{exceptionDetails:await this.#h(c.exceptionDetails,1,i,e),type:"exception",realm:e.realmId}:{type:"success",result:e.cdpToBidiValue(c,i),realm:e.realmId}}static#p(e){return void 0!==e.objectId?{objectId:e.objectId}:void 0!==e.unserializableValue?{unserializableValue:e.unserializableValue}:{value:e.value}}async#m(n,s){if("sharedId"in n){const[r,a]=n.sharedId.split(e.SHARED_ID_DIVIDER),i=parseInt(a??"");if(isNaN(i)||void 0===i||void 0===r)throw new t.Message.InvalidArgumentException(`SharedId "${n.sharedId}" should have format "{navigableId}${e.SHARED_ID_DIVIDER}{backendNodeId}".`);if(s.navigableId!==r)throw new t.Message.NoSuchNodeException(`SharedId "${n.sharedId}" belongs to different document. Current document is ${s.navigableId}.`);try{return{objectId:(await s.cdpClient.sendCommand("DOM.resolveNode",{backendNodeId:i,executionContextId:s.executionContextId})).object.objectId}}catch(e){if(-32e3===e.code&&"No node with given id found"===e.message)throw new t.Message.NoSuchNodeException(`SharedId "${n.sharedId}" was not found.`);throw e}}if("handle"in n)return{objectId:n.handle};switch(n.type){case"undefined":return{unserializableValue:"undefined"};case"null":return{unserializableValue:"null"};case"string":return{value:n.value};case"number":return"NaN"===n.value?{unserializableValue:"NaN"}:"-0"===n.value?{unserializableValue:"-0"}:"Infinity"===n.value?{unserializableValue:"Infinity"}:"-Infinity"===n.value?{unserializableValue:"-Infinity"}:{value:n.value};case"boolean":return{value:Boolean(n.value)};case"bigint":return{unserializableValue:`BigInt(${JSON.stringify(n.value)})`};case"date":return{unserializableValue:`new Date(Date.parse(${JSON.stringify(n.value)}))`};case"regexp":return{unserializableValue:`new RegExp(${JSON.stringify(n.value.pattern)}, ${JSON.stringify(n.value.flags)})`};case"map":{const e=await this.#g(n.value,s),t=await s.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String(((...e)=>{const t=new Map;for(let n=0;n<e.length;n+=2)t.set(e[n],e[n+1]);return t})),awaitPromise:!1,arguments:e,returnByValue:!1,executionContextId:s.executionContextId});return{objectId:t.result.objectId}}case"object":{const e=await this.#g(n.value,s),t=await s.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String(((...e)=>{const t={};for(let n=0;n<e.length;n+=2){t[e[n]]=e[n+1]}return t})),awaitPromise:!1,arguments:e,returnByValue:!1,executionContextId:s.executionContextId});return{objectId:t.result.objectId}}case"array":{const e=await this.#f(n.value,s);return{objectId:(await s.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String(((...e)=>e)),awaitPromise:!1,arguments:e,returnByValue:!1,executionContextId:s.executionContextId})).result.objectId}}case"set":{const e=await this.#f(n.value,s);return{objectId:(await s.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String(((...e)=>new Set(e))),awaitPromise:!1,arguments:e,returnByValue:!1,executionContextId:s.executionContextId})).result.objectId}}case"channel":{const e=(await s.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String((()=>{const e=[];let t=null;return{async getMessage(){const n=e.length>0?Promise.resolve():new Promise((e=>{t=e}));return await n,e.shift()},sendMessage(n){e.push(n),null!==t&&(t(),t=null)}}})),returnByValue:!1,executionContextId:s.executionContextId,generateWebDriverValue:!1})).result.objectId;this.#v(n,e,s);return{objectId:(await s.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String((e=>e.sendMessage)),arguments:[{objectId:e}],returnByValue:!1,executionContextId:s.executionContextId,generateWebDriverValue:!1})).result.objectId}}default:throw new Error(`Value ${JSON.stringify(n)} is not deserializable.`)}}async#g(e,t){const n=[];for(const[s,r]of e){let e;e="string"==typeof s?{value:s}:await this.#m(s,t);const a=await this.#m(r,t);n.push(e),n.push(a)}return n}async#f(e,t){return Promise.all(e.map((e=>this.#m(e,t))))}async#v(e,n,s){const r=e.value.channel;for(;;){const a=await s.cdpClient.sendCommand("Runtime.callFunctionOn",{functionDeclaration:String((async e=>e.getMessage())),arguments:[{objectId:n}],awaitPromise:!0,executionContextId:s.executionContextId,generateWebDriverValue:!0});this.#l.registerEvent({method:t.Script.EventNames.MessageEvent,params:{channel:r,data:s.cdpToBidiValue(a,e.value.ownership??"none"),source:{realm:s.realmId,context:s.browsingContextId}}},s.browsingContextId)}}async#h(e,t,s,r){const a=e.stackTrace?.callFrames.map((e=>({url:e.url,functionName:e.functionName,lineNumber:e.lineNumber-t,columnNumber:e.columnNumber}))),i=await this.serializeCdpObject(e.exception,s,r),o=await n.stringifyObject(e.exception,r);return{exception:i,columnNumber:e.columnNumber,lineNumber:e.lineNumber-t,stackTrace:{callFrames:a||[]},text:o||e.text}}}e.ScriptEvaluator=n}(A),Object.defineProperty(j,"__esModule",{value:!0}),j.Realm=void 0;const z=A;j.Realm=class{#y;#b;#x;#C;#w;#_;#I;#S;#l;#T;sandbox;cdpSessionId;constructor(e,t,n,s,r,a,i,o,d,c,u){this.#x=n,this.#C=s,this.#w=r,this.sandbox=o,this.#_=a,this.#I=i,this.cdpSessionId=d,this.#S=c,this.#y=e,this.#b=t,this.#l=u,this.#T=new z.ScriptEvaluator(this.#l),this.#y.realmMap.set(this.#x,this)}async disown(e){if(this.#y.knownHandlesToRealm.get(e)===this.realmId){try{await this.cdpClient.sendCommand("Runtime.releaseObject",{objectId:e})}catch(e){if(-32e3!==e.code||"Invalid remote object id"!==e.message)throw e}this.#y.knownHandlesToRealm.delete(e)}}cdpToBidiValue(e,t){const n=e.result.webDriverValue,s=this.webDriverValueToBiDi(n);if(e.result.objectId){const n=e.result.objectId;"root"===t?(s.handle=n,this.#y.knownHandlesToRealm.set(n,this.realmId)):this.cdpClient.sendCommand("Runtime.releaseObject",{objectId:n})}return s}webDriverValueToBiDi(e){const t=e;if("platformobject"===t.type)return{type:"object"};const n=t.value;if(void 0===n)return t;if("node"===t.type&&(Object.hasOwn(n,"backendNodeId")&&(t.sharedId=`${this.navigableId}${z.SHARED_ID_DIVIDER}${n.backendNodeId}`,delete n.backendNodeId),Object.hasOwn(n,"children")))for(const e in n.children)n.children[e]=this.webDriverValueToBiDi(n.children[e]);if(["array","set"].includes(e.type))for(const e in n)n[e]=this.webDriverValueToBiDi(n[e]);if(["object","map"].includes(e.type))for(const e in n)n[e]=[this.webDriverValueToBiDi(n[e][0]),this.webDriverValueToBiDi(n[e][1])];return t}toBiDi(){return{realm:this.realmId,origin:this.origin,type:this.type,context:this.browsingContextId,...void 0===this.sandbox?{}:{sandbox:this.sandbox}}}get realmId(){return this.#x}get navigableId(){return this.#b.findContext(this.#C)?.navigableId??"UNKNOWN"}get browsingContextId(){return this.#C}get executionContextId(){return this.#w}get origin(){return this.#_}get type(){return this.#I}get cdpClient(){return this.#S}async callFunction(e,t,n,s,r){const a=this.#b.getContext(this.browsingContextId);return await a.awaitUnblocked(),{result:await this.#T.callFunction(this,e,t,n,s,r)}}async scriptEvaluate(e,t,n){const s=this.#b.getContext(this.browsingContextId);return await s.awaitUnblocked(),{result:await this.#T.scriptEvaluate(this,e,t,n)}}async serializeCdpObject(e,t){return this.#T.serializeCdpObject(e,t,this)}async stringifyObject(e){return z.ScriptEvaluator.stringifyObject(e,this)}},Object.defineProperty(O,"__esModule",{value:!0}),O.BrowsingContextImpl=void 0;const L=M,B=w,V=P,U=D,$=j;class F{#E;#P;#k=new Set;#b;#N={documentInitialized:new U.Deferred,Page:{navigatedWithinDocument:new U.Deferred,lifecycleEvent:{DOMContentLoaded:new U.Deferred,load:new U.Deferred}}};#Z="about:blank";#l;#y;#O=null;#M;#D;#n;constructor(e,t,n,s,r,a,i){this.#M=e,this.#y=t,this.#E=n,this.#P=s,this.#l=r,this.#b=a,this.#n=i}static create(e,t,n,s,r,a,i){const o=new F(e,t,n,s,r,a,i);return o.#R(),a.addContext(o),o.isTopLevelContext()||o.parent.addChild(o.id),r.registerEvent({method:B.BrowsingContext.EventNames.ContextCreatedEvent,params:o.serializeToBidiValue()},o.id),o}get navigableId(){return this.#O}delete(){this.#j(),this.#y.deleteRealms({browsingContextId:this.id}),this.isTopLevelContext()||this.parent.#k.delete(this.id),this.#l.registerEvent({method:B.BrowsingContext.EventNames.ContextDestroyedEvent,params:this.serializeToBidiValue()},this.id),this.#b.deleteContextById(this.id)}get id(){return this.#E}get parentId(){return this.#P}get parent(){return null===this.parentId?null:this.#b.getContext(this.parentId)}get directChildren(){return[...this.#k].map((e=>this.#b.getContext(e)))}get allChildren(){const e=this.directChildren;return e.concat(...e.map((e=>e.allChildren)))}isTopLevelContext(){return null===this.#P}addChild(e){this.#k.add(e)}#j(){this.directChildren.map((e=>e.delete()))}get#A(){if(void 0===this.#D)throw new Error(`No default realm for browsing context ${this.#E}`);return this.#D}get cdpTarget(){return this.#M}updateCdpTarget(e){this.#M=e,this.#R()}get url(){return this.#Z}async awaitLoaded(){await this.#N.Page.lifecycleEvent.load}awaitUnblocked(){return this.#M.targetUnblocked}async getOrCreateSandbox(e){if(void 0===e||""===e)return this.#A;let t=this.#y.findRealms({browsingContextId:this.id,sandbox:e});if(0===t.length&&(await this.#M.cdpClient.sendCommand("Page.createIsolatedWorld",{frameId:this.id,worldName:e}),t=this.#y.findRealms({browsingContextId:this.id,sandbox:e})),1!==t.length)throw Error(`Sandbox ${e} wasn't created.`);return t[0]}serializeToBidiValue(e=0,t=!0){return{context:this.#E,url:this.url,children:e>0?this.directChildren.map((t=>t.serializeToBidiValue(e-1,!1))):null,...t?{parent:this.#P}:{}}}#R(){this.#M.cdpClient.on("Target.targetInfoChanged",(e=>{this.id===e.targetInfo.targetId&&(this.#Z=e.targetInfo.url)})),this.#M.cdpClient.on("Page.frameNavigated",(e=>{this.id===e.frame.id&&(this.#Z=e.frame.url+(e.frame.urlFragment??""),this.#j())})),this.#M.cdpClient.on("Page.navigatedWithinDocument",(e=>{this.id===e.frameId&&(this.#Z=e.url,this.#N.Page.navigatedWithinDocument.resolve(e))})),this.#M.cdpClient.on("Page.lifecycleEvent",(e=>{if(this.id!==e.frameId)return;const t=(new Date).getTime();if("init"===e.name&&(this.#z(e.loaderId),this.#N.documentInitialized.resolve()),"commit"!==e.name){if(e.loaderId===this.#O)switch(e.name){case"DOMContentLoaded":this.#N.Page.lifecycleEvent.DOMContentLoaded.resolve(e),this.#l.registerEvent({method:B.BrowsingContext.EventNames.DomContentLoadedEvent,params:{context:this.id,navigation:this.#O,timestamp:t,url:this.#Z}},this.id);break;case"load":this.#N.Page.lifecycleEvent.load.resolve(e),this.#l.registerEvent({method:B.BrowsingContext.EventNames.LoadEvent,params:{context:this.id,navigation:this.#O,timestamp:t,url:this.#Z}},this.id)}}else this.#O=e.loaderId})),this.#M.cdpClient.on("Runtime.executionContextCreated",(e=>{if(e.context.auxData.frameId!==this.id)return;if(!["default","isolated"].includes(e.context.auxData.type))return;const t=new $.Realm(this.#y,this.#b,e.context.uniqueId,this.id,e.context.id,this.#L(e),"window","isolated"===e.context.auxData.type?e.context.name:void 0,this.#M.cdpSessionId,this.#M.cdpClient,this.#l);e.context.auxData.isDefault&&(this.#D=t)})),this.#M.cdpClient.on("Runtime.executionContextDestroyed",(e=>{this.#y.deleteRealms({cdpSessionId:this.#M.cdpSessionId,executionContextId:e.executionContextId})})),this.#M.cdpClient.on("Runtime.executionContextsCleared",(()=>{this.#y.deleteRealms({cdpSessionId:this.#M.cdpSessionId})}))}#L(e){return"isolated"===e.context.auxData.type?this.#A.origin:["://",""].includes(e.context.origin)?"null":e.context.origin}#z(e){void 0!==e&&this.#O!==e?(this.#N.documentInitialized.isFinished?this.#N.documentInitialized=new U.Deferred:this.#n?.(V.LogType.browsingContexts,"Document changed"),this.#N.Page.lifecycleEvent.DOMContentLoaded.isFinished?this.#N.Page.lifecycleEvent.DOMContentLoaded=new U.Deferred:this.#n?.(V.LogType.browsingContexts,"Document changed"),this.#N.Page.lifecycleEvent.load.isFinished?this.#N.Page.lifecycleEvent.load=new U.Deferred:this.#n?.(V.LogType.browsingContexts,"Document changed"),this.#O=e):this.#N.Page.navigatedWithinDocument.isFinished&&(this.#N.Page.navigatedWithinDocument=new U.Deferred)}async navigate(e,t){await this.awaitUnblocked();const n=await this.#M.cdpClient.sendCommand("Page.navigate",{url:e,frameId:this.id});if(n.errorText)throw new B.Message.UnknownErrorException(n.errorText);switch(this.#z(n.loaderId),t){case"none":break;case"interactive":void 0===n.loaderId?await this.#N.Page.navigatedWithinDocument:await this.#N.Page.lifecycleEvent.DOMContentLoaded;break;case"complete":void 0===n.loaderId?await this.#N.Page.navigatedWithinDocument:await this.#N.Page.lifecycleEvent.load}return{result:{navigation:n.loaderId||null,url:e}}}async captureScreenshot(){const[,e]=await Promise.all([this.#M.cdpClient.sendCommand("Page.bringToFront"),this.#M.cdpClient.sendCommand("Page.captureScreenshot",{})]);return{result:{data:e.data}}}async print(e){const t={printBackground:e.background,landscape:"landscape"===e.orientation,pageRanges:e.pageRanges?.join(",")??"",scale:e.scale,preferCSSPageSize:!e.shrinkToFit};e.margin?.bottom&&(t.marginBottom=(0,L.inchesFromCm)(e.margin.bottom)),e.margin?.left&&(t.marginLeft=(0,L.inchesFromCm)(e.margin.left)),e.margin?.right&&(t.marginRight=(0,L.inchesFromCm)(e.margin.right)),e.margin?.top&&(t.marginTop=(0,L.inchesFromCm)(e.margin.top)),e.page?.height&&(t.paperHeight=(0,L.inchesFromCm)(e.page.height)),e.page?.width&&(t.paperWidth=(0,L.inchesFromCm)(e.page.width));return{result:{data:(await this.#M.cdpClient.sendCommand("Page.printToPDF",t)).data}}}}O.BrowsingContextImpl=F;var q={},W={},K={};Object.defineProperty(K,"__esModule",{value:!0}),K.getRemoteValuesText=K.logMessageFormatter=void 0;const J=["%s","%d","%i","%f","%o","%O","%c"];function H(e){return J.some((t=>e.includes(t)))}function G(e){let t="";const n=e[0].value.toString(),s=e.slice(1,void 0),r=n.split(new RegExp(J.map((e=>`(${e})`)).join("|"),"g"));for(const n of r)if(void 0!==n&&""!==n)if(H(n)){const r=s.shift();if(void 0===r)throw new Error(`Less value is provided: "${X(e,!1)}"`);"%s"===n?t+=Q(r):"%d"===n||"%i"===n?"bigint"===r.type||"number"===r.type||"string"===r.type?t+=parseInt(r.value.toString(),10):t+="NaN":"%f"===n?"bigint"===r.type||"number"===r.type||"string"===r.type?t+=parseFloat(r.value.toString()):t+="NaN":t+=Y(r)}else t+=n;if(s.length>0)throw new Error(`More value is provided: "${X(e,!1)}"`);return t}function Y(e){if("array"!==e.type&&"bigint"!==e.type&&"date"!==e.type&&"number"!==e.type&&"object"!==e.type&&"string"!==e.type)return Q(e);if("bigint"===e.type)return`${e.value.toString()}n`;if("number"===e.type)return e.value.toString();if(["date","string"].includes(e.type))return JSON.stringify(e.value);if("object"===e.type)return`{${e.value.map((e=>`${JSON.stringify(e[0])}:${Y(e[1])}`)).join(",")}}`;if("array"===e.type)return`[${e.value?.map((e=>Y(e))).join(",")??""}]`;throw Error(`Invalid value type: ${e.toString()}`)}function Q(e){if(!Object.hasOwn(e,"value"))return e.type;switch(e.type){case"string":case"number":case"boolean":case"bigint":return String(e.value);case"regexp":return`/${e.value.pattern}/${e.value.flags??""}`;case"date":return new Date(e.value).toString();case"object":return`Object(${e.value?.length??""})`;case"array":return`Array(${e.value?.length??""})`;case"map":return`Map(${e.value.length})`;case"set":return`Set(${e.value.length})`;case"node":return"node";default:return e.type}}function X(e,t){const n=e[0];return n?"string"===n.type&&H(n.value.toString())&&t?G(e):e.map((e=>Q(e))).join(" "):""}K.logMessageFormatter=G,K.getRemoteValuesText=X,Object.defineProperty(W,"__esModule",{value:!0}),W.LogManager=void 0;const ee=w,te=K;function ne(e){const t=e?.callFrames.map((e=>({columnNumber:e.columnNumber,functionName:e.functionName,lineNumber:e.lineNumber,url:e.url})));return t?{callFrames:t}:void 0}class se{#l;#y;#M;constructor(e,t,n){this.#M=e,this.#y=t,this.#l=n}static create(e,t,n){const s=new se(e,t,n);return s.#B(),s}#B(){this.#V()}#V(){this.#M.cdpClient.on("Runtime.consoleAPICalled",(e=>{const t=this.#y.findRealm({cdpSessionId:this.#M.cdpSessionId,executionContextId:e.executionContextId}),n=void 0===t?Promise.resolve(e.args):Promise.all(e.args.map((e=>t.serializeCdpObject(e,"none"))));this.#l.registerPromiseEvent(n.then((n=>{return{method:ee.Log.EventNames.LogEntryAddedEvent,params:{level:(s=e.type,["assert","error"].includes(s)?"error":["debug","trace"].includes(s)?"debug":["warn","warning"].includes(s)?"warn":"info"),source:{realm:t?.realmId??"UNKNOWN",context:t?.browsingContextId??"UNKNOWN"},text:(0,te.getRemoteValuesText)(n,!0),timestamp:Math.round(e.timestamp),stackTrace:ne(e.stackTrace),type:"console",method:"warning"===e.type?"warn":e.type,args:n}};var s})),t?.browsingContextId??"UNKNOWN",ee.Log.EventNames.LogEntryAddedEvent)})),this.#M.cdpClient.on("Runtime.exceptionThrown",(e=>{const t=this.#y.findRealm({cdpSessionId:this.#M.cdpSessionId,executionContextId:e.exceptionDetails.executionContextId}),n=(async()=>e.exceptionDetails.exception?void 0===t?JSON.stringify(e.exceptionDetails.exception):t.stringifyObject(e.exceptionDetails.exception):e.exceptionDetails.text)();this.#l.registerPromiseEvent(n.then((n=>({method:ee.Log.EventNames.LogEntryAddedEvent,params:{level:"error",source:{realm:t?.realmId??"UNKNOWN",context:t?.browsingContextId??"UNKNOWN"},text:n,timestamp:Math.round(e.timestamp),stackTrace:ne(e.exceptionDetails.stackTrace),type:"javascript"}}))),t?.browsingContextId??"UNKNOWN",ee.Log.EventNames.LogEntryAddedEvent)}))}}W.LogManager=se;var re={},ae={};Object.defineProperty(ae,"__esModule",{value:!0}),ae.DefaultMap=void 0;class ie extends Map{#U;constructor(e,t){super(t),this.#U=e}get(e){return this.has(e)||this.set(e,this.#U(e)),super.get(e)}}ae.DefaultMap=ie;var oe={};Object.defineProperty(oe,"__esModule",{value:!0}),oe.NetworkRequest=void 0;const de=D,ce=w;class ue{static#$="UNKNOWN";requestId;#l;#F;#q;#W;#K;#J;#H;constructor(e,t){this.requestId=e,this.#l=t,this.#J=new de.Deferred,this.#H=new de.Deferred}onRequestWillBeSentEvent(e){void 0===this.#F&&(this.#F=e,void 0!==this.#q&&this.#J.resolve(),this.#G())}onRequestWillBeSentExtraInfoEvent(e){void 0===this.#q&&(this.#q=e,void 0!==this.#F&&this.#J.resolve())}onResponseReceivedEvent(e){void 0===this.#W&&(this.#W=e,!0===e.hasExtraInfo||this.#J.isFinished||this.#J.resolve(),!0===e.hasExtraInfo&&void 0===this.#K||this.#H.resolve(),this.#Y())}onResponseReceivedEventExtraInfo(e){void 0===this.#K&&(this.#K=e,void 0!==this.#W&&this.#H.resolve())}onLoadingFailedEvent(e){this.#J.resolve(),this.#H.reject(e);const t={...this.#Q(),errorText:e.errorText};this.#l.registerEvent({method:ce.Network.EventNames.FetchErrorEvent,params:t},this.#F?.frameId??null)}#G(){this.#X()||this.#l.registerPromiseEvent(this.#J.then((()=>this.#ee())),this.#F?.frameId??null,ce.Network.EventNames.BeforeRequestSentEvent)}#ee(){if(void 0===this.#F)throw new Error("RequestWillBeSentEvent is not set");const e={...this.#Q(),initiator:{type:this.#te()}};return{method:ce.Network.EventNames.BeforeRequestSentEvent,params:e}}#Q(){return{context:this.#F?.frameId??null,navigation:this.#F?.loaderId??null,redirectCount:0,request:this.#ne(),timestamp:Math.round(1e3*(this.#F?.wallTime??0))}}#ne(){const e=void 0===this.#q?[]:ue.#se(this.#q.associatedCookies);return{request:this.#F?.requestId??ue.#$,url:this.#F?.request.url??ue.#$,method:this.#F?.request.method??ue.#$,headers:Object.keys(this.#F?.request.headers??[]).map((e=>({name:e,value:this.#F?.request.headers[e]}))),cookies:e,headersSize:-1,bodySize:0,timings:{timeOrigin:0,requestTime:0,redirectStart:0,redirectEnd:0,fetchStart:0,dnsStart:0,dnsEnd:0,connectStart:0,connectEnd:0,tlsStart:0,tlsEnd:0,requestStart:0,responseStart:0,responseEnd:0}}}#te(){switch(this.#F?.initiator.type){case"parser":case"script":case"preflight":return this.#F.initiator.type;default:return"other"}}static#re(e){switch(e){case"Strict":return"strict";case"Lax":return"lax";default:return"none"}}static#se(e){return e.map((e=>({name:e.cookie.name,value:e.cookie.value,domain:e.cookie.domain,path:e.cookie.path,expires:e.cookie.expires,size:e.cookie.size,httpOnly:e.cookie.httpOnly,secure:e.cookie.secure,sameSite:ue.#re(e.cookie.sameSite)})))}#Y(){this.#X()||this.#l.registerPromiseEvent(this.#H.then((()=>this.#ae())),this.#W?.frameId??null,ce.Network.EventNames.ResponseCompletedEvent)}#ae(){if(void 0===this.#W)throw new Error("ResponseReceivedEvent is not set");if(void 0===this.#F)throw new Error("RequestWillBeSentEvent is not set");return{method:ce.Network.EventNames.ResponseCompletedEvent,params:{...this.#Q(),response:{url:this.#W.response.url,protocol:this.#W.response.protocol,status:this.#W.response.status,statusText:this.#W.response.statusText,fromCache:this.#W.response.fromDiskCache||this.#W.response.fromPrefetchCache,headers:this.#ie(this.#W.response.headers),mimeType:this.#W.response.mimeType,bytesReceived:this.#W.response.encodedDataLength,headersSize:this.#K?.headersText?.length??-1,bodySize:-1,content:{size:-1}}}}}#ie(e){return Object.keys(e).map((t=>({name:t,value:e[t]})))}#X(){return this.#F?.request.url.endsWith("/favicon.ico")??!1}}oe.NetworkRequest=ue,Object.defineProperty(re,"__esModule",{value:!0}),re.NetworkProcessor=void 0;const le=ae,pe=oe;class he{#l;#oe;constructor(e){this.#l=e,this.#oe=new le.DefaultMap((e=>new pe.NetworkRequest(e,this.#l)))}static async create(e,t){const n=new he(t);return e.on("Network.requestWillBeSent",(e=>{n.#de(e.requestId).onRequestWillBeSentEvent(e)})),e.on("Network.requestWillBeSentExtraInfo",(e=>{n.#de(e.requestId).onRequestWillBeSentExtraInfoEvent(e)})),e.on("Network.responseReceived",(e=>{n.#de(e.requestId).onResponseReceivedEvent(e)})),e.on("Network.responseReceivedExtraInfo",(e=>{n.#de(e.requestId).onResponseReceivedEventExtraInfo(e)})),e.on("Network.loadingFailed",(e=>{n.#de(e.requestId).onLoadingFailedEvent(e)})),await e.sendCommand("Network.enable"),n}#de(e){return this.#oe.get(e)}}re.NetworkProcessor=he,Object.defineProperty(q,"__esModule",{value:!0}),q.CdpTarget=void 0;const me=W,ge=w,fe=D,ve=re;class ye{#ce;#S;#ue;#l;#le;#pe;static create(e,t,n,s,r){const a=new ye(e,t,n,r);return me.LogManager.create(a,s,r),a.#he(),a.#me(),a}constructor(e,t,n,s){this.#ce=e,this.#S=t,this.#ue=n,this.#l=s,this.#pe=!1,this.#le=new fe.Deferred}get targetUnblocked(){return this.#le}get targetId(){return this.#ce}get cdpClient(){return this.#S}get cdpSessionId(){return this.#ue}async#me(){this.#l.isNetworkDomainEnabled&&await this.enableNetworkDomain(),await this.#S.sendCommand("Runtime.enable"),await this.#S.sendCommand("Page.enable"),await this.#S.sendCommand("Page.setLifecycleEventsEnabled",{enabled:!0}),await this.#S.sendCommand("Target.setAutoAttach",{autoAttach:!0,waitForDebuggerOnStart:!0,flatten:!0}),await this.#S.sendCommand("Runtime.runIfWaitingForDebugger"),this.#le.resolve()}async enableNetworkDomain(){this.#pe||(this.#pe=!0,await ve.NetworkProcessor.create(this.cdpClient,this.#l))}#he(){this.#S.on("*",((e,t)=>{this.#l.registerEvent({method:ge.CDP.EventNames.EventReceivedEvent,params:{cdpMethod:e,cdpParams:t??{},cdpSession:this.#ue}},null)}))}async addPreloadScript(e,t){return(await this.cdpClient.sendCommand("Page.addScriptToEvaluateOnNewDocument",{source:e,worldName:t})).identifier}async removePreloadScript(e){await this.cdpClient.sendCommand("Page.removeScriptToEvaluateOnNewDocument",{identifier:e})}}q.CdpTarget=ye;var be,xe={},Ce=new Uint8Array(16);function we(){if(!be&&!(be="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return be(Ce)}var _e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Ie(e){return"string"==typeof e&&_e.test(e)}for(var Se,Te,Ee=[],Pe=0;Pe<256;++Pe)Ee.push((Pe+256).toString(16).substr(1));function ke(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=(Ee[e[t+0]]+Ee[e[t+1]]+Ee[e[t+2]]+Ee[e[t+3]]+"-"+Ee[e[t+4]]+Ee[e[t+5]]+"-"+Ee[e[t+6]]+Ee[e[t+7]]+"-"+Ee[e[t+8]]+Ee[e[t+9]]+"-"+Ee[e[t+10]]+Ee[e[t+11]]+Ee[e[t+12]]+Ee[e[t+13]]+Ee[e[t+14]]+Ee[e[t+15]]).toLowerCase();if(!Ie(n))throw TypeError("Stringified UUID is invalid");return n}var Ne=0,Ze=0;function Oe(e){if(!Ie(e))throw TypeError("Invalid UUID");var t,n=new Uint8Array(16);return n[0]=(t=parseInt(e.slice(0,8),16))>>>24,n[1]=t>>>16&255,n[2]=t>>>8&255,n[3]=255&t,n[4]=(t=parseInt(e.slice(9,13),16))>>>8,n[5]=255&t,n[6]=(t=parseInt(e.slice(14,18),16))>>>8,n[7]=255&t,n[8]=(t=parseInt(e.slice(19,23),16))>>>8,n[9]=255&t,n[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,n[11]=t/4294967296&255,n[12]=t>>>24&255,n[13]=t>>>16&255,n[14]=t>>>8&255,n[15]=255&t,n}function Me(e,t,n){function s(e,s,r,a){if("string"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));for(var t=[],n=0;n<e.length;++n)t.push(e.charCodeAt(n));return t}(e)),"string"==typeof s&&(s=Oe(s)),16!==s.length)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");var i=new Uint8Array(16+e.length);if(i.set(s),i.set(e,s.length),(i=n(i))[6]=15&i[6]|t,i[8]=63&i[8]|128,r){a=a||0;for(var o=0;o<16;++o)r[a+o]=i[o];return r}return ke(i)}try{s.name=e}catch(e){}return s.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",s.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",s}function De(e){return 14+(e+64>>>9<<4)+1}function Re(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function je(e,t,n,s,r,a){return Re((i=Re(Re(t,e),Re(s,a)))<<(o=r)|i>>>32-o,n);var i,o}function Ae(e,t,n,s,r,a,i){return je(t&n|~t&s,e,t,r,a,i)}function ze(e,t,n,s,r,a,i){return je(t&s|n&~s,e,t,r,a,i)}function Le(e,t,n,s,r,a,i){return je(t^n^s,e,t,r,a,i)}function Be(e,t,n,s,r,a,i){return je(n^(t|~s),e,t,r,a,i)}var Ve=Me("v3",48,(function(e){if("string"==typeof e){var t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(var n=0;n<t.length;++n)e[n]=t.charCodeAt(n)}return function(e){for(var t=[],n=32*e.length,s="0123456789abcdef",r=0;r<n;r+=8){var a=e[r>>5]>>>r%32&255,i=parseInt(s.charAt(a>>>4&15)+s.charAt(15&a),16);t.push(i)}return t}(function(e,t){e[t>>5]|=128<<t%32,e[De(t)-1]=t;for(var n=1732584193,s=-271733879,r=-1732584194,a=271733878,i=0;i<e.length;i+=16){var o=n,d=s,c=r,u=a;n=Ae(n,s,r,a,e[i],7,-680876936),a=Ae(a,n,s,r,e[i+1],12,-389564586),r=Ae(r,a,n,s,e[i+2],17,606105819),s=Ae(s,r,a,n,e[i+3],22,-1044525330),n=Ae(n,s,r,a,e[i+4],7,-176418897),a=Ae(a,n,s,r,e[i+5],12,1200080426),r=Ae(r,a,n,s,e[i+6],17,-1473231341),s=Ae(s,r,a,n,e[i+7],22,-45705983),n=Ae(n,s,r,a,e[i+8],7,1770035416),a=Ae(a,n,s,r,e[i+9],12,-1958414417),r=Ae(r,a,n,s,e[i+10],17,-42063),s=Ae(s,r,a,n,e[i+11],22,-1990404162),n=Ae(n,s,r,a,e[i+12],7,1804603682),a=Ae(a,n,s,r,e[i+13],12,-40341101),r=Ae(r,a,n,s,e[i+14],17,-1502002290),n=ze(n,s=Ae(s,r,a,n,e[i+15],22,1236535329),r,a,e[i+1],5,-165796510),a=ze(a,n,s,r,e[i+6],9,-1069501632),r=ze(r,a,n,s,e[i+11],14,643717713),s=ze(s,r,a,n,e[i],20,-373897302),n=ze(n,s,r,a,e[i+5],5,-701558691),a=ze(a,n,s,r,e[i+10],9,38016083),r=ze(r,a,n,s,e[i+15],14,-660478335),s=ze(s,r,a,n,e[i+4],20,-405537848),n=ze(n,s,r,a,e[i+9],5,568446438),a=ze(a,n,s,r,e[i+14],9,-1019803690),r=ze(r,a,n,s,e[i+3],14,-187363961),s=ze(s,r,a,n,e[i+8],20,1163531501),n=ze(n,s,r,a,e[i+13],5,-1444681467),a=ze(a,n,s,r,e[i+2],9,-51403784),r=ze(r,a,n,s,e[i+7],14,1735328473),n=Le(n,s=ze(s,r,a,n,e[i+12],20,-1926607734),r,a,e[i+5],4,-378558),a=Le(a,n,s,r,e[i+8],11,-2022574463),r=Le(r,a,n,s,e[i+11],16,1839030562),s=Le(s,r,a,n,e[i+14],23,-35309556),n=Le(n,s,r,a,e[i+1],4,-1530992060),a=Le(a,n,s,r,e[i+4],11,1272893353),r=Le(r,a,n,s,e[i+7],16,-155497632),s=Le(s,r,a,n,e[i+10],23,-1094730640),n=Le(n,s,r,a,e[i+13],4,681279174),a=Le(a,n,s,r,e[i],11,-358537222),r=Le(r,a,n,s,e[i+3],16,-722521979),s=Le(s,r,a,n,e[i+6],23,76029189),n=Le(n,s,r,a,e[i+9],4,-640364487),a=Le(a,n,s,r,e[i+12],11,-421815835),r=Le(r,a,n,s,e[i+15],16,530742520),n=Be(n,s=Le(s,r,a,n,e[i+2],23,-995338651),r,a,e[i],6,-198630844),a=Be(a,n,s,r,e[i+7],10,1126891415),r=Be(r,a,n,s,e[i+14],15,-1416354905),s=Be(s,r,a,n,e[i+5],21,-57434055),n=Be(n,s,r,a,e[i+12],6,1700485571),a=Be(a,n,s,r,e[i+3],10,-1894986606),r=Be(r,a,n,s,e[i+10],15,-1051523),s=Be(s,r,a,n,e[i+1],21,-2054922799),n=Be(n,s,r,a,e[i+8],6,1873313359),a=Be(a,n,s,r,e[i+15],10,-30611744),r=Be(r,a,n,s,e[i+6],15,-1560198380),s=Be(s,r,a,n,e[i+13],21,1309151649),n=Be(n,s,r,a,e[i+4],6,-145523070),a=Be(a,n,s,r,e[i+11],10,-1120210379),r=Be(r,a,n,s,e[i+2],15,718787259),s=Be(s,r,a,n,e[i+9],21,-343485551),n=Re(n,o),s=Re(s,d),r=Re(r,c),a=Re(a,u)}return[n,s,r,a]}(function(e){if(0===e.length)return[];for(var t=8*e.length,n=new Uint32Array(De(t)),s=0;s<t;s+=8)n[s>>5]|=(255&e[s/8])<<s%32;return n}(e),8*e.length))})),Ue=Ve;function $e(e,t,n,s){switch(e){case 0:return t&n^~t&s;case 1:case 3:return t^n^s;case 2:return t&n^t&s^n&s}}function Fe(e,t){return e<<t|e>>>32-t}var qe=Me("v5",80,(function(e){var t=[1518500249,1859775393,2400959708,3395469782],n=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){var s=unescape(encodeURIComponent(e));e=[];for(var r=0;r<s.length;++r)e.push(s.charCodeAt(r))}else Array.isArray(e)||(e=Array.prototype.slice.call(e));e.push(128);for(var a=e.length/4+2,i=Math.ceil(a/16),o=new Array(i),d=0;d<i;++d){for(var c=new Uint32Array(16),u=0;u<16;++u)c[u]=e[64*d+4*u]<<24|e[64*d+4*u+1]<<16|e[64*d+4*u+2]<<8|e[64*d+4*u+3];o[d]=c}o[i-1][14]=8*(e.length-1)/Math.pow(2,32),o[i-1][14]=Math.floor(o[i-1][14]),o[i-1][15]=8*(e.length-1)&4294967295;for(var l=0;l<i;++l){for(var p=new Uint32Array(80),h=0;h<16;++h)p[h]=o[l][h];for(var m=16;m<80;++m)p[m]=Fe(p[m-3]^p[m-8]^p[m-14]^p[m-16],1);for(var g=n[0],f=n[1],v=n[2],y=n[3],b=n[4],x=0;x<80;++x){var C=Math.floor(x/20),w=Fe(g,5)+$e(C,f,v,y)+b+t[C]+p[x]>>>0;b=y,y=v,v=Fe(f,30)>>>0,f=g,g=w}n[0]=n[0]+g>>>0,n[1]=n[1]+f>>>0,n[2]=n[2]+v>>>0,n[3]=n[3]+y>>>0,n[4]=n[4]+b>>>0}return[n[0]>>24&255,n[0]>>16&255,n[0]>>8&255,255&n[0],n[1]>>24&255,n[1]>>16&255,n[1]>>8&255,255&n[1],n[2]>>24&255,n[2]>>16&255,n[2]>>8&255,255&n[2],n[3]>>24&255,n[3]>>16&255,n[3]>>8&255,255&n[3],n[4]>>24&255,n[4]>>16&255,n[4]>>8&255,255&n[4]]})),We=qe;var Ke=Object.freeze({__proto__:null,NIL:"00000000-0000-0000-0000-000000000000",parse:Oe,stringify:ke,v1:function(e,t,n){var s=t&&n||0,r=t||new Array(16),a=(e=e||{}).node||Se,i=void 0!==e.clockseq?e.clockseq:Te;if(null==a||null==i){var o=e.random||(e.rng||we)();null==a&&(a=Se=[1|o[0],o[1],o[2],o[3],o[4],o[5]]),null==i&&(i=Te=16383&(o[6]<<8|o[7]))}var d=void 0!==e.msecs?e.msecs:Date.now(),c=void 0!==e.nsecs?e.nsecs:Ze+1,u=d-Ne+(c-Ze)/1e4;if(u<0&&void 0===e.clockseq&&(i=i+1&16383),(u<0||d>Ne)&&void 0===e.nsecs&&(c=0),c>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");Ne=d,Ze=c,Te=i;var l=(1e4*(268435455&(d+=122192928e5))+c)%4294967296;r[s++]=l>>>24&255,r[s++]=l>>>16&255,r[s++]=l>>>8&255,r[s++]=255&l;var p=d/4294967296*1e4&268435455;r[s++]=p>>>8&255,r[s++]=255&p,r[s++]=p>>>24&15|16,r[s++]=p>>>16&255,r[s++]=i>>>8|128,r[s++]=255&i;for(var h=0;h<6;++h)r[s+h]=a[h];return t||ke(r)},v3:Ue,v4:function(e,t,n){var s=(e=e||{}).random||(e.rng||we)();if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,t){n=n||0;for(var r=0;r<16;++r)t[n+r]=s[r];return t}return ke(s)},v5:We,validate:Ie,version:function(e){if(!Ie(e))throw TypeError("Invalid UUID");return parseInt(e.substr(14,1),16)}}),Je=t(Ke);Object.defineProperty(xe,"__esModule",{value:!0}),xe.PreloadScriptStorage=void 0;const He=Je;xe.PreloadScriptStorage=class{#ge=new Set;findPreloadScripts(e){return e?[...this.#ge].filter((t=>(void 0===e?.id||e?.id===t.id)&&(void 0===e?.contextId||e?.contextId===t.contextId))):[...this.#ge]}addPreloadScripts(e,t,n,s){const r={id:(0,He.v4)(),contextId:e,cdpPreloadScripts:t,functionDeclaration:n,sandbox:s};return this.#ge.add(r),r}appendPreloadScript(e,t){e.cdpPreloadScripts.push(t)}removePreloadScripts(e){for(const t of this.findPreloadScripts(e))this.#ge.delete(t)}},Object.defineProperty(Z,"__esModule",{value:!0}),Z.BrowsingContextProcessor=void 0;const Ge=w,Ye=P,Qe=O,Xe=q,et=xe;Z.BrowsingContextProcessor=class{#b;#fe;#l;#n;#y;#ve;#ye;constructor(e,t,n,s,r,a){this.#b=r,this.#fe=t,this.#l=s,this.#n=a,this.#y=e,this.#ve=n,this.#ye=new et.PreloadScriptStorage,this.#he(this.#fe.browserClient())}#he(e){e.on("Target.attachedToTarget",(t=>{this.#be(t,e)})),e.on("Target.detachedFromTarget",(e=>{this.#xe(e)})),e.on("Page.frameAttached",(e=>{this.#Ce(e)})),e.on("Page.frameDetached",(e=>{this.#we(e)}))}#Ce(e){const t=this.#b.findContext(e.parentFrameId);void 0!==t&&Qe.BrowsingContextImpl.create(t.cdpTarget,this.#y,e.frameId,e.parentFrameId,this.#l,this.#b,this.#n)}#we(e){"swap"!==e.reason&&this.#b.findContext(e.frameId)?.delete()}#be(e,t){const{sessionId:n,targetInfo:s}=e,r=this.#fe.getCdpClient(n);if(!this.#_e(s))return void r.sendCommand("Runtime.runIfWaitingForDebugger").then((()=>t.sendCommand("Target.detachFromTarget",e)));this.#n?.(Ye.LogType.browsingContexts,"AttachedToTarget event received:",JSON.stringify(e,null,2)),this.#he(r);const a=Xe.CdpTarget.create(s.targetId,r,n,this.#y,this.#l);this.#b.hasContext(s.targetId)?this.#b.getContext(s.targetId).updateCdpTarget(a):Qe.BrowsingContextImpl.create(a,this.#y,s.targetId,null,this.#l,this.#b,this.#n)}#xe(e){const t=e.targetId;this.#b.findContext(t)?.delete()}async#Ie(e){if("realm"in e)return this.#y.getRealm({realmId:e.realm});return this.#b.getContext(e.context).getOrCreateSandbox(e.sandbox)}process_browsingContext_getTree(e){return{result:{contexts:(void 0===e.root?this.#b.getTopLevelContexts():[this.#b.getContext(e.root)]).map((t=>t.serializeToBidiValue(e.maxDepth??Number.MAX_VALUE)))}}}async process_browsingContext_create(e){const t=this.#fe.browserClient();let n;if(void 0!==e.referenceContext&&(n=this.#b.getContext(e.referenceContext),!n.isTopLevelContext()))throw new Ge.Message.InvalidArgumentException("referenceContext should be a top-level context");const s=(await t.sendCommand("Target.createTarget",{url:"about:blank",newWindow:"window"===e.type})).targetId,r=this.#b.getContext(s);return await r.awaitLoaded(),{result:r.serializeToBidiValue(1)}}process_browsingContext_navigate(e){return this.#b.getContext(e.context).navigate(e.url,void 0===e.wait?"none":e.wait)}async process_browsingContext_captureScreenshot(e){return this.#b.getContext(e.context).captureScreenshot()}async process_browsingContext_print(e){return this.#b.getContext(e.context).print(e)}async process_script_addPreloadScript(e){if(void 0!==e.arguments&&e.arguments.length>0)throw new Ge.Message.UnsupportedOperationException("add preload script arguments are not supported");const t=new Set(void 0===e.context||null===e.context?this.#b.getTopLevelContexts().map((e=>e.cdpTarget)):[this.#b.getContext(e.context).cdpTarget]),n=[];for(const s of t){const t=await s.addPreloadScript(`(${e.functionDeclaration})();`,e.sandbox);n.push({target:s,preloadScriptId:t})}return{result:{script:this.#ye.addPreloadScripts(e.context??null,n,e.functionDeclaration,e.sandbox).id}}}async process_script_removePreloadScript(e){const t=e.script,n=this.#ye.findPreloadScripts({id:t});if(0===n.length)throw new Ge.Message.NoSuchScriptException(`No preload script with BiDi ID '${t}'`);for(const e of n)for(const t of e.cdpPreloadScripts){const e=t.target,n=t.preloadScriptId;await e.removePreloadScript(n)}return this.#ye.removePreloadScripts({id:t}),{result:{}}}async process_script_evaluate(e){return(await this.#Ie(e.target)).scriptEvaluate(e.expression,e.awaitPromise,e.resultOwnership??"none")}process_script_getRealms(e){void 0!==e.context&&this.#b.getContext(e.context);const t=this.#y.findRealms({browsingContextId:e.context,type:e.type}).map((e=>e.toBiDi()));return{result:{realms:t}}}async process_script_callFunction(e){return(await this.#Ie(e.target)).callFunction(e.functionDeclaration,e.this||{type:"undefined"},e.arguments||[],e.awaitPromise,e.resultOwnership??"none")}async process_script_disown(e){const t=await this.#Ie(e.target);return await Promise.all(e.handles.map((async e=>t.disown(e)))),{result:{}}}async process_browsingContext_close(e){const t=this.#fe.browserClient();if(!this.#b.getContext(e.context).isTopLevelContext())throw new Ge.Message.InvalidArgumentException("A top-level browsing context cannot be closed.");const n=new Promise((n=>{const s=r=>{r.targetId===e.context&&(t.off("Target.detachedFromTarget",s),n())};t.on("Target.detachedFromTarget",s)}));return await t.sendCommand("Target.closeTarget",{targetId:e.context}),await n,{result:{}}}#_e(e){return e.targetId!==this.#ve&&["page","iframe"].includes(e.type)}async process_cdp_sendCommand(e){const t=e.cdpSession?this.#fe.getCdpClient(e.cdpSession):this.#fe.browserClient();return{result:await t.sendCommand(e.cdpMethod,e.cdpParams),cdpSession:e.cdpSession}}process_cdp_getSession(e){const t=e.context,n=this.#b.getContext(t).cdpTarget.cdpSessionId;return void 0===n?{result:{cdpSession:null}}:{result:{cdpSession:n}}}};var tt={};Object.defineProperty(tt,"__esModule",{value:!0}),tt.OutgoingBidiMessage=void 0;class nt{#Se;#Te;constructor(e,t){this.#Se=e,this.#Te=t}static async createFromPromise(e,t){return e.then((e=>new nt(e,t)))}static createResolved(e,t){return Promise.resolve(new nt(e,t))}get message(){return this.#Se}get channel(){return this.#Te}}tt.OutgoingBidiMessage=nt,Object.defineProperty(N,"__esModule",{value:!0}),N.CommandProcessor=void 0;const st=w,rt=P,at=I,it=Z,ot=tt;class dt{parseAddPreloadScriptParams(e){return e}parseRemovePreloadScriptParams(e){return e}parseGetRealmsParams(e){return e}parseCallFunctionParams(e){return e}parseEvaluateParams(e){return e}parseDisownParams(e){return e}parseSendCommandParams(e){return e}parseGetSessionParams(e){return e}parseSubscribeParams(e){return e}parseNavigateParams(e){return e}parseGetTreeParams(e){return e}parseCreateParams(e){return e}parseCloseParams(e){return e}parseCaptureScreenshotParams(e){return e}parsePrintParams(e){return e}}class ct extends at.EventEmitter{#Ee;#l;#Pe;#n;constructor(e,t,n,s,r=new dt,a,i){super(),this.#l=n,this.#n=i,this.#Ee=new it.BrowsingContextProcessor(e,t,s,n,a,i),this.#Pe=r}static#ke(){return{result:{ready:!1,message:"already connected"}}}async#Ne(e,t){return await this.#l.subscribe(e.events,e.contexts??[null],t),{result:{}}}async#Ze(e,t){return await this.#l.unsubscribe(e.events,e.contexts??[null],t),{result:{}}}async#Oe(e){switch(e.method){case"session.status":return ct.#ke();case"session.subscribe":return this.#Ne(this.#Pe.parseSubscribeParams(e.params),e.channel??null);case"session.unsubscribe":return this.#Ze(this.#Pe.parseSubscribeParams(e.params),e.channel??null);case"browsingContext.create":return this.#Ee.process_browsingContext_create(this.#Pe.parseCreateParams(e.params));case"browsingContext.close":return this.#Ee.process_browsingContext_close(this.#Pe.parseCloseParams(e.params));case"browsingContext.getTree":return this.#Ee.process_browsingContext_getTree(this.#Pe.parseGetTreeParams(e.params));case"browsingContext.navigate":return this.#Ee.process_browsingContext_navigate(this.#Pe.parseNavigateParams(e.params));case"browsingContext.captureScreenshot":return this.#Ee.process_browsingContext_captureScreenshot(this.#Pe.parseCaptureScreenshotParams(e.params));case"browsingContext.print":return this.#Ee.process_browsingContext_print(this.#Pe.parsePrintParams(e.params));case"script.addPreloadScript":return this.#Ee.process_script_addPreloadScript(this.#Pe.parseAddPreloadScriptParams(e.params));case"script.removePreloadScript":return this.#Ee.process_script_removePreloadScript(this.#Pe.parseRemovePreloadScriptParams(e.params));case"script.getRealms":return this.#Ee.process_script_getRealms(this.#Pe.parseGetRealmsParams(e.params));case"script.callFunction":return this.#Ee.process_script_callFunction(this.#Pe.parseCallFunctionParams(e.params));case"script.evaluate":return this.#Ee.process_script_evaluate(this.#Pe.parseEvaluateParams(e.params));case"script.disown":return this.#Ee.process_script_disown(this.#Pe.parseDisownParams(e.params));case"cdp.sendCommand":return this.#Ee.process_cdp_sendCommand(this.#Pe.parseSendCommandParams(e.params));case"cdp.getSession":return this.#Ee.process_cdp_getSession(this.#Pe.parseGetSessionParams(e.params));default:throw new st.Message.UnknownCommandException(`Unknown command '${e.method}'.`)}}async processCommand(e){try{const t=await this.#Oe(e),n={id:e.id,...t};this.emit("response",ot.OutgoingBidiMessage.createResolved(n,e.channel??null))}catch(t){if(t instanceof st.Message.ErrorResponse){const n=t;this.emit("response",ot.OutgoingBidiMessage.createResolved(n.toErrorResponse(e.id),e.channel??null))}else{const n=t;this.#n?.(rt.LogType.bidi,n),this.emit("response",ot.OutgoingBidiMessage.createResolved(new st.Message.ErrorResponse(st.Message.ErrorCode.UnknownError,n.message).toErrorResponse(e.id),e.channel??null))}}}}N.CommandProcessor=ct;var ut={};Object.defineProperty(ut,"__esModule",{value:!0}),ut.BrowsingContextStorage=void 0;const lt=w;ut.BrowsingContextStorage=class{#Me=new Map;getTopLevelContexts(){return this.getAllContexts().filter((e=>e.isTopLevelContext()))}getAllContexts(){return Array.from(this.#Me.values())}deleteContextById(e){this.#Me.delete(e)}deleteContext(e){this.#Me.delete(e.id)}addContext(e){this.#Me.set(e.id,e)}hasContext(e){return this.#Me.has(e)}findContext(e){return this.#Me.get(e)}findTopLevelContextId(e){if(null===e)return null;const t=this.findContext(e),n=t?.parentId??null;return null===n?e:this.findTopLevelContextId(n)}findTopLevelContext(e){const t=this.findTopLevelContextId(e);return null===t?null:this.findContext(t)}getContext(e){const t=this.findContext(e);if(void 0===t)throw new lt.Message.NoSuchFrameException(`Context ${e} not found`);return t}};var pt={},ht={};Object.defineProperty(ht,"__esModule",{value:!0}),ht.Buffer=void 0;ht.Buffer=class{#De;#Re=[];#je;constructor(e,t=(()=>{})){this.#De=e,this.#je=t}get(){return this.#Re}add(e){for(this.#Re.push(e);this.#Re.length>this.#De;){const e=this.#Re.shift();void 0!==e&&this.#je(e)}}};var mt={};Object.defineProperty(mt,"__esModule",{value:!0}),mt.IdWrapper=void 0;class gt{static#Ae=0;#E;constructor(){this.#E=++gt.#Ae}get id(){return this.#E}}mt.IdWrapper=gt;var ft={};Object.defineProperty(ft,"__esModule",{value:!0}),ft.SubscriptionManager=ft.unrollEvents=ft.cartesianProduct=void 0;const vt=w;function yt(...e){return e.reduce(((e,t)=>e.flatMap((e=>t.map((t=>[e,t].flat()))))))}function bt(e){const t=[];for(const n of e)switch(n){case vt.BrowsingContext.AllEvents:t.push(...Object.values(vt.BrowsingContext.EventNames));break;case vt.CDP.AllEvents:t.push(...Object.values(vt.CDP.EventNames));break;case vt.Log.AllEvents:t.push(...Object.values(vt.Log.EventNames));break;case vt.Network.AllEvents:t.push(...Object.values(vt.Network.EventNames));break;case vt.Script.AllEvents:t.push(...Object.values(vt.Script.EventNames));break;default:t.push(n)}return t}ft.cartesianProduct=yt,ft.unrollEvents=bt;ft.SubscriptionManager=class{#ze=0;#Le=new Map;#b;constructor(e){this.#b=e}getChannelsSubscribedToEvent(e,t){return Array.from(this.#Le.keys()).map((n=>({priority:this.#Be(e,t,n),channel:n}))).filter((({priority:e})=>null!==e)).sort(((e,t)=>e.priority-t.priority)).map((({channel:e})=>e))}#Be(e,t,n){const s=this.#Le.get(n);if(void 0===s)return null;const r=this.#b.findTopLevelContextId(t),a=[...new Set([null,r])].map((t=>s.get(t)?.get(e))).filter((e=>void 0!==e));return 0===a.length?null:Math.min(...a)}subscribe(e,t,n){if(t=this.#b.findTopLevelContextId(t),e===vt.BrowsingContext.AllEvents)return void Object.values(vt.BrowsingContext.EventNames).map((e=>this.subscribe(e,t,n)));if(e===vt.CDP.AllEvents)return void Object.values(vt.CDP.EventNames).map((e=>this.subscribe(e,t,n)));if(e===vt.Log.AllEvents)return void Object.values(vt.Log.EventNames).map((e=>this.subscribe(e,t,n)));if(e===vt.Network.AllEvents)return void Object.values(vt.Network.EventNames).map((e=>this.subscribe(e,t,n)));if(e===vt.Script.AllEvents)return void Object.values(vt.Script.EventNames).map((e=>this.subscribe(e,t,n)));this.#Le.has(n)||this.#Le.set(n,new Map);const s=this.#Le.get(n);s.has(t)||s.set(t,new Map);const r=s.get(t);r.has(e)||r.set(e,this.#ze++)}unsubscribeAll(e,t,n){for(const e of t)null!==e&&this.#b.getContext(e);yt(bt(e),t).map((([e,t])=>this.#Ve(e,t,n))).forEach((e=>e()))}unsubscribe(e,t,n){this.unsubscribeAll([e],[t],n)}#Ve(e,t,n){if(t=this.#b.findTopLevelContextId(t),!this.#Le.has(n))throw new vt.Message.InvalidArgumentException(`Cannot unsubscribe from ${e}, ${null===t?"null":t}. No subscription found.`);const s=this.#Le.get(n);if(!s.has(t))throw new vt.Message.InvalidArgumentException(`Cannot unsubscribe from ${e}, ${null===t?"null":t}. No subscription found.`);const r=s.get(t);if(!r.has(e))throw new vt.Message.InvalidArgumentException(`Cannot unsubscribe from ${e}, ${null===t?"null":t}. No subscription found.`);return()=>{r.delete(e),0===r.size&&s.delete(e),0===s.size&&this.#Le.delete(n)}}},Object.defineProperty(pt,"__esModule",{value:!0}),pt.EventManager=void 0;const xt=w,Ct=ht,wt=mt,_t=tt,It=ae,St=ft;class Tt{#Ue;#$e;#Fe;constructor(e,t){this.#Ue=new wt.IdWrapper,this.#$e=t,this.#Fe=e}get id(){return this.#Ue.id}get contextId(){return this.#$e}get event(){return this.#Fe}}const Et=new Map([[xt.Log.EventNames.LogEntryAddedEvent,100]]);class Pt{static#qe="network";#We=new It.DefaultMap((()=>new Set));#Ke=new Map;#Je=new Map;#He;#Ge;#Ye;constructor(e){this.#Ge=e,this.#He=new St.SubscriptionManager(e.getBrowsingContextStorage()),this.#Ye=!1}get isNetworkDomainEnabled(){return this.#Ye}static#Qe(e,t,n){return JSON.stringify({eventName:e,browsingContext:t,channel:n})}registerEvent(e,t){this.registerPromiseEvent(Promise.resolve(e),t,e.method)}registerPromiseEvent(e,t,n){const s=new Tt(e,t),r=this.#He.getChannelsSubscribedToEvent(n,t);this.#Xe(s,n);for(const t of r)this.#Ge.emitOutgoingMessage(_t.OutgoingBidiMessage.createFromPromise(e,t)),this.#et(s,t,n)}async subscribe(e,t,n){for(const e of t)null!==e&&this.#Ge.getBrowsingContextStorage().getContext(e);for(const s of e)for(const e of t){await this.#tt(s,e),this.#He.subscribe(s,e,n);for(const t of this.#nt(s,e,n))this.#Ge.emitOutgoingMessage(_t.OutgoingBidiMessage.createFromPromise(t.event,n)),this.#et(t,n,s)}}async#tt(e,t){e.startsWith(Pt.#qe)&&(null===t?(this.#Ye=!0,await Promise.all(this.#Ge.getBrowsingContextStorage().getAllContexts().map((e=>e.cdpTarget.enableNetworkDomain())))):await this.#Ge.getBrowsingContextStorage().getContext(t).cdpTarget.enableNetworkDomain())}unsubscribe(e,t,n){this.#He.unsubscribeAll(e,t,n)}#Xe(e,t){if(!Et.has(t))return;const n=Pt.#Qe(t,e.contextId);this.#Ke.has(n)||this.#Ke.set(n,new Ct.Buffer(Et.get(t))),this.#Ke.get(n).add(e),this.#We.get(t).add(e.contextId)}#et(e,t,n){if(!Et.has(n))return;const s=Pt.#Qe(n,e.contextId,t);this.#Je.set(s,Math.max(this.#Je.get(s)??0,e.id))}#nt(e,t,n){const s=Pt.#Qe(e,t),r=Pt.#Qe(e,t,n),a=this.#Je.get(r)??-1/0,i=this.#Ke.get(s)?.get().filter((e=>e.id>a))??[];return null===t&&Array.from(this.#We.get(e).keys()).filter((e=>null!==e&&this.#Ge.getBrowsingContextStorage().hasContext(e))).map((t=>this.#nt(e,t,n))).forEach((e=>i.push(...e))),i.sort(((e,t)=>e.id-t.id))}}pt.EventManager=Pt;var kt={};Object.defineProperty(kt,"__esModule",{value:!0}),kt.RealmStorage=void 0;const Nt=w;kt.RealmStorage=class{#st=new Map;#rt=new Map;get knownHandlesToRealm(){return this.#st}get realmMap(){return this.#rt}findRealms(e){return Array.from(this.#rt.values()).filter((t=>(void 0===e.realmId||e.realmId===t.realmId)&&((void 0===e.browsingContextId||e.browsingContextId===t.browsingContextId)&&((void 0===e.navigableId||e.navigableId===t.navigableId)&&((void 0===e.executionContextId||e.executionContextId===t.executionContextId)&&((void 0===e.origin||e.origin===t.origin)&&((void 0===e.type||e.type===t.type)&&((void 0===e.sandbox||e.sandbox===t.sandbox)&&(void 0===e.cdpSessionId||e.cdpSessionId===t.cdpSessionId)))))))))}findRealm(e){const t=this.findRealms(e);if(1===t.length)return t[0]}getRealm(e){const t=this.findRealm(e);if(void 0===t)throw new Nt.Message.NoSuchFrameException(`Realm ${JSON.stringify(e)} not found`);return t}deleteRealms(e){this.findRealms(e).map((e=>{this.#rt.delete(e.realmId),Array.from(this.#st.entries()).filter((([,t])=>t===e.realmId)).map((([e])=>this.#st.delete(e)))}))}},Object.defineProperty(_,"__esModule",{value:!0}),_.BidiServer=void 0;const Zt=I,Ot=E,Mt=N,Dt=ut,Rt=pt,jt=kt;class At extends Zt.EventEmitter{#at;#it;#ot;#b;#y;#n;#dt=e=>{this.#ot.processCommand(e)};#ct=async e=>{const t=e.message;null!==e.channel&&(t.channel=e.channel),await this.#it.sendMessage(t)};constructor(e,t,n,s,r){super(),this.#n=r,this.#b=new Dt.BrowsingContextStorage,this.#y=new jt.RealmStorage,this.#at=new Ot.ProcessingQueue(this.#ct,(()=>Promise.resolve()),this.#n),this.#it=e,this.#it.setOnMessage(this.#dt),this.#ot=new Mt.CommandProcessor(this.#y,t,new Rt.EventManager(this),n,s,this.#b,this.#n),this.#ot.on("response",(e=>{this.emitOutgoingMessage(e)}))}static async createAndStart(e,t,n,s,r){const a=new At(e,t,n,s,r),i=t.browserClient();return await i.sendCommand("Target.setDiscoverTargets",{discover:!0}),await i.sendCommand("Target.setAutoAttach",{autoAttach:!0,waitForDebuggerOnStart:!0,flatten:!0}),await a.topLevelContextsLoaded(),a}async topLevelContextsLoaded(){await Promise.all(this.#b.getTopLevelContexts().map((e=>e.awaitLoaded())))}emitOutgoingMessage(e){this.#at.add(e)}close(){this.#it.close()}getBrowsingContextStorage(){return this.#b}}_.BidiServer=At;var zt={},Lt={};Object.defineProperty(Lt,"__esModule",{value:!0}),Lt.CdpClient=void 0;const Bt=I;class Vt extends Bt.EventEmitter{#fe;#ut;constructor(e,t){super(),this.#fe=e,this.#ut=t}static create(e,t){return new Vt(e,t)}sendCommand(e,...t){const n=t[0];return this.#fe.sendCommand(e,n,this.#ut)}}Lt.CdpClient=Vt;var Ut={};Object.defineProperty(Ut,"__esModule",{value:!0}),Ut.CdpConnection=void 0;const $t=Lt;Ut.CdpConnection=class{#it;#lt;#pt=new Map;#ht=new Map;#mt;#gt=0;constructor(e,t=(()=>{})){this.#it=e,this.#mt=t,this.#it.setOnMessage(this.#ft),this.#lt=$t.CdpClient.create(this,null)}close(){this.#it.close();for(const[,{reject:e,error:t}]of this.#ht)e(t);this.#ht.clear(),this.#pt.clear()}browserClient(){return this.#lt}getCdpClient(e){const t=this.#pt.get(e);if(!t)throw new Error("Unknown CDP session ID");return t}sendCommand(e,t,n){return new Promise(((s,r)=>{const a=this.#gt++;this.#ht.set(a,{resolve:s,reject:r,error:new Error(`${e} ${JSON.stringify(t)} ${n} call rejected because the connection has been closed.`)});const i={id:a,method:e,params:t};n&&(i.sessionId=n);const o=JSON.stringify(i),d=JSON.stringify(i,null,2);this.#it.sendMessage(o),this.#mt("sent ▸",d)}))}#ft=e=>{const t=JSON.parse(e),n=JSON.stringify(t,null,2);if(this.#mt("received ◂",n),"Target.attachedToTarget"===t.method){const{sessionId:e}=t.params;this.#pt.set(e,$t.CdpClient.create(this,e))}else if("Target.detachedFromTarget"===t.method){const{sessionId:e}=t.params;this.#pt.get(e)&&this.#pt.delete(e)}if(void 0!==t.id){const e=this.#ht.get(t.id);this.#ht.delete(t.id),e&&(t.result?e.resolve(t.result):t.error&&e.reject(t.error))}else if(t.method){const e=t.sessionId?this.#pt.get(t.sessionId):this.#lt;e&&e.emit(t.method,t.params||{})}}};var Ft={};Object.defineProperty(Ft,"__esModule",{value:!0}),Ft.WebSocketTransport=void 0;Ft.WebSocketTransport=class{#ft=null;#vt;constructor(e){this.#vt=e,this.#vt.on("message",(e=>{this.#ft?.(e)}))}setOnMessage(e){this.#ft=e}sendMessage(e){this.#vt.send(e)}close(){this.#ft=null,this.#vt.close()}},function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.WebSocketTransport=e.CdpConnection=e.CdpClient=void 0;var t=Lt;Object.defineProperty(e,"CdpClient",{enumerable:!0,get:function(){return t.CdpClient}});var n=Ut;Object.defineProperty(e,"CdpConnection",{enumerable:!0,get:function(){return n.CdpConnection}});var s=Ft;Object.defineProperty(e,"WebSocketTransport",{enumerable:!0,get:function(){return s.WebSocketTransport}})}(zt);var qt={};Object.defineProperty(qt,"__esModule",{value:!0}),qt.log=qt.generatePage=void 0;const Wt=P;function Kt(e){const t=`${e}_log`,n=document.getElementById(t);if(n)return n;const s=document.getElementById("details"),r=document.createElement("div");r.className="divider",s.appendChild(r);const a=document.createElement("div");return a.className="item",a.innerHTML=`<h3>${e}</h3><div id="${t}" class="log"></div>`,s.appendChild(a),document.getElementById(t)}qt.generatePage=function(){globalThis.document.documentElement&&(globalThis.document.documentElement.innerHTML='<!DOCTYPE html><title>BiDi-CDP Mapper</title><style>body{font-family: Roboto, serif; font-size: 13px; color: #202124;}.log{padding: 12px; font-family: Menlo, Consolas, Monaco, Liberation Mono, Lucida Console, monospace; font-size: 11px; line-height: 180%; background: #f1f3f4; border-radius: 4px;}.pre{overflow-wrap: break-word; padding: 10px;}.card{margin: 60px auto; padding: 2px 0; max-width: 900px; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15), 0 1px 6px rgba(0, 0, 0, 0.2); border-radius: 8px;}.divider{height: 1px; background: #f0f0f0;}.item{padding: 16px 20px;}</style><div class="card"><div class="item"><h1>BiDi-CDP Mapper is controlling this tab</h1><p>Closing or reloading it will stop the BiDi process. <a target="_blank" title="BiDi-CDP Mapper GitHub Repository" href="https://github.com/GoogleChromeLabs/chromium-bidi">Details.</a></p></div><div class="divider"></div><details id="details"><summary class="item">Debug information</summary></details></div>',Kt(Wt.LogType.system),Kt(Wt.LogType.bidi),Kt(Wt.LogType.browsingContexts),Kt(Wt.LogType.cdp))},qt.log=function(t,...n){if(!globalThis.document.documentElement)return;e.window?.sendDebugMessage?.(JSON.stringify({logType:t,messages:n}));const s=Kt(t),r=document.createElement("div");r.className="pre",r.textContent=n.join(" "),s.appendChild(r)}; /** * Copyright 2021 Google LLC. * Copyright (c) Microsoft Corporation. @@ -17,5 +17,5 @@ * * @license */ -var ut=e&&e.__createBinding||(Object.create?function(e,t,s,n){void 0===n&&(n=s);var r=Object.getOwnPropertyDescriptor(t,s);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,n,r)}:function(e,t,s,n){void 0===n&&(n=s),e[n]=t[s]}),lt=e&&e.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),pt=e&&e.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&ut(t,e,s);return lt(t,e),t};Object.defineProperty(t,"__esModule",{value:!0});const ht=pt(s),mt=C,gt=w,ft=et,vt=T,yt=xe,xt=ot,bt=async function(){return new Promise((e=>{window.setSelfTargetId=t=>{(0,xt.log)(vt.LogType.system,"Current target ID:",t),e(t)}}))}();(async()=>{(0,xt.generatePage)();const e=await bt,t=await async function(e){class t{#mt=null;constructor(){window.onBidiMessage=e=>{let s;(0,xt.log)(vt.LogType.bidi,"received ◂",e);try{s=t.#ft(e)}catch(t){return void this.#vt(e,mt.Message.ErrorCode.InvalidArgument,t.message,null)}this.#mt?.call(null,s)}}setOnMessage(e){this.#mt=e}sendMessage(e){const t=JSON.stringify(e);window.sendBidiResponse(t),(0,xt.log)(vt.LogType.bidi,"sent ▸",t)}close(){this.#mt=null,window.onBidiMessage=null}#vt(e,s,n,r){const a=t.#yt(e,s,n);r?this.sendMessage({...a,channel:r}):this.sendMessage(a)}static#xt(e){return null===e?"null":Array.isArray(e)?"array":typeof e}static#yt(e,s,n){let r;try{const s=JSON.parse(e);"object"===t.#xt(s)&&"id"in s&&(r=s.id)}catch{}return{id:r,error:s,message:n}}static#ft(e){let s;try{s=JSON.parse(e)}catch{throw new Error("Cannot parse data as JSON")}const n=t.#xt(s);if("object"!==n)throw new Error(`Expected JSON object but got ${n}`);const{id:r,method:a,params:i}=s,o=t.#xt(r);if("number"!==o||!Number.isInteger(r)||r<0)throw new Error(`Expected unsigned integer but got ${o}`);const d=t.#xt(a);if("string"!==d)throw new Error(`Expected string method but got ${d}`);const c=t.#xt(i);if("object"!==c)throw new Error(`Expected object params but got ${c}`);let u=s.channel;if(void 0!==u){const e=t.#xt(u);if("string"!==e)throw new Error(`Expected string channel but got ${e}`);""===u&&(u=void 0)}return{id:r,method:a,params:i,channel:u}}}return gt.BidiServer.createAndStart(new t,function(){class e{#mt=null;constructor(){window.cdp.onmessage=e=>{this.#mt?.call(null,e)}}setOnMessage(e){this.#mt=e}sendMessage(e){window.cdp.send(e)}close(){this.#mt=null,window.cdp.onmessage=null}}return new ft.CdpConnection(new e,((...e)=>{(0,xt.log)(vt.LogType.cdp,...e)}))}(),e,new Ct,xt.log)}(e);(0,xt.log)(vt.LogType.system,"Launched"),t.emitOutgoingMessage(yt.OutgoingBidiMessage.createResolved({launched:!0},null))})();class Ct{parseAddPreloadScriptParams(e){return ht.Script.parseAddPreloadScriptParams(e)}parseRemovePreloadScriptParams(e){return ht.Script.parseRemovePreloadScriptParams(e)}parseGetRealmsParams(e){return ht.Script.parseGetRealmsParams(e)}parseCallFunctionParams(e){return ht.Script.parseCallFunctionParams(e)}parseEvaluateParams(e){return ht.Script.parseEvaluateParams(e)}parseDisownParams(e){return ht.Script.parseDisownParams(e)}parseSendCommandParams(e){return ht.CDP.parseSendCommandParams(e)}parseGetSessionParams(e){return ht.CDP.parseGetSessionParams(e)}parseSubscribeParams(e){return ht.Session.parseSubscribeParams(e)}parseNavigateParams(e){return ht.BrowsingContext.parseNavigateParams(e)}parseGetTreeParams(e){return ht.BrowsingContext.parseGetTreeParams(e)}parseCreateParams(e){return ht.BrowsingContext.parseCreateParams(e)}parseCloseParams(e){return ht.BrowsingContext.parseCloseParams(e)}parseCaptureScreenshotParams(e){return ht.BrowsingContext.parseCaptureScreenshotParams(e)}parsePrintParams(e){return ht.BrowsingContext.parsePrintParams(e)}}return t}(); +var Jt=e&&e.__createBinding||(Object.create?function(e,t,n,s){void 0===s&&(s=n);var r=Object.getOwnPropertyDescriptor(t,n);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,s,r)}:function(e,t,n,s){void 0===s&&(s=n),e[s]=t[n]}),Ht=e&&e.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Gt=e&&e.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&Jt(t,e,n);return Ht(t,e),t};Object.defineProperty(n,"__esModule",{value:!0});const Yt=Gt(s),Qt=w,Xt=_,en=zt,tn=P,nn=tt,sn=qt,rn=async function(){return new Promise((e=>{window.setSelfTargetId=t=>{(0,sn.log)(tn.LogType.system,"Current target ID:",t),e(t)}}))}();(async()=>{(0,sn.generatePage)();const e=await rn,t=await function(e){class t{#ft=null;constructor(){window.onBidiMessage=e=>{let n;(0,sn.log)(tn.LogType.bidi,"received ◂",e);try{n=t.#yt(e)}catch(t){return void this.#bt(e,Qt.Message.ErrorCode.InvalidArgument,t.message,null)}this.#ft?.call(null,n)}}setOnMessage(e){this.#ft=e}sendMessage(e){const t=JSON.stringify(e);window.sendBidiResponse(t),(0,sn.log)(tn.LogType.bidi,"sent ▸",t)}close(){this.#ft=null,window.onBidiMessage=null}#bt(e,n,s,r){const a=t.#xt(e,n,s);r?this.sendMessage({...a,channel:r}):this.sendMessage(a)}static#Ct(e){return null===e?"null":Array.isArray(e)?"array":typeof e}static#xt(e,n,s){let r;try{const n=JSON.parse(e);"object"===t.#Ct(n)&&"id"in n&&(r=n.id)}catch{}return{id:r,error:n,message:s}}static#yt(e){let n;try{n=JSON.parse(e)}catch{throw new Error("Cannot parse data as JSON")}const s=t.#Ct(n);if("object"!==s)throw new Error(`Expected JSON object but got ${s}`);const{id:r,method:a,params:i}=n,o=t.#Ct(r);if("number"!==o||!Number.isInteger(r)||r<0)throw new Error(`Expected unsigned integer but got ${o}`);const d=t.#Ct(a);if("string"!==d)throw new Error(`Expected string method but got ${d}`);const c=t.#Ct(i);if("object"!==c)throw new Error(`Expected object params but got ${c}`);let u=n.channel;if(void 0!==u){const e=t.#Ct(u);if("string"!==e)throw new Error(`Expected string channel but got ${e}`);""===u&&(u=void 0)}return{id:r,method:a,params:i,channel:u}}}return Xt.BidiServer.createAndStart(new t,function(){class e{#ft=null;constructor(){window.cdp.onmessage=e=>{this.#ft?.call(null,e)}}setOnMessage(e){this.#ft=e}sendMessage(e){window.cdp.send(e)}close(){this.#ft=null,window.cdp.onmessage=null}}return new en.CdpConnection(new e,((...e)=>{(0,sn.log)(tn.LogType.cdp,...e)}))}(),e,new an,sn.log)}(e);(0,sn.log)(tn.LogType.system,"Launched"),t.emitOutgoingMessage(nn.OutgoingBidiMessage.createResolved({launched:!0},null))})();class an{parseAddPreloadScriptParams(e){return Yt.Script.parseAddPreloadScriptParams(e)}parseRemovePreloadScriptParams(e){return Yt.Script.parseRemovePreloadScriptParams(e)}parseGetRealmsParams(e){return Yt.Script.parseGetRealmsParams(e)}parseCallFunctionParams(e){return Yt.Script.parseCallFunctionParams(e)}parseEvaluateParams(e){return Yt.Script.parseEvaluateParams(e)}parseDisownParams(e){return Yt.Script.parseDisownParams(e)}parseSendCommandParams(e){return Yt.CDP.parseSendCommandParams(e)}parseGetSessionParams(e){return Yt.CDP.parseGetSessionParams(e)}parseSubscribeParams(e){return Yt.Session.parseSubscribeParams(e)}parseNavigateParams(e){return Yt.BrowsingContext.parseNavigateParams(e)}parseGetTreeParams(e){return Yt.BrowsingContext.parseGetTreeParams(e)}parseCreateParams(e){return Yt.BrowsingContext.parseCreateParams(e)}parseCloseParams(e){return Yt.BrowsingContext.parseCloseParams(e)}parseCaptureScreenshotParams(e){return Yt.BrowsingContext.parseCaptureScreenshotParams(e)}parsePrintParams(e){return Yt.BrowsingContext.parsePrintParams(e)}}return n}(); //# sourceMappingURL=mapperTab.js.map
diff --git a/third_party/blink/public/BUILD.gn b/third_party/blink/public/BUILD.gn index 3d0e06e..7f53586 100644 --- a/third_party/blink/public/BUILD.gn +++ b/third_party/blink/public/BUILD.gn
@@ -91,7 +91,6 @@ android_library("blink_headers_java") { deps = [ "//services/network/public/mojom:mojom_java", - "//third_party/android_deps:com_android_support_support_annotations_java", "//third_party/androidx:androidx_annotation_annotation_java", ] srcjar_deps = [ ":blink_headers_java_enums_srcjar" ]
diff --git a/third_party/blink/public/common/renderer_preferences/renderer_preferences.h b/third_party/blink/public/common/renderer_preferences/renderer_preferences.h index 381bbed1..bf0a23e6 100644 --- a/third_party/blink/public/common/renderer_preferences/renderer_preferences.h +++ b/third_party/blink/public/common/renderer_preferences/renderer_preferences.h
@@ -19,6 +19,12 @@ namespace blink { +// Note: these must match the values in renderer_preferences.mojom. +constexpr uint32_t kDefaultActiveSelectionBgColor = 0xFF1967D2; +constexpr uint32_t kDefaultActiveSelectionFgColor = 0xFFFFFFFF; +constexpr uint32_t kDefaultInactiveSelectionBgColor = 0xFFC8C8C8; +constexpr uint32_t kDefaultInactiveSelectionFgColor = 0xFF323232; + // User preferences passed between the browser and renderer processes. // See //third_party/blink/public/mojom/renderer_preferences.mojom for a // description of what each field is about. @@ -32,10 +38,10 @@ gfx::FontRenderParams::SUBPIXEL_RENDERING_NONE}; bool use_subpixel_positioning{false}; uint32_t focus_ring_color{0xFFE59700}; - uint32_t active_selection_bg_color{0xFF1E90FF}; - uint32_t active_selection_fg_color{0xFFFFFFFF}; - uint32_t inactive_selection_bg_color{0xFFC8C8C8}; - uint32_t inactive_selection_fg_color{0xFF323232}; + uint32_t active_selection_bg_color{kDefaultActiveSelectionBgColor}; + uint32_t active_selection_fg_color{kDefaultActiveSelectionFgColor}; + uint32_t inactive_selection_bg_color{kDefaultInactiveSelectionBgColor}; + uint32_t inactive_selection_fg_color{kDefaultInactiveSelectionFgColor}; bool browser_handles_all_top_level_requests{false}; absl::optional<base::TimeDelta> caret_blink_interval; bool use_custom_colors{true};
diff --git a/third_party/blink/public/mojom/renderer_preferences.mojom b/third_party/blink/public/mojom/renderer_preferences.mojom index a542242..da8a633 100644 --- a/third_party/blink/public/mojom/renderer_preferences.mojom +++ b/third_party/blink/public/mojom/renderer_preferences.mojom
@@ -45,7 +45,8 @@ uint32 focus_ring_color = 0xFFE59700; // The colors used in selection text. Currently only used on Linux and Ash. - uint32 active_selection_bg_color = 0xFF1E90FF; + // Note: these must match the values in renderer_preferences.h. + uint32 active_selection_bg_color = 0xFF1967D2; uint32 active_selection_fg_color = 0xFFFFFFFF; uint32 inactive_selection_bg_color = 0xFFC8C8C8; uint32 inactive_selection_fg_color = 0xFF323232;
diff --git a/third_party/blink/renderer/core/animation/animation.cc b/third_party/blink/renderer/core/animation/animation.cc index 7c821c4..87bb21d 100644 --- a/third_party/blink/renderer/core/animation/animation.cc +++ b/third_party/blink/renderer/core/animation/animation.cc
@@ -2311,6 +2311,9 @@ content_->InvalidateNormalizedTiming(); content_->Invalidate(); } + + // TODO(kevers): Do not update start if "sticky" (explicitly set via startTime + // or currentTime). if (start_time_) { UpdateStartTimeForViewTimeline(); }
diff --git a/third_party/blink/renderer/core/animation/css/css_scroll_timeline_test.cc b/third_party/blink/renderer/core/animation/css/css_scroll_timeline_test.cc index e72418b..9de50494 100644 --- a/third_party/blink/renderer/core/animation/css/css_scroll_timeline_test.cc +++ b/third_party/blink/renderer/core/animation/css/css_scroll_timeline_test.cc
@@ -33,8 +33,8 @@ } const HeapHashSet<WeakMember<ScrollSnapshotClient>>& - GetUnvalidatedTimelines() { - return GetFrame().GetUnvalidatedScrollSnapshotClientsForTesting(); + GetScrollSnapshotClientsForTesting() { + return GetFrame().GetScrollSnapshotClientsForTesting(); } }; @@ -196,7 +196,7 @@ <div id=main></div> )HTML"); - ASSERT_TRUE(GetUnvalidatedTimelines().empty()); + ASSERT_TRUE(GetScrollSnapshotClientsForTesting().empty()); Element* element = MakeGarbageCollected<HTMLDivElement>(GetDocument()); element->setAttribute(blink::html_names::kIdAttr, "element"); @@ -216,7 +216,7 @@ observer->observe(element); UpdateAllLifecyclePhasesForTest(); - EXPECT_EQ(1u, GetUnvalidatedTimelines().size()); + EXPECT_EQ(1u, GetScrollSnapshotClientsForTesting().size()); } namespace {
diff --git a/third_party/blink/renderer/core/animation/keyframe_effect.cc b/third_party/blink/renderer/core/animation/keyframe_effect.cc index 5559a5c..f4316bf 100644 --- a/third_party/blink/renderer/core/animation/keyframe_effect.cc +++ b/third_party/blink/renderer/core/animation/keyframe_effect.cc
@@ -305,7 +305,7 @@ animation->FlushPendingUpdates(); if (ViewTimeline* view_timeline = DynamicTo<ViewTimeline>(animation->timeline())) { - view_timeline->ResolveTimelineOffsets(/* invalidate_effect */ false); + view_timeline->ResolveTimelineOffsets(); } }
diff --git a/third_party/blink/renderer/core/animation/keyframe_effect_model.cc b/third_party/blink/renderer/core/animation/keyframe_effect_model.cc index 3b40782..b7017e0 100644 --- a/third_party/blink/renderer/core/animation/keyframe_effect_model.cc +++ b/third_party/blink/renderer/core/animation/keyframe_effect_model.cc
@@ -417,7 +417,7 @@ } view_timeline_ = timeline; if (timeline) { - timeline->ResolveTimelineOffsets(false); + timeline->ResolveTimelineOffsets(); } }
diff --git a/third_party/blink/renderer/core/animation/scroll_timeline.cc b/third_party/blink/renderer/core/animation/scroll_timeline.cc index 0446665..210e863 100644 --- a/third_party/blink/renderer/core/animation/scroll_timeline.cc +++ b/third_party/blink/renderer/core/animation/scroll_timeline.cc
@@ -195,6 +195,13 @@ DCHECK(scrollable_area->MaximumScrollOffset().x() == 0 || scrollable_area->MinimumScrollOffset().x() == 0); + // Record the scroll range for a quick validation check at the end + // of the layout process. If the cached values change, a fresh + // style + layout cycle is required. The check is performed only once + // per frame to avoid an infinite loop in the update cycle. + minimum_scroll_offset_ = scrollable_area->MinimumScrollOffset(); + maximum_scroll_offset_ = scrollable_area->MaximumScrollOffset(); + ScrollOffset scroll_offset = scrollable_area->GetScrollOffset(); auto physical_orientation = ToPhysicalScrollOrientation(GetAxis(), *layout_box); @@ -292,6 +299,36 @@ return current_phase_and_time != last_current_phase_and_time_; } +bool ScrollTimeline::CheckIfNeedsValidation() { + bool resolved = ComputeIsResolved(); + if (resolved != is_resolved_) { + return true; + } + + Node* source = + CurrentAttachment() + ? ResolveSource(CurrentAttachment()->ComputeSourceNoLayout()) + : nullptr; + if (source != resolved_source_) { + return true; + } + DCHECK(!resolved || source); + + if (resolved) { + LayoutBox* layout_box = source->GetLayoutBox(); + PaintLayerScrollableArea* scrollable_area = layout_box->GetScrollableArea(); + ScrollOffset min_scroll_offset = scrollable_area->MinimumScrollOffset(); + ScrollOffset max_scroll_offset = scrollable_area->MaximumScrollOffset(); + // Scroll range is cached during the snapshot update. If the values do not + // align, the timeline state is no longer valid. + if (min_scroll_offset != minimum_scroll_offset_ || + max_scroll_offset != maximum_scroll_offset_) { + return true; + } + } + return false; +} + void ScrollTimeline::ScheduleNextService() { // See DocumentAnimations::UpdateAnimations() for why we shouldn't reach here. NOTREACHED(); @@ -376,7 +413,7 @@ return ScrollAxis::kBlock; } -void ScrollTimeline::InvalidateEffectTargetStyle() { +void ScrollTimeline::InvalidateEffectTargetStyle() const { for (Animation* animation : GetAnimations()) { animation->InvalidateEffectTargetStyle(); } @@ -384,12 +421,34 @@ bool ScrollTimeline::ValidateSnapshot() { auto state = ComputeTimelineState(); - - if (timeline_state_snapshotted_ == state) + if (ValidateTimelineOffsets() && timeline_state_snapshotted_ == state) { return true; + } timeline_state_snapshotted_ = state; - InvalidateEffectTargetStyle(); + + // Mark an attached animation's target as dirty if the play state is running + // or finished. Idle animations are not in effect and the effect of a paused + // animation is not impacted by timeline staleness. + for (Animation* animation : GetAnimations()) { + Animation::AnimationPlayState play_state = + animation->CalculateAnimationPlayState(); + if (play_state != Animation::kRunning && + play_state != Animation::kFinished) { + continue; + } + + // The animation's effect target requires a style update to ensure that we + // pickup the new effect value. + animation->InvalidateEffectTargetStyle(); + // Normalized timing needs to be reevaluated since the intrinsic iteration + // duration may be affected. + animation->InvalidateNormalizedTiming(); + // The animation range may be affected, which in turn can affect animation + // start time as well as intrinsic iteration duration. + animation->OnRangeUpdate(); + } + return false; }
diff --git a/third_party/blink/renderer/core/animation/scroll_timeline.h b/third_party/blink/renderer/core/animation/scroll_timeline.h index 741d8f67..478fcfb 100644 --- a/third_party/blink/renderer/core/animation/scroll_timeline.h +++ b/third_party/blink/renderer/core/animation/scroll_timeline.h
@@ -123,7 +123,7 @@ // Mark every effect target of every Animation attached to this timeline // for style recalc. - void InvalidateEffectTargetStyle(); + void InvalidateEffectTargetStyle() const; cc::AnimationTimeline* EnsureCompositorTimeline() override; void UpdateCompositorTimeline() override; @@ -185,6 +185,9 @@ void UpdateSnapshot() override; bool ValidateSnapshot() override; bool ShouldScheduleNextService() override; + bool CheckIfNeedsValidation() override; + + virtual bool ValidateTimelineOffsets() { return true; } bool ComputeIsResolved() const; @@ -212,6 +215,8 @@ TimelineAttachment attachment_type_; Member<Node> resolved_source_; bool is_resolved_ = false; + absl::optional<ScrollOffset> minimum_scroll_offset_; + absl::optional<ScrollOffset> maximum_scroll_offset_; // Snapshotted value produced by the last SnapshotState call. TimelineState timeline_state_snapshotted_;
diff --git a/third_party/blink/renderer/core/animation/view_timeline.cc b/third_party/blink/renderer/core/animation/view_timeline.cc index 1bdf6b22..e9f1194 100644 --- a/third_party/blink/renderer/core/animation/view_timeline.cc +++ b/third_party/blink/renderer/core/animation/view_timeline.cc
@@ -32,27 +32,6 @@ namespace { -double ComputeOffset(LayoutBox* subject_layout, - LayoutBox* source_layout, - ScrollOrientation physical_orientation) { - DCHECK(source_layout); - MapCoordinatesFlags flags = kIgnoreScrollOffset | kIgnoreTransforms; - gfx::PointF point = gfx::PointF(subject_layout->LocalToAncestorPoint( - PhysicalOffset(), source_layout, flags)); - - // We call LayoutObject::ClientLeft/Top directly and avoid - // Element::clientLeft/Top because: - // - // - We may reach this function during style resolution, - // and clientLeft/Top also attempt to update style/layout. - // - Those functions return the unzoomed values, and we require the zoomed - // values. - if (physical_orientation == kHorizontalScroll) - return point.x() - source_layout->ClientLeft().Round(); - else - return point.y() - source_layout->ClientTop().Round(); -} - bool IsBlockDirection(ViewTimeline::ScrollAxis axis, WritingMode writing_mode) { switch (axis) { case ViewTimeline::ScrollAxis::kBlock: @@ -310,31 +289,28 @@ // Any new call sites will require a similar safeguard. DCHECK(IsResolved()); DCHECK(subject()); - LayoutBox* layout_box = subject()->GetLayoutBox(); - DCHECK(layout_box); - DCHECK(CurrentAttachment()); - Element* source = CurrentAttachment()->ComputeSourceNoLayout(); - Node* resolved_source = ResolvedSource(); - DCHECK(source); - DCHECK(resolved_source); - LayoutBox* source_layout = resolved_source->GetLayoutBox(); - DCHECK(source_layout); + subject_position_ = SubjectPosition(); + subject_size_ = SubjectSize(); + + DCHECK(subject_position_); + target_offset_ = physical_orientation == kHorizontalScroll + ? subject_position_->x() + : subject_position_->y(); + + DCHECK(subject_size_); LayoutUnit viewport_size; - - target_offset_ = - ComputeOffset(layout_box, source_layout, physical_orientation); - if (physical_orientation == kHorizontalScroll) { - target_size_ = layout_box->Size().Width().ToDouble(); + target_size_ = subject_size_->Width().ToDouble(); viewport_size = scrollable_area->LayoutContentRect().Width(); } else { - target_size_ = layout_box->Size().Height().ToDouble(); + target_size_ = subject_size_->Height().ToDouble(); viewport_size = scrollable_area->LayoutContentRect().Height(); } - viewport_size_ = viewport_size.ToDouble(); + Element* source = CurrentAttachment()->ComputeSourceNoLayout(); + DCHECK(source); TimelineInset inset = ResolveAuto(GetInset(), *source, GetAxis()); // Update inset lengths if style dependent. @@ -364,16 +340,44 @@ double start_offset = target_offset_ - viewport_size_ + end_side_inset_; double end_offset = target_offset_ + target_size_ - start_side_inset_; - if (start_offset != start_offset_ || end_offset != end_offset_) { - start_offset_ = start_offset; - end_offset_ = end_offset; + return absl::make_optional<ScrollOffsets>(start_offset, end_offset); +} - for (auto animation : GetAnimations()) { - animation->InvalidateNormalizedTiming(); - } +absl::optional<LayoutSize> ViewTimeline::SubjectSize() const { + if (!subject()) { + return absl::nullopt; + } + LayoutBox* subject_layout_box = subject()->GetLayoutBox(); + if (!subject_layout_box) { + return absl::nullopt; } - return absl::make_optional<ScrollOffsets>(start_offset, end_offset); + return subject_layout_box->Size(); +} + +absl::optional<gfx::PointF> ViewTimeline::SubjectPosition() const { + if (!subject() || !ResolvedSource()) { + return absl::nullopt; + } + LayoutBox* subject_layout_box = subject()->GetLayoutBox(); + LayoutBox* source_layout_box = ResolvedSource()->GetLayoutBox(); + if (!subject_layout_box || !source_layout_box) { + return absl::nullopt; + } + MapCoordinatesFlags flags = kIgnoreScrollOffset | kIgnoreTransforms; + gfx::PointF subject_pos = + gfx::PointF(subject_layout_box->LocalToAncestorPoint( + PhysicalOffset(), source_layout_box, flags)); + + // We call LayoutObject::ClientLeft/Top directly and avoid + // Element::clientLeft/Top because: + // + // - We may reach this function during style resolution, + // and clientLeft/Top also attempt to update style/layout. + // - Those functions return the unzoomed values, and we require the zoomed + // values. + return gfx::PointF(subject_pos.x() - source_layout_box->ClientLeft().Round(), + subject_pos.y() - source_layout_box->ClientTop().Round()); } // https://www.w3.org/TR/scroll-animations-1/#named-range-getTime @@ -579,16 +583,31 @@ void ViewTimeline::UpdateSnapshot() { ScrollTimeline::UpdateSnapshot(); - ResolveTimelineOffsets(false); + ResolveTimelineOffsets(); } -bool ViewTimeline::ValidateSnapshot() { - bool valid_snapshot = ScrollTimeline::ValidateSnapshot(); - bool has_keyframe_update = ResolveTimelineOffsets(true); - return valid_snapshot && !has_keyframe_update; +bool ViewTimeline::ValidateTimelineOffsets() { + bool has_keyframe_update = ResolveTimelineOffsets(); + return !has_keyframe_update; } -bool ViewTimeline::ResolveTimelineOffsets(bool invalidate_effect) const { +bool ViewTimeline::CheckIfNeedsValidation() { + if (ScrollTimeline::CheckIfNeedsValidation()) { + return true; + } + + if (subject_size_ != SubjectSize()) { + return true; + } + + if (subject_position_ != SubjectPosition()) { + return true; + } + + return false; +} + +bool ViewTimeline::ResolveTimelineOffsets() const { bool has_keyframe_update = false; for (Animation* animation : GetAnimations()) { if (auto* effect = DynamicTo<KeyframeEffect>(animation->effect())) { @@ -602,9 +621,6 @@ : 1; if (effect->Model()->ResolveTimelineOffsets(range_start, range_end)) { has_keyframe_update = true; - if (invalidate_effect) { - animation->InvalidateEffectTargetStyle(); - } } } } @@ -621,7 +637,7 @@ void ViewTimeline::FlushStyleUpdate() { ScrollTimeline::FlushStyleUpdate(); - ResolveTimelineOffsets(/* invalidate_effect */ false); + ResolveTimelineOffsets(); } void ViewTimeline::Trace(Visitor* visitor) const {
diff --git a/third_party/blink/renderer/core/animation/view_timeline.h b/third_party/blink/renderer/core/animation/view_timeline.h index afd3fec..7d0951e 100644 --- a/third_party/blink/renderer/core/animation/view_timeline.h +++ b/third_party/blink/renderer/core/animation/view_timeline.h
@@ -10,6 +10,7 @@ #include "third_party/blink/renderer/core/animation/scroll_timeline.h" #include "third_party/blink/renderer/core/animation/timeline_inset.h" #include "third_party/blink/renderer/core/core_export.h" +#include "third_party/blink/renderer/core/layout/layout_box.h" #include "third_party/blink/renderer/platform/bindings/script_wrappable.h" namespace blink { @@ -66,7 +67,7 @@ CSSNumericValue* startOffset() const; CSSNumericValue* endOffset() const; - bool ResolveTimelineOffsets(bool invalidate_effect) const; + bool ResolveTimelineOffsets() const; Animation* Play(AnimationEffect*, ExceptionState& = ASSERT_NO_EXCEPTION) override; @@ -80,7 +81,12 @@ // ScrollSnapshotClient: void UpdateSnapshot() override; - bool ValidateSnapshot() override; + bool CheckIfNeedsValidation() override; + + bool ValidateTimelineOffsets() override; + + absl::optional<LayoutSize> SubjectSize() const; + absl::optional<gfx::PointF> SubjectPosition() const; void FlushStyleUpdate() override; @@ -91,8 +97,11 @@ mutable double viewport_size_; mutable double start_side_inset_; mutable double end_side_inset_; - mutable double start_offset_ = 0; - mutable double end_offset_ = 0; + // Cache values for post-layout validation check. If the subject position or + // size changes, then the range boundaries are stale. + mutable absl::optional<LayoutSize> subject_size_; + mutable absl::optional<gfx::PointF> subject_position_; + // If either of the following elements are non-null, we need to update // |inset_| on a style change. Member<const CSSValue> style_dependant_start_inset_;
diff --git a/third_party/blink/renderer/core/css/css_properties.json5 b/third_party/blink/renderer/core/css/css_properties.json5 index aeaf16e..875329b4 100644 --- a/third_party/blink/renderer/core/css/css_properties.json5 +++ b/third_party/blink/renderer/core/css/css_properties.json5
@@ -4948,6 +4948,7 @@ computable: false, valid_for_formatted_text: true, valid_for_formatted_text_run: true, + valid_for_highlight: true, }, { name: "text-underline-position",
diff --git a/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc b/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc index 08d82e2..b4498858 100644 --- a/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc +++ b/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc
@@ -4120,10 +4120,7 @@ return ConsumeIdent(range); } - CSSValue* baseline = RuntimeEnabledFeatures::CSSLastBaselineEnabled() - ? ConsumeBaseline(range) - : ConsumeFirstBaseline(range); - if (baseline) { + if (CSSValue* baseline = ConsumeBaseline(range)) { return baseline; }
diff --git a/third_party/blink/renderer/core/css/style_engine.cc b/third_party/blink/renderer/core/css/style_engine.cc index fa7edb6..a360a0cc 100644 --- a/third_party/blink/renderer/core/css/style_engine.cc +++ b/third_party/blink/renderer/core/css/style_engine.cc
@@ -127,6 +127,54 @@ return MakeGarbageCollected<CSSFontSelector>(document); } +enum RuleSetFlags { + kFontFaceRules = 1 << 0, + kKeyframesRules = 1 << 1, + kFullRecalcRules = 1 << 2, + kPropertyRules = 1 << 3, + kCounterStyleRules = 1 << 4, + kLayerRules = 1 << 5, + kFontPaletteValuesRules = 1 << 6, + kPositionFallbackRules = 1 << 7, + kFontFeatureValuesRules = 1 << 8 +}; + +const unsigned kRuleSetFlagsAll = ~0u; + +unsigned GetRuleSetFlags(const HeapHashSet<Member<RuleSet>> rule_sets) { + unsigned flags = 0; + for (auto& rule_set : rule_sets) { + if (!rule_set->KeyframesRules().empty()) { + flags |= kKeyframesRules; + } + if (!rule_set->FontFaceRules().empty()) { + flags |= kFontFaceRules; + } + if (!rule_set->FontPaletteValuesRules().empty()) { + flags |= kFontPaletteValuesRules; + } + if (!rule_set->FontFeatureValuesRules().empty()) { + flags |= kFontFeatureValuesRules; + } + if (rule_set->NeedsFullRecalcForRuleSetInvalidation()) { + flags |= kFullRecalcRules; + } + if (!rule_set->PropertyRules().empty()) { + flags |= kPropertyRules; + } + if (!rule_set->CounterStyleRules().empty()) { + flags |= kCounterStyleRules; + } + if (rule_set->HasCascadeLayers()) { + flags |= kLayerRules; + } + if (!rule_set->PositionFallbackRules().empty()) { + flags |= kPositionFallbackRules; + } + } + return flags; +} + } // namespace StyleEngine::StyleEngine(Document& document) @@ -440,7 +488,6 @@ global_rule_set_->DocumentRulesSelectorsRuleSet(); DCHECK_NE(old_rule_set, new_rule_set); - const unsigned changed_rule_flags = 0; HeapHashSet<Member<RuleSet>> changed_rule_sets; if (old_rule_set) { changed_rule_sets.insert(old_rule_set); @@ -449,6 +496,7 @@ changed_rule_sets.insert(new_rule_set); } + const unsigned changed_rule_flags = GetRuleSetFlags(changed_rule_sets); InvalidateForRuleSetChanges(GetDocument(), changed_rule_sets, changed_rule_flags, kInvalidateAllScopes); @@ -2244,58 +2292,6 @@ } } -namespace { - -enum RuleSetFlags { - kFontFaceRules = 1 << 0, - kKeyframesRules = 1 << 1, - kFullRecalcRules = 1 << 2, - kPropertyRules = 1 << 3, - kCounterStyleRules = 1 << 4, - kLayerRules = 1 << 5, - kFontPaletteValuesRules = 1 << 6, - kPositionFallbackRules = 1 << 7, - kFontFeatureValuesRules = 1 << 8 -}; - -const unsigned kRuleSetFlagsAll = ~0u; - -unsigned GetRuleSetFlags(const HeapHashSet<Member<RuleSet>> rule_sets) { - unsigned flags = 0; - for (auto& rule_set : rule_sets) { - if (!rule_set->KeyframesRules().empty()) { - flags |= kKeyframesRules; - } - if (!rule_set->FontFaceRules().empty()) { - flags |= kFontFaceRules; - } - if (!rule_set->FontPaletteValuesRules().empty()) { - flags |= kFontPaletteValuesRules; - } - if (!rule_set->FontFeatureValuesRules().empty()) { - flags |= kFontFeatureValuesRules; - } - if (rule_set->NeedsFullRecalcForRuleSetInvalidation()) { - flags |= kFullRecalcRules; - } - if (!rule_set->PropertyRules().empty()) { - flags |= kPropertyRules; - } - if (!rule_set->CounterStyleRules().empty()) { - flags |= kCounterStyleRules; - } - if (rule_set->HasCascadeLayers()) { - flags |= kLayerRules; - } - if (!rule_set->PositionFallbackRules().empty()) { - flags |= kPositionFallbackRules; - } - } - return flags; -} - -} // namespace - void StyleEngine::InvalidateForRuleSetChanges( TreeScope& tree_scope, const HeapHashSet<Member<RuleSet>>& changed_rule_sets,
diff --git a/third_party/blink/renderer/core/dom/range.cc b/third_party/blink/renderer/core/dom/range.cc index f874e0d..7df78ca 100644 --- a/third_party/blink/renderer/core/dom/range.cc +++ b/third_party/blink/renderer/core/dom/range.cc
@@ -718,14 +718,25 @@ break; ancestors.push_back(runner); } + // Both https://dom.spec.whatwg.org/#concept-range-clone and + // https://dom.spec.whatwg.org/#concept-range-extract specify (in various + // ways) that nodes are to be processed in tree order. But the algorithm below + // processes in depth first order instead. So clone the nodes first here, + // in reverse order, so upgrades happen in the proper order. + HeapVector<Member<Node>> cloned_ancestors(ancestors.size(), nullptr); + auto clone_ptr = cloned_ancestors.rbegin(); + for (auto it = ancestors.rbegin(); it != ancestors.rend(); ++it) { + *(clone_ptr++) = (*it)->cloneNode(false); + } Node* first_child_in_ancestor_to_process = direction == kProcessContentsForward ? container->nextSibling() : container->previousSibling(); - for (const auto& ancestor : ancestors) { + for (wtf_size_t i = 0; i < ancestors.size(); ++i) { + const auto& ancestor = ancestors[i]; if (action == kExtractContents || action == kCloneContents) { // Might have been removed already during mutation event. - if (Node* cloned_ancestor = ancestor->cloneNode(false)) { + if (auto cloned_ancestor = cloned_ancestors[i]) { cloned_ancestor->appendChild(cloned_container, exception_state); cloned_container = cloned_ancestor; }
diff --git a/third_party/blink/renderer/core/frame/frame_test.cc b/third_party/blink/renderer/core/frame/frame_test.cc index 1d2dfb6..50167e8 100644 --- a/third_party/blink/renderer/core/frame/frame_test.cc +++ b/third_party/blink/renderer/core/frame/frame_test.cc
@@ -270,17 +270,13 @@ &GetDocument(), GetDocument().ScrollingElementNoLayout(), ScrollTimeline::ScrollAxis::kBlock, TimelineAttachment::kLocal); - EXPECT_EQ(GetDocument() - .GetFrame() - ->GetUnvalidatedScrollSnapshotClientsForTesting() - .size(), - 1U); + EXPECT_EQ( + GetDocument().GetFrame()->GetScrollSnapshotClientsForTesting().size(), + 1U); NavigateSameDomain("page1"); - EXPECT_EQ(GetDocument() - .GetFrame() - ->GetUnvalidatedScrollSnapshotClientsForTesting() - .size(), - 0U); + EXPECT_EQ( + GetDocument().GetFrame()->GetScrollSnapshotClientsForTesting().size(), + 0U); } } // namespace blink
diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc index 6e42161..833fd0b 100644 --- a/third_party/blink/renderer/core/frame/local_frame.cc +++ b/third_party/blink/renderer/core/frame/local_frame.cc
@@ -429,7 +429,6 @@ visitor->Trace(mojo_handler_); visitor->Trace(text_fragment_handler_); visitor->Trace(scroll_snapshot_clients_); - visitor->Trace(unvalidated_scroll_snapshot_clients_); visitor->Trace(saved_scroll_offsets_); visitor->Trace(background_color_paint_image_generator_); visitor->Trace(box_shadow_paint_image_generator_); @@ -3475,7 +3474,6 @@ void LocalFrame::AddScrollSnapshotClient(ScrollSnapshotClient& client) { scroll_snapshot_clients_.insert(&client); - unvalidated_scroll_snapshot_clients_.insert(&client); } void LocalFrame::UpdateScrollSnapshots() { @@ -3487,15 +3485,14 @@ bool LocalFrame::ValidateScrollSnapshotClients() { bool valid = true; - for (auto& client : unvalidated_scroll_snapshot_clients_) - valid &= client->ValidateSnapshot(); - unvalidated_scroll_snapshot_clients_.clear(); + for (auto& client : scroll_snapshot_clients_) { + valid &= client->ValidateSnapshotIfNeeded(); + } return valid; } void LocalFrame::ClearScrollSnapshotClients() { scroll_snapshot_clients_.clear(); - unvalidated_scroll_snapshot_clients_.clear(); } void LocalFrame::ScheduleNextServiceForScrollSnapshotClients() {
diff --git a/third_party/blink/renderer/core/frame/local_frame.h b/third_party/blink/renderer/core/frame/local_frame.h index 9bd4cec..3d2e44d5 100644 --- a/third_party/blink/renderer/core/frame/local_frame.h +++ b/third_party/blink/renderer/core/frame/local_frame.h
@@ -839,7 +839,10 @@ // All newly created ScrollSnapshotClients are considered "unvalidated". This // means that the internal state of the client is considered tentative, and // computing the actual state may require an additional style/layout pass. - // + // ScrollSnapshotClients may be marked as unvalidated if a style or layout + // change suggests that the snapshot is stale. This additional check is + // expected to be lightweight since run once per frame. + // The lifecycle update will call this function after style and layout has // completed. The function will then go though all unvalidated clients, // and compare the current state snapshot to a fresh state snapshot. If they @@ -856,8 +859,8 @@ void ClearScrollSnapshotClients(); const HeapHashSet<WeakMember<ScrollSnapshotClient>>& - GetUnvalidatedScrollSnapshotClientsForTesting() { - return unvalidated_scroll_snapshot_clients_; + GetScrollSnapshotClientsForTesting() { + return scroll_snapshot_clients_; } void ScheduleNextServiceForScrollSnapshotClients(); @@ -1092,9 +1095,6 @@ // be registered at the actual elements as the references here are weak. HeapHashSet<WeakMember<ScrollSnapshotClient>> scroll_snapshot_clients_; - HeapHashSet<WeakMember<ScrollSnapshotClient>> - unvalidated_scroll_snapshot_clients_; - // Set lazily, when the browser asks to host a resource cache in this frame. Member<ResourceCacheImpl> resource_cache_;
diff --git a/third_party/blink/renderer/core/layout/layout_theme_default.cc b/third_party/blink/renderer/core/layout/layout_theme_default.cc index e9a3d0b5f..ae79d13 100644 --- a/third_party/blink/renderer/core/layout/layout_theme_default.cc +++ b/third_party/blink/renderer/core/layout/layout_theme_default.cc
@@ -24,6 +24,7 @@ #include "third_party/blink/renderer/core/layout/layout_theme_default.h" +#include "third_party/blink/public/common/renderer_preferences/renderer_preferences.h" #include "third_party/blink/public/platform/web_theme_engine.h" #include "third_party/blink/public/resources/grit/blink_resources.h" #include "third_party/blink/renderer/core/css_value_keywords.h" @@ -46,13 +47,13 @@ static const float kMaxCancelButtonSize = 21; Color LayoutThemeDefault::active_selection_background_color_ = - Color::FromRGBA32(0xFF1967D2); + Color::FromRGBA32(kDefaultActiveSelectionBgColor); Color LayoutThemeDefault::active_selection_foreground_color_ = - Color::FromRGBA32(0xFF000000); + Color::FromRGBA32(kDefaultActiveSelectionFgColor); Color LayoutThemeDefault::inactive_selection_background_color_ = - Color::FromRGBA32(0xFFC8C8C8); + Color::FromRGBA32(kDefaultInactiveSelectionBgColor); Color LayoutThemeDefault::inactive_selection_foreground_color_ = - Color::FromRGBA32(0xFF323232); + Color::FromRGBA32(kDefaultInactiveSelectionFgColor); Color LayoutThemeDefault::active_list_box_selection_background_color_dark_mode_ = Color::FromRGBA32(0xFF99C8FF);
diff --git a/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.cc index 15a5352..d28a74b 100644 --- a/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.cc
@@ -22,6 +22,7 @@ #include "third_party/blink/renderer/core/layout/ng/ng_box_fragment.h" #include "third_party/blink/renderer/core/layout/ng/ng_constraint_space.h" #include "third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h" +#include "third_party/blink/renderer/core/layout/ng/ng_disable_side_effects_scope.h" #include "third_party/blink/renderer/core/layout/ng/ng_fragment.h" #include "third_party/blink/renderer/core/layout/ng/ng_layout_input_node.h" #include "third_party/blink/renderer/core/layout/ng/ng_length_utils.h" @@ -835,6 +836,10 @@ if (!layout_result) { NGConstraintSpace child_space = BuildSpaceForIntrinsicBlockSize( child, max_content_contribution, phase); + absl::optional<NGDisableSideEffectsScope> disable_side_effects; + if (phase != Phase::kLayout && !Node().GetLayoutBox()->NeedsLayout()) { + disable_side_effects.emplace(); + } layout_result = child.Layout(child_space, /* break_token */ nullptr); DCHECK(layout_result); }
diff --git a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc index 8b1ca01..ea8cf277 100644 --- a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc
@@ -1498,8 +1498,7 @@ void NGGridLayoutAlgorithm::CalculateAlignmentBaselines( const NGGridSizingSubtree& sizing_subtree, GridTrackSizingDirection track_direction, - SizingConstraint sizing_constraint, - bool* needs_additional_pass) const { + SizingConstraint sizing_constraint) const { auto& sizing_data = sizing_subtree.SubtreeRootData(); auto& track_collection = @@ -1520,16 +1519,11 @@ const auto space = CreateConstraintSpaceForLayout( grid_item, sizing_data.layout_data, &unused_grid_area); - // We cannot apply some of the baseline alignment rules for synthesized - // baselines until layout has been performed. However, layout cannot - // be performed in certain scenarios. So force an additional pass in - // these cases and skip layout for now. + // Skip this item if we aren't able to resolve our inline size. const auto& item_style = grid_item.node.Style(); if (InlineLengthUnresolvable(space, item_style.LogicalWidth()) || InlineLengthUnresolvable(space, item_style.LogicalMinWidth()) || InlineLengthUnresolvable(space, item_style.LogicalMaxWidth())) { - if (needs_additional_pass) - *needs_additional_pass = true; continue; } @@ -1770,7 +1764,7 @@ // Cache baselines, as these contributions can influence track sizing CalculateAlignmentBaselines(sizing_subtree, track_direction, - sizing_constraint, opt_needs_additional_pass); + sizing_constraint); // 2. Resolve intrinsic track sizing functions to absolute lengths. if (track_collection.HasIntrinsicTrack()) {
diff --git a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.h index 931d00c4..bd3a954 100644 --- a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.h +++ b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.h
@@ -114,11 +114,9 @@ // Determines the major/minor alignment baselines for each row/column based on // each item in |grid_items|, and stores the results in |track_collection|. - void CalculateAlignmentBaselines( - const NGGridSizingSubtree& sizing_subtree, - GridTrackSizingDirection track_direction, - SizingConstraint sizing_constraint, - bool* opt_needs_additional_pass = nullptr) const; + void CalculateAlignmentBaselines(const NGGridSizingSubtree& sizing_subtree, + GridTrackSizingDirection track_direction, + SizingConstraint sizing_constraint) const; std::unique_ptr<NGGridLayoutTrackCollection> CreateSubgridTrackCollection( const NGSubgriddedItemData& subgrid_data,
diff --git a/third_party/blink/renderer/core/scroll/scroll_snapshot_client.cc b/third_party/blink/renderer/core/scroll/scroll_snapshot_client.cc index 9a85a0d..867b566 100644 --- a/third_party/blink/renderer/core/scroll/scroll_snapshot_client.cc +++ b/third_party/blink/renderer/core/scroll/scroll_snapshot_client.cc
@@ -13,4 +13,13 @@ frame->AddScrollSnapshotClient(*this); } +bool ScrollSnapshotClient::ValidateSnapshotIfNeeded() { + bool valid = true; + if (force_validation_ || CheckIfNeedsValidation()) { + valid = ValidateSnapshot(); + } + force_validation_ = false; + return valid; +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/scroll/scroll_snapshot_client.h b/third_party/blink/renderer/core/scroll/scroll_snapshot_client.h index d1f5b62..c563a7b 100644 --- a/third_party/blink/renderer/core/scroll/scroll_snapshot_client.h +++ b/third_party/blink/renderer/core/scroll/scroll_snapshot_client.h
@@ -19,16 +19,30 @@ // update. virtual void UpdateSnapshot() = 0; - // Called for newly created clients only at layout clean and at most once per - // frame to handle clients created during style and layout recalc. - // Returns true if the client state is correct, or false otherwise. + // Called for clients marked as needed validation at layout clean and at most + // once per frame to handle changes during style and layout recalc. + // All new clients are marked as needing validation since the initial snapshot + // is tentative. Returns true if the client state is correct, or false + // otherwise. virtual bool ValidateSnapshot() = 0; // Compares the last snapshot with the current state, and returns true if a - // new animation frame should be schedules due to snapshot difference. + // new animation frame should be scheduled due to snapshot difference. virtual bool ShouldScheduleNextService() = 0; virtual bool IsAnchorScrollData() const { return false; } + + // Performs a lightweight check at layout clean to determine if the client + // state requires snapshot validation. Called once per animation frame. + // https://github.com/w3c/csswg-drafts/issues/8694 + virtual bool CheckIfNeedsValidation() { return false; } + + // Conditionally performs snapshot validation. Returns true if the client + // state is correct, or false otherwise. + bool ValidateSnapshotIfNeeded(); + + private: + bool force_validation_ = true; }; } // namespace blink
diff --git a/third_party/blink/renderer/core/speculation_rules/speculation_rule_set_test.cc b/third_party/blink/renderer/core/speculation_rules/speculation_rule_set_test.cc index 8677087..90e2607c 100644 --- a/third_party/blink/renderer/core/speculation_rules/speculation_rule_set_test.cc +++ b/third_party/blink/renderer/core/speculation_rules/speculation_rule_set_test.cc
@@ -3741,6 +3741,19 @@ }); } +// Regression test, since the universal select sets rule set flags indicating +// that the rule set potentially invalidates all elements. +TEST_F(DocumentRulesTest, UniversalSelector) { + ScopedSpeculationRulesDocumentRulesSelectorMatchesForTest + enable_selector_matches{true}; + DummyPageHolder page_holder; + page_holder.GetFrame().GetSettings()->SetScriptEnabled(true); + StubSpeculationHost speculation_host; + InsertSpeculationRules( + page_holder.GetDocument(), + R"({"prefetch": [{"source":"document", "where":{"selector_matches":"*"}}]})"); +} + TEST_F(SpeculationRuleSetTest, EagernessRuntimeEnabledFlag) { ScopedSpeculationRulesEagernessForTest enable_eagerness{false};
diff --git a/third_party/blink/renderer/core/streams/readable_stream_default_controller_with_script_scope.cc b/third_party/blink/renderer/core/streams/readable_stream_default_controller_with_script_scope.cc index 7ef1839..2b6640c 100644 --- a/third_party/blink/renderer/core/streams/readable_stream_default_controller_with_script_scope.cc +++ b/third_party/blink/renderer/core/streams/readable_stream_default_controller_with_script_scope.cc
@@ -33,10 +33,15 @@ if (!controller_) return; - ScriptState::Scope scope(script_state_); - if (ReadableStreamDefaultController::CanCloseOrEnqueue(controller_)) { - ReadableStreamDefaultController::Close(script_state_, controller_); + if (script_state_->ContextIsValid()) { + ScriptState::Scope scope(script_state_); + ReadableStreamDefaultController::Close(script_state_, controller_); + } else { + // If the context is not valid then Close() will not try to resolve the + // promises, and that is not a problem. + ReadableStreamDefaultController::Close(script_state_, controller_); + } } controller_ = nullptr; }
diff --git a/third_party/blink/renderer/modules/shared_storage/shared_storage.cc b/third_party/blink/renderer/modules/shared_storage/shared_storage.cc index 828d90cd..337933d 100644 --- a/third_party/blink/renderer/modules/shared_storage/shared_storage.cc +++ b/third_party/blink/renderer/modules/shared_storage/shared_storage.cc
@@ -126,10 +126,13 @@ ScriptState* script_state = resolver->GetScriptState(); if (!success) { - ScriptState::Scope scope(script_state); - resolver->Reject(V8ThrowDOMException::CreateOrEmpty( - script_state->GetIsolate(), DOMExceptionCode::kOperationError, - error_message)); + if (IsInParallelAlgorithmRunnable(resolver->GetExecutionContext(), + script_state)) { + ScriptState::Scope scope(script_state); + resolver->Reject(V8ThrowDOMException::CreateOrEmpty( + script_state->GetIsolate(), DOMExceptionCode::kOperationError, + error_message)); + } if (caller == blink::SharedStorageVoidOperation::kRun) { LogSharedStorageWorkletError( SharedStorageWorkletErrorType::kRunWebVisible); @@ -420,10 +423,13 @@ ScriptState* script_state = resolver->GetScriptState(); if (status == mojom::blink::SharedStorageGetStatus::kError) { - ScriptState::Scope scope(script_state); - resolver->Reject(V8ThrowDOMException::CreateOrEmpty( - script_state->GetIsolate(), - DOMExceptionCode::kOperationError, error_message)); + if (IsInParallelAlgorithmRunnable( + resolver->GetExecutionContext(), script_state)) { + ScriptState::Scope scope(script_state); + resolver->Reject(V8ThrowDOMException::CreateOrEmpty( + script_state->GetIsolate(), + DOMExceptionCode::kOperationError, error_message)); + } return; } @@ -471,10 +477,13 @@ ScriptState* script_state = resolver->GetScriptState(); if (!success) { - ScriptState::Scope scope(script_state); - resolver->Reject(V8ThrowDOMException::CreateOrEmpty( - script_state->GetIsolate(), DOMExceptionCode::kOperationError, - error_message)); + if (IsInParallelAlgorithmRunnable(resolver->GetExecutionContext(), + script_state)) { + ScriptState::Scope scope(script_state); + resolver->Reject(V8ThrowDOMException::CreateOrEmpty( + script_state->GetIsolate(), + DOMExceptionCode::kOperationError, error_message)); + } return; } @@ -543,10 +552,13 @@ ScriptState* script_state = resolver->GetScriptState(); if (!success) { - ScriptState::Scope scope(script_state); - resolver->Reject(V8ThrowDOMException::CreateOrEmpty( - script_state->GetIsolate(), DOMExceptionCode::kOperationError, - error_message)); + if (IsInParallelAlgorithmRunnable(resolver->GetExecutionContext(), + script_state)) { + ScriptState::Scope scope(script_state); + resolver->Reject(V8ThrowDOMException::CreateOrEmpty( + script_state->GetIsolate(), + DOMExceptionCode::kOperationError, error_message)); + } return; } @@ -808,10 +820,13 @@ ScriptState* script_state = resolver->GetScriptState(); if (!success) { - ScriptState::Scope scope(script_state); - resolver->Reject(V8ThrowDOMException::CreateOrEmpty( - script_state->GetIsolate(), - DOMExceptionCode::kOperationError, error_message)); + if (IsInParallelAlgorithmRunnable( + resolver->GetExecutionContext(), script_state)) { + ScriptState::Scope scope(script_state); + resolver->Reject(V8ThrowDOMException::CreateOrEmpty( + script_state->GetIsolate(), + DOMExceptionCode::kOperationError, error_message)); + } LogSharedStorageWorkletError( SharedStorageWorkletErrorType::kSelectURLWebVisible); return;
diff --git a/third_party/blink/renderer/modules/shared_storage/shared_storage_worklet.cc b/third_party/blink/renderer/modules/shared_storage/shared_storage_worklet.cc index d27efc56..8df3023 100644 --- a/third_party/blink/renderer/modules/shared_storage/shared_storage_worklet.cc +++ b/third_party/blink/renderer/modules/shared_storage/shared_storage_worklet.cc
@@ -87,10 +87,14 @@ ScriptState* script_state = resolver->GetScriptState(); if (!success) { - ScriptState::Scope scope(script_state); - resolver->Reject(V8ThrowDOMException::CreateOrEmpty( - script_state->GetIsolate(), - DOMExceptionCode::kOperationError, error_message)); + if (IsInParallelAlgorithmRunnable( + resolver->GetExecutionContext(), script_state)) { + ScriptState::Scope scope(script_state); + resolver->Reject(V8ThrowDOMException::CreateOrEmpty( + script_state->GetIsolate(), + DOMExceptionCode::kOperationError, error_message)); + } + LogSharedStorageWorkletError( SharedStorageWorkletErrorType::kAddModuleWebVisible); return;
diff --git a/third_party/blink/renderer/modules/smart_card/smart_card_connection.cc b/third_party/blink/renderer/modules/smart_card/smart_card_connection.cc index 3aa70ce..fce373a7c 100644 --- a/third_party/blink/renderer/modules/smart_card/smart_card_connection.cc +++ b/third_party/blink/renderer/modules/smart_card/smart_card_connection.cc
@@ -6,8 +6,29 @@ #include "base/notreached.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_smart_card_disposition.h" +#include "third_party/blink/renderer/modules/smart_card/smart_card_error.h" namespace blink { +namespace { +constexpr char kOperationInProgress[] = "An operation is in progress."; +constexpr char kDisconnected[] = "Is disconnected."; + +using device::mojom::blink::SmartCardDisposition; + +SmartCardDisposition ToMojomDisposition( + const V8SmartCardDisposition& disposition) { + switch (disposition.AsEnum()) { + case V8SmartCardDisposition::Enum::kLeave: + return SmartCardDisposition::kLeave; + case V8SmartCardDisposition::Enum::kReset: + return SmartCardDisposition::kReset; + case V8SmartCardDisposition::Enum::kUnpower: + return SmartCardDisposition::kUnpower; + case V8SmartCardDisposition::Enum::kEject: + return SmartCardDisposition::kEject; + } +} +} // anonymous namespace SmartCardConnection::SmartCardConnection( mojo::PendingRemote<device::mojom::blink::SmartCardConnection> @@ -19,9 +40,33 @@ execution_context->GetTaskRunner(TaskType::kMiscPlatformAPI)); } -ScriptPromise SmartCardConnection::disconnect(const V8SmartCardDisposition&) { - NOTIMPLEMENTED(); - return ScriptPromise(); +ScriptPromise SmartCardConnection::disconnect(ScriptState* script_state, + ExceptionState& exception_state) { + return disconnect( + script_state, + V8SmartCardDisposition(V8SmartCardDisposition::Enum::kLeave), + exception_state); +} + +ScriptPromise SmartCardConnection::disconnect( + ScriptState* script_state, + const V8SmartCardDisposition& disposition, + ExceptionState& exception_state) { + if (!EnsureNoOperationInProgress(exception_state) || + !EnsureConnection(exception_state)) { + return ScriptPromise(); + } + + ScriptPromiseResolver* resolver = MakeGarbageCollected<ScriptPromiseResolver>( + script_state, exception_state.GetContext()); + + operation_in_progress_ = true; + connection_->Disconnect( + ToMojomDisposition(disposition), + WTF::BindOnce(&SmartCardConnection::OnDisconnectDone, + WrapPersistent(this), WrapPersistent(resolver))); + + return resolver->Promise(); } ScriptPromise SmartCardConnection::status() { @@ -34,4 +79,42 @@ ScriptWrappable::Trace(visitor); } +bool SmartCardConnection::EnsureNoOperationInProgress( + ExceptionState& exception_state) const { + if (operation_in_progress_) { + exception_state.ThrowDOMException(DOMExceptionCode::kInvalidStateError, + kOperationInProgress); + return false; + } + return true; +} + +bool SmartCardConnection::EnsureConnection( + ExceptionState& exception_state) const { + if (!connection_.is_bound()) { + exception_state.ThrowDOMException(DOMExceptionCode::kInvalidStateError, + kDisconnected); + return false; + } + return true; +} + +void SmartCardConnection::OnDisconnectDone( + ScriptPromiseResolver* resolver, + device::mojom::blink::SmartCardResultPtr result) { + CHECK(operation_in_progress_); + operation_in_progress_ = false; + + if (result->is_error()) { + auto* error = SmartCardError::Create(result->get_error()); + resolver->Reject(error); + return; + } + + CHECK(connection_.is_bound()); + connection_.reset(); + + resolver->Resolve(); +} + } // namespace blink
diff --git a/third_party/blink/renderer/modules/smart_card/smart_card_connection.h b/third_party/blink/renderer/modules/smart_card/smart_card_connection.h index 9798bd63..29dcee97 100644 --- a/third_party/blink/renderer/modules/smart_card/smart_card_connection.h +++ b/third_party/blink/renderer/modules/smart_card/smart_card_connection.h
@@ -7,6 +7,7 @@ #include "services/device/public/mojom/smart_card.mojom-blink.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise.h" +#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/platform/bindings/script_wrappable.h" @@ -25,13 +26,23 @@ ExecutionContext*); // SmartCardConnection idl - ScriptPromise disconnect(const V8SmartCardDisposition& disposition); + ScriptPromise disconnect(ScriptState* script_state, + ExceptionState& exception_state); + ScriptPromise disconnect(ScriptState* script_state, + const V8SmartCardDisposition& disposition, + ExceptionState& exception_state); ScriptPromise status(); // ScriptWrappable overrides void Trace(Visitor*) const override; private: + bool EnsureNoOperationInProgress(ExceptionState& exception_state) const; + bool EnsureConnection(ExceptionState& exception_state) const; + void OnDisconnectDone(ScriptPromiseResolver* resolver, + device::mojom::blink::SmartCardResultPtr result); + + bool operation_in_progress_ = false; HeapMojoRemote<device::mojom::blink::SmartCardConnection> connection_; };
diff --git a/third_party/blink/renderer/modules/smart_card/smart_card_connection.idl b/third_party/blink/renderer/modules/smart_card/smart_card_connection.idl index fff6ac9..c767a644 100644 --- a/third_party/blink/renderer/modules/smart_card/smart_card_connection.idl +++ b/third_party/blink/renderer/modules/smart_card/smart_card_connection.idl
@@ -17,6 +17,7 @@ SecureContext, IsolatedContext ] interface SmartCardConnection { + [CallWith=ScriptState, RaisesException] Promise<void> disconnect(optional SmartCardDisposition disposition = "leave"); Promise<SmartCardConnectionStatus> status();
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index 91d0e74..238c4fd6 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -909,11 +909,6 @@ base_feature: "none", }, { - name: "CSSLastBaseline", - status: "stable", - base_feature: "none", - }, - { name: "CSSLayoutAPI", status: "experimental", base_feature: "none", @@ -3814,6 +3809,12 @@ base_feature: "none", }, { + name: "WebEnvironmentIntegrity", + status: "experimental", + base_feature: "none", + origin_trial_feature_name: "WebEnvironmentIntegrity", + }, + { name: "WebFontResizeLCP", status: "experimental", },
diff --git a/third_party/blink/tools/blinkpy/w3c/wpt_results_processor.py b/third_party/blink/tools/blinkpy/w3c/wpt_results_processor.py index a4f8e14..864c44d 100644 --- a/third_party/blink/tools/blinkpy/w3c/wpt_results_processor.py +++ b/third_party/blink/tools/blinkpy/w3c/wpt_results_processor.py
@@ -293,6 +293,13 @@ } self.has_regressions: bool = False + def recreate_artifacts_dir(self): + if self.fs.exists(self.artifacts_dir): + self.fs.rmtree(self.artifacts_dir) + self.fs.maybe_make_directory(self.artifacts_dir) + self._copy_results_viewer() + _log.info('Recreated artifacts directory (%s)', self.artifacts_dir) + def _copy_results_viewer(self): files_to_copy = ['results.html', 'results.html.version'] for file in files_to_copy: @@ -384,7 +391,7 @@ before this manager exited; a well-behaved caller should avoid this. """ - self._copy_results_viewer() + self.recreate_artifacts_dir() events = queue.SimpleQueue() worker = threading.Thread(target=self._consume_events, args=(events, ),
diff --git a/third_party/blink/tools/blinkpy/web_tests/controllers/manager.py b/third_party/blink/tools/blinkpy/web_tests/controllers/manager.py index 16c1eef..cdb39cb 100644 --- a/third_party/blink/tools/blinkpy/web_tests/controllers/manager.py +++ b/third_party/blink/tools/blinkpy/web_tests/controllers/manager.py
@@ -384,6 +384,48 @@ return any( self._is_http_test(test_name) for test_name in test_names) + def _rename_results_folder(self): + try: + timestamp = time.strftime( + "%Y-%m-%d-%H-%M-%S", + time.localtime( + self._filesystem.mtime( + self._filesystem.join(self._artifacts_directory, + 'results.html')))) + except (IOError, OSError) as error: + # It might be possible that results.html was not generated in previous run, because the test + # run was interrupted even before testing started. In those cases, don't archive the folder. + # Simply override the current folder contents with new results. + import errno + if error.errno in (errno.EEXIST, errno.ENOENT): + self._printer.write_update( + 'No results.html file found in previous run, skipping it.') + return None + archived_name = ''.join((self._filesystem.basename( + self._artifacts_directory), '_', timestamp)) + archived_path = self._filesystem.join( + self._filesystem.dirname(self._artifacts_directory), archived_name) + self._filesystem.move(self._artifacts_directory, archived_path) + + def _delete_dirs(self, dir_list): + for dir_path in dir_list: + self._filesystem.rmtree(dir_path) + + def _limit_archived_results_count(self): + results_directory_path = self._filesystem.dirname( + self._artifacts_directory) + file_list = self._filesystem.listdir(results_directory_path) + results_directories = [] + for name in file_list: + file_path = self._filesystem.join(results_directory_path, name) + if (self._filesystem.isdir(file_path) + and self._artifacts_directory in file_path): + results_directories.append(file_path) + results_directories.sort(key=self._filesystem.mtime) + self._printer.write_update('Clobbering excess archived results in %s' % + results_directory_path) + self._delete_dirs(results_directories[:-self.ARCHIVED_RESULTS_LIMIT]) + def _set_up_run(self, test_names): self._printer.write_update('Checking build ...') if self._options.build: @@ -394,11 +436,11 @@ return exit_code if self._options.clobber_old_results: - self._port.clobber_old_results() + self._clobber_old_results() elif self._filesystem.exists(self._artifacts_directory): - self._port.limit_archived_results_count() + self._limit_archived_results_count() # Rename the existing results folder for archiving. - self._port.rename_results_folder() + self._rename_results_folder() # Create the output directory if it doesn't already exist. self._port.host.filesystem.maybe_make_directory( @@ -541,6 +583,25 @@ test_to_crash_failure[test].create_artifacts( test_result.artifacts, force_overwrite=True) + def _clobber_old_results(self): + dir_above_results_path = self._filesystem.dirname( + self._artifacts_directory) + self._printer.write_update( + 'Clobbering old results in %s.' % dir_above_results_path) + if not self._filesystem.exists(dir_above_results_path): + return + file_list = self._filesystem.listdir(dir_above_results_path) + results_directories = [] + for name in file_list: + file_path = self._filesystem.join(dir_above_results_path, name) + if (self._filesystem.isdir(file_path) + and self._artifacts_directory in file_path): + results_directories.append(file_path) + self._delete_dirs(results_directories) + + # Port specific clean-up. + self._port.clobber_old_port_specific_results() + def _tests_to_retry(self, run_results): # TODO(ojan): This should also check that result.type != test_expectations.MISSING # since retrying missing expectations is silly. But that's a bit tricky since we
diff --git a/third_party/blink/tools/blinkpy/web_tests/controllers/manager_unittest.py b/third_party/blink/tools/blinkpy/web_tests/controllers/manager_unittest.py index 5f1de6de..02a9a77 100644 --- a/third_party/blink/tools/blinkpy/web_tests/controllers/manager_unittest.py +++ b/third_party/blink/tools/blinkpy/web_tests/controllers/manager_unittest.py
@@ -140,6 +140,85 @@ manager = get_manager() manager._look_for_new_crash_logs(run_results, time.time()) + def _make_fake_test_result(self, host, results_directory): + host.filesystem.maybe_make_directory(results_directory) + host.filesystem.write_binary_file(results_directory + '/results.html', + 'This is a test results file') + + def test_rename_results_folder(self): + host = MockHost() + port = host.port_factory.get('test-mac-mac10.10') + + def get_manager(): + manager = Manager( + port, + options=optparse.Values({ + 'max_locked_shards': 1 + }), + printer=FakePrinter()) + return manager + + self._make_fake_test_result(port.host, '/tmp/layout-test-results') + self.assertTrue( + port.host.filesystem.exists('/tmp/layout-test-results')) + timestamp = time.strftime( + '%Y-%m-%d-%H-%M-%S', + time.localtime( + port.host.filesystem.mtime( + '/tmp/layout-test-results/results.html'))) + archived_file_name = '/tmp/layout-test-results' + '_' + timestamp + manager = get_manager() + manager._rename_results_folder() + self.assertFalse( + port.host.filesystem.exists('/tmp/layout-test-results')) + self.assertTrue(port.host.filesystem.exists(archived_file_name)) + + def test_clobber_old_results(self): + host = MockHost() + port = host.port_factory.get('test-mac-mac10.10') + + def get_manager(): + manager = Manager( + port, + options=optparse.Values({ + 'max_locked_shards': 1 + }), + printer=FakePrinter()) + return manager + + self._make_fake_test_result(port.host, '/tmp/layout-test-results') + self.assertTrue( + port.host.filesystem.exists('/tmp/layout-test-results')) + manager = get_manager() + manager._clobber_old_results() + self.assertFalse( + port.host.filesystem.exists('/tmp/layout-test-results')) + + def test_limit_archived_results_count(self): + host = MockHost() + port = host.port_factory.get('test-mac-mac10.10') + + def get_manager(): + manager = Manager( + port, + options=optparse.Values({ + 'max_locked_shards': 1 + }), + printer=FakePrinter()) + return manager + + for x in range(1, 31): + dir_name = '/tmp/layout-test-results' + '_' + str(x) + self._make_fake_test_result(port.host, dir_name) + manager = get_manager() + manager._limit_archived_results_count() + deleted_dir_count = 0 + for x in range(1, 31): + dir_name = '/tmp/layout-test-results' + '_' + str(x) + if not port.host.filesystem.exists(dir_name): + deleted_dir_count = deleted_dir_count + 1 + self.assertEqual(deleted_dir_count, 5) + def test_restore_order(self): host = MockHost() port = host.port_factory.get('test-mac-mac10.10')
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/base.py b/third_party/blink/tools/blinkpy/web_tests/port/base.py index c74663e2..97e6ff4 100644 --- a/third_party/blink/tools/blinkpy/web_tests/port/base.py +++ b/third_party/blink/tools/blinkpy/web_tests/port/base.py
@@ -127,8 +127,6 @@ # contain all the disc artifacts created by web tests ARTIFACTS_SUB_DIR = 'layout-test-results' -ARCHIVED_RESULTS_LIMIT = 25 - ENABLE_THREADED_COMPOSITING_FLAG = '--enable-threaded-compositing' @@ -2123,68 +2121,6 @@ def default_configuration(self): return 'Release' - def _delete_dirs(self, dir_list): - for dir_path in dir_list: - self._filesystem.rmtree(dir_path) - - def rename_results_folder(self): - try: - timestamp = time.strftime( - "%Y-%m-%d-%H-%M-%S", - time.localtime( - self._filesystem.mtime( - self._filesystem.join(self.artifacts_directory(), - 'results.html')))) - except OSError as error: - # It might be possible that results.html was not generated in previous run, because the test - # run was interrupted even before testing started. In those cases, don't archive the folder. - # Simply override the current folder contents with new results. - import errno - if error.errno in (errno.EEXIST, errno.ENOENT): - _log.info( - 'No results.html file found in previous run, skipping it.') - return None - archived_name = ''.join( - (self._filesystem.basename(self.artifacts_directory()), '_', - timestamp)) - archived_path = self._filesystem.join( - self._filesystem.dirname(self.artifacts_directory()), - archived_name) - self._filesystem.move(self.artifacts_directory(), archived_path) - - def _get_artifact_directories(self, artifacts_directory_path): - results_directory_path = self._filesystem.dirname( - artifacts_directory_path) - file_list = self._filesystem.listdir(results_directory_path) - results_directories = [] - for name in file_list: - file_path = self._filesystem.join(results_directory_path, name) - if (artifacts_directory_path in file_path - and self._filesystem.isdir(file_path)): - results_directories.append(file_path) - results_directories.sort(key=self._filesystem.mtime) - return results_directories - - def limit_archived_results_count(self): - _log.info('Clobbering excess archived results in %s' % - self._filesystem.dirname(self.artifacts_directory())) - results_directories = self._get_artifact_directories( - self.artifacts_directory()) - self._delete_dirs(results_directories[:-ARCHIVED_RESULTS_LIMIT]) - - def clobber_old_results(self): - dir_above_results_path = self._filesystem.dirname( - self.artifacts_directory()) - _log.info('Clobbering old results in %s.' % dir_above_results_path) - if not self._filesystem.exists(dir_above_results_path): - return - results_directories = self._get_artifact_directories( - self.artifacts_directory()) - self._delete_dirs(results_directories) - - # Port specific clean-up. - self.clobber_old_port_specific_results() - def clobber_old_port_specific_results(self): pass
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/base_unittest.py b/third_party/blink/tools/blinkpy/web_tests/port/base_unittest.py index b0ac196b..591d820 100644 --- a/third_party/blink/tools/blinkpy/web_tests/port/base_unittest.py +++ b/third_party/blink/tools/blinkpy/web_tests/port/base_unittest.py
@@ -29,7 +29,6 @@ import mock import operator import optparse -import time import unittest from blinkpy.common.host_mock import MockHost @@ -1711,56 +1710,6 @@ self.assertEqual(port.host.filesystem.cwd, '/') self.assertEqual(port.results_directory(), '/some-directory/results') - def _make_fake_test_result(self, host, results_directory): - host.filesystem.maybe_make_directory(results_directory) - host.filesystem.write_binary_file(results_directory + '/results.html', - 'This is a test results file') - - def test_rename_results_folder(self): - host = MockHost() - port = host.port_factory.get('test-mac-mac10.10') - - self._make_fake_test_result(port.host, '/tmp/layout-test-results') - self.assertTrue( - port.host.filesystem.exists('/tmp/layout-test-results')) - timestamp = time.strftime( - '%Y-%m-%d-%H-%M-%S', - time.localtime( - port.host.filesystem.mtime( - '/tmp/layout-test-results/results.html'))) - archived_file_name = '/tmp/layout-test-results' + '_' + timestamp - port.rename_results_folder() - self.assertFalse( - port.host.filesystem.exists('/tmp/layout-test-results')) - self.assertTrue(port.host.filesystem.exists(archived_file_name)) - - def test_clobber_old_results(self): - host = MockHost() - port = host.port_factory.get('test-mac-mac10.10') - - self._make_fake_test_result(port.host, '/tmp/layout-test-results') - self.assertTrue( - port.host.filesystem.exists('/tmp/layout-test-results')) - port.clobber_old_results() - self.assertFalse( - port.host.filesystem.exists('/tmp/layout-test-results')) - - def test_limit_archived_results_count(self): - host = MockHost() - port = host.port_factory.get('test-mac-mac10.10') - - for x in range(1, 31): - dir_name = '/tmp/layout-test-results' + '_' + str(x) - self._make_fake_test_result(port.host, dir_name) - port.limit_archived_results_count() - deleted_dir_count = 0 - for x in range(1, 6): - dir_name = '/tmp/layout-test-results' + '_' + str(x) - self.assertFalse(port.host.filesystem.exists(dir_name)) - for x in range(6, 31): - dir_name = '/tmp/layout-test-results' + '_' + str(x) - self.assertTrue(port.host.filesystem.exists(dir_name)) - def _assert_config_file_for_platform(self, port, platform, config_file): port.host.platform = MockPlatformInfo(os_name=platform) self.assertEqual(
diff --git a/third_party/blink/tools/run_wpt_tests.py b/third_party/blink/tools/run_wpt_tests.py index c111fb0f..126bbb12 100755 --- a/third_party/blink/tools/run_wpt_tests.py +++ b/third_party/blink/tools/run_wpt_tests.py
@@ -29,7 +29,7 @@ ANDROID_WEBVIEW, CHROME_ANDROID, ) -from blinkpy.web_tests.port.base import Port +from blinkpy.web_tests.port.base import ARTIFACTS_SUB_DIR, Port path_finder.add_testing_dir_to_sys_path() path_finder.add_build_android_to_sys_path() @@ -308,11 +308,6 @@ if not self.fs.isdir(output_dir): raise ValueError("'--target' must be a directory under //out") self.port.set_option_default('target', options.target) - if options.results_directory: - self.port.set_option_default('results_directory', - options.results_directory) - else: - options.results_directory = self.port.results_directory() if options.log_chromium == '' or options.show_results: options.log_chromium = self.fs.join(output_dir, 'results.json') if options.log_wptreport == '': @@ -471,18 +466,6 @@ logger.debug('Using WPT tools from %s', tools_root) self._create_extra_run_info(options) - if options.clobber_old_results: - self.port.clobber_old_results() - elif self.port._filesystem.exists(self.port.artifacts_directory()): - self.port.limit_archived_results_count() - - # Rename the existing results folder for archiving. - self.port.rename_results_folder() - - # Create the output directory if it doesn't already exist. - self.port.host.filesystem.maybe_make_directory( - self.port.artifacts_directory()) - self.port.setup_test_run() # Start Xvfb, if necessary. stack.callback(self.port.clean_up_test_run) self.fs.chdir(self.path_finder.web_tests_dir()) @@ -529,8 +512,18 @@ json.dump(run_info, file_handle) @contextlib.contextmanager - def process_and_upload_results(self, options): - artifacts_dir = self.port.artifacts_directory() + def process_and_upload_results( + self, + options, + layout_test_results_subdir: str = ARTIFACTS_SUB_DIR, + ): + if options.log_chromium: + artifacts_dir = self.fs.join( + self.fs.dirname(options.log_chromium[0].name), + layout_test_results_subdir) + else: + artifacts_dir = self.path_from_output_dir( + options.target, layout_test_results_subdir) processor = WPTResultsProcessor(self.host.filesystem, self.port, artifacts_dir=artifacts_dir) @@ -703,9 +696,6 @@ help=('Log a wptreport as newline-delimited JSON objects ' '(default: //out/<target>/' 'wpt_reports_<product>_<shard-index>.json)')) - group.add_argument('--clobber-old-results', - action='store_true', - help='Clobbers test results from previous runs.'), group.add_argument('-v', '--verbose', action='count',
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 47a76bf..b14f23e9 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -232,6 +232,13 @@ crbug.com/1343590 virtual/prefetch/external/wpt/speculation-rules/prefetch/redirect-url.https.html [ Failure ] +crbug.com/1432886 virtual/prefetch/external/wpt/speculation-rules/prefetch/initiators-iframe-location-href.sub.https.html?cross-site [ Failure ] +crbug.com/1432886 virtual/prefetch/external/wpt/speculation-rules/prefetch/initiators-iframe-location-href.sub.https.html?same-site [ Failure ] +crbug.com/1432886 virtual/prefetch/external/wpt/speculation-rules/prefetch/initiators-a-element.sub.https.html?cross-site [ Failure ] +crbug.com/1432886 virtual/prefetch/external/wpt/speculation-rules/prefetch/initiators-a-element.sub.https.html?same-site [ Failure ] +crbug.com/1432886 virtual/prefetch/external/wpt/speculation-rules/prefetch/initiators-window-open.sub.https.html?cross-site [ Failure ] +crbug.com/1432886 virtual/prefetch/external/wpt/speculation-rules/prefetch/initiators-window-open.sub.https.html?same-site [ Failure ] + # Test might be flaky on Mac12-arm64 as the test server causes network errors probably becauuse of lack of resources on the bot. crbug.com/1382361 [ Mac ] external/wpt/speculation-rules/prerender/csp-script-src-self.html [ Failure Pass ] crbug.com/1400927 [ Linux Release ] external/wpt/speculation-rules/prerender/csp-script-src-self.html [ Failure Pass ] @@ -1605,6 +1612,7 @@ crbug.com/995106 external/wpt/css/css-lists/inline-list-marker.html [ Failure ] # css-pseudo +crbug.com/1443095 external/wpt/css/css-highlight-api/painting/css-highlight-painting-underline-offset-001.html [ Failure ] crbug.com/1163437 external/wpt/css/css-pseudo/grammar-spelling-errors-001.html [ Failure ] crbug.com/1163437 external/wpt/css/css-pseudo/grammar-spelling-errors-002.html [ Failure ] crbug.com/1147859 external/wpt/css/css-pseudo/highlight-painting-001.html [ Failure ] @@ -3041,8 +3049,6 @@ crbug.com/626703 virtual/css-highlight-inheritance/external/wpt/css/css-pseudo/svg-text-selection-002.html [ Failure ] crbug.com/626703 virtual/css-highlight-overlay-painting/external/wpt/css/css-pseudo/svg-text-selection-002.html [ Failure ] crbug.com/626703 external/wpt/css/css-counter-styles/counter-style-at-rule/descriptor-prefix.html [ Failure ] -crbug.com/626703 external/wpt/css/css-counter-styles/counter-style-at-rule/fallback-cycle.html [ Failure ] -crbug.com/626703 external/wpt/css/css-counter-styles/counter-style-at-rule/suffix-fallback.html [ Failure ] crbug.com/626703 external/wpt/css/css-counter-styles/counter-style-at-rule/system-additive.html [ Failure ] crbug.com/626703 external/wpt/css/css-counter-styles/counter-style-at-rule/system-alphabetic.html [ Failure ] crbug.com/626703 external/wpt/css/css-counter-styles/counter-style-at-rule/system-extends.html [ Failure ] @@ -6788,6 +6794,8 @@ # Sheriff 2023-05-02 crbug.com/1441166 [ Mac ] http/tests/devtools/indexeddb/resources-panel.js [ Failure Pass ] crbug.com/1441166 [ Linux ] http/tests/devtools/indexeddb/resources-panel.js [ Failure Pass ] +# Sheriff 2023-05-08 +crbug.com/1441166 [ Win ] http/tests/devtools/indexeddb/resources-panel.js [ Failure Pass ] # Sheriff 2023-05-04 crbug.com/1434164 http/tests/streams/chromium/transferable-streams-optimization.html [ Crash Failure Pass ]
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 40ca617..e726727b 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
@@ -18679,12 +18679,12 @@ ] ], "scroll-timeline-default-print.tentative.html": [ - "975a59812e9b4d45877fd0c9acdfd10079029d49", + "3f25cc93dba6a6f8c360e416b328f897cab29e99", [ null, [ [ - "/scroll-animations/css/scroll-timeline-default-ref.html", + "/scroll-animations/css/printing/scroll-timeline-default-print-ref.html", "==" ] ], @@ -97263,6 +97263,32 @@ {} ] ], + "lab-l-over-100-1.html": [ + "fdb3955e96ee4fc00e33db85134fc78adb84002b", + [ + null, + [ + [ + "/css/css-color/lab-l-over-100-ref.html", + "==" + ] + ], + {} + ] + ], + "lab-l-over-100-2.html": [ + "f62f9e0559b0c23106a29848bcf3e5515e16ff04", + [ + null, + [ + [ + "/css/css-color/lab-l-over-100-ref.html", + "==" + ] + ], + {} + ] + ], "lch-001.html": [ "904e2e5bd7c75dade264e22aa3a145ad56625d67", [ @@ -97393,6 +97419,32 @@ {} ] ], + "lch-l-over-100-1.html": [ + "9711956242df6e903d8ebcd3eebe2820c7b8b1e6", + [ + null, + [ + [ + "/css/css-color/lch-l-over-100-ref.html", + "==" + ] + ], + {} + ] + ], + "lch-l-over-100-2.html": [ + "a909a49f0c2344e3b8934a9b4d9b80a77ddac8fc", + [ + null, + [ + [ + "/css/css-color/lch-l-over-100-ref.html", + "==" + ] + ], + {} + ] + ], "named-001.html": [ "61a98dcb7bb02fab3db18ed337eee5ddb07724fc", [ @@ -107653,19 +107705,6 @@ {} ] ], - "fallback-cycle.html": [ - "2e63a3f4d4445f1b57b216446f8d4474ff5808b1", - [ - null, - [ - [ - "/css/css-counter-styles/counter-style-at-rule/fallback-cycle-ref.html", - "==" - ] - ], - {} - ] - ], "fallbacks-in-shadow-dom.html": [ "d51f70bc31c011fe9853755715a710837090a700", [ @@ -107744,19 +107783,6 @@ {} ] ], - "suffix-fallback.html": [ - "7684c9a10a9c09bc768cbb44a7379c1599f09eed", - [ - null, - [ - [ - "/css/css-counter-styles/counter-style-at-rule/suffix-fallback-ref.html", - "==" - ] - ], - {} - ] - ], "symbols-function-invalid.html": [ "35aa83258726c89efc2c0e31a1e3927362c7f4e2", [ @@ -264332,6 +264358,19 @@ ], {} ] + ], + "view-timeline-subject-bounds-update.html": [ + "7001eceeaf8f4997d7fb3f8b297eaa3827c537e6", + [ + null, + [ + [ + "/scroll-animations/css/animation-update-ref.html?translate=100px&scroll=800", + "==" + ] + ], + {} + ] ] }, "scroll-timelines": { @@ -271569,6 +271608,16 @@ } }, "support": { + ".cache": { + "gitignore2.json": [ + "ae71786e96f4f32e9c08bc2eee776cc4820a2be9", + [] + ], + "mtime.json": [ + "b7f7703c77b481009e1fcdf93ad11846059cfe1f", + [] + ] + }, ".gitignore": [ "d93e645d547894b50149d3726de2654957b6e06f", [] @@ -291213,6 +291262,10 @@ "9d0bc0c6c765b45b54b76bfeeb2e8e9720f9540d", [] ], + "lab-l-over-100-ref.html": [ + "57328cfa7c5569850f1d69fbcb6cab7c81b68478", + [] + ], "lch-004-ref.html": [ "2bc1e8285720e69646f1f17fd2c1fd7a0c4d76fd", [] @@ -291237,6 +291290,10 @@ "24ff4166bdb9d8d8069a6beee0443879bce6796c", [] ], + "lch-l-over-100-ref.html": [ + "67766274e59aced21539d94499d3a324d11b8478", + [] + ], "mossgreensquare-ref.html": [ "06f866c02dd04724a35cf5032b1d40e6783c3389", [] @@ -291303,7 +291360,7 @@ [] ], "color-computed-lab-expected.txt": [ - "cdcc18f7ae0ab64e37435d3fb000c1e987f61907", + "4445e6305a1ae3afaf16a3a6db52db5a042c959e", [] ], "color-computed-lab.html.ini": [ @@ -291335,7 +291392,7 @@ [] ], "color-valid-lab-expected.txt": [ - "a2907edba929a071ec7e5dbf29b3464b98e69936", + "0dc2ec7db1046b6a9bb7f924bc5fbe77603efd1e", [] ], "color-valid-lab.html.ini": [ @@ -293374,14 +293431,6 @@ "7d0dbc3314d8379deb597d08e97804cfc51aa4ab", [] ], - "fallback-cycle-ref.html": [ - "22bcf8d9b4ef3963020b3e834c893756426df412", - [] - ], - "fallback-cycle.html.ini": [ - "912e1a676a91725be6c414790968cf6c77fd2460", - [] - ], "fallbacks-in-shadow-dom-ref.html": [ "53e467bb391884ec9751edfcffe85f03c8502e08", [] @@ -293410,14 +293459,6 @@ "7f1af7532075c983e7fc0bcec7cd14830e0c13eb", [] ], - "suffix-fallback-ref.html": [ - "15cd54cb24f18b64f1bbbc900287bd9734a5f093", - [] - ], - "suffix-fallback.html.ini": [ - "fdd848b176ff0e3edaa2decf6a7c2ecebb3e11c0", - [] - ], "support": { "counter-style-testcommon.js": [ "a3615e92ff0678d5e7b2aad0a20076cd1ac07d6e", @@ -310425,7 +310466,7 @@ [] ], "clip-path-scaled-video.html.ini": [ - "ed150633d8352b4299aaa545509a384ac9e04921", + "56fb68b83e26b8aae7eddb915e98fe87eeba17ef", [] ], "clip-path-scroll.html.ini": [ @@ -328966,6 +329007,10 @@ "2415b1279f48e51bb930d36e36c0f330f510a2d5", [] ], + "kind-of-widget-fallback-input-submit-border-left-style-001.html.ini": [ + "463fe4db2b7785ebcaca6933f5f0af26874c69e4", + [] + ], "kind-of-widget-fallback-input-submit-border-left-width-001.html.ini": [ "7e86e3dde9c51af132c681e6c1b829bcefefbc34", [] @@ -335044,7 +335089,7 @@ [] ], "cssom-getPropertyValue-common-checks-expected.txt": [ - "419cc4d0dbe77e3f65b3ac9f823bfb13b41b4761", + "4d33936040222e0219b0e96ac632ef9895720a60", [] ], "cssom-getPropertyValue-common-checks.html.ini": [ @@ -336103,6 +336148,10 @@ "4d1f43792c071fd439314de1f798f4d740419c01", [] ], + "css-backdrop-filters-animation-drop-shadow.html.ini": [ + "1af6526b97976963a946313eb00b44a7b03711b1", + [] + ], "css-backdrop-filters-animation-grayscale-ref.html": [ "072652009a7b6a060ebec30eeac8597c6fd735a8", [] @@ -382012,6 +382061,10 @@ "5545ee0b73410fa6696885cc638e75ed9b4b3c0d", [] ], + "scroll-timeline-default-print-ref.html": [ + "6610f7a5a7e503c2deab83a7cde3979222898abc", + [] + ], "scroll-timeline-specified-scroller-ref.html": [ "d2f2d8f73d71f84c0c1111e6f923929acdb22a3a", [] @@ -386601,8 +386654,8 @@ "15f2a68eeddb7e095a7488af3efae8b91ad4004a", [] ], - "accept-clint-hint-cache.https.html.ini": [ - "a89648017d86b1f126d04587ac2302fafa40ade1", + "accept-client-hint-cache.https.html.ini": [ + "8965a0e6e70f04af1f85a69be988d9a6f96fc31f", [] ], "activation-start.html.ini": [ @@ -394414,18 +394467,10 @@ "9ac7d83c98203bdb24def82f07380bce7d89a049", [] ], - "elementwise_unary.https.any-expected.txt": [ - "c9c5f21c4afbf74e5a1fd72813523bf19f8f7c5a", - [] - ], "elementwise_unary.https.any.js.ini": [ "6a4e236829aa66e9712a5bb2b88c1b9e1079d6c2", [] ], - "elementwise_unary.https.any.worker-expected.txt": [ - "dfafaf3a7510b4c7b2a5d98d56f0596bf4bc1375", - [] - ], "elu.https.any.js.ini": [ "3d8375a4d8202a75e91146661baa24201fda6cc0", [] @@ -396536,6 +396581,22 @@ "3291dcef88d077daf5e6b8a226e8081b9e43b627", [] ], + "close.https.any-expected.txt": [ + "7032e6693d58d31622fd30e056ee83cdcd4b3c37", + [] + ], + "close.https.any.serviceworker-expected.txt": [ + "7032e6693d58d31622fd30e056ee83cdcd4b3c37", + [] + ], + "close.https.any.sharedworker-expected.txt": [ + "7032e6693d58d31622fd30e056ee83cdcd4b3c37", + [] + ], + "close.https.any.worker-expected.txt": [ + "7032e6693d58d31622fd30e056ee83cdcd4b3c37", + [] + ], "datagrams.https.any-expected.txt": [ "cdb67a1ed4ec1d30102afc1cdfb007fb0e8c82ed", [] @@ -441279,7 +441340,7 @@ ] ], "color-interpolation.html": [ - "7bda888a0b4d4355e916197e3646b69d1ca1ef64", + "d22f53409c9ab67f3882150bd2430907fe2164b5", [ null, {} @@ -501540,6 +501601,13 @@ ] ], "multi-globals": { + "construct-in-detached-frame.window.js": [ + "b0d6ba5b80db821ee75b3892626369caa6e3aece", + [ + "fetch/api/request/multi-globals/construct-in-detached-frame.window.html", + {} + ] + ], "url-parsing.html": [ "df60e72507ffdf22ce3d6e8342a8a35aa03fb201", [ @@ -503813,7 +503881,7 @@ ] ], "response-static-json.any.js": [ - "3c8a2b637f70871a21a66319d6eb3f9db7c41f77", + "5ec79e69aa3f9c1009050b083e0cf8c0cc76e1dc", [ "fetch/api/response/response-static-json.any.html", { @@ -554815,7 +554883,7 @@ ] ], "popover-attribute-all-elements.html": [ - "9ee659962b8997cca1813a26a068736c7d94699a", + "5a536f026ee96744c744eb98244cb3e06017d277", [ null, { @@ -554825,7 +554893,7 @@ ] ], "popover-attribute-basic.html": [ - "335f817e75d8f90580ff86d0c4d99bdda20f673b", + "eab61407c8b38772059fb9dae2dfe33308138a1e", [ null, { @@ -554850,6 +554918,13 @@ } ] ], + "popover-css-properties.tentative.html": [ + "93d388b02b533f8e8719ef8a9b54293f45a5cffd", + [ + null, + {} + ] + ], "popover-dialog-initial-focus.html": [ "47b2252bf5f26bc5bd122b9e57035992da65855a", [ @@ -554897,8 +554972,18 @@ } ] ], + "popover-hover-hide.tentative.html": [ + "ed647a7d7d8f9c2598cf2c69c21f84ec455f5994", + [ + null, + { + "testdriver": true, + "timeout": "long" + } + ] + ], "popover-invoker-reset.html": [ - "4b1ac6b588f70398e01de389bd0ab7c2bd305469", + "bfc79fd629171606b5d5d9a4224522e4bb4137ef", [ null, { @@ -554924,7 +555009,7 @@ ] ], "popover-light-dismiss.html": [ - "3c776fd6f65fbdf7d2d7abd3567c24e5cd9e81fa", + "4411d0b7e381b95960d25a5fbbda7682af1db263", [ null, { @@ -554984,6 +555069,16 @@ {} ] ], + "popover-target-action-hover.tentative.html": [ + "b03ec78ebf12e49775bf0636c78a803d97a1c19d", + [ + null, + { + "testdriver": true, + "timeout": "long" + } + ] + ], "popover-target-element-disabled.html": [ "d5c951768c083aa0fea3c6d473c9a370f386f31b", [ @@ -555010,14 +555105,14 @@ ] ], "popover-types-with-hints.tentative.html": [ - "06282a2aa1f5595e2a2be281dce57f52d26f405d", + "7a73efb50fc8e54926ffb4eb78c79f75413b1273", [ null, {} ] ], "popover-types.html": [ - "e6d7d967bbc9c1b01b402e7f8a81d92efe269513", + "d4ad81e52bf1fcfae93237bfc7d8d180715b038e", [ null, {} @@ -600395,7 +600490,7 @@ ] ], "timeline-range-name-offset-in-keyframes.tentative.html": [ - "7bae49c2e97dcc8c22b3f071256fdfd9cca699c2", + "54467bc83b18146c4a0adcd2dffde44bfd352df9", [ null, {} @@ -600678,7 +600773,7 @@ ] ], "scroll-timeline-invalidation.html": [ - "f35d878c69acd0a3c29567513e23940a9b3802c9", + "0b9e10c9846d17ae19be1d5c6f1b47e0826dc386", [ null, {} @@ -608988,7 +609083,7 @@ } ] ], - "accept-clint-hint-cache.https.html": [ + "accept-client-hint-cache.https.html": [ "66e2c90c04a04dd69119569e24658697e258e4c6", [ null, @@ -652637,7 +652732,7 @@ }, "webtransport": { "close.https.any.js": [ - "642d716a10342ad46ba2c852713e3360cfc5ca03", + "de675036f3d7ea4a7e2aaf5bf88bdfb35a173f3a", [ "webtransport/close.https.any.html", {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-counter-styles/counter-style-at-rule/fallback-cycle-ref.html b/third_party/blink/web_tests/external/wpt/css/css-counter-styles/counter-style-at-rule/fallback-cycle-ref.html deleted file mode 100644 index 22bcf8d..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-counter-styles/counter-style-at-rule/fallback-cycle-ref.html +++ /dev/null
@@ -1,56 +0,0 @@ -<!DOCTYPE html> -<meta charset=utf-8> -<title>CSS Reference: fallback cycle</title> -<style> -.decimal { - list-style-type: decimal; -} -.paren::marker { - content: "(" counter(list-item) ")\A0"; -} -.bracket::marker { - content: "[" counter(list-item, lower-roman) "]\A0"; -} -.brace::marker { - content: "{" counter(list-item, lower-alpha) "}\A0"; -} -</style> - -<ol> - <li class=decimal>paren > bracket > brace > decimal - <li class=paren>paren - <li class=paren>paren - <li class=paren>paren - <li class=bracket>paren > bracket - <li class=bracket>paren > bracket - <li class=bracket>paren > bracket - <li class=brace>paren > bracket > brace - <li class=brace>paren > bracket > brace - <li class=decimal>paren > bracket > brace > decimal -</ol> - -<ol> - <li class=decimal>bracket > brace > paren > decimal - <li class=paren>bracket > brace > paren - <li class=paren>bracket > brace > paren - <li class=bracket>bracket - <li class=bracket>bracket - <li class=bracket>bracket - <li class=bracket>bracket - <li class=brace>bracket > brace - <li class=brace>bracket > brace - <li class=decimal>bracket > brace > paren > decimal -</ol> - -<ol> - <li class=decimal>brace > paren > bracket > decimal - <li class=paren>brace > paren - <li class=paren>brace > paren - <li class=paren>brace > paren - <li class=bracket>brace > paren > bracket - <li class=bracket>brace > paren > bracket - <li class=brace>brace - <li class=brace>brace - <li class=brace>brace - <li class=decimal>brace > paren > bracket > decimal -</ol>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-counter-styles/counter-style-at-rule/fallback-cycle.html b/third_party/blink/web_tests/external/wpt/css/css-counter-styles/counter-style-at-rule/fallback-cycle.html deleted file mode 100644 index 2e63a3f4..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-counter-styles/counter-style-at-rule/fallback-cycle.html +++ /dev/null
@@ -1,85 +0,0 @@ -<!DOCTYPE html> -<meta charset=utf-8> -<title>CSS Test: fallback cycle</title> -<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com"> -<link rel="help" href="https://drafts.csswg.org/css-counter-styles-3/#counter-style-range"> -<link rel="help" href="https://drafts.csswg.org/css-counter-styles-3/#counter-style-fallback"> -<meta name="assert" content="While following fallbacks to find a counter style that can render the given counter value, - if a loop in the specified fallbacks is detected, the decimal style must be used instead"> -<link rel="match" href="fallback-cycle-ref.html"> -<style> -/* - Three styles with different but overlapping ranges, - with fallback to each other in a cycle. - - Depending where in the cycle we start, we expect different results - for the overlapping ranges; in all cases we fall back to the default - (decimal) style when fallback would loop around. -*/ -@counter-style paren { - system: extends decimal; - prefix: "("; - suffix: ")\A0"; - range: 2 4; - fallback: bracket; -} - -@counter-style bracket { - system: extends lower-roman; - prefix: "["; - suffix: "]\A0"; - range: 4 7; - fallback: brace; -} - -@counter-style brace { - system: extends lower-alpha; - prefix: "{"; - suffix: "}\A0"; - range: 7 9; - fallback: paren; -} - -ol { - list-style-type: disc; /* overridden by the counter-style rules */ -} -</style> - -<ol style="list-style: paren"> - <li>paren > bracket > brace > decimal - <li>paren - <li>paren - <li>paren - <li>paren > bracket - <li>paren > bracket - <li>paren > bracket - <li>paren > bracket > brace - <li>paren > bracket > brace - <li>paren > bracket > brace > decimal -</ol> - -<ol style="list-style: bracket"> - <li>bracket > brace > paren > decimal - <li>bracket > brace > paren - <li>bracket > brace > paren - <li>bracket - <li>bracket - <li>bracket - <li>bracket - <li>bracket > brace - <li>bracket > brace - <li>bracket > brace > paren > decimal -</ol> - -<ol style="list-style: brace"> - <li>brace > paren > bracket > decimal - <li>brace > paren - <li>brace > paren - <li>brace > paren - <li>brace > paren > bracket - <li>brace > paren > bracket - <li>brace - <li>brace - <li>brace - <li>brace > paren > bracket > decimal -</ol>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-counter-styles/counter-style-at-rule/fallback-cycle.html.ini b/third_party/blink/web_tests/external/wpt/css/css-counter-styles/counter-style-at-rule/fallback-cycle.html.ini deleted file mode 100644 index 912e1a6..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-counter-styles/counter-style-at-rule/fallback-cycle.html.ini +++ /dev/null
@@ -1,2 +0,0 @@ -[fallback-cycle.html] - expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-counter-styles/counter-style-at-rule/suffix-fallback-ref.html b/third_party/blink/web_tests/external/wpt/css/css-counter-styles/counter-style-at-rule/suffix-fallback-ref.html deleted file mode 100644 index 15cd54c..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-counter-styles/counter-style-at-rule/suffix-fallback-ref.html +++ /dev/null
@@ -1,47 +0,0 @@ -<!DOCTYPE html> -<meta charset=utf-8> -<title>CSS Reference: suffix fallback</title> -<style> -div div { - width: 4em; - text-align: right; -} -</style> - -<div> - <div>1st</div> - <div>2nd</div> - <div>3rd</div> - <div>4th</div> - <div>5th</div> - <div>6th</div> - <div>7th</div> - <div>8th</div> - <div>9th</div> - <div>10th</div> - <div>11th</div> - <div>12th</div> - <div>13th</div> - <div>14th</div> - <div>15th</div> - <div>16th</div> - <div>17th</div> - <div>18th</div> - <div>19th</div> - <div>20th</div> - <div>21st</div> - <div>22nd</div> - <div>23rd</div> - <div>24th</div> - <div>25th</div> - <div>26th</div> - <div>27th</div> - <div>28th</div> - <div>29th</div> - <div>30th</div> - <div>31st</div> - <div>32nd</div> - <div>33rd</div> - <div>34th</div> - <div>35th</div> -</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-counter-styles/counter-style-at-rule/suffix-fallback.html b/third_party/blink/web_tests/external/wpt/css/css-counter-styles/counter-style-at-rule/suffix-fallback.html deleted file mode 100644 index 7684c9a1..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-counter-styles/counter-style-at-rule/suffix-fallback.html +++ /dev/null
@@ -1,84 +0,0 @@ -<!DOCTYPE html> -<meta charset=utf-8> -<title>CSS Test: suffix fallback</title> -<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com"> -<link rel="help" href="https://drafts.csswg.org/css-counter-styles-3/#counter-style-range"> -<link rel="help" href="https://drafts.csswg.org/css-counter-styles-3/#counter-style-fallback"> -<link rel="match" href="suffix-fallback-ref.html"> -<style> -/* A set of rules that rely on range limits and fallback to vary the suffix. */ -@counter-style ordinal-default { - system: numeric; - symbols: "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"; - suffix: "th"; - range: 1 infinite; -} - -@counter-style ordinal { - system: extends ordinal-default; - suffix: "st"; - fallback: ordinal-twos; - range: 1 1, 21 21, 31 31, 41 41, 51 51, 61 61, 71 71, 81 81, 91 91; -} - -@counter-style ordinal-twos { - system: extends ordinal-default; - suffix: "nd"; - fallback: ordinal-threes; - range: 2 2, 22 22, 32 32, 42 42, 52 52, 62 62, 72 72, 82 82, 92 92; -} - -@counter-style ordinal-threes { - system: extends ordinal-default; - suffix: "rd"; - fallback: ordinal-default; - range: 3 3, 23 23, 33 33, 43 43, 53 53, 63 63, 73 73, 83 83, 93 93; -} - -ol.ordinal { - margin: 0; - padding: 0; - list-style: ordinal; -} -li { - margin-left: 4em; -} -</style> - -<ol class="ordinal"> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> -</ol>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-counter-styles/counter-style-at-rule/suffix-fallback.html.ini b/third_party/blink/web_tests/external/wpt/css/css-counter-styles/counter-style-at-rule/suffix-fallback.html.ini deleted file mode 100644 index fdd848b1..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-counter-styles/counter-style-at-rule/suffix-fallback.html.ini +++ /dev/null
@@ -1,2 +0,0 @@ -[suffix-fallback.html] - expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/percentage-padding-003.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/percentage-padding-003.html new file mode 100644 index 0000000..ee84f15 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/percentage-padding-003.html
@@ -0,0 +1,36 @@ +<!DOCTYPE html> +<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org"> +<link rel="help" href="https://crbug.com/1440908"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<meta name="assert" + content="vertical-rl block's auto height should encompass its children, and the percentage padding should resolve based on that." /> + +<style> + #reference-overlapped-red { + position: absolute; + background-color: red; + width: 100px; + height: 100px; + z-index: -1; + } + +</style> + +<p>Test passes if there is a filled green square and <strong>no red</strong>. +</p> + +<div id=reference-overlapped-red></div> + +<div id="container" style="writing-mode:vertical-rl; width:101px;"> + <div style="display:flex; padding-right:5%;"> + <div style="writing-mode:horizontal-tb; padding-right:10%;"> + <div + style="width:100px; height:100px; background:green; position:relative; left:15px;"> + </div> + </div> + </div> +</div> +<script> + document.body.offsetTop; + container.style.width = "100px"; +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-highlight-api/painting/css-highlight-painting-underline-offset-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-highlight-api/painting/css-highlight-painting-underline-offset-001-ref.html new file mode 100644 index 0000000..3d01bccf --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-highlight-api/painting/css-highlight-painting-underline-offset-001-ref.html
@@ -0,0 +1,12 @@ +<!DOCTYPE html> +<html> +<meta charset="utf-8"> +<title>CSS Highlight API Test: ::highlight with text-underline-offset, reference</title> +<style> + #target { + text-decoration: wavy underline green 5px; + text-underline-offset: 20px; + } +</style> +<p id="target">The underline should be offset.</p> +</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-highlight-api/painting/css-highlight-painting-underline-offset-001.html b/third_party/blink/web_tests/external/wpt/css/css-highlight-api/painting/css-highlight-painting-underline-offset-001.html new file mode 100644 index 0000000..14b238ce --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-highlight-api/painting/css-highlight-painting-underline-offset-001.html
@@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html> +<meta charset="utf-8"> +<title>CSS Highlight API Test: ::highlight with text-underline-offset</title> +<link rel="help" href="https://drafts.csswg.org/css-highlight-api-1/"> +<link rel="match" href="css-highlight-painting-underline-offset-001-ref.html"> +<meta name="assert" content="Verify that text-underline-offset works in a ::highlight pseudo-element."> +<style> + ::highlight(example) { + text-decoration: wavy underline green 5px; + text-underline-offset: 20px; + } +</style> +<p id="target">The underline should be offset.</p> +<script> + let range = new Range(); + range.setStart(target, 0); + range.setEnd(target, 1); + CSS.highlights.set(`example`, new Highlight(range)); +</script> +</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-masking/clip-path/clip-path-scaled-video.html.ini b/third_party/blink/web_tests/external/wpt/css/css-masking/clip-path/clip-path-scaled-video.html.ini index ed150633..56fb68b 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-masking/clip-path/clip-path-scaled-video.html.ini +++ b/third_party/blink/web_tests/external/wpt/css/css-masking/clip-path/clip-path-scaled-video.html.ini
@@ -1,5 +1,6 @@ [clip-path-scaled-video.html] expected: if (product == "content_shell") and (os == "mac") and (port == "mac12-arm64"): FAIL + if (product == "content_shell") and (os == "mac") and (port == "mac13"): FAIL if (product == "content_shell") and (os == "mac") and (port == "mac13-arm64"): FAIL if (product == "content_shell") and (os == "mac") and (port == "mac10.15"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-left-style-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-left-style-001.html.ini new file mode 100644 index 0000000..463fe4db2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-left-style-001.html.ini
@@ -0,0 +1,3 @@ +[kind-of-widget-fallback-input-submit-border-left-style-001.html] + expected: + if (product == "content_shell") and (os == "mac") and (port == "mac13"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/filter-effects/css-backdrop-filters-animation-drop-shadow.html.ini b/third_party/blink/web_tests/external/wpt/css/filter-effects/css-backdrop-filters-animation-drop-shadow.html.ini new file mode 100644 index 0000000..1af6526 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/filter-effects/css-backdrop-filters-animation-drop-shadow.html.ini
@@ -0,0 +1,3 @@ +[css-backdrop-filters-animation-drop-shadow.html] + expected: + if (product == "content_shell") and (os == "mac") and (port == "mac13"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/custom-elements/range-and-constructors-expected.txt b/third_party/blink/web_tests/external/wpt/custom-elements/range-and-constructors-expected.txt deleted file mode 100644 index 46ca349d..0000000 --- a/third_party/blink/web_tests/external/wpt/custom-elements/range-and-constructors-expected.txt +++ /dev/null
@@ -1,5 +0,0 @@ -This is a testharness.js-based test. -FAIL Range.cloneContents should invoke constructor in tree order assert_array_equals: expected property 0 to be "root-0" but got "root-0-0" (expected array ["root-0", "root-0-0", "root-1"] got ["root-0-0", "root-0", "root-1"]) -FAIL Range.extractContents should invoke constructor in tree order assert_array_equals: expected property 0 to be "root-0" but got "root-0-0" (expected array ["root-0", "root-0-0"] got ["root-0-0", "root-0"]) -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/custom-elements/range-and-constructors.html b/third_party/blink/web_tests/external/wpt/custom-elements/range-and-constructors.html index d17c3b7..cc51424 100644 --- a/third_party/blink/web_tests/external/wpt/custom-elements/range-and-constructors.html +++ b/third_party/blink/web_tests/external/wpt/custom-elements/range-and-constructors.html
@@ -5,22 +5,22 @@ <meta name="author" title="Edgar Chen" href="mailto:echen@mozilla.com"> <link rel="help" href="https://html.spec.whatwg.org/multipage/scripting.html#concept-upgrade-an-element"> <link rel="help" href="https://dom.spec.whatwg.org/#concept-create-element"> -<line rel="help" href="https://dom.spec.whatwg.org/#concept-range-extract"> -<line rel="help" href="https://dom.spec.whatwg.org/#concept-range-clone"> +<link rel="help" href="https://dom.spec.whatwg.org/#concept-range-extract"> +<link rel="help" href="https://dom.spec.whatwg.org/#concept-range-clone"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> </head> <body> <div id="log"></div> -<c-e data-index="root"> - <c-e data-index="root-0"> - <c-e data-index="root-0-0"> - <c-e data-index="root-0-0-0"></c-e> +<c-e id="root"> + <c-e id="root-0"> + <c-e id="root-0-0"> + <c-e id="root-0-0-0"></c-e> <span id="start"></span> </c-e> </c-e> - <c-e data-index="root-1"></c-e> + <c-e id="root-1"></c-e> <span id="end"></span> </c-e> @@ -30,7 +30,7 @@ class CE extends HTMLElement { constructor() { super(); - logs.push(this.dataset.index); + logs.push(this.id); } } customElements.define('c-e', CE);
diff --git a/third_party/blink/web_tests/external/wpt/fetch/api/request/multi-globals/construct-in-detached-frame.window.js b/third_party/blink/web_tests/external/wpt/fetch/api/request/multi-globals/construct-in-detached-frame.window.js new file mode 100644 index 0000000..b0d6ba5 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/fetch/api/request/multi-globals/construct-in-detached-frame.window.js
@@ -0,0 +1,11 @@ +// This is a regression test for Chromium issue https://crbug.com/1427266. +test(() => { + const iframe = document.createElement('iframe'); + document.body.append(iframe); + const otherRequest = iframe.contentWindow.Request; + iframe.remove(); + const r1 = new otherRequest('resource', { method: 'POST', body: 'string' }); + const r2 = new otherRequest(r1); + assert_true(r1.bodyUsed); + assert_false(r2.bodyUsed); +}, 'creating a request from another request in a detached realm should work');
diff --git a/third_party/blink/web_tests/external/wpt/fetch/api/response/response-static-json.any.js b/third_party/blink/web_tests/external/wpt/fetch/api/response/response-static-json.any.js index 3c8a2b6..5ec79e6 100644 --- a/third_party/blink/web_tests/external/wpt/fetch/api/response/response-static-json.any.js +++ b/third_party/blink/web_tests/external/wpt/fetch/api/response/response-static-json.any.js
@@ -79,3 +79,18 @@ } ) }, "Check static json() propagates JSON serializer errors"); + +const encodingChecks = [ + ["𝌆", [34, 240, 157, 140, 134, 34]], + ["\uDF06\uD834", [34, 92, 117, 100, 102, 48, 54, 92, 117, 100, 56, 51, 52, 34]], + ["\uDEAD", [34, 92, 117, 100, 101, 97, 100, 34]], +]; + +for (const [input, expected] of encodingChecks) { + promise_test(async function () { + const response = Response.json(input); + const buffer = await response.arrayBuffer(); + const data = new Uint8Array(buffer); + assert_array_equals(data, expected); + }, `Check response returned by static json() with input ${input}`); +}
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-dialog-initial-focus.html b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-dialog-initial-focus.html deleted file mode 100644 index 47b2252b..0000000 --- a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-dialog-initial-focus.html +++ /dev/null
@@ -1,25 +0,0 @@ -<!DOCTYPE html> -<link rel=author href="mailto:jarhar@chromium.org"> -<link rel=help href="http://crbug.com/1430405"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> - -<dialog id=dialog popover=auto> - <button id=button>button</button> -</dialog> - -<dialog id=dialog2 popover=auto autofocus> - <button>button</button> -</dialog> - -<script> -test(() => { - dialog.showPopover(); - assert_equals(document.activeElement, button); -}, 'Opening dialogs as popovers should use dialog initial focus algorithm.'); - -test(() => { - dialog2.showPopover(); - assert_equals(document.activeElement, dialog2); -}, 'Opening dialogs as popovers which have autofocus should focus the dialog.'); -</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-focus.html b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-focus.html index df7c046..98bb065 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-focus.html +++ b/third_party/blink/web_tests/external/wpt/html/semantics/popovers/popover-focus.html
@@ -49,6 +49,14 @@ <button autofocus tabindex="0">second autofocus button</button> </div> +<dialog popover=auto data-test='Opening dialogs as popovers should use dialog initial focus algorithm.'> + <button class=should-be-focused>button</button> +</dialog> + +<dialog popover=auto autofocus class=should-be-focused data-test='Opening dialogs as popovers which have autofocus should focus the dialog.'> + <button>button</button> +</dialog> + <style> [popover] { border: 2px solid black; @@ -178,7 +186,7 @@ assert_true(popover.matches(':popover-open')); assert_equals(document.activeElement, expectedFocusedElement, `${testName} activated by button.click()`); popover.focus(); - assert_equals(document.activeElement, popover.hasAttribute('tabindex') ? popover : expectedFocusedElement, `${testName} directly focus with popover.focus()`); + assert_equals(document.activeElement, popover.hasAttribute('tabindex') || popover.tagName === 'DIALOG' ? popover : expectedFocusedElement, `${testName} directly focus with popover.focus()`); button.click(); // Button is set to toggle the popover assert_false(popover.matches(':popover-open')); assert_equals(document.activeElement, priorFocus, 'prior element should get focus on button-toggled hide');
diff --git a/third_party/blink/web_tests/external/wpt/largest-contentful-paint/image-src-change.html b/third_party/blink/web_tests/external/wpt/largest-contentful-paint/image-src-change.html index e0701a21..33213a5 100644 --- a/third_party/blink/web_tests/external/wpt/largest-contentful-paint/image-src-change.html +++ b/third_party/blink/web_tests/external/wpt/largest-contentful-paint/image-src-change.html
@@ -1,37 +1,75 @@ <!DOCTYPE HTML> <meta charset=utf-8> <title>Largest Contentful Paint: src change triggers new entry.</title> + <body> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="resources/largest-contentful-paint-helpers.js"></script> -<img src='/images/black-rectangle.png' id='image_id'/> -<script> - setup({"hide_test_state": true}); - async_test(function (t) { - assert_implements(window.LargestContentfulPaint, "LargestContentfulPaint is not implemented"); - let beforeLoad = performance.now(); - let firstCallback = true; - const observer = new PerformanceObserver( - t.step_func(function(entryList) { - assert_equals(entryList.getEntries().length, 1); - const entry = entryList.getEntries()[0]; - const url = window.location.origin + (firstCallback ? '/images/black-rectangle.png' : '/images/blue.png'); - // black-rectangle.png is 100 x 50. blue.png is 133 by 106. - const size = firstCallback ? 100 * 50 : 133 * 106; - checkImage(entry, url, 'image_id', size, beforeLoad); - if (firstCallback) { - // Set the src to trigger another entry. - const img = document.getElementById('image_id'); - img.src = '/images/blue.png'; - beforeLoad = performance.now(); - firstCallback =false; - } else { - t.done(); - } - }) - ); - observer.observe({type: 'largest-contentful-paint', buffered: true}); - }, 'Largest Contentful Paint: changing src causes a new entry to be dispatched.'); -</script> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="resources/largest-contentful-paint-helpers.js"></script> + <img src='' id='image_id' /> + <script> + setup({ "hide_test_state": true }); + + let first_image_src = '/images/black-rectangle.png'; + let second_image_src = '/images/blue.png'; + let image_id = 'image_id'; + + // Add listener for load event that is fired when image is loaded. + const image_load_promise = image_element => { + return new Promise(resolve => { + image_element.addEventListener('load', resolve); + }); + } + + // Create a promise that resolves when an LCP is observed. + const lcp_observation_promise = image_src => { + return new Promise(resolve => { + new PerformanceObserver((entryList) => { + let lcpEntry = entryList.getEntries().find(e => e.url.includes(image_src)); + + if (lcpEntry) { + resolve(lcpEntry); + } + + }).observe({ type: 'largest-contentful-paint' }); + }); + } + + const loadImageAndGetLCPEntry = async image_src => { + let LCPObserverPromise = lcp_observation_promise(image_src); + + let image_element = document.getElementById(image_id); + + let promise = image_load_promise(image_element); + + image_element.src = image_src; + + await promise; + + return await LCPObserverPromise; + } + + promise_test(async t => { + + assert_implements(window.LargestContentfulPaint, "LargestContentfulPaint is not implemented"); + + + // Load first image. + let beforeLoad = performance.now(); + + let first_LCP = await loadImageAndGetLCPEntry(first_image_src); + + // Verify first LCP entry correctness. The black-rectangle.png is 100 x 50. + checkImage(first_LCP, window.location.origin + first_image_src, image_id, 100 * 50, beforeLoad); + + // Load second image. + beforeLoad = performance.now(); + + let second_LCP = await loadImageAndGetLCPEntry(second_image_src); + + // Verify second LCP entry correctness. The blue.png is 133 by 106. + checkImage(second_LCP, window.location.origin + second_image_src, image_id, 133 * 106, beforeLoad); + + }, 'Largest Contentful Paint: changing src causes a new entry to be dispatched.'); + </script> </body>
diff --git a/third_party/blink/web_tests/external/wpt/scroll-animations/css/printing/scroll-timeline-default-print-ref.html b/third_party/blink/web_tests/external/wpt/scroll-animations/css/printing/scroll-timeline-default-print-ref.html new file mode 100644 index 0000000..6610f7a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/scroll-animations/css/printing/scroll-timeline-default-print-ref.html
@@ -0,0 +1,21 @@ +<!DOCTYPE html> +<title>Reference for default scroll() timeline</title> +<style> + html { + min-height: 100%; + padding-bottom: 100px; + } + + #box { + width: 100px; + height: 100px; + background-color: green; + } + + * { + margin-top: 0px; + margin-bottom: 0px; + } +</style> + +<div id="box"></div>
diff --git a/third_party/blink/web_tests/external/wpt/scroll-animations/css/printing/scroll-timeline-default-print.tentative.html b/third_party/blink/web_tests/external/wpt/scroll-animations/css/printing/scroll-timeline-default-print.tentative.html index 975a5981..3f25cc9 100644 --- a/third_party/blink/web_tests/external/wpt/scroll-animations/css/printing/scroll-timeline-default-print.tentative.html +++ b/third_party/blink/web_tests/external/wpt/scroll-animations/css/printing/scroll-timeline-default-print.tentative.html
@@ -4,7 +4,7 @@ <link rel="help" href="https://drafts.csswg.org/scroll-animations-1/#scroll-notation"> <link rel="help" href="https://drafts.csswg.org/css-animations-2/#animation-timeline"> <meta name="assert" content="CSS animation correctly updates values when using the default scroll() timeline"> -<link rel="match" href="../scroll-timeline-default-ref.html"> +<link rel="match" href="scroll-timeline-default-print-ref.html"> <style> @keyframes update { @@ -25,12 +25,6 @@ animation-timeline: scroll(); } - #covered { - width: 100px; - height: 100px; - background-color: red; - } - * { margin-top: 0px; margin-bottom: 0px; @@ -38,7 +32,6 @@ </style> <div id="box"></div> -<div id="covered"></div> <script src="/web-animations/testcommon.js"></script> <script> document.documentElement.addEventListener('TestRendered', async () => { @@ -51,6 +44,10 @@ await waitForCompositorReady(); // Move the scroller to the halfway point. + // When printing, a timeline associated with the document's scrolling + // element will become inactive. The root scroller is considered to be + // fully in view with a scroll range of zero. + // https://github.com/w3c/csswg-drafts/issues/8226 const maxScroll = scroller.scrollHeight - scroller.clientHeight; scroller.scrollTop = 0.5 * maxScroll;
diff --git a/third_party/blink/web_tests/external/wpt/scroll-animations/css/timeline-range-name-offset-in-keyframes.tentative.html b/third_party/blink/web_tests/external/wpt/scroll-animations/css/timeline-range-name-offset-in-keyframes.tentative.html index 7bae49c..54467bc 100644 --- a/third_party/blink/web_tests/external/wpt/scroll-animations/css/timeline-range-name-offset-in-keyframes.tentative.html +++ b/third_party/blink/web_tests/external/wpt/scroll-animations/css/timeline-range-name-offset-in-keyframes.tentative.html
@@ -87,9 +87,12 @@ container.scrollTop = 400; await waitForNextFrame(); assert_equals(getComputedStyle(subject).opacity, '1', - 'Effect at entry 100% (post resize)'); + 'Effect at entry 100%'); + // Reducing the viewport by 100px, shifts the keyframe offsets. + // The entry range shifts from [200px, 400px] to [300px, 500px]. container.style.height = '300px'; + await waitForNextFrame(); assert_equals(getComputedStyle(subject).opacity, '0.5', 'Effect at entry 50% (post resize)');
diff --git a/third_party/blink/web_tests/external/wpt/scroll-animations/css/view-timeline-subject-bounds-update.html b/third_party/blink/web_tests/external/wpt/scroll-animations/css/view-timeline-subject-bounds-update.html new file mode 100644 index 0000000..7001ecee --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/scroll-animations/css/view-timeline-subject-bounds-update.html
@@ -0,0 +1,71 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<head> +<meta charset="utf-8"> +<meta name="viewport" content="width=device-width, initial-scale=1"> +<title>Update subject bounds refTest</title> +<link rel="help" src="https://github.com/w3c/csswg-drafts/issues/8694"> +<link rel="match" + href="./animation-update-ref.html?translate=100px&scroll=800"> +<script src="/web-animations/testcommon.js"></script> +</head> +<style type="text/css"> + @keyframes anim { + from { transform: translateX(100px) } + to { transform: translateX(0px) } + } + #scroller { + border: 1px solid black; + overflow: hidden; + width: 300px; + height: 200px; + } + #target { + margin-bottom: 800px; + margin-top: 700px; + margin-left: 10px; + margin-right: 10px; + width: 100px; + height: 200px; + z-index: -1; + background-color: green; + animation: anim auto both linear; + animation-timeline: timeline; + view-timeline: timeline; + animation-range: exit; + } + #target.bounds-update { + height: 100px; + /* Keep the scroll range the same. */ + margin-top: 800px; + } +</style> +<body> + <div id="scroller"> + <div id="target"></div> + </div> +</body> +<script type="text/javascript"> + document.documentElement.addEventListener('TestRendered', async () => { + runTest(); + }, { once: true }); + + async function runTest() { + await waitForCompositorReady(); + + const anim = target.getAnimations()[0]; + + // Scroll to exit 50%. + scroller.scrollTop = 800; + await waitForNextFrame(); + + // After the update to the animation range, the positioning is exit 0% + target.classList.add('bounds-update'); + await waitForNextFrame(); + + // Make sure change to animation range was properly picked up. + document.documentElement.classList.remove("reftest-wait"); + } +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/scroll-animations/scroll-timelines/scroll-timeline-invalidation.html b/third_party/blink/web_tests/external/wpt/scroll-animations/scroll-timelines/scroll-timeline-invalidation.html index f35d878..0b9e10c 100644 --- a/third_party/blink/web_tests/external/wpt/scroll-animations/scroll-timelines/scroll-timeline-invalidation.html +++ b/third_party/blink/web_tests/external/wpt/scroll-animations/scroll-timelines/scroll-timeline-invalidation.html
@@ -100,6 +100,8 @@ 'size changes.'); promise_test(async t => { + await waitForNextFrame(); + const timeline = createScrollTimeline(t); const scroller = timeline.source; const maxScroll = scroller.scrollHeight - scroller.clientHeight; @@ -117,12 +119,35 @@ // Wait for new animation frame which allows the timeline to compute new // current time. await waitForNextFrame(); - assert_times_equal(timeline.currentTime.value, 20, + + // Let s = scroll position + // p = fractional progress + // v = viewport height + // c = scroll height + // c[i] = c[i-1] * (1 + p[i-1]) + // p[i] = s / (c[i-1] - v) + + // c[0] = 1000 + // p[0] = 0.2 ==> s = 180 + // c[1] = 1000 * 1.2 = 1200 + assert_percents_equal(timeline.currentTime, 20, 'Timeline current time is updated after animation frame.'); + assert_equals(scroller.scrollHeight, 1200); await waitForNextFrame(); - assert_times_equal(timeline.currentTime.value, 16.3636, + + // Applying the animation effect alters the height of the scroll content and + // makes the scroll timeline stale. + // https://github.com/w3c/csswg-drafts/issues/8694 + + // p[1] = 180 / (1200 - 100) = 0.16363636363 + // c[2] = 1000 * 1.16363636363 = 1163.6363 => 1164 + // p[2] = 180 / (1164 - 100) = 0.1692 + // c[3] = 1169 + + assert_percents_equal(timeline.currentTime, 16.92, 'Timeline current time is updated after two animation frames and ' + 'reflects single layout run.'); + assert_approx_equals(scroller.scrollHeight, 1169, 1); }, 'If scroll animation resizes its scroll timeline scroller, ' + - 'layout runs only once to reflect the initial update.'); + 'layout reruns once per frame.'); </script>
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/initiators-a-element.sub.https.html b/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/initiators-a-element.sub.https.html new file mode 100644 index 0000000..bac5eb7c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/initiators-a-element.sub.https.html
@@ -0,0 +1,79 @@ +<!DOCTYPE html> +<meta name="variant" content="?cross-site"> +<meta name="variant" content="?same-site"> +<meta name="timeout" content="long"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> +<script src="/common/utils.js"></script> +<script src="resources/utils.sub.js"></script> +<script> + // In https://html.spec.whatwg.org/multipage/browsing-the-web.html#navigate, + // `sourceDocument` (instead of `navigable`'s active document) should be + // used as the referring document for prefetch. + promise_test(async t => { + assert_implements(HTMLScriptElement.supports('speculationrules'), "Speculation Rules not supported"); + + const win = await spawnWindow(t, { protocol: 'https' }); + + const hostname = + location.search === '?cross-site' ? '{{hosts[alt][www]}}' : undefined; + const nextUrl = win.getExecutorURL({ protocol: 'https', hostname, page: 2 }); + + await win.forceSinglePrefetch(nextUrl); + + // sourceDocument == `win`'s Document == active document of window being + // navigated. + await win.execute_script((url) => { + window.executor.suspend(() => { + const a = document.createElement('a'); + a.setAttribute('href', url); + document.body.appendChild(a); + a.click(); + }); + }, [nextUrl]); + + assert_equals( + await win.execute_script(() => location.href), + nextUrl.toString(), + "expected navigation to reach destination URL"); + + assert_prefetched(await win.getRequestHeaders()); + }, `<a>`); + + promise_test(async t => { + assert_implements(HTMLScriptElement.supports('speculationrules'), "Speculation Rules not supported"); + + const win = await spawnWindow(t, { protocol: 'https' }); + + const hostname = + location.search === '?cross-site' ? '{{hosts[alt][www]}}' : undefined; + const nextUrl = win.getExecutorURL({ protocol: 'https', hostname, page: 2 }); + + await win.forceSinglePrefetch(nextUrl); + + // sourceDocument == `win`'s Document != active document of window being + // navigated, since the window being navigated is a new window. + await win.execute_script((url) => { + window.executor.suspend(() => { + const a = document.createElement('a'); + a.setAttribute('href', url); + a.setAttribute('target', '_blank'); + document.body.appendChild(a); + a.click(); + }); + }, [nextUrl]); + + // Below, the scripts given to `win.execute_script()` are executed on the + // `nextUrl` page in the new window, because `window.executor.suspend()` + // above made `win`'s original page stop processing `execute_script()`, + // while the new page of `nextUrl` in the new window starts processing + // `execute_script()` for the same ID. + assert_equals( + await win.execute_script(() => location.href), + nextUrl.toString(), + "expected navigation to reach destination URL"); + + assert_prefetched(await win.getRequestHeaders()); + }, `<a target="blank">`); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/initiators-iframe-location-href.sub.https.html b/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/initiators-iframe-location-href.sub.https.html new file mode 100644 index 0000000..9d6702d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/initiators-iframe-location-href.sub.https.html
@@ -0,0 +1,48 @@ +<!DOCTYPE html> +<meta name="variant" content="?cross-site"> +<meta name="variant" content="?same-site"> +<meta name="timeout" content="long"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> +<script src="/common/utils.js"></script> +<script src="resources/utils.sub.js"></script> +<script> + // In https://html.spec.whatwg.org/multipage/browsing-the-web.html#navigate, + // `sourceDocument` (instead of `navigable`'s active document) should be + // used as the referring document for prefetch. + promise_test(async t => { + assert_implements(HTMLScriptElement.supports('speculationrules'), "Speculation Rules not supported"); + + const win = await spawnWindow(t, { protocol: 'https' }); + + const hostname = + location.search === '?cross-site' ? '{{hosts[alt][www]}}' : undefined; + const nextUrl = win.getExecutorURL({ protocol: 'https', hostname, page: 2 }); + + await win.forceSinglePrefetch(nextUrl); + + // In https://html.spec.whatwg.org/multipage/browsing-the-web.html#navigate, + // `sourceDocument` is the incumbent Document and thus `win`'s Document. + // `navigable`'s active document is `iframe`'s Document. + await win.execute_script((url) => { + window.executor.suspend(() => { + const iframe = document.createElement('iframe'); + document.body.appendChild(iframe); + iframe.contentWindow.location.href = url; + }); + }, [nextUrl]); + + // Below, the scripts given to `win.execute_script()` are executed on the + // `nextUrl` page in the iframe, because `window.executor.suspend()` above + // made `win`'s original page stop processing `execute_script()`, + // while the new page of `nextUrl` in the iframe starts processing + // `execute_script()` for the same ID. + assert_equals( + await win.execute_script(() => location.href), + nextUrl.toString(), + "expected navigation to reach destination URL"); + + assert_prefetched(await win.getRequestHeaders()); + }, `location.href across iframe`); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/initiators-window-open.sub.https.html b/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/initiators-window-open.sub.https.html new file mode 100644 index 0000000..f786df0 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/initiators-window-open.sub.https.html
@@ -0,0 +1,68 @@ +<!DOCTYPE html> +<meta name="variant" content="?cross-site"> +<meta name="variant" content="?same-site"> +<meta name="timeout" content="long"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> +<script src="/common/utils.js"></script> +<script src="resources/utils.sub.js"></script> +<script> + // In https://html.spec.whatwg.org/multipage/browsing-the-web.html#navigate, + // `sourceDocument` (instead of `navigable`'s active document) should be + // used as the referring document for prefetch. + promise_test(async t => { + assert_implements(HTMLScriptElement.supports('speculationrules'), "Speculation Rules not supported"); + + const win = await spawnWindow(t, { protocol: 'https' }); + + const hostname = + location.search === '?cross-site' ? '{{hosts[alt][www]}}' : undefined; + const nextUrl = win.getExecutorURL({ protocol: 'https', hostname, page: 2 }); + + await win.forceSinglePrefetch(nextUrl); + + await win.execute_script((url) => { + window.executor.suspend(() => { + window.open(url, "_blank"); + }); + }, [nextUrl]); + + // Below, the scripts given to `win.execute_script()` are executed on the + // `nextUrl` page in the new window, because `window.executor.suspend()` + // above made `win`'s original page stop processing `execute_script()`, + // while the new page of `nextUrl` in the new window starts processing + // `execute_script()` for the same ID. Same for below. + assert_equals( + await win.execute_script(() => location.href), + nextUrl.toString(), + "expected navigation to reach destination URL"); + + assert_prefetched(await win.getRequestHeaders()); + }, `window.open()`); + + promise_test(async t => { + assert_implements(HTMLScriptElement.supports('speculationrules'), "Speculation Rules not supported"); + + const win = await spawnWindow(t, { protocol: 'https' }); + + const hostname = + location.search === '?cross-site' ? '{{hosts[alt][www]}}' : undefined; + const nextUrl = win.getExecutorURL({ protocol: 'https', hostname, page: 2 }); + + await win.forceSinglePrefetch(nextUrl); + + await win.execute_script((url) => { + window.executor.suspend(() => { + window.open(url, "_blank", "noopener"); + }); + }, [nextUrl]); + + assert_equals( + await win.execute_script(() => location.href), + nextUrl.toString(), + "expected navigation to reach destination URL"); + + assert_prefetched(await win.getRequestHeaders()); + }, `window.open(noopener)`); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/prefetch-traverse-reload.sub.html b/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/prefetch-traverse-reload.sub.html index 3f1312e..ec6a7cd9 100644 --- a/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/prefetch-traverse-reload.sub.html +++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/prefetch-traverse-reload.sub.html
@@ -33,6 +33,36 @@ let agent = await spawnWindow(t, { protocol: 'https', pipe: 'header(Cache-Control, no-store)' }); let previousUrl = await agent.execute_script(() => location.href); + await agent.execute_script(async () => { + window.preventBfcache = new WebSocket('wss://{{ports[wss][0]}}/echo'); + }); + + let nextUrl = agent.getExecutorURL({ protocol: 'https', page: 2 }); + await agent.navigate(nextUrl); + + await agent.forceSinglePrefetch(previousUrl); + // In https://html.spec.whatwg.org/multipage/nav-history-apis.html#delta-traverse, + // `sourceDocument` is `History`'s relevant global object's associated + // Document. In this case, it's `iframe.contentDocument`, and thus the + // prefetch from `win`'s Document (iframe's parent Document) isn't used. + await agent.execute_script(() => { + window.executor.suspend(() => { + const iframe = document.createElement('iframe'); + document.body.appendChild(iframe); + iframe.contentWindow.history.go(-1); + }); + }); + + assert_equals(previousUrl, await agent.execute_script(() => location.href)); + assert_not_prefetched(await agent.getRequestHeaders(), + "prefetch from different Document should not be used"); +}, "History's Document is used for traversal navigations"); + +promise_test(async t => { + assert_implements(HTMLScriptElement.supports('speculationrules'), "Speculation Rules not supported"); + + let agent = await spawnWindow(t, { protocol: 'https', pipe: 'header(Cache-Control, no-store)' }); + let previousUrl = await agent.execute_script(() => location.href); await agent.forceSinglePrefetch(previousUrl); await agent.execute_script(() => { window.executor.suspend(() => location.reload());
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/prefetch.https-expected.txt b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/prefetch.https-expected.txt new file mode 100644 index 0000000..e0a8051 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/prefetch.https-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL Prerender navigation requests should use prefetched results assert_equals: Network request count expected "1" but got "2" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/prefetch.https.html b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/prefetch.https.html index 48de5ad..2a1553b 100644 --- a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/prefetch.https.html +++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/prefetch.https.html
@@ -15,7 +15,7 @@ await create_prerendered_page(t, {}, {prefetch: true}, {}); assert_equals(await tryToActivate(), 'activated'); - assert_equals(await getNetworkRequestCount(), '2', 'Network request count'); -}, "Prerender navigation requests don't use prefetched results (for now)"); + assert_equals(await getNetworkRequestCount(), '1', 'Network request count'); +}, "Prerender navigation requests should use prefetched results"); </script> </body>
diff --git a/third_party/blink/web_tests/external/wpt/webtransport/close.https.any-expected.txt b/third_party/blink/web_tests/external/wpt/webtransport/close.https.any-expected.txt new file mode 100644 index 0000000..7032e669 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webtransport/close.https.any-expected.txt
@@ -0,0 +1,13 @@ +This is a testharness.js-based test. +PASS close +PASS close with code and reason +PASS close with code and long reason +PASS server initiated closure without code and reason +PASS server initiated closure with code and reason +PASS server initiated connection closure +FAIL opening unidirectional stream before ready promise_test: Unhandled rejection with value: object "NetworkError: Failed to execute 'createUnidirectionalStream' on 'WebTransport': No connection." +FAIL opening bidirectional stream before ready promise_test: Unhandled rejection with value: object "NetworkError: Failed to execute 'createBidirectionalStream' on 'WebTransport': No connection." +PASS server initiated closure while opening unidirectional stream before ready +PASS server initiated closure while opening bidirectional stream before ready +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.js b/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.js index 642d716a..de67503 100644 --- a/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.js +++ b/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.js
@@ -14,7 +14,7 @@ const close_info = await wt.closed; - assert_equals(close_info.closeCode, 0 , 'code'); + assert_equals(close_info.closeCode, 0, 'code'); assert_equals(close_info.reason, '', 'reason'); await wait(10); @@ -129,3 +129,25 @@ assert_equals(e.source, 'session', 'source'); assert_equals(e.streamErrorCode, null, 'streamErrorCode'); }, 'server initiated connection closure'); + +promise_test(async t => { + const wt = new WebTransport(webtransport_url('echo.py')); + const stream = await wt.createUnidirectionalStream(); + await wt.ready; +}, 'opening unidirectional stream before ready'); + +promise_test(async t => { + const wt = new WebTransport(webtransport_url('echo.py')); + const stream = await wt.createBidirectionalStream(); + await wt.ready; +}, 'opening bidirectional stream before ready'); + +promise_test(async t => { + const wt = new WebTransport(webtransport_url('server-close.py')); + promise_rejects_dom(t, "InvalidStateError", wt.createUnidirectionalStream()); +}, 'server initiated closure while opening unidirectional stream before ready'); + +promise_test(async t => { + const wt = new WebTransport(webtransport_url('server-close.py')); + promise_rejects_dom(t, "InvalidStateError", wt.createBidirectionalStream()); +}, 'server initiated closure while opening bidirectional stream before ready');
diff --git a/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.serviceworker-expected.txt b/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.serviceworker-expected.txt new file mode 100644 index 0000000..7032e669 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.serviceworker-expected.txt
@@ -0,0 +1,13 @@ +This is a testharness.js-based test. +PASS close +PASS close with code and reason +PASS close with code and long reason +PASS server initiated closure without code and reason +PASS server initiated closure with code and reason +PASS server initiated connection closure +FAIL opening unidirectional stream before ready promise_test: Unhandled rejection with value: object "NetworkError: Failed to execute 'createUnidirectionalStream' on 'WebTransport': No connection." +FAIL opening bidirectional stream before ready promise_test: Unhandled rejection with value: object "NetworkError: Failed to execute 'createBidirectionalStream' on 'WebTransport': No connection." +PASS server initiated closure while opening unidirectional stream before ready +PASS server initiated closure while opening bidirectional stream before ready +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.sharedworker-expected.txt b/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.sharedworker-expected.txt new file mode 100644 index 0000000..7032e669 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.sharedworker-expected.txt
@@ -0,0 +1,13 @@ +This is a testharness.js-based test. +PASS close +PASS close with code and reason +PASS close with code and long reason +PASS server initiated closure without code and reason +PASS server initiated closure with code and reason +PASS server initiated connection closure +FAIL opening unidirectional stream before ready promise_test: Unhandled rejection with value: object "NetworkError: Failed to execute 'createUnidirectionalStream' on 'WebTransport': No connection." +FAIL opening bidirectional stream before ready promise_test: Unhandled rejection with value: object "NetworkError: Failed to execute 'createBidirectionalStream' on 'WebTransport': No connection." +PASS server initiated closure while opening unidirectional stream before ready +PASS server initiated closure while opening bidirectional stream before ready +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.worker-expected.txt b/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.worker-expected.txt new file mode 100644 index 0000000..7032e669 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.worker-expected.txt
@@ -0,0 +1,13 @@ +This is a testharness.js-based test. +PASS close +PASS close with code and reason +PASS close with code and long reason +PASS server initiated closure without code and reason +PASS server initiated closure with code and reason +PASS server initiated connection closure +FAIL opening unidirectional stream before ready promise_test: Unhandled rejection with value: object "NetworkError: Failed to execute 'createUnidirectionalStream' on 'WebTransport': No connection." +FAIL opening bidirectional stream before ready promise_test: Unhandled rejection with value: object "NetworkError: Failed to execute 'createBidirectionalStream' on 'WebTransport': No connection." +PASS server initiated closure while opening unidirectional stream before ready +PASS server initiated closure while opening bidirectional stream before ready +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-display-none-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-display-none-expected.png index 7ef4e11..230a02d 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-display-none-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-display-none-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-expected.png index 2e1500fd..a66f51f 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-thumb-display-none-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-thumb-display-none-expected.png index bbc7734..7e5f423 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-thumb-display-none-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-thumb-display-none-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-thumb-hover-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-thumb-hover-expected.png index 08e6a71..4f2ff677 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-thumb-hover-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-thumb-hover-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-track-display-none-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-track-display-none-expected.png index cc2647e..448f3372 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-track-display-none-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-track-display-none-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-track-hover-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-track-hover-expected.png index cc024b1..d442a449 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-track-hover-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-custom-scrollbar-track-hover-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-expected.png index 8a66b4c..c05329c1 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-fractional-width-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-fractional-width-expected.png index 4dcdccea..0c1fb17 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-fractional-width-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-fractional-width-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-long-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-long-expected.png index c86c7546..c96c528 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-long-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-long-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-many-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-many-expected.png index 4808ca87..773df76d 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-many-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-many-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-minimum-font-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-minimum-font-expected.png index a8144b3..07f9952c 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-minimum-font-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-minimum-font-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-rtl-default-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-rtl-default-expected.png index cb80ecb7..af830ad 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-rtl-default-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-rtl-default-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-rtl-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-rtl-expected.png index 6a01c42..b8e42b9a 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-single-option-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-single-option-expected.png index bb525de..051135c 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-single-option-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-single-option-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-size-changed-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-size-changed-expected.png index 2dd8a99..ddfc4b8 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-size-changed-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-size-changed-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-styled-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-styled-expected.png index db36248..0660440e 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-styled-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-styled-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-tall-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-tall-expected.png index ac2acaec..72883eed 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-tall-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-tall-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-text-align-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-text-align-expected.png index 9c0d6cd..12b8840 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-text-align-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-text-align-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-texttransform-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-texttransform-expected.png index 69933f8..7d9e4b58 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-texttransform-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-texttransform-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-transform-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-transform-expected.png index 879028c..6320796 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-transform-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-transform-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png index e78027a..68446908a 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-zoom110-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-zoom110-expected.png index cd6c67a..a151580 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-zoom110-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-zoom110-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-different-font-indentation-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-different-font-indentation-expected.png index 0871af9..8f12887 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-different-font-indentation-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-different-font-indentation-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-move-after-open-expected.png b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-move-after-open-expected.png index 54c0c09..838f9e94 100644 --- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-move-after-open-expected.png +++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-move-after-open-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/paint/invalidation/selection/selection-within-composited-scroller-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/paint/invalidation/selection/selection-within-composited-scroller-expected.png index 34f265f..d7ce399 100644 --- a/third_party/blink/web_tests/flag-specific/highdpi/paint/invalidation/selection/selection-within-composited-scroller-expected.png +++ b/third_party/blink/web_tests/flag-specific/highdpi/paint/invalidation/selection/selection-within-composited-scroller-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/paint/text/selection-no-clip-text-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/paint/text/selection-no-clip-text-expected.png index 57e611f..1bae4261 100644 --- a/third_party/blink/web_tests/flag-specific/highdpi/paint/text/selection-no-clip-text-expected.png +++ b/third_party/blink/web_tests/flag-specific/highdpi/paint/text/selection-no-clip-text-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/virtual/text-antialias/selection/flexbox-selection-nested-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/virtual/text-antialias/selection/flexbox-selection-nested-expected.png index f65d2ff..d84d7f2 100644 --- a/third_party/blink/web_tests/flag-specific/highdpi/virtual/text-antialias/selection/flexbox-selection-nested-expected.png +++ b/third_party/blink/web_tests/flag-specific/highdpi/virtual/text-antialias/selection/flexbox-selection-nested-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/virtual/text-antialias/selection/selection-painting-hidpi-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/virtual/text-antialias/selection/selection-painting-hidpi-expected.png index bf46b6b..d9d24d2 100644 --- a/third_party/blink/web_tests/flag-specific/highdpi/virtual/text-antialias/selection/selection-painting-hidpi-expected.png +++ b/third_party/blink/web_tests/flag-specific/highdpi/virtual/text-antialias/selection/selection-painting-hidpi-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/resources/inspector-protocol-test.js b/third_party/blink/web_tests/http/tests/inspector-protocol/resources/inspector-protocol-test.js index 52ff838c..77c3410 100644 --- a/third_party/blink/web_tests/http/tests/inspector-protocol/resources/inspector-protocol-test.js +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/resources/inspector-protocol-test.js
@@ -198,6 +198,12 @@ return this._browserSession.protocol; } + async attachFullBrowserSession() { + const bp = this._browserSession.protocol; + const browserSessionId = (await bp.Target.attachToBrowserTarget()).result.sessionId; + return new TestRunner.Session(this, browserSessionId); + } + async createPage(options) { options = options || {}; const browserProtocol = this._browserSession.protocol;
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/target/browser-auto-attach-invalid-filter-error-expected.txt b/third_party/blink/web_tests/http/tests/inspector-protocol/target/browser-auto-attach-invalid-filter-error-expected.txt new file mode 100644 index 0000000..06782001 --- /dev/null +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/target/browser-auto-attach-invalid-filter-error-expected.txt
@@ -0,0 +1,10 @@ +Tests enabling auto-attach on Browser with filter allowing both tab and page results in an error. +Expected error when auto-attaching with wildcard filter{ + error : { + code : -32602 + message : Filter should not simultaneously allow "tab" and "page", page targets are attached via tab targets + } + id : <number> + sessionId : <string> +} +
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/target/browser-auto-attach-invalid-filter-error.js b/third_party/blink/web_tests/http/tests/inspector-protocol/target/browser-auto-attach-invalid-filter-error.js new file mode 100644 index 0000000..ef69691 --- /dev/null +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/target/browser-auto-attach-invalid-filter-error.js
@@ -0,0 +1,14 @@ +(async function(testRunner) { + const pageURL = 'http://127.0.0.1:8000/inspector-protocol/resources/inspector-protocol-page.html'; + const {session, dp} = await testRunner.startURL(pageURL, + 'Tests enabling auto-attach on Browser with filter allowing both tab and page results in an error.'); + + const bp = (await testRunner.attachFullBrowserSession()).protocol; + + bp.Target.onAttachedToTarget(event => { + testRunner.log(event.params, 'FAIL: unexpected attachedToTarget event'); + }); + const err = await bp.Target.setAutoAttach({autoAttach: true, waitForDebuggerOnStart: true, flatten: true, filter: [{}]}); + testRunner.log(err, 'Expected error when auto-attaching with wildcard filter'); + testRunner.completeTest(); +});
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/target/browser-auto-attach-tab-expected.txt b/third_party/blink/web_tests/http/tests/inspector-protocol/target/browser-auto-attach-tab-expected.txt new file mode 100644 index 0000000..d84a6da --- /dev/null +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/target/browser-auto-attach-tab-expected.txt
@@ -0,0 +1,57 @@ +Tests auto-attahcing tab targets from browser targets. +Attached to target: { + sessionId : <string> + targetInfo : { + attached : true + browserContextId : <string> + canAccessOpener : false + targetId : <string> + title : 127.0.0.1:8000/inspector-protocol/resources/inspector-protocol-page.html + type : tab + url : http://127.0.0.1:8000/inspector-protocol/resources/inspector-protocol-page.html + } + waitingForDebugger : false +} +Response to runIfWaitingForDebugger: { + id : <number> + result : { + } + sessionId : <string> +} +Creating a new target, expect it paused +Attached to target: { + sessionId : <string> + targetInfo : { + attached : true + browserContextId : <string> + canAccessOpener : false + targetId : <string> + title : + type : tab + url : + } + waitingForDebugger : true +} +Page attached via tab target: { + sessionId : <string> + targetInfo : { + attached : true + browserContextId : <string> + canAccessOpener : false + targetId : <string> + title : + type : page + url : http://127.0.0.1:8000/inspector-protocol/resources/test-page.html + } + waitingForDebugger : false +} +Resuming target +Response to runIfWaitingForDebugger: { + id : <number> + result : { + } + sessionId : <string> +} +Requesting http://127.0.0.1:8000/inspector-protocol/resources/test-page.html +load event fired +
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/target/browser-auto-attach-tab.js b/third_party/blink/web_tests/http/tests/inspector-protocol/target/browser-auto-attach-tab.js new file mode 100644 index 0000000..ee75be57 --- /dev/null +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/target/browser-auto-attach-tab.js
@@ -0,0 +1,57 @@ +(async function(testRunner) { + const pageURL = 'http://127.0.0.1:8000/inspector-protocol/resources/inspector-protocol-page.html'; + const {session, dp} = await testRunner.startURL(pageURL, + 'Tests auto-attahcing tab targets from browser targets.'); + + const browserSession = await testRunner.attachFullBrowserSession(); + const bp = browserSession.protocol; + + await bp.Fetch.enable({}); + bp.Fetch.onRequestPaused(e => { + testRunner.log(`Requesting ${e.params.request.url}`); + bp.Fetch.continueRequest({requestId: e.params.requestId}); + }); + bp.Target.onAttachedToTarget(({params}) => { + // Pretend the test page is not there. + if (params.targetInfo.url === location.href) + return; + testRunner.log(params, 'Attached to target: '); + }); + const enableAutoAttachPromise = bp.Target.setAutoAttach({ + autoAttach: true, + waitForDebuggerOnStart: true, + flatten: true, + filter: [{'type': 'tab'}] + }); + + { + // Assure issuing runIfWaitingForDebugger to a non-paused target is not + // an error, for compatibility with other targets. + const {params} = await bp.Target.onceAttachedToTarget(); + const tp = browserSession.createChild(params.sessionId).protocol; + const response = await tp.Runtime.runIfWaitingForDebugger(); + testRunner.log(response, 'Response to runIfWaitingForDebugger: '); + } + + await enableAutoAttachPromise; + const newUrl = testRunner.url('../resources/test-page.html'); + testRunner.log('Creating a new target, expect it paused'); + const createTargetPromise = bp.Target.createTarget({url: newUrl}); + const tabTarget = (await bp.Target.onceAttachedToTarget()).params; + await createTargetPromise; + + const tabSession = browserSession.createChild(tabTarget.sessionId); + const tp = tabSession.protocol; + tp.Target.setAutoAttach({autoAttach: true, waitForDebuggerOnStart: true, flatten: true}); + const pageTarget = (await tp.Target.onceAttachedToTarget()).params; + testRunner.log(pageTarget, 'Page attached via tab target: '); + const pageSession = browserSession.createChild(pageTarget.sessionId); + pageSession.protocol.Page.enable(); + + testRunner.log('Resuming target'); + const response = await tp.Runtime.runIfWaitingForDebugger(); + testRunner.log(response, 'Response to runIfWaitingForDebugger: '); + await pageSession.protocol.Page.onceLoadEventFired(); + testRunner.log('load event fired'); + testRunner.completeTest(); +});
diff --git a/third_party/blink/web_tests/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl.html b/third_party/blink/web_tests/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl.html index 3e39d5f..9796730 100644 --- a/third_party/blink/web_tests/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl.html +++ b/third_party/blink/web_tests/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl.html
@@ -16,6 +16,7 @@ unicode-bidi: bidi-override; width: 2em; } +body { background-color: lightgreen; } </style> <div id="container"> xx y
diff --git a/third_party/blink/web_tests/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr.html b/third_party/blink/web_tests/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr.html index 1ce4218..8b62fc3c 100644 --- a/third_party/blink/web_tests/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr.html +++ b/third_party/blink/web_tests/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr.html
@@ -15,6 +15,7 @@ height: 2em; -webkit-writing-mode: vertical-lr; } +body { background-color: lightgreen; } </style> <div id="container"> xx y
diff --git a/third_party/blink/web_tests/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl.html b/third_party/blink/web_tests/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl.html index 899ee42a..4110e06 100644 --- a/third_party/blink/web_tests/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl.html +++ b/third_party/blink/web_tests/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl.html
@@ -15,6 +15,7 @@ height: 2em; -webkit-writing-mode: vertical-rl; } +body { background-color: lightgreen; } </style> <div id="container"> xx y
diff --git a/third_party/blink/web_tests/paint/invalidation/selection/invalidation-rect-includes-newline.html b/third_party/blink/web_tests/paint/invalidation/selection/invalidation-rect-includes-newline.html index df16a6a..679f65e7 100644 --- a/third_party/blink/web_tests/paint/invalidation/selection/invalidation-rect-includes-newline.html +++ b/third_party/blink/web_tests/paint/invalidation/selection/invalidation-rect-includes-newline.html
@@ -14,6 +14,7 @@ font-family: Ahem; width: 2em; } +body { background-color: lightgreen; } </style> <div id="container"> xx y
diff --git a/third_party/blink/web_tests/paint/invalidation/selection/invalidation-rect-with-br-includes-newline.html b/third_party/blink/web_tests/paint/invalidation/selection/invalidation-rect-with-br-includes-newline.html index 11593f3..99b8705 100644 --- a/third_party/blink/web_tests/paint/invalidation/selection/invalidation-rect-with-br-includes-newline.html +++ b/third_party/blink/web_tests/paint/invalidation/selection/invalidation-rect-with-br-includes-newline.html
@@ -15,6 +15,7 @@ div { font-family: Ahem; } +body { background-color: lightgreen; } </style> <div id="container"> a<br>b
diff --git a/third_party/blink/web_tests/paint/selection/text-selection-newline-across-blocks-line-beginning-end.html b/third_party/blink/web_tests/paint/selection/text-selection-newline-across-blocks-line-beginning-end.html index b5743c6..3d53d20 100644 --- a/third_party/blink/web_tests/paint/selection/text-selection-newline-across-blocks-line-beginning-end.html +++ b/third_party/blink/web_tests/paint/selection/text-selection-newline-across-blocks-line-beginning-end.html
@@ -5,9 +5,8 @@ <script src="../../resources/run-after-layout-and-paint.js"></script> <script src="resources/selection.js"></script> <style> -div { - font-family: Ahem; -} +div { font-family: Ahem; } +body { background-color: lightgreen; } </style> </head> <body onload="selectRangeAfterLayoutAndPaint(container, 0, container2, 0);">
diff --git a/third_party/blink/web_tests/paint/selection/text-selection-newline-across-blocks.html b/third_party/blink/web_tests/paint/selection/text-selection-newline-across-blocks.html index 1d390c5e..7d902a05 100644 --- a/third_party/blink/web_tests/paint/selection/text-selection-newline-across-blocks.html +++ b/third_party/blink/web_tests/paint/selection/text-selection-newline-across-blocks.html
@@ -5,9 +5,8 @@ <script src="../../resources/run-after-layout-and-paint.js"></script> <script src="resources/selection.js"></script> <style> -div { - font-family: Ahem; -} +div { font-family: Ahem; } +body { background-color: lightgreen; } </style> </head> <body onload="selectRangeAfterLayoutAndPaint(container, 0, container2, 1);">
diff --git a/third_party/blink/web_tests/paint/selection/text-selection-newline-br.html b/third_party/blink/web_tests/paint/selection/text-selection-newline-br.html index c20ad73..55e5439b 100644 --- a/third_party/blink/web_tests/paint/selection/text-selection-newline-br.html +++ b/third_party/blink/web_tests/paint/selection/text-selection-newline-br.html
@@ -2,6 +2,9 @@ <script src="../../resources/ahem.js"></script> <script src="../../resources/run-after-layout-and-paint.js"></script> <script src="resources/selection.js"></script> +<style> + body { background-color: lightgreen; } +</style> <!-- Two lines in one block explicitly wrapped with a br which should include space representing a newline at end of the first line. --> <div id="container" style="font-family: Ahem;">
diff --git a/third_party/blink/web_tests/paint/selection/text-selection-newline-rtl.html b/third_party/blink/web_tests/paint/selection/text-selection-newline-rtl.html index dffb821b..c871fbd 100644 --- a/third_party/blink/web_tests/paint/selection/text-selection-newline-rtl.html +++ b/third_party/blink/web_tests/paint/selection/text-selection-newline-rtl.html
@@ -11,6 +11,7 @@ unicode-bidi: bidi-override; width: 2em; } +body { background-color: lightgreen; } </style> </head> <body onload="selectRange(container, 0, container, 1);">
diff --git a/third_party/blink/web_tests/paint/selection/text-selection-newline-span-across-line.html b/third_party/blink/web_tests/paint/selection/text-selection-newline-span-across-line.html index 9777226..28cc459 100644 --- a/third_party/blink/web_tests/paint/selection/text-selection-newline-span-across-line.html +++ b/third_party/blink/web_tests/paint/selection/text-selection-newline-span-across-line.html
@@ -9,6 +9,7 @@ font-family: Ahem; width: 4em; } +body { background-color: lightgreen; } </style> </head> <body onload="selectRangeAfterLayoutAndPaint(container, 0, container, 3);">
diff --git a/third_party/blink/web_tests/paint/selection/text-selection-newline-span.html b/third_party/blink/web_tests/paint/selection/text-selection-newline-span.html index f0b9296..4bb1968 100644 --- a/third_party/blink/web_tests/paint/selection/text-selection-newline-span.html +++ b/third_party/blink/web_tests/paint/selection/text-selection-newline-span.html
@@ -9,6 +9,7 @@ font-family: Ahem; width: 5em; } +body { background-color: lightgreen; } </style> </head> <body onload="selectRangeAfterLayoutAndPaint(container, 0, container, 3);">
diff --git a/third_party/blink/web_tests/paint/selection/text-selection-newline-vertical-lr.html b/third_party/blink/web_tests/paint/selection/text-selection-newline-vertical-lr.html index 1325231..97ee8873 100644 --- a/third_party/blink/web_tests/paint/selection/text-selection-newline-vertical-lr.html +++ b/third_party/blink/web_tests/paint/selection/text-selection-newline-vertical-lr.html
@@ -10,6 +10,7 @@ height: 2em; -webkit-writing-mode: vertical-lr; } +body { background-color: lightgreen; } </style> </head> <body onload="selectRange(container, 0, container, 1);">
diff --git a/third_party/blink/web_tests/paint/selection/text-selection-newline-vertical-rl.html b/third_party/blink/web_tests/paint/selection/text-selection-newline-vertical-rl.html index bad3618..2e53d22d 100644 --- a/third_party/blink/web_tests/paint/selection/text-selection-newline-vertical-rl.html +++ b/third_party/blink/web_tests/paint/selection/text-selection-newline-vertical-rl.html
@@ -10,6 +10,7 @@ height: 2em; -webkit-writing-mode: vertical-rl; } +body { background-color: lightgreen; } </style> </head> <body onload="selectRange(container, 0, container, 1);">
diff --git a/third_party/blink/web_tests/paint/selection/text-selection-newline.html b/third_party/blink/web_tests/paint/selection/text-selection-newline.html index 200a49e..80b29a1 100644 --- a/third_party/blink/web_tests/paint/selection/text-selection-newline.html +++ b/third_party/blink/web_tests/paint/selection/text-selection-newline.html
@@ -9,6 +9,7 @@ font-family: Ahem; width: 2em; } +body { background-color: lightgreen; } </style> </head> <body onload="selectRange(container, 0, container, 1);">
diff --git a/third_party/blink/web_tests/paint/selection/text-selection-update-style.html b/third_party/blink/web_tests/paint/selection/text-selection-update-style.html index c5a77393..f5745ae8 100644 --- a/third_party/blink/web_tests/paint/selection/text-selection-update-style.html +++ b/third_party/blink/web_tests/paint/selection/text-selection-update-style.html
@@ -4,6 +4,7 @@ <!-- Updating display property should let selection show the element. --> <style> div { font-family: Ahem} + body { background-color: lightgreen; } </style> <div id="r1">foo</div> <div id="r2" style="display: none">bar</div>
diff --git a/third_party/blink/web_tests/platform/linux/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png b/third_party/blink/web_tests/platform/linux/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png index c212017..84b05c92 100644 --- a/third_party/blink/web_tests/platform/linux/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png +++ b/third_party/blink/web_tests/platform/linux/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/compositing/squashing/selection-repaint-with-gaps-expected.png b/third_party/blink/web_tests/platform/linux/compositing/squashing/selection-repaint-with-gaps-expected.png index 57fd2a19..3c3b30b 100644 --- a/third_party/blink/web_tests/platform/linux/compositing/squashing/selection-repaint-with-gaps-expected.png +++ b/third_party/blink/web_tests/platform/linux/compositing/squashing/selection-repaint-with-gaps-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/execCommand/findString-2-expected.png b/third_party/blink/web_tests/platform/linux/editing/execCommand/findString-2-expected.png index 7ed11b7..3d948fe 100644 --- a/third_party/blink/web_tests/platform/linux/editing/execCommand/findString-2-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/execCommand/findString-2-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/4402375-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/4402375-expected.png index 6eb90574a..273a0a21 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/4402375-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/4402375-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/5099303-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/5099303-expected.png index fbaf8c1..4f16486 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/5099303-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/5099303-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/5195166-2-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/5195166-2-expected.png index e5a6602d..325d4c4a 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/5195166-2-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/5195166-2-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/5232159-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/5232159-expected.png index 111bfd6..b02c471 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/5232159-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/5232159-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/display-table-text-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/display-table-text-expected.png index b8fd400..02222a8 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/display-table-text-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/display-table-text-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-expected.png index acef5e52..e2b24bd 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-ltr-mixed-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-ltr-mixed-expected.png index 6844602..69939d4 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-ltr-mixed-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-ltr-mixed-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl-expected.png index 69892b16..4382042 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl-mixed-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl-mixed-expected.png index b721fcfe..9c36eaa0 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl-mixed-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl-mixed-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/inline-closest-leaf-child-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/inline-closest-leaf-child-expected.png index 0f54bc2c2..641cf96 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/inline-closest-leaf-child-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/inline-closest-leaf-child-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/japanese-lr-selection-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/japanese-lr-selection-expected.png index ff353d5..fdcc78d 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/japanese-lr-selection-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/japanese-lr-selection-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/japanese-rl-selection-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/japanese-rl-selection-expected.png index 0fc52e4c..5e882a71 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/japanese-rl-selection-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/japanese-rl-selection-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/line-wrap-1-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/line-wrap-1-expected.png index f21dc95..c31cdb4 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/line-wrap-1-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/line-wrap-1-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/line-wrap-2-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/line-wrap-2-expected.png index 7d962658..48b2c81 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/line-wrap-2-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/line-wrap-2-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/range-between-block-and-inline-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/range-between-block-and-inline-expected.png index c0fc71a..1984938 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/range-between-block-and-inline-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/range-between-block-and-inline-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/select-missing-image-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/select-missing-image-expected.png index fb3dec7..0fb1f42 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/select-missing-image-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/select-missing-image-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/select-text-overflow-ellipsis-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/select-text-overflow-ellipsis-expected.png index 4c7273bb..bbc2f5a 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/select-text-overflow-ellipsis-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/select-text-overflow-ellipsis-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/select-text-overflow-ellipsis-mixed-in-ltr-2-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/select-text-overflow-ellipsis-mixed-in-ltr-2-expected.png index ae95706..90abdfb2 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/select-text-overflow-ellipsis-mixed-in-ltr-2-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/select-text-overflow-ellipsis-mixed-in-ltr-2-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/select-text-overflow-ellipsis-mixed-in-ltr-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/select-text-overflow-ellipsis-mixed-in-ltr-expected.png index 29cb96c5..cce5bf27 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/select-text-overflow-ellipsis-mixed-in-ltr-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/select-text-overflow-ellipsis-mixed-in-ltr-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/select-text-overflow-ellipsis-mixed-in-rtl-2-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/select-text-overflow-ellipsis-mixed-in-rtl-2-expected.png index 7abaa6c..0d73f631 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/select-text-overflow-ellipsis-mixed-in-rtl-2-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/select-text-overflow-ellipsis-mixed-in-rtl-2-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/select-text-overflow-ellipsis-mixed-in-rtl-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/select-text-overflow-ellipsis-mixed-in-rtl-expected.png index 1ef35f5..2e22aab 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/select-text-overflow-ellipsis-mixed-in-rtl-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/select-text-overflow-ellipsis-mixed-in-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/selection-button-text-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/selection-button-text-expected.png index 7e23b37..0b03457 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/selection-button-text-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/selection-button-text-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/selection-color-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/selection-color-expected.png index bcb6a976..9831064 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/selection-color-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/selection-color-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/transformed-selection-rects-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/transformed-selection-rects-expected.png index bce7195..19d96a54 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/transformed-selection-rects-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/transformed-selection-rects-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/vertical-lr-replaced-selection-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/vertical-lr-replaced-selection-expected.png index 3cd3f600..ad07104 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/vertical-lr-replaced-selection-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/vertical-lr-replaced-selection-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/vertical-rl-replaced-selection-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/vertical-rl-replaced-selection-expected.png index 3a10e0cd..e02b5c8 100644 --- a/third_party/blink/web_tests/platform/linux/editing/selection/vertical-rl-replaced-selection-expected.png +++ b/third_party/blink/web_tests/platform/linux/editing/selection/vertical-rl-replaced-selection-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/dom/52776-expected.png b/third_party/blink/web_tests/platform/linux/fast/dom/52776-expected.png index 03dc3600..ee22306 100644 --- a/third_party/blink/web_tests/platform/linux/fast/dom/52776-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/dom/52776-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/dynamic/selection-highlight-adjust-expected.png b/third_party/blink/web_tests/platform/linux/fast/dynamic/selection-highlight-adjust-expected.png index dc0692a..ea4ba86 100644 --- a/third_party/blink/web_tests/platform/linux/fast/dynamic/selection-highlight-adjust-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/dynamic/selection-highlight-adjust-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/events/updateLayoutForHitTest-expected.png b/third_party/blink/web_tests/platform/linux/fast/events/updateLayoutForHitTest-expected.png index 99ccc0c..148e5d5 100644 --- a/third_party/blink/web_tests/platform/linux/fast/events/updateLayoutForHitTest-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/events/updateLayoutForHitTest-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png index cf07dbf..0f77283 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/select/select-multiple-hover-focused-unselected-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/select/select-multiple-hover-focused-unselected-expected.png index 8bfa0fd..22ce7c0 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/select/select-multiple-hover-focused-unselected-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/select/select-multiple-hover-focused-unselected-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/text-selection-outside-control-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/text-selection-outside-control-expected.png index 7678cdb..0da7ed3d 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/text-selection-outside-control-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/text-selection-outside-control-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-expected.png index f59f4eb..121cd5f 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-fractional-width-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-fractional-width-expected.png index fef800c7..8fafd3b 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-fractional-width-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-fractional-width-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-long-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-long-expected.png index 3803764..fefa8a31 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-long-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-long-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-many-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-many-expected.png index bf4e7743..94df1135 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-many-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-many-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-minimum-font-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-minimum-font-expected.png index 518905bd..9c7137e 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-minimum-font-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-minimum-font-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-rtl-default-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-rtl-default-expected.png index cdeab25..d38672b 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-rtl-default-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-rtl-default-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-rtl-expected.png index 0e73d0b..7632b30 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-rtl-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-single-option-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-single-option-expected.png index 6ba6edc2c..6680737 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-single-option-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-single-option-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-styled-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-styled-expected.png index ed506e88..50e41e7 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-styled-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-styled-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-tall-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-tall-expected.png index 1b41db3..77d37bf6 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-tall-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-tall-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-text-align-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-text-align-expected.png index 4933ef5..6bb90ee7 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-text-align-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-text-align-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-texttransform-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-texttransform-expected.png index f689f5f..6589070e 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-texttransform-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-texttransform-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-transform-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-transform-expected.png index ced896a..f800d9f 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-transform-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-transform-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png index e0b21fde..614f7685 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-zoom110-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-zoom110-expected.png index b29e903b..d691df4 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-zoom110-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-appearance-zoom110-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-different-font-indentation-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-different-font-indentation-expected.png index 9281a96..1a90af9 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-different-font-indentation-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-different-font-indentation-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-move-after-open-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-move-after-open-expected.png index e9f2970..074287e 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-move-after-open-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/select-popup/popup-menu-move-after-open-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/listbox-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select/listbox-appearance-basic-expected.png index 7636fff..7e0bab0 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/select/listbox-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/listbox-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/menulist-popup-type-ahead-style-change-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select/menulist-popup-type-ahead-style-change-expected.png index 624e22a..db86fab 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/select/menulist-popup-type-ahead-style-change-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/menulist-popup-type-ahead-style-change-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png index c7d9cc9..c0824b33 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/select/select-listbox-multiple-no-focusring-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/select/select-listbox-multiple-no-focusring-expected.png index d6ef883..e0892375 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/select/select-listbox-multiple-no-focusring-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/select/select-listbox-multiple-no-focusring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/tabbing-input-iframe-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/tabbing-input-iframe-expected.png index 8cb5f664..e1b96ea 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/tabbing-input-iframe-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/tabbing-input-iframe-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/text/input-appearance-selection-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/text/input-appearance-selection-expected.png index 490e13f9..a9646f7 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/text/input-appearance-selection-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/text/input-appearance-selection-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/text/input-double-click-selection-gap-bug-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/text/input-double-click-selection-gap-bug-expected.png index 4f0d6df..1204140 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/text/input-double-click-selection-gap-bug-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/text/input-double-click-selection-gap-bug-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/text/input-readonly-autoscroll-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/text/input-readonly-autoscroll-expected.png index 725ddc8d..5d22123 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/text/input-readonly-autoscroll-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/text/input-readonly-autoscroll-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/text/input-text-double-click-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/text/input-text-double-click-expected.png index ce06501..802071f 100644 --- a/third_party/blink/web_tests/platform/linux/fast/forms/text/input-text-double-click-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/forms/text/input-text-double-click-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/lists/markers-in-selection-expected.png b/third_party/blink/web_tests/platform/linux/fast/lists/markers-in-selection-expected.png index 155c585..4e85b931 100644 --- a/third_party/blink/web_tests/platform/linux/fast/lists/markers-in-selection-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/lists/markers-in-selection-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/overflow/image-selection-highlight-expected.png b/third_party/blink/web_tests/platform/linux/fast/overflow/image-selection-highlight-expected.png index 6dc38e2c..99cd3163 100644 --- a/third_party/blink/web_tests/platform/linux/fast/overflow/image-selection-highlight-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/overflow/image-selection-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/reflections/inline-crash-expected.png b/third_party/blink/web_tests/platform/linux/fast/reflections/inline-crash-expected.png index 8fbeba7..5b7a46b6 100644 --- a/third_party/blink/web_tests/platform/linux/fast/reflections/inline-crash-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/reflections/inline-crash-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/spatial-navigation/snav-multiple-select-focusring-expected.png b/third_party/blink/web_tests/platform/linux/fast/spatial-navigation/snav-multiple-select-focusring-expected.png index 6db79cc..5b2516ce 100644 --- a/third_party/blink/web_tests/platform/linux/fast/spatial-navigation/snav-multiple-select-focusring-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/spatial-navigation/snav-multiple-select-focusring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/inspector-protocol/emulation/select-popup-auto-dark-mode-expected.txt b/third_party/blink/web_tests/platform/linux/inspector-protocol/emulation/select-popup-auto-dark-mode-expected.txt index 67a5b366..70655fe 100644 --- a/third_party/blink/web_tests/platform/linux/inspector-protocol/emulation/select-popup-auto-dark-mode-expected.txt +++ b/third_party/blink/web_tests/platform/linux/inspector-protocol/emulation/select-popup-auto-dark-mode-expected.txt
@@ -1,6 +1,6 @@ [crbug/1311561] Tests that auto dark mode emulation from DevTools correctly emulates dark mode for select element === Before auto dark mode (autoDarkMode and prefers-color-scheme override) is not enabled === -data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAAAXNSR0IArs4c6QAAH19JREFUeJzt3X+QlfV96PHP7p6FVRYxZMPPZRcuNsSK4yXV5pbwQxNJII5Gy9oqVkXE8cLcQNW6ZNcQnUiLm8vVEKNINDgMHQxtpGJrNaCVmMnV3glpvTOpPwbvxrtN3ADTZIVEguye+4fJOtwFhGeXj46+Xv9kzvk+z/P57vnLd57zcCrK5XI5AAAAElS+2xsAAAA+OAQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaUrHctCyZctO9D7ed9ra2t7tLQAAwHvOOwbIsmXL/Md0AT43AADoy1ewAACANAIEAABII0AAAIA0/QqQ7373uzFz5syora2NYcOGxfTp0+PRRx895JhTTz01Bg0aFDU1NVFTUxNjxoyJ6667Lrq6uiIi4vOf/3yUSqUolUpRWVkZlZWVva+vvvrqiIg4++yz47777is0+1Of+lSffU+bNi2+853v9L7+3ve+F8OGDYtvfOMb/fk4AACAd1A4QDZt2hRNTU1xzTXXRGdnZ/z85z+PJUuWxPz582Pt2rWHHPvoo4/G/v37Y//+/fHcc8/Fiy++GH/+538eERFbtmyJgwcPxsGDB2PevHmxePHi3tfr16/v9+xXXnkl/v7v//6If8cjjzwSK1asiI997GNFPwoAAOAYFQqQAwcOxNKlS+P222+P+fPnR21tbdTU1MSll14aq1evjptuuin27dt32HMbGhri5ptvjn/8x38stOHjnf3lL385mpub4+DBg4e93o9//OPYsmVLDB069Khz77zzzujs7OzzfmdnZ3zta18r9LcAAMAHTaEA+ed//ufYtWtXXHfddX3W5s2bF6VSKbZt23bE87u7u2PQoEFFRh/37HPPPTfGjx8f999//2Gvd8stt8TJJ5981Jlr1qyJm266KaZPnx6vvfZa7/uvvfZaTJ8+PW644YYjXh8AAHhboQB59dVXY9SoUTFkyJA+a1VVVTFhwoR49dVX+6yVy+V45ZVXoq2tLZqamoqMPu7Z5XI5vvrVr8btt98ee/fuLTTzkksuifHjx8fOnTtjxowZ0dnZGZ2dnTFjxozYuXNnnHbaaXHhhRcWujYAAHyQFAqQ6urq6O7uPuJ6T09PVFa+felLLrkkamtr45RTTonPfvazMWPGjPirv/qrIqOPe3ZExJlnnhmf+9znYuXKlYVmjho1Kr7//e/HxIkTY+fOnTF16tSYOnVq7Ny5MyZOnBjPPPNMjBo1qtC1AQDgg+Qdfwn9cCZMmBC7du2KX/7yl3Hqqacestbd3R0/+clP4rTTTut97+/+7u9i9uzZ/dtpwdm/85WvfCXOOuusWLRoUVRUVBz33Pr6+nj66adj5syZ0d7eHhEREydOjO3bt8fo0aOL/TEAAPABU+gOyNlnnx319fVxzz339Fl76KGHorq6Oj796U/3e3MDOXvMmDGxaNGiuOWWW6K6urrQ7HHjxsUzzzwT9fX1MX78+Ni+fXvU19cXuhYAAHwQFboDUllZGffee29cfvnlMWLEiLj88sujVCrFY489FjfccEPcfffdMXjw4IHea79nNzc3x0c/+tHCD8BHvHUn5JlnnolSqSQ+AADgOBX+HZALL7wwHnvssfibv/mbGDduXIwcOTK+/vWvx4YNG+Lyyy8fyD0O2Oza2tq49dZbex9S7+7u7v2BxKeffjpuuOGGqKmpiS984QtHnT9hwoQYN27cgP5NAADwQVBRLpfLRztg2bJl0dbWlrWf9w2fGwAA9FX4DggAAMDxEiAAAEAaAQIAAKR5x2dAIt56noHj4/kPAADo6x3vgIiPYnxuAADQ1zH9DsiGrj870ft437ly2F+/21sAAID3HM+AAAAAaQQIAACQ5pi+gnUkv+n4Qez7lwfizd3/FlFZFaXhH43as+ZHzfhze4/pfPCTUT74RkTFW61TOXhYDG6YHqf8l5uicvDQ+I8nlsRv/u/33zq43PPW//722JN+73Nx6nl/GXsevixOOv2PY8jv/8lxz66uOz0+fOEDh+x7z5arY8iZfxYn/adZb13rZz+MX3x3SQw95wsxZPKJ/RV3AAD4ICscIG/sfCK6nrktTvlkS3xozj1RUVEV+1/9Xvxy+5di6B8ujSG/f2nvsR+a/fWoGTctIiK6974Wv/inlnj92a/GqefeHsNnf733uF/8U0tUDhoaw6a1Dtjs7tc7Yv+r26Om8dzDXmt/+z/Fr3787SidOqHoRwEAAByjQl/BKne/Ga//z7YYevZ/i5MnfT4qq0+OitLgOGniZ+KUqcti77OroufNXx/23Kqho6P2rPlv3/U4wbNr/+D62PvcXVHuOXjY6735i1di+GdXR0X1yYX2AwAAHLtCAfLmrv8dPW/8R5x0+h/3WTvptM9FVJbiwL8/e+QLlLsjKquLjD7u2YNGnxNVQ8fEr194+LDXG/rx66Ki+qRCewEAAI5PoQDp3vtaVJ5cF5WHuWtQUVkVVUPHRvfe1/qslcvlONjVEfv+dV3v8xcnfnY5hn7ixtj3o29Gz4FfFZoJAAAMjGLPgFSW3rqLcSTlnoiKit6Xv/juDVFRURlRURGVJ304aiZ8OoaevbjQ6OOdHRFR/eHfi8EN02Pfv34rTvnDJcXmAgAA/VYoQKpOGRs9b/xH9Pzm9agcfMoha+We7uje97OoGtbQ+96HPntX70Po/XW8s39n6NmLY893Lv3tv6RV0WcdAAA48Qp9Bav6I2dE5ZCR8asfb+qztn/n4xGVpRg89hP93txAzq4aMiJO/v0/ib3/6+6oqOzXvz4MAAAUVChAKioqY9j0W+JX//JA/PqFh6PnzV9H+eBv4o3/sy1ef/a/x7BPfjEqqgYN9F77PXvIf74mfvPT56L79X8/IXsDAACOrvCtgJrGc+NDc+6JfT/6Zrz+3J0RUY7qD0+KYZ/6ywH7utVAz66sPjlq/+C/xuvfvz0i3vrKVue6394t6TkYB17bEa8/9z/i5I/NjWHTWk7o3wAAAB9EFeVyuXy0A5YtWxYbuv4saz/vG1cO++toa2t7t7cBAADvKYW+ggUAAFCEAAEAANIIEAAAIM0xPYT+b3eMO9H7eN9ZufLd3gEAALz3uAMCAACkESAAAECafgXIU089FRdccEHU19dHY2NjzJkzJx5//PFDjmlsbIwRI0bEqFGjYtSoUXH66afH0qVLo6urKyIi5s2bF3V1dVFXVxfDhw+P4cOH975etGhRREScd955sW7dukKzL7rooj77njNnTmzZsiUiIp599tk4//zzY/z48fHxj388Hnroof58JAAAwFEUDpDNmzfH/Pnz44orrogXX3wxXnrppbj++utj8eLF8eCDDx5y7MaNG6OzszM6Oztj69at8fLLL0dra2vv2p49e2LPnj3R1NQU1157be/rNWvW9Ht2e3t7PPHEE4e9TldXV1x22WWxcOHCaG9vjzVr1sSNN94YL7zwQtGPBQAAOIpCAXLgwIFoaWmJ1tbWmDdvXtTW1kZNTU1cfPHFcccdd8Ty5ctj3759hz133LhxsWTJkti2bVuhDR/v7Obm5rj11lvj4MGDh73W7bffHpdddllUVFTEJz7xiZg8eXLs2LGj0N4AAICjKxQgO3bsiN27d8dVV13VZ62pqSmqqqpi+/btRzy/u7s7Bg0aVGT0cc+eNm1aNDQ0xPr16/sc/5GPfOSQ65TL5ejo6Ij6+vpCewMAAI6uUIB0dHTEyJEjY8iQIX3WqqqqorGxMTo6OvqslcvlaG9vj9WrVx/22YwTMbtcLsdtt90Wq1atir179x712nfffXeMHj06ZsyYUWhvAADA0RUKkFKpFN3d3Udc7+npicrKty995ZVXRn19fTQ0NMTcuXNj6tSpsXz58iKjj3t2RMQZZ5wRs2bNirvuuuuI561bty7Wrl0b69at63M+AAAwMI7phwj/f42NjbF79+7o6uqKYcOGHbLW3d0dHR0dMWHChN73NmzYEOeff37/dlpw9u+0tLTE9OnTY8GCBX3W7rnnnrj//vvjsccei/Hjxw/IPgEAgL4K/V/9U6ZMibFjx8YDDzzQZ+3hhx+OUqkUM2fO7PfmBnL26NGjY8GCBbFixYqorq7ufX/z5s3xzW9+M/7hH/5BfAAAwAlW6A5IZWVlrFq1KhYuXBh1dXUxd+7cKJVKsXXr1mhtbY22trYYPHjwQO+137OXLFkS55xzTm+A7N27N1paWmL9+vUePAcAgASFH3aYPXt2bNq0KR555JGYPHlyTJo0KdauXRv33XdfNDU1DeQeB2x2bW1tNDc39z6k/tRTT8WuXbvi4osv7v2hxFGjRvX+RgkAADCwKsrlcvloByxbtixaWlqy9vO+sXLlymhra3u3twEAAO8p/rknAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0vQrQJ566qm44IILor6+PhobG2POnDnx+OOPH3JMY2NjjBgxovc3Nk4//fRYunRpdHV1RUTEvHnzoq6uLurq6mL48OExfPjw3teLFi2KiIjzzjsv1q1bV2j2RRdd1Gffc+bMiS1btkRExJNPPhkzZsyI8ePHx5QpU+Jb3/pWfz4SAADgKAoHyObNm2P+/PlxxRVXxIsvvhgvvfRSXH/99bF48eJ48MEHDzl248aN0dnZGZ2dnbF169Z4+eWXe3/sb+PGjbFnz57Ys2dPNDU1xbXXXtv7es2aNf2e3d7eHk888cRhr/PTn/40rr766vjSl74UP/nJT2LdunWxfPny+NGPflT0YwEAAI6iUIAcOHAgWlpaorW1NebNmxe1tbVRU1MTF198cdxxxx2xfPny2Ldv32HPHTduXCxZsiS2bdtWaMPHO7u5uTluvfXWOHjwYJ9rVVRUxDe+8Y34zGc+ExERU6ZMiYkTJ8bOnTsL7Q0AADi6QgGyY8eO2L17d1x11VV91pqamqKqqiq2b99+xPO7u7tj0KBBRUYf9+xp06ZFQ0NDrF+/vs/xY8aMiUsuuSQiIvbv3x9btmyJXbt2xfTp0wvtDQAAOLpCAdLR0REjR46MIUOG9FmrqqqKxsbG6Ojo6LNWLpejvb09Vq9efdhnM07E7HK5HLfddlusWrUq9u7de9hr/u3f/m2MGTMm/uIv/iLWrFkTo0ePLrQ3AADg6AoFSKlUiu7u7iOu9/T0RGXl25e+8soro76+PhoaGmLu3LkxderUWL58eZHRxz07IuKMM86IWbNmxV133XXYcy699NLo7OyMe++9NxYuXBg//OEPC+0NAAA4ulKRkxobG2P37t3R1dUVw4YNO2Stu7s7Ojo6YsKECb3vbdiwIc4///z+7bTg7N9paWmJ6dOnx4IFCw573UGDBsWsWbPiwgsvjIceeijOPvvsAdkvAADwtkJ3QKZMmRJjx46NBx54oM/aww8/HKVSKWbOnNnvzQ3k7NGjR8eCBQtixYoVUV1dHRERzz//fGzcuPGQ43p6eqJUKtRlAADAOyj0X9qVlZWxatWqWLhwYdTV1cXcuXOjVCrF1q1bo7W1Ndra2mLw4MEDvdd+z16yZEmcc845vQESEXHzzTfH2LFjY8aMGfH888/Ho48+6rdAAADgBCn8OyCzZ8+OTZs2xSOPPBKTJ0+OSZMmxdq1a+O+++6LpqamgdzjgM2ura2N5ubm3ofUzzrrrFi9enV88YtfjIaGhrjmmmti+fLlA/Z1MQAA4FAV5XK5fLQDli1bFi0tLVn7ed9YuXJltLW1vdvbAACA95TCd0AAAACOlwABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0vQrQJ566qm44IILor6+PhobG2POnDnx+OOPH3JMY2NjjBgxIkaNGhWjRo2K008/PZYuXRpdXV0RETFv3ryoq6uLurq6GD58eAwfPrz39aJFiyIi4rzzzot169YVmn3RRRf12fecOXNiy5Yth7z3xhtvxFlnnRU33nhjfz4SAADgKAoHyObNm2P+/PlxxRVXxIsvvhgvvfRSXH/99bF48eJ48MEHDzl248aN0dnZGZ2dnbF169Z4+eWXo7W1tXdtz549sWfPnmhqaoprr7229/WaNWv6Pbu9vT2eeOKJd/x7vva1r0VPT0/BTwMAADgWhQLkwIED0dLSEq2trTFv3ryora2NmpqauPjii+OOO+6I5cuXx759+w577rhx42LJkiWxbdu2Qhs+3tnNzc1x6623xsGDB494zVdffTU2b94cf/qnf1poTwAAwLEpFCA7duyI3bt3x1VXXdVnrampKaqqqmL79u1HPL+7uzsGDRpUZPRxz542bVo0NDTE+vXrj3jNlpaWaG5ujpqamkJ7AgAAjk2hAOno6IiRI0fGkCFD+qxVVVVFY2NjdHR09Fkrl8vR3t4eq1evPuyzGSdidrlcjttuuy1WrVoVe/fu7XPOk08+GT//+c+jqamp0H4AAIBjVyhASqVSdHd3H3G9p6cnKivfvvSVV14Z9fX10dDQEHPnzo2pU6fG8uXLi4w+7tkREWeccUbMmjUr7rrrrkPe/93XuVasWBEVFRWF9gMAABy7UpGTGhsbY/fu3dHV1RXDhg07ZK27uzs6OjpiwoQJve9t2LAhzj///P7ttODs32lpaYnp06fHggULet+7995748wzz4w/+qM/GpC9AQAAR1foDsiUKVNi7Nix8cADD/RZe/jhh6NUKsXMmTP7vbmBnD169OhYsGBBrFixIqqrqyMi4oUXXogf/OAHMWnSpJg0aVKsXr06vv3tb8ecOXNOyN4BAOCDrtAdkMrKyli1alUsXLgw6urqYu7cuVEqlWLr1q3R2toabW1tMXjw4IHea79nL1myJM4555zeAFm7du0h66tWrYqf/exnceedd56QvQMAwAdd4d8BmT17dmzatCkeeeSRmDx5ckyaNCnWrl0b99133wl/oLvo7Nra2mhubj7sA/IAAMCJV1Eul8tHO2DZsmXR0tKStZ/3jZUrV0ZbW9u7vQ0AAHhPKXwHBAAA4HgJEAAAII0AAQAA0hzTv4K1cuXKE70PAADgA+AdH0IHAAAYKL6CBQAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACk+X+KoU8tBe36DwAAAABJRU5ErkJggg== +data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAAAXNSR0IArs4c6QAAH11JREFUeJzt3X90lfWd4PFPwgXSEsVlUwgQEji4ZVxxPHT1zJbDjzqFFurR6hC3Fasi0uPibKG2Y2iwqW7lFNNhVOoPYHRwWTpYOpWCrdUBOaV2up2ZM3aPM9spenCjzVQj0GlTmJHSJHf/6BqXDSB5Ej569PX6797v8zyfb+5fvr334akol8vlAAAASFD5Zm8AAAB45xAgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApCmdykErVqw43ft422ltbX2ztwAAAG85bxggK1as8B/TBfjcAACgLz/BAgAA0ggQAAAgjQABAADSDChA/vIv/zJmz54d1dXVMXLkyJg5c2Y8+uijxxxz1llnxbBhw6Kqqiqqqqpi3Lhx8clPfjI6OzsjIuKjH/1olEqlKJVKUVlZGZWVlb2vr7322oiIuOCCC2L9+vWFZv/+7/9+n33PmDEjvvGNb/S+/t73vhcjR46Me++9dyAfBwAA8AYKB8jWrVujsbExrrvuuujo6IhXXnklli1bFosWLYoNGzYcc+yjjz4aR44ciSNHjsRf//Vfx969e+PTn/50RETs2LEjurq6oqurKxYuXBg33nhj7+tNmzYNePbzzz8f3/rWt074d2zfvj1WrVoVv/M7v1P0owAAAE5RoQA5evRoLF++PG6//fZYtGhRVFdXR1VVVVxxxRWxdu3a+OxnPxuHDx8+7rn19fVx8803x3e+851CG+7v7C984QvR1NQUXV1dx73ej3/849ixY0ecccYZJ5175513RkdHR5/3Ozo64u677y70twAAwDtNoQD5m7/5m9i/f3988pOf7LO2cOHCKJVKsWvXrhOe393dHcOGDSsyut+zP/CBD8TEiRPjgQceOO71brnllnj3u9990pnr1q2Lz372szFz5sx4+eWXe99/+eWXY+bMmXHTTTed8PoAAMDrCgXIiy++GLW1tTFixIg+a0OGDIlJkybFiy++2GetXC7H888/H62trdHY2FhkdL9nl8vl+PKXvxy33357HDp0qNDMyy+/PCZOnBj79u2LWbNmRUdHR3R0dMSsWbNi3759cfbZZ8cll1xS6NoAAPBOUihAhg4dGt3d3Sdc7+npicrK1y99+eWXR3V1dZx55pnx4Q9/OGbNmhVf+tKXiozu9+yIiPPOOy8+8pGPxOrVqwvNrK2tje9///sxefLk2LdvX0yfPj2mT58e+/bti8mTJ8dTTz0VtbW1ha4NAADvJG/4JPTjmTRpUuzfvz9++ctfxllnnXXMWnd3d7zwwgtx9tln9773zW9+M+bNmzewnRac/ZovfvGLcf7558fSpUujoqKi33Pr6uriu9/9bsyePTva2toiImLy5MmxZ8+eGDt2bLE/BgAA3mEKfQNywQUXRF1dXdx333191h5++OEYOnRofPCDHxzw5gZz9rhx42Lp0qVxyy23xNChQwvNnjBhQjz11FNRV1cXEydOjD179kRdXV2hawEAwDtRoW9AKisr4/77748rr7wyRo8eHVdeeWWUSqV47LHH4qabbop77rknhg8fPth7HfDspqameO9731v4BviI334T8tRTT0WpVBIfAADQT4WfA3LJJZfEY489Fl//+tdjwoQJMWbMmPjKV74SmzdvjiuvvHIw9zhos6urq+PWW2/tvUm9u7u79wGJ3/3ud+Omm26Kqqqq+NSnPnXS+ZMmTYoJEyYM6t8EAADvBBXlcrl8sgNWrFgRra2tWft52/C5AQBAX4W/AQEAAOgvAQIAAKQRIAAAQJo3vAck4rf3M9A/7v8AAIC+3vAbEPFRjM8NAAD6OqXngGzu/MTp3sfbztUjv/pmbwEAAN5y3AMCAACkESAAAECaU/oJ1ol84N9Xx7L5o+N3698V3eWIf/ynI7Fu54HY+fe/6j1m713nxruGVUTP/73V/Zf/0h1P/sOv4ovfeDkOHemJh5Y2xJzzzoyIiMqK3x7z2rHb/vYXsfy//VM80Xx2/PkP/jk2P/XP/Z79Dz99Na64638fs+/tN0+OB3YfjMd+1BkREf/x342ITX84Me7Y3hEP7fn5QD4SAADgJAoHyKX/YWT8yTV1ccvXXopP3PtCdHeXY+7vnhl3L6qLL32zI776/ddj4dr7X4g9Pz4cERHj/83QuPf6+vjix8bFTZv+Ka5b92LvcfcsnhC/+tfuuOVrLw3a7InvGRZzf/eM2PX3h457rXnnnxmLPvBvY1/Hr4t+FAAAwCkq9BOsoUMq4vaPjYsv73glvv7DX8S//ronft1Vjm//qDNatr4UtzWOjXcPP/6lf/aL38S6nQfig1PPKLTh/s6+87FXouUPxsaQE/yl7x1XFdfd/0IcPtJdaD8AAMCpKxQg75v0rqg5oxRf/au+P1f65t/+Mrp6ImafU33C84dURhztesPHjwzK7P/x7L9E+8+PxlUzRh33el95fH+8+ptiewEAAPqnUIDUjRoW+3/VFa8e7fsf7j3liJ8ePBp1o4Yd99yGmmHxhx9+T+/9F6d7dkVFxO2PdMRNF4+JESf4VgYAAMhR6B6Q33SXT/iTpojf3kze8/88YH3jf54YPT3lKEfEgV91xXf+Z2es+dYrRUb3e3ZExN6XjsTu/3UoPjV/dNyxvaPQXAAAYOAKBchPf340as4oxZnvqoxfvdpzzFplRcSEmmHRduBo73uL179+E/pA9Xf2a/740Y7Y3fLe+O/f+3mU/eIKAADeFIV+k/TMi6/GS7/4TSz6QE2ftcsvPCt+012Ov9o7OMExWLNf6eyKTd/7eXzuo7XR1a1AAADgzVAoQMrliOaHfxbL5r0nrpoxKt49vDKGlyriI9POjP/6n8bF57/2s8I3mZ/O2fftPBAzz6mOhprj358CAACcXoWfA7Lr7w/FJ+59IT79kdHx+T+ojcrKivhx+6vxXx766aD93GqwZ//rr3viT779Snz5qvER8dufbD1/z9SI+O0/7/v+91bHFxrHxp9//5/j81tP/iwSAACg/yrK5ZPfEbFixYrY3PmJrP28bVw98qvR2tr6Zm8DAADeUvy7tAAAQBoBAgAApBEgAABAmlO6Cf0f75hwuvfxtrN69Zu9AwAAeOvxDQgAAJBGgAAAAGkGFCC7d++Oiy++OOrq6qKhoSHmz58fjz/++DHHNDQ0xOjRo6O2tjZqa2vjnHPOieXLl0dnZ2dERCxcuDBqamqipqYmRo0aFaNGjep9vXTp0oiIuOiii2Ljxo2FZl966aV99j1//vzYsWNHRET88Ic/jDlz5sTEiRPjfe97Xzz88MMD+UgAAICTKBwg27Zti0WLFsVVV10Ve/fujWeffTZuuOGGuPHGG+Ohhx465tgtW7ZER0dHdHR0xM6dO+O5556LlStX9q4dPHgwDh48GI2NjXH99df3vl63bt2AZ7e1tcUTTzxx3Ot0dnbGxz/+8ViyZEm0tbXFunXr4jOf+Uz85Cc/KfqxAAAAJ1EoQI4ePRrNzc2xcuXKWLhwYVRXV0dVVVVcdtllcccdd0RLS0scPnz8J5JPmDAhli1bFrt27Sq04f7ObmpqiltvvTW6urqOe63bb789Pv7xj0dFRUX83u/9XkydOjWefvrpQnsDAABOrlCAPP3003HgwIG45ppr+qw1NjbGkCFDYs+ePSc8v7u7O4YNG1ZkdL9nz5gxI+rr62PTpk19jn/Pe95zzHXK5XK0t7dHXV1dob0BAAAnVyhA2tvbY8yYMTFixIg+a0OGDImGhoZob2/vs1Yul6OtrS3Wrl173HszTsfscrkct912W6xZsyYOHTp00mvfc889MXbs2Jg1a1ahvQEAACdXKEBKpVJ0d3efcL2npycqK1+/9NVXXx11dXVRX18fCxYsiOnTp0dLS0uR0f2eHRFx7rnnxty5c+Ouu+464XkbN26MDRs2xMaNG/ucDwAADI5TehDh/6+hoSEOHDgQnZ2dMXLkyGPWuru7o729PSZNmtT73ubNm2POnDkD22nB2a9pbm6OmTNnxuLFi/us3XffffHAAw/EY489FhMnThyUfQIAAH0V+l/906ZNi/Hjx8eDDz7YZ+2RRx6JUqkUs2fPHvDmBnP22LFjY/HixbFq1aoYOnRo7/vbtm2LP/3TP41vf/vb4gMAAE6zQt+AVFZWxpo1a2LJkiVRU1MTCxYsiFKpFDt37oyVK1dGa2trDB8+fLD3OuDZy5YtiwsvvLA3QA4dOhTNzc2xadMmN54DAECCwjc7zJs3L7Zu3Rrbt2+PqVOnxpQpU2LDhg2xfv36aGxsHMw9Dtrs6urqaGpq6r1Jfffu3bF///647LLLeh+UWFtb2/uMEgAAYHBVlMvl8skOWLFiRTQ3N2ft521j9erV0dra+mZvAwAA3lL8c08AAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkGVCA7N69Oy6++OKoq6uLhoaGmD9/fjz++OPHHNPQ0BCjR4/ufcbGOeecE8uXL4/Ozs6IiFi4cGHU1NRETU1NjBo1KkaNGtX7eunSpRERcdFFF8XGjRsLzb700kv77Hv+/PmxY8eOiIh48sknY9asWTFx4sSYNm1a/Nmf/dlAPhIAAOAkCgfItm3bYtGiRXHVVVfF3r1749lnn40bbrghbrzxxnjooYeOOXbLli3R0dERHR0dsXPnznjuued6H/a3ZcuWOHjwYBw8eDAaGxvj+uuv7329bt26Ac9ua2uLJ5544rjX+dnPfhbXXnttfP7zn48XXnghNm7cGC0tLfGjH/2o6McCAACcRKEAOXr0aDQ3N8fKlStj4cKFUV1dHVVVVXHZZZfFHXfcES0tLXH48OHjnjthwoRYtmxZ7Nq1q9CG+zu7qakpbr311ujq6upzrYqKirj33nvjQx/6UERETJs2LSZPnhz79u0rtDcAAODkCgXI008/HQcOHIhrrrmmz1pjY2MMGTIk9uzZc8Lzu7u7Y9iwYUVG93v2jBkzor6+PjZt2tTn+HHjxsXll18eERFHjhyJHTt2xP79+2PmzJmF9gYAAJxcoQBpb2+PMWPGxIgRI/qsDRkyJBoaGqK9vb3PWrlcjra2tli7du1x7804HbPL5XLcdtttsWbNmjh06NBxr/kXf/EXMW7cuPijP/qjWLduXYwdO7bQ3gAAgJMrFCClUim6u7tPuN7T0xOVla9f+uqrr466urqor6+PBQsWxPTp06OlpaXI6H7Pjog499xzY+7cuXHXXXcd95wrrrgiOjo64v77748lS5bE3/3d3xXaGwAAcHKlIic1NDTEgQMHorOzM0aOHHnMWnd3d7S3t8ekSZN639u8eXPMmTNnYDstOPs1zc3NMXPmzFi8ePFxrzts2LCYO3duXHLJJfHwww/HBRdcMCj7BQAAXlfoG5Bp06bF+PHj48EHH+yz9sgjj0SpVIrZs2cPeHODOXvs2LGxePHiWLVqVQwdOjQiIp555pnYsmXLMcf19PREqVSoywAAgDdQ6L+0KysrY82aNbFkyZKoqamJBQsWRKlUip07d8bKlSujtbU1hg8fPth7HfDsZcuWxYUXXtgbIBERN998c4wfPz5mzZoVzzzzTDz66KOeBQIAAKdJ4eeAzJs3L7Zu3Rrbt2+PqVOnxpQpU2LDhg2xfv36aGxsHMw9Dtrs6urqaGpq6r1J/fzzz4+1a9fG5z73uaivr4/rrrsuWlpaBu3nYgAAwLEqyuVy+WQHrFixIpqbm7P287axevXqaG1tfbO3AQAAbymFvwEBAADoLwECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBlQgOzevTsuvvjiqKuri4aGhpg/f348/vjjxxzT0NAQo0ePjtra2qitrY1zzjknli9fHp2dnRERsXDhwqipqYmampoYNWpUjBo1qvf10qVLIyLioosuio0bNxaafemll/bZ9/z582PHjh3HvPfqq6/G+eefH5/5zGcG8pEAAAAnUThAtm3bFosWLYqrrroq9u7dG88++2zccMMNceONN8ZDDz10zLFbtmyJjo6O6OjoiJ07d8Zzzz0XK1eu7F07ePBgHDx4MBobG+P666/vfb1u3boBz25ra4snnnjiDf+eu+++O3p6egp+GgAAwKkoFCBHjx6N5ubmWLlyZSxcuDCqq6ujqqoqLrvssrjjjjuipaUlDh8+fNxzJ0yYEMuWLYtdu3YV2nB/Zzc1NcWtt94aXV1dJ7zmiy++GNu2bYuPfexjhfYEAACcmkIB8vTTT8eBAwfimmuu6bPW2NgYQ4YMiT179pzw/O7u7hg2bFiR0f2ePWPGjKivr49Nmzad8JrNzc3R1NQUVVVVhfYEAACcmkIB0t7eHmPGjIkRI0b0WRsyZEg0NDREe3t7n7VyuRxtbW2xdu3a496bcTpml8vluO2222LNmjVx6NChPuc8+eST8corr0RjY2Oh/QAAAKeuUICUSqXo7u4+4XpPT09UVr5+6auvvjrq6uqivr4+FixYENOnT4+WlpYio/s9OyLi3HPPjblz58Zdd911zPuv/Zxr1apVUVFRUWg/AADAqSsVOamhoSEOHDgQnZ2dMXLkyGPWuru7o729PSZNmtT73ubNm2POnDkD22nB2a9pbm6OmTNnxuLFi3vfu//+++O8886L97///YOyNwAA4OQKfQMybdq0GD9+fDz44IN91h555JEolUoxe/bsAW9uMGePHTs2Fi9eHKtWrYqhQ4dGRMRPfvKT+MEPfhBTpkyJKVOmxNq1a+NrX/tazJ8//7TsHQAA3ukKfQNSWVkZa9asiSVLlkRNTU0sWLAgSqVS7Ny5M1auXBmtra0xfPjwwd7rgGcvW7YsLrzwwt4A2bBhwzHra9asiZdeeinuvPPO07J3AAB4pyv8HJB58+bF1q1bY/v27TF16tSYMmVKbNiwIdavX3/ab+guOru6ujqampqOe4M8AABw+lWUy+XyyQ5YsWJFNDc3Z+3nbWP16tXR2tr6Zm8DAADeUgp/AwIAANBfAgQAAEgjQAAAgDSn9K9grV69+nTvAwAAeAd4w5vQAQAABoufYAEAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaQQIAACQRoAAAABpBAgAAJBGgAAAAGkECAAAkEaAAAAAaf4PAkqVsOC2qOIAAAAASUVORK5CYII= === After auto dark mode (autoDarkMode and prefers-color-scheme override) is enabled === data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAAAXNSR0IArs4c6QAAH45JREFUeJzt3W+Qlnd97/HPLkiB0nbYmJMFolbrEUsdG2tCSrEnEWN75AwasTVTM4S0nhPbBYEe3AkxnkSlEBzd2RjJTuLsFJoOeCYdDYkIDCQCNhTSNhxHraVgYq2kWwiEDARB2D/nQZrtUP4YbuCbTPJ6PYL7uu7r+9v70b7nvn57NbW0tAwEAACgQPNLvQAAAODVQ4AAAABlBAgAAFBGgAAAAGUECAAAUEaAAAAAZQQIAABQZuiLOWn+/PkXeh2vOB0dHS/1EgAA4GWn6Wc9iHD+/PlZs2ZN1XpeMaZOnSpCAADgP3ELFgAAUEaAAAAAZQQIAABQ5kVtQj+diRMn5oYbbsj48ePT39+fJ554IitXrsyjjz46eM66desyfPjw9Pf3J0kOHjyYrVu3ZunSpTl8+HCWLFmSSZMmJUmam5/voRfOXb9+fRYtWpTu7u6sXr06q1atOuvZO3fuzJw5c05Yd1dXV+6///5s2rQpSXLZZZflc5/7XL785S/nq1/96rl8JAAAwBk0HCBTpkzJggUL0tnZmfb29vT19WXy5Mm59dZbc8899+TBBx8cPPfmm2/OY489liS55JJLcvvtt2fu3LlZvHhxFixYMHjebbfdlkOHDqWzs/O8zR43blwmT56cLVu2nPJav/3bv53p06fnRz/6UaMfBQAA8CI1dAvW0KFDM2/evHR3d2ft2rU5cuRIjh07lo0bN+bOO+/M7NmzM2LEiFO+d8+ePVm5cuXgtx4XevayZcvS1taWIUOGnPJ6b3zjG7NgwYL85Cc/OePc6667Li0tLSe93tLSkg9/+MMN/SwAAPBq01CATJgwIaNHj85DDz100rENGzakr68vV1xxxemHNjfn+PHjjYw+69nbt29PT09Ppk2bdsrr3XffffnpT396xpnXXnttPv7xj6erqysXXXTR4OsXXXRRurq6MmfOnNNeHwAA+A8NBUhra2v279+fo0ePnnSsv78/PT09aW1tPeV7x44dm+uvv35w/8WFnt3U1JSurq7ceOONGTlyZEMzv/Wtb6WnpyeXXnpp7r777rS0tKSlpSV33313Lr300uzevfu0t3gBAAD/oaE9IL29vae9pSl5/pf+FzaSJ8kdd9yRvr6+DAwM5MCBA9m8eXO6u7sbGX3Ws5PkySefzLZt2zJjxozce++9Zz3zmWeeSVtbW5YuXZpLL70099xzT5LnY+qpp57KrFmz8swzz5z1dQEA4NWmoQDp6enJ6NGjM2rUqDz33HMnHGtubs6YMWOye/fuwdduueWWwU3o5+psZ7+gu7s7y5cvzwMPPNDQ3Keffjof//jHs3Tp0owdOzZJ8tRTT2X27NnZv39/Q9cEAIBXm4ZuwdqxY0f27t2b6dOnn3TsmmuuSW9vbx5//PFzXtz5nL1v376sWrUqN910U3p7exuavXfv3syaNSt79+5NT09PZs+enaeffrqhawEAwKtRQ9+ADAwMpKOjI5/+9Kdz4MCBPPzww+nr68ukSZMyZ86cdHZ2NrzJ/ELOXrFiRb7yla80HCDJ89+EzJo1K319feIDAADOUsPPAdmyZUva29szc+bMtLW1pbm5Obt27crChQvP2+1W53v2kSNHsmzZsrS3tyd5/pathx9+OMnzf973He94R2bNmpWvf/3rZ3wWSU9Pz/n9gQAA4FWiqaWlZeBMJ8yfPz9r1qypWs8rxtSpU9PR0fFSLwMAAF5WGtoDAgAA0AgBAgAAlBEgAABAmZ+5ByR5fh8IZ8f+DwAAONnP/AZEfDTG5wYAACd7UX+G97Xv+eSFXscrzr5HFr/USwAAgJcde0AAAIAyAgQAACjT8JPQk+SpHY/lu4/cl2d2/1PS1JyWsW/Or737I3ndr71r8Jyv3Pq76T12NE3Nz7fOz438xYx766Rc/v7ZGTZiVDb++YLs/se/SZIM9PcnyeC5b/yN38m7/uBT+UbnR/PmK6dl/G9de9azL7p0fH7nT+46Yd1rv/Qn+dX/9uH88q+/O0nybz/4f/nmn9+c35j6sbz1XR86l48EAAA4g4YD5J+//Uj+5v4lmfjBP83rP/r5DBkyND/+h0ez5f8uyjve97ETYuHdf/S5XPqrv5kkOXxgT/56xWfyt6u+mHf9wa159x8tGTzvr1d8NsNGjMqV0//3eZt9aP9T+ZfvPZrXv+1dp7zWv3z3W/mnLV/LL/2XNzT6UQAAAC9SQ7dg9fUez98+cGfe8d//V958xdQMGz4yQ14zLL982ZRc8YG5efzrS3Ps6E9O+d6fH31Jfu3dH8lT/7i1oQWf7ey3v/cPs/0bXenv6zvl9Z79tx/m3X+0JK8ZPrKh9QAAAC9eQwGy71++n6PPHcibr5x20rE3vuO9aWoekp6df3fa9/f39WXI0Nc0MvqsZ7f+yjsyqmVMdm176JTXe/t7Z2bosOENrQUAADg7DQXI4QP/lhG/eFFe83MjTr7gkCEZ1TImP3l2z0nHBgYGcmjfU/mHjSvyhn/ff3GhZw8MDOSd/6Mt33l4eY6f5lsZAACgRkN7QJqHDD3tLU1JkoGBpKlp8L+b/+KTaWpqTpqaMnzU6Lzh7Vfn13/no42MPuvZSTJ67K9k3K9Oyne/+Zf5jakfa2guAABw7hoKkJ8fPSY/PfxsfvqTQ/m5kb9wwrH+vr4ceqYnv/DaSwdfu2rm4sFN6OfqbGe/4LLf/Z/5esfMvGXStWn6T4ECAADUaOgWrIte99aM/KWL809bvnbSsX/+9sNpHjI0rW9+5zkv7nzOHvlLr8343/pgvr32y2keck5/fRgAAGhQQwHS3NycidPn53vf/Mvs3PZQjh39SfqOH8uPvrMpf/fgXZn4wT/N0NcMO99rPefZE67+SHp2/X0O7X/qgqwNAAA4s4a/Cnj9296VKR/9fL778F9k++qu9Pf3p2Xcf83kP/g/5+12q/M9e9jwkXn7e/8wj331C0mev2Vr5Sev+fd/92bPE9/O3399ad7ym+/PxA/+6QX9GQAA4NWoqaWlZeBMJ8yfPz+vfc8nq9bzirHvkcXp6Oh4qZcBAAAvKw3dggUAANAIAQIAAJQRIAAAQJkXtQn9vvnvutDreMWZOnXqS70EAAB42fENCAAAUEaAAAAAZc7pkeATJ07MDTfckPHjx6e/vz9PPPFEVq5cmUcffXTwnHXr1mX48OHp7+9Pkhw8eDBbt27N0qVLc/jw4SxZsiSTJk1K8vxDBpMMnrt+/fosWrQo3d3dWb16dVatWnXWs3fu3Jk5c+acsO6urq7cf//92bRpU97+9rdn9uzZed3rXpeDBw9m+fLlWbt27bl8LAAAwGk0HCBTpkzJggUL0tnZmfb29vT19WXy5Mm59dZbc8899+TBBx8cPPfmm2/OY489liS55JJLcvvtt2fu3LlZvHhxFixYMHjebbfdlkOHDqWzs/O8zR43blwmT56cLVu2nHSdUaNG5fOf/3w6Ozuzbt26vO1tb8tdd92VHTt25Ic//GGjHw0AAHAaDd2CNXTo0MybNy/d3d1Zu3Ztjhw5kmPHjmXjxo258847M3v27IwYMeKU792zZ09Wrlw5+K3HhZ69bNmytLW1ZciQIae81pe+9KWsW7cuSfK9730vu3btyoQJExpaGwAAcGYNBciECRMyevToPPTQQycd27BhQ/r6+nLFFVecfmhzc44fP97I6LOevX379vT09GTatGknnf/ss89m9erVJ7zW2tqaPXv2NLQ2AADgzBoKkNbW1uzfvz9Hjx496Vh/f396enrS2tp6yveOHTs2119/fTZt2tTI6LOe3dTUlK6urtx4440ZOXLkGa/9kY98JE8//XQef/zxhtYGAACcWUN7QHp7e095S9MLmpqaBjeSJ8kdd9yRvr6+DAwM5MCBA9m8eXO6u7sbGX3Ws5PkySefzLZt2zJjxozce++9p3zftddem9///d/PrFmzMjAw0NDaAACAM2soQHp6ejJ69OiMGjUqzz333AnHmpubM2bMmOzevXvwtVtuuWVwE/q5OtvZL+ju7s7y5cvzwAMPnHTsuuuuy4c+9KHMmjUr//qv/3pe1gkAAJysoVuwduzYkb1792b69OknHbvmmmvS29t7wW5janT2vn37smrVqtx0003p7e0dfH3KlCn5vd/7vcyePVt8AADABdZQgAwMDKSjoyMzZszItGnTMmLEiAwbNixXXXVV5syZk87OzoY3mV/I2StWrMjll1+esWPHJklGjhyZefPm5bOf/Wz27t17QdYLAAD8h4afA7Jly5a0t7dn5syZaWtrS3Nzc3bt2pWFCxeet9utzvfsI0eOZNmyZWlvb0+SXHnllWlpackXv/jFE85btWpV7rrrrgv6MwAAwKtRU0tLyxl3XM+fPz9r1qypWs8rxtSpU9PR0fFSLwMAAF5WGroFCwAAoBECBAAAKCNAAACAMgIEAAAoI0AAAIAyAgQAACjT8HNAkmTixIm54YYbMn78+PT39+eJJ57IypUr8+ijjw6es27dugwfPjz9/f1JkoMHD2br1q1ZunRpDh8+nCVLlmTSpElJkubm53vohXPXr1+fRYsWpbu7O6tXr86qVavOevbOnTszZ86cE9bd1dWV+++/P5s2bcqVV16ZP/7jP05ra2sOHTqUlStXnjAHAAA4fxoOkClTpmTBggXp7OxMe3t7+vr6Mnny5Nx6662555578uCDDw6ee/PNNw8+IPCSSy7J7bffnrlz52bx4sVZsGDB4Hm33XZbDh06lM7OzvM2e9y4cZk8eXK2bNly0nUuvvjiLFq0KJ/61Keybdu2vPWtb83dd9+dHTt2ZMeOHY1+NAAAwGk0dAvW0KFDM2/evHR3d2ft2rU5cuRIjh07lo0bN+bOO+/M7NmzM2LEiFO+d8+ePVm5cuXgtx4XevayZcvS1taWIUOGnHStgYGBLF68ONu2bUuS7NixIz/+8Y/z+te/vqG1AQAAZ9ZQgEyYMCGjR4/OQw89dNKxDRs2pK+vL1dcccXphzY35/jx442MPuvZ27dvT09PT6ZNm3bS+fv27cs3v/nNJMmwYcNy9dVXp6WlJdu3b29obQAAwJk1FCCtra3Zv39/jh49etKx/v7+9PT0pLW19ZTvHTt2bK6//vps2rSpkdFnPbupqSldXV258cYbM3LkyFNe873vfW8eeeSRfOITn8jChQuzb9++htYGAACcWUN7QHp7e095S9MLmpqaBjeSJ8kdd9yRvr6+DAwM5MCBA9m8eXO6u7sbGX3Ws5PkySefzLZt2zJjxozce++9J71nw4YN2bhxYy6//PJ85jOfySc+8Yl8//vfb2h9AADA6TUUID09PRk9enRGjRqV55577oRjzc3NGTNmTHbv3j342i233DK4Cf1cne3sF3R3d2f58uV54IEHTnnd3t7ebNu2LZs3b8773vc+AQIAABdAQ7dg7dixI3v37s306dNPOnbNNdekt7c3jz/++Dkv7nzO3rdvX1atWpWbbropvb29SZK3vOUted/73nfCeU1NTenr67sgawcAgFe7hgJkYGAgHR0dmTFjRqZNm5YRI0Zk2LBhueqqqzJnzpx0dnY2vMn8Qs5esWJFLr/88owdO3bwtfnz5+ed73xnkmT8+PG5+uqrs3Xr1guydgAAeLVr+DkgW7ZsSXt7e2bOnJm2trY0Nzdn165dWbhw4Xm73ep8zz5y5EiWLVuW9vb2JMnOnTuzZMmSzJs3L5dcckmeffbZfPnLX77g6wcAgFerppaWloEznTB//vysWbOmaj2vGFOnTk1HR8dLvQwAAHhZaegWLAAAgEYIEAAAoIwAAQAAyggQAACgjAABAADKCBAAAKBMw88BSZKJEyfmhhtuyPjx49Pf358nnngiK1euzKOPPjp4zrp16zJ8+PD09/cnSQ4ePJitW7dm6dKlOXz4cJYsWZJJkyYlSZqbn++hF85dv359Fi1alO7u7qxevTqrVq0669k7d+7MnDlzTlh3V1dX7r///mzatGnwtWHDhmXFihV57LHH8oUvfOFcPhYAAOA0Gv4GZMqUKfmzP/uzfOMb38j73//+TJs2LX/1V3+VW2+9NR/4wAdOOPfmm2/OlClTMmXKlHzsYx/LG97whsydOzdJsmDBglx11VW56qqrsmHDhnzta18b/P+iRYvOefa4ceMyefLkn/nzzJgxYzCAAACAC6Oh37iHDh2aefPmpbu7O2vXrs2RI0dy7NixbNy4MXfeeWdmz56dESNGnPK9e/bsycqVKwe/9bjQs5ctW5a2trYMGTLktNccM2ZM3vOe92TdunUNrQkAAHhxGgqQCRMmZPTo0XnooYdOOrZhw4b09fXliiuuOP3Q5uYcP368kdFnPXv79u3p6enJtGnTTnvNuXPnZvny5Tl27FhDawIAAF6chgKktbU1+/fvz9GjR0861t/fn56enrS2tp7yvWPHjs31119/wv6LCzm7qakpXV1dufHGGzNy5MiT3nPllVfmoosuyvr16xtaDwAA8OI1tAm9t7f3jLc0NTU1DW4kT5I77rgjfX19GRgYyIEDB7J58+Z0d3c3MvqsZyfJk08+mW3btmXGjBm59957B18fOnRo5s6dmyVLljS0FgAA4Ow0FCA9PT0ZPXp0Ro0aleeee+6EY83NzRkzZkx27949+Nott9ySxx577NxW2uDsF3R3d2f58uV54IEHBl+77rrr8oMf/CDf+c53zsvaAACAM2soQHbs2JG9e/dm+vTpue+++044ds0116S3tzePP/74eVng+Zq9b9++rFq1KjfddFN6e3uTJG9605ty2WWXDe4nGT58eIYMGZI3velNaWtruyDrBwCAV7OGAmRgYCAdHR359Kc/nQMHDuThhx9OX19fJk2alDlz5qSzs7PhTeYXcvaKFSvyla98ZTBAFi5ceMLxmTNn5uKLL/YcEAAAuEAafhDhli1b0t7enpkzZ6atrS3Nzc3ZtWtXFi5ceN5utzrfs48cOZJly5alvb39gq4PAAA4taaWlpaBM50wf/78rFmzpmo9rxhTp05NR0fHS70MAAB4WfHobwAAoIwAAQAAyggQAACgzIvahD516tQLvQ4AAOBV4GduQgcAADhf3IIFAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJQRIAAAQBkBAgAAlBEgAABAGQECAACUESAAAEAZAQIAAJT5/5ZGpzazvfnHAAAAAElFTkSuQmCC
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/4774354-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/4774354-expected.png index 3993a91d..0921b06b 100644 --- a/third_party/blink/web_tests/platform/linux/paint/invalidation/4774354-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/4774354-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/repaint-across-writing-mode-boundary-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/repaint-across-writing-mode-boundary-expected.png index 1aa38674..c87a952 100644 --- a/third_party/blink/web_tests/platform/linux/paint/invalidation/repaint-across-writing-mode-boundary-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/repaint-across-writing-mode-boundary-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.png index 990c21bc..11909f0 100644 --- a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-after-remove-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-after-remove-expected.png index d37a715..f6a510d 100644 --- a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-after-remove-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-after-remove-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.png index 7ea5dfc..b45771e 100644 --- a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.png index 9149c47..17f64ff 100644 --- a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.png index fa1ed7ef..bbd3895 100644 --- a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-rl-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-rl-expected.png index ac86815..cff7f7dc 100644 --- a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-rl-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-rl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-within-composited-scroller-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-within-composited-scroller-expected.png index 2a32a4a..8bfbb4ff 100644 --- a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-within-composited-scroller-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-within-composited-scroller-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.png index c74296e..99fdff52 100644 --- a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-expected.png b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-expected.png index 92ce902..e52bead5 100644 --- a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-font-64px-expected.png b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-font-64px-expected.png index c340cee5..e0c42b4 100644 --- a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-font-64px-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-font-64px-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-font-8px-expected.png b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-font-8px-expected.png index 9c9943a..d154daf 100644 --- a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-font-8px-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-font-8px-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-125-expected.png b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-125-expected.png index 960e99c..9c40f7b 100644 --- a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-125-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-125-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-150-expected.png b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-150-expected.png index 14d435c..5f44220 100644 --- a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-150-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-175-expected.png b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-175-expected.png index 5ee0cdc3..5406391d 100644 --- a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-175-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-175-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-200-expected.png b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-200-expected.png index b2078291..d8ae8965 100644 --- a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-200-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-200-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-2000-expected.png b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-2000-expected.png index c5ced07..f7d60162 100644 --- a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-2000-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-2000-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-250-expected.png b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-250-expected.png index 493a76b7..e563a9b 100644 --- a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-250-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-250-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-inline-block-expected.png b/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-inline-block-expected.png index 66b67d0..67e1249 100644 --- a/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-inline-block-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-inline-block-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-inline-block-rtl-expected.png b/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-inline-block-rtl-expected.png index 83c81fde..a1f361a 100644 --- a/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-inline-block-rtl-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-inline-block-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-newline-clipped-by-overflow-expected.png b/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-newline-clipped-by-overflow-expected.png index 08df255..e8bd306 100644 --- a/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-newline-clipped-by-overflow-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-newline-clipped-by-overflow-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.png b/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.png index 786e00ef..1200609 100644 --- a/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-newline-rtl-double-linebreak-expected.png b/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-newline-rtl-double-linebreak-expected.png index 762a402..943b263 100644 --- a/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-newline-rtl-double-linebreak-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-newline-rtl-double-linebreak-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-with-composition-expected.png b/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-with-composition-expected.png index 1b5e4e6..b4d34a8 100644 --- a/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-with-composition-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/selection/text-selection-with-composition-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/text/selection-no-clip-text-expected.png b/third_party/blink/web_tests/platform/linux/paint/text/selection-no-clip-text-expected.png index 7ce48bf3..5b305b1a 100644 --- a/third_party/blink/web_tests/platform/linux/paint/text/selection-no-clip-text-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/text/selection-no-clip-text-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/text/vertical-upright-oblique-expected.png b/third_party/blink/web_tests/platform/linux/paint/text/vertical-upright-oblique-expected.png index b4c898f..b372a7d6 100644 --- a/third_party/blink/web_tests/platform/linux/paint/text/vertical-upright-oblique-expected.png +++ b/third_party/blink/web_tests/platform/linux/paint/text/vertical-upright-oblique-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/text/foreignObject-text-clipping-bug-expected.png b/third_party/blink/web_tests/platform/linux/svg/text/foreignObject-text-clipping-bug-expected.png index f5a56e67..e6c8e8d 100644 --- a/third_party/blink/web_tests/platform/linux/svg/text/foreignObject-text-clipping-bug-expected.png +++ b/third_party/blink/web_tests/platform/linux/svg/text/foreignObject-text-clipping-bug-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/text-selection-outside-control-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/text-selection-outside-control-expected.png index 7707e99a..fc42807 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/text-selection-outside-control-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/text-selection-outside-control-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/text/input-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/text/input-focus-ring-expected.png index 40efcc9..bd96eb4 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/text/input-focus-ring-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/text/input-focus-ring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/atsui-kerning-and-ligatures-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/atsui-kerning-and-ligatures-expected.png index b25fc15..e9b826ca 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/atsui-kerning-and-ligatures-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/atsui-kerning-and-ligatures-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/atsui-rtl-override-selection-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/atsui-rtl-override-selection-expected.png index 958985b8..bd887f47 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/atsui-rtl-override-selection-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/atsui-rtl-override-selection-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/complex-text-rtl-selection-repaint-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/complex-text-rtl-selection-repaint-expected.png index d4e4483..0729702 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/complex-text-rtl-selection-repaint-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/complex-text-rtl-selection-repaint-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/emphasis-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/emphasis-expected.png index a3979a4..1a36d72 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/emphasis-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/emphasis-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/flexbox-selection-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/flexbox-selection-expected.png index 0cafdf5..cb94802 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/flexbox-selection-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/flexbox-selection-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/flexbox-selection-nested-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/flexbox-selection-nested-expected.png index 13c15147..822be8b 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/flexbox-selection-nested-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/flexbox-selection-nested-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/khmer-selection-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/khmer-selection-expected.png index 8ed9ece..11c1dae 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/khmer-selection-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/khmer-selection-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/mixed-directionality-selection-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/mixed-directionality-selection-expected.png index 07c91bf0..44fc493e 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/mixed-directionality-selection-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/mixed-directionality-selection-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/pre-wrap-overflow-selection-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/pre-wrap-overflow-selection-expected.png index 73354fd..e5e0afd 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/pre-wrap-overflow-selection-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/pre-wrap-overflow-selection-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/selection-painting-hidpi-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/selection-painting-hidpi-expected.png index b9c41047d..b526fae1 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/selection-painting-hidpi-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/selection-painting-hidpi-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/selection-with-inline-padding-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/selection-with-inline-padding-expected.png index 98a80e0..a561a0cf 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/selection-with-inline-padding-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/selection-with-inline-padding-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/shaping-selection-rect-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/shaping-selection-rect-expected.png index 9573976b..ca64883 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/shaping-selection-rect-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/shaping-selection-rect-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/should-use-atsui-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/should-use-atsui-expected.png index 67093cc..70db71eb 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/should-use-atsui-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/should-use-atsui-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/invalidation-rect-includes-newline-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/invalidation-rect-includes-newline-expected.png index b48ac90..6da112b9 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/invalidation-rect-includes-newline-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/invalidation-rect-includes-newline-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.png index d291c255..b9b71a9 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.png index 40eacd7..4672c00 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.png index 2aa093bd..7ad94d3b 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.png index 65720485..3eb7d5f 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-across-blocks-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-across-blocks-expected.png index 65720485..3eb7d5f 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-across-blocks-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-across-blocks-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-br-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-br-expected.png index 65720485..3eb7d5f 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-br-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-br-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-expected.png index b48ac90..6da112b9 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-rtl-expected.png index d291c255..b9b71a9 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-rtl-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-span-across-line-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-span-across-line-expected.png index e8550d1..70b9a8de 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-span-across-line-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-span-across-line-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-span-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-span-expected.png index 3ecf63d..b9dbfc00 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-span-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-span-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-vertical-lr-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-vertical-lr-expected.png index 40eacd7..4672c00 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-vertical-lr-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-vertical-lr-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-vertical-rl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-vertical-rl-expected.png index 2aa093bd..7ad94d3b 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-vertical-rl-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-newline-vertical-rl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-update-style-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-update-style-expected.png index 8ca30adf..02739bc9 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-update-style-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/selection/text-selection-update-style-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-expected.png b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-expected.png index 5b61b7f..eec2ba06 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt index ea904b4..d78e6de 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt
@@ -1,10 +1,10 @@ { "layers": [ { - "name": "Scrolling background of LayoutView #document", + "name": "Scrolling background of LayoutNGView #document", "bounds": [800, 600], "contentsOpaque": true, - "backgroundColor": "#FFFFFF", + "backgroundColor": "#90EE90", "invalidations": [ [8, 8, 48, 33] ]
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.png b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.png index 5c0aa1f9..ee5e590 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt index d4571bbd..4d6cd21 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt
@@ -1,10 +1,10 @@ { "layers": [ { - "name": "Scrolling background of LayoutView #document", + "name": "Scrolling background of LayoutNGView #document", "bounds": [800, 600], "contentsOpaque": true, - "backgroundColor": "#FFFFFF", + "backgroundColor": "#90EE90", "invalidations": [ [0, 8, 40, 33] ]
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.png b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.png index 50268f9..3079d37 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt index 9e651e11..6acd005 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt
@@ -1,10 +1,10 @@ { "layers": [ { - "name": "Scrolling background of LayoutView #document", + "name": "Scrolling background of LayoutNGView #document", "bounds": [800, 600], "contentsOpaque": true, - "backgroundColor": "#FFFFFF", + "backgroundColor": "#90EE90", "invalidations": [ [8, 8, 33, 48] ]
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.png b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.png index be50750..cb59dc7 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt index bc2952499..f992fa81 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt
@@ -1,10 +1,10 @@ { "layers": [ { - "name": "Scrolling background of LayoutView #document", + "name": "Scrolling background of LayoutNGView #document", "bounds": [800, 600], "contentsOpaque": true, - "backgroundColor": "#FFFFFF", + "backgroundColor": "#90EE90", "invalidations": [ [7, 8, 33, 48] ]
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.png b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.png index a5094a4e..29cbad13 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt index 461b8e8..1a09b2aa 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt
@@ -1,10 +1,10 @@ { "layers": [ { - "name": "Scrolling background of LayoutView #document", + "name": "Scrolling background of LayoutNGView #document", "bounds": [800, 600], "contentsOpaque": true, - "backgroundColor": "#FFFFFF", + "backgroundColor": "#90EE90", "invalidations": [ [8, 24, 16, 17], [8, 8, 16, 17],
diff --git a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-across-blocks-expected.png b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-across-blocks-expected.png index a5094a4e..29cbad13 100644 --- a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-across-blocks-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-across-blocks-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/ruby/select-ruby-expected.png b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-across-blocks-line-beginning-end-expected.png similarity index 85% rename from third_party/blink/web_tests/platform/linux/fast/ruby/select-ruby-expected.png rename to third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-across-blocks-line-beginning-end-expected.png index 0abde32..165b23c 100644 --- a/third_party/blink/web_tests/platform/linux/fast/ruby/select-ruby-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-across-blocks-line-beginning-end-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-br-expected.png b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-br-expected.png index a5094a4e..29cbad13 100644 --- a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-br-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-br-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-expected.png b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-expected.png index 5b61b7f..eec2ba06 100644 --- a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-rtl-expected.png b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-rtl-expected.png index 5c0aa1f9..ee5e590 100644 --- a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-rtl-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-span-across-line-expected.png b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-span-across-line-expected.png index bfda3cb..96379c6e 100644 --- a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-span-across-line-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-span-across-line-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-span-expected.png b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-span-expected.png index 984ec3e..e062290 100644 --- a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-span-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-span-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-vertical-lr-expected.png b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-vertical-lr-expected.png index 50268f9..3079d37 100644 --- a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-vertical-lr-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-vertical-lr-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-vertical-rl-expected.png b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-vertical-rl-expected.png index be50750..cb59dc7 100644 --- a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-vertical-rl-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-vertical-rl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-update-style-expected.png b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-update-style-expected.png index 911be117..861571a 100644 --- a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-update-style-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-update-style-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png b/third_party/blink/web_tests/platform/win/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png index a914f2de..c34b1a9 100644 --- a/third_party/blink/web_tests/platform/win/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png +++ b/third_party/blink/web_tests/platform/win/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/compositing/squashing/selection-repaint-with-gaps-expected.png b/third_party/blink/web_tests/platform/win/compositing/squashing/selection-repaint-with-gaps-expected.png index 0d427402..eb53af96 100644 --- a/third_party/blink/web_tests/platform/win/compositing/squashing/selection-repaint-with-gaps-expected.png +++ b/third_party/blink/web_tests/platform/win/compositing/squashing/selection-repaint-with-gaps-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/execCommand/findString-2-expected.png b/third_party/blink/web_tests/platform/win/editing/execCommand/findString-2-expected.png index 40ee1e2..b9d9f5c 100644 --- a/third_party/blink/web_tests/platform/win/editing/execCommand/findString-2-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/execCommand/findString-2-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/4402375-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/4402375-expected.png index fb79410..4fd0e33f 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/4402375-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/4402375-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/5099303-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/5099303-expected.png index ddf35d35..56638ae9 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/5099303-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/5099303-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/5195166-2-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/5195166-2-expected.png index 937e894..e03983ae8 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/5195166-2-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/5195166-2-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/5232159-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/5232159-expected.png index 51c5b562..719a016 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/5232159-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/5232159-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/display-table-text-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/display-table-text-expected.png index 41a3ccc..58422dd 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/display-table-text-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/display-table-text-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-expected.png index 7840c00..6866d65 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-ltr-mixed-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-ltr-mixed-expected.png index 5040edb..cb896e8 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-ltr-mixed-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-ltr-mixed-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl-expected.png index bd4bbbf..6e9196f 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl-mixed-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl-mixed-expected.png index 82b370d..0e522696 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl-mixed-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/dont-select-text-overflow-ellipsis-when-wrapping-rtl-mixed-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/inline-closest-leaf-child-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/inline-closest-leaf-child-expected.png index 6eec4e9..558fdcc 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/inline-closest-leaf-child-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/inline-closest-leaf-child-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/japanese-lr-selection-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/japanese-lr-selection-expected.png index abad259..762b5fa3 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/japanese-lr-selection-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/japanese-lr-selection-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/japanese-rl-selection-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/japanese-rl-selection-expected.png index d1d97b17..68c3365 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/japanese-rl-selection-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/japanese-rl-selection-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/line-wrap-1-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/line-wrap-1-expected.png index 31e0067..b0d8ee4 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/line-wrap-1-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/line-wrap-1-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/line-wrap-2-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/line-wrap-2-expected.png index 86ec848..9805def 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/line-wrap-2-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/line-wrap-2-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/range-between-block-and-inline-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/range-between-block-and-inline-expected.png index 116c6624..b15380b1 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/range-between-block-and-inline-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/range-between-block-and-inline-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/select-missing-image-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/select-missing-image-expected.png index 0066ecc..f00499ba 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/select-missing-image-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/select-missing-image-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/select-text-overflow-ellipsis-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/select-text-overflow-ellipsis-expected.png index 53461e4e9..04e9570b 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/select-text-overflow-ellipsis-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/select-text-overflow-ellipsis-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/select-text-overflow-ellipsis-mixed-in-ltr-2-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/select-text-overflow-ellipsis-mixed-in-ltr-2-expected.png index 9dbb4f3..1c7423c 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/select-text-overflow-ellipsis-mixed-in-ltr-2-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/select-text-overflow-ellipsis-mixed-in-ltr-2-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/select-text-overflow-ellipsis-mixed-in-ltr-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/select-text-overflow-ellipsis-mixed-in-ltr-expected.png index d807fc9..4b5f516 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/select-text-overflow-ellipsis-mixed-in-ltr-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/select-text-overflow-ellipsis-mixed-in-ltr-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/select-text-overflow-ellipsis-mixed-in-rtl-2-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/select-text-overflow-ellipsis-mixed-in-rtl-2-expected.png index 245af0ee..8d69edb8 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/select-text-overflow-ellipsis-mixed-in-rtl-2-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/select-text-overflow-ellipsis-mixed-in-rtl-2-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/select-text-overflow-ellipsis-mixed-in-rtl-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/select-text-overflow-ellipsis-mixed-in-rtl-expected.png index c976426..1b2a569 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/select-text-overflow-ellipsis-mixed-in-rtl-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/select-text-overflow-ellipsis-mixed-in-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/selection-button-text-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/selection-button-text-expected.png index ca04852..e3a26916 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/selection-button-text-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/selection-button-text-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/selection-color-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/selection-color-expected.png index 071237f4..57d5c7d 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/selection-color-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/selection-color-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/transformed-selection-rects-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/transformed-selection-rects-expected.png index af809e0..069dcb17 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/transformed-selection-rects-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/transformed-selection-rects-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/vertical-lr-replaced-selection-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/vertical-lr-replaced-selection-expected.png index 1ecfcd07..277f2a9c0 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/vertical-lr-replaced-selection-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/vertical-lr-replaced-selection-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/vertical-rl-replaced-selection-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/vertical-rl-replaced-selection-expected.png index 926f96e8..af28389 100644 --- a/third_party/blink/web_tests/platform/win/editing/selection/vertical-rl-replaced-selection-expected.png +++ b/third_party/blink/web_tests/platform/win/editing/selection/vertical-rl-replaced-selection-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/dom/52776-expected.png b/third_party/blink/web_tests/platform/win/fast/dom/52776-expected.png index 464c590..488509c 100644 --- a/third_party/blink/web_tests/platform/win/fast/dom/52776-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/dom/52776-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/dynamic/selection-highlight-adjust-expected.png b/third_party/blink/web_tests/platform/win/fast/dynamic/selection-highlight-adjust-expected.png index f47c171..81c7ee0 100644 --- a/third_party/blink/web_tests/platform/win/fast/dynamic/selection-highlight-adjust-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/dynamic/selection-highlight-adjust-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/events/updateLayoutForHitTest-expected.png b/third_party/blink/web_tests/platform/win/fast/events/updateLayoutForHitTest-expected.png index 0063b0c..f868427e 100644 --- a/third_party/blink/web_tests/platform/win/fast/events/updateLayoutForHitTest-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/events/updateLayoutForHitTest-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png index 182ea58..08c2795 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/select/select-multiple-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/select/select-multiple-hover-focused-unselected-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/select/select-multiple-hover-focused-unselected-expected.png index 6c329a89..61bf2343 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/select/select-multiple-hover-focused-unselected-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/select/select-multiple-hover-focused-unselected-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/text-selection-outside-control-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/text-selection-outside-control-expected.png index eea48ae..8c6a697 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/text-selection-outside-control-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/text-selection-outside-control-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/listbox-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/select/listbox-appearance-basic-expected.png index 4c1bafc..b71d1a1 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/select/listbox-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/select/listbox-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/menulist-popup-type-ahead-style-change-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/select/menulist-popup-type-ahead-style-change-expected.png index a5ed3f2..caf6612 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/select/menulist-popup-type-ahead-style-change-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/select/menulist-popup-type-ahead-style-change-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png index ac445ab1..8714a31 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/select/multiselect-in-listbox-keyboard-focusring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/select-listbox-multiple-no-focusring-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/select/select-listbox-multiple-no-focusring-expected.png index c01835f..18a41209 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/select/select-listbox-multiple-no-focusring-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/select/select-listbox-multiple-no-focusring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/tabbing-input-iframe-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/tabbing-input-iframe-expected.png index 0e0c97f..8e31c6e 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/tabbing-input-iframe-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/tabbing-input-iframe-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/text/input-appearance-selection-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/text/input-appearance-selection-expected.png index f2681e58..01b1b87 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/text/input-appearance-selection-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/text/input-appearance-selection-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/text/input-double-click-selection-gap-bug-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/text/input-double-click-selection-gap-bug-expected.png index c3bf3fc..c43bddad 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/text/input-double-click-selection-gap-bug-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/text/input-double-click-selection-gap-bug-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/text/input-readonly-autoscroll-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/text/input-readonly-autoscroll-expected.png index 7b5fbd2f..4e0d2bb5 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/text/input-readonly-autoscroll-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/text/input-readonly-autoscroll-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/text/input-text-double-click-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/text/input-text-double-click-expected.png index ef3b777..aab682d 100644 --- a/third_party/blink/web_tests/platform/win/fast/forms/text/input-text-double-click-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/forms/text/input-text-double-click-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/lists/markers-in-selection-expected.png b/third_party/blink/web_tests/platform/win/fast/lists/markers-in-selection-expected.png index 2c520d3..acd6120 100644 --- a/third_party/blink/web_tests/platform/win/fast/lists/markers-in-selection-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/lists/markers-in-selection-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/overflow/image-selection-highlight-expected.png b/third_party/blink/web_tests/platform/win/fast/overflow/image-selection-highlight-expected.png index 9658a89..3698f59 100644 --- a/third_party/blink/web_tests/platform/win/fast/overflow/image-selection-highlight-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/overflow/image-selection-highlight-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/reflections/inline-crash-expected.png b/third_party/blink/web_tests/platform/win/fast/reflections/inline-crash-expected.png index bdbb0e4..dcf4bdc 100644 --- a/third_party/blink/web_tests/platform/win/fast/reflections/inline-crash-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/reflections/inline-crash-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/ruby/select-ruby-expected.png b/third_party/blink/web_tests/platform/win/fast/ruby/select-ruby-expected.png index c57e461..8bd1b7c 100644 --- a/third_party/blink/web_tests/platform/win/fast/ruby/select-ruby-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/ruby/select-ruby-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/spatial-navigation/snav-multiple-select-focusring-expected.png b/third_party/blink/web_tests/platform/win/fast/spatial-navigation/snav-multiple-select-focusring-expected.png index eb36dfcb..2bd3c36 100644 --- a/third_party/blink/web_tests/platform/win/fast/spatial-navigation/snav-multiple-select-focusring-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/spatial-navigation/snav-multiple-select-focusring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/inspector-protocol/emulation/select-popup-auto-dark-mode-expected.txt b/third_party/blink/web_tests/platform/win/inspector-protocol/emulation/select-popup-auto-dark-mode-expected.txt index 5dd66cd..c4e4cfc6 100644 --- a/third_party/blink/web_tests/platform/win/inspector-protocol/emulation/select-popup-auto-dark-mode-expected.txt +++ b/third_party/blink/web_tests/platform/win/inspector-protocol/emulation/select-popup-auto-dark-mode-expected.txt
@@ -1,6 +1,6 @@ [crbug/1311561] Tests that auto dark mode emulation from DevTools correctly emulates dark mode for select element === Before auto dark mode (autoDarkMode and prefers-color-scheme override) is not enabled === -data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAAAXNSR0IArs4c6QAAEN9JREFUeJzt3T2OHGUCgOHqlXNSWxpLRiZdDoBkwwUIyCHeGBH0GSZBZCwihHvYGm6w8UjOdiblBL1Rr8ZNV/9Ud7899DxPAlNVXV/JUb366quaLRaLxQAAABD4x7kvAAAAeDoECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABA5tkuB83n81Nfx8W5vr4+9yUAAMCjszVA5vO5m+kJ/LsBAMBfeQQLAADICBAAACAjQAAAgMxOi9A3mc1mH/29WCw27l89bmz/8pjZbLb1nOv2r24b2z52LAAAcHwHBciuN/SbYuDhvl1iYNcxdz0XAADQmfwI1tgN/nLW4hT2GXPbdewz8/Hjjz8O9/f3f9l+f38//PTTTzudAwAAeMJrQHaNj59//nn44Ycfhjdv3gx3d3f/3353dze8efNm+P7774dff/31VJcJAAAX5aID5BizMd98883w6tWr4fb2dnj79u1wf38/3N/fD2/fvh1ub2+Hzz77bPj666+PdMUAAHDZDl6Evot1EfB3Wfj9/Pnz4Y8//hi++uqr4fb2dvjiiy+GYRiGDx8+DK9fvx5ubm6G58+fn/kqAQDg7yEJkHPGxtibtPZxdXU1vHv3bvjyyy+HDx8+DMMwDK9fvx7ev38/vHjx4liXCgAAF++iH8E6ppcvXw43NzfD1dXV8OrVq+H9+/fD1dXVuS8LAAD+VibPgGz6RsepZjymjnmsN3NdXV0NNzc3w7Nnz8QHAABMcNAjWGOvvz2lqWMeK0I+/fTTg88BAABP1cFrQLbd/O8TJGPf+DjWmFPOBQAAHI81IAAAQEaAAAAAGQECAABkZosdFkHM5/PiWi7K9fX1uS8BAAAena0zIOJjGv9uAADwVzu9Beu3P7899XVcnO8++f3clwAAAI+ONSAAAEBGgAAAAJmDP0R498vnH/394l//2bh/9bix/ctj7n75fOs51+1f3Ta2fexYAADg+A4KkF1v6DfFwMN9u8TArmPuei4AAKAz+RGssRv85azFKewz5rbrMPMBAAC9J7sGRHwAAEDvogPklLMxAADA/g5ehL6LdRFgBgIAAJ6eJEDOGRtjb9ICAAB6F/0IFgAA8LhMDpCx9RWnnG2YOqa1IAAA8Dgc9AjW2OtvT2nqmCIEAADOb7ZYLBabDpjP58Nvf35bXc/F+O6T34fr6+tzXwYAADwq1oAAAAAZAQIAAGQECAAAkNlpEfp///3PU1/HxZnPz30FAADw+JgBAQAAMgIEAADIHPQdkGEYhtls9tHfq2/1Xd2/etzY/uUxs9ls6znX7V/3duGH27edAwAAOL6DAmQsDla3bYqBh/vGwmHKmJvOte/xAADAcUx+BGvshn05a3EK+4y56TqEBgAAnIc1IAAAQOaiA+SUszEAAMD+Dl6Evot1EfCYHoOy/gMAABpJgJzz5n7sTVpL4gMAADoX/QjWNuIDAABakwNkbH3FKW/qp4657nfiAwAAegc9gjX2+ttTmjrmw9+t/nef8wAAANMdvAZk2037Pjf1Y9/4ONaYy+1CAwAAzuNJrwEBAABaAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgc/Brebd/SWPfhwIfHje1fHrPug4G7jLnuVbsPt/sGCAAA9A4KkLE4WN22KQYe7tvl6+S7jrnpXPseDwAAHMfkR7DGbtjXfan8WPYZc9N1CA0AADgPa0AAAIDMwWtAHrOxNSRLD2dIzIoAAMDpJQGy7lGox3DDv+/6EwAA4DBJgJzzxn7bLAgAANCxBgQAAMhMDpCxt0ydcrZh6pirvzvVW7oAAIDNDnoEa+z1t6c0dcyHvzvHdQMAAEdYA7Ltxn2fG/uxb3wca8yH2wUHAAD0rAEBAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgc/Brebd/TGPvo3/K4TR8FXH6vY9s51+1f95rdfbcDAADHdVCAjMXB6rZNN/0P9+0SAruOuWtU+Co6AAB0Jj+CNXaDv+4r48eyz5invA4AAGCaJ70GxKNXAADQuugAMQsCAACPy8GL0HexLgLOPfNg9gMAAHpJgJzzRn/sTVoAAEDvoh/BGrOckZnNZh/9PwAAcFqTA2RsfcUpZxumjrn6u+Xrfx++BtgMCQAAnN5Bj2CNvf72lKaOaUE6AACc38FrQLbd/O8TJGPf+DjWmPtuBwAAjutJrgEBAADOQ4AAAAAZAQIAAGR2WgMyn89PfR0AAMATMFtYgQ0AAEQ8ggUAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGT+B8tBTe0RtkDVAAAAAElFTkSuQmCC +data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAAAXNSR0IArs4c6QAAENlJREFUeJzt3T2OI2UCgOHyanLSYdVIg4aUCyDNwAUIyCHfFBH4DJ0gskEihHswao6waUuTMZ1yAm/klce4/FO2Xzfu50mgq8r1lSaqV199VbPFYrEYAAAAAv+69AUAAABPhwABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMg82+eg+Xx+7uu4Ore3t5e+BAAAeHR2Bsh8PnczPYF/NwAA+DuPYAEAABkBAgAAZAQIAACQ2WsR+jaz2eyDvxeLxdb968eN7V8eM5vNdp5z0/71bWPbx44FAABO76gA2feGflsMrO7bJwb2HXPfcwEAAJ3Jj2CN3eAvZy3O4ZAxd13HITMfP/744/Dw8PC37Q8PD8NPP/201zkAAIAnvAZk3/h48+bN8MMPPwyvXr0a3r9////t79+/H169ejV8//33wy+//HKuywQAgKty1QFyitmYb775Znjx4sVwf38/vH79enh4eBgeHh6G169fD/f398Nnn302fP311ye6YgAAuG5HL0Lfx6YI+Kcs/H7+/Pnwxx9/DF999dVwf38/fPHFF8MwDMO7d++Gly9fDnd3d8Pz588vfJUAAPDPkATIJWNj7E1ah7i5uRl+//334csvvxzevXs3DMMwvHz5cnj79u3w8ccfn+pSAQDg6l31I1in9Mknnwx3d3fDzc3N8OLFi+Ht27fDzc3NpS8LAAD+USbPgGz7Rse5ZjymjnmqN3Pd3NwMd3d3w7Nnz8QHAABMcNQjWGOvvz2nqWOeKkI+/fTTo88BAABP1dFrQHbd/B8SJGPf+DjVmFPOBQAAnI41IAAAQEaAAAAAGQECAABkZos9FkHM5/PiWq7K7e3tpS8BAAAenZ0zIOJjGv9uAADwd3u9BevXv74993Vcne8++u3SlwAAAI+ONSAAAEBGgAAAAJmjP0T458+ff/D3v//z3637148b27885s+fP995zk3717eNbR87FgAAOL2jAmTfG/ptMbC6b58Y2HfMfc8FAAB0Jj+CNXaDv5y1OIdDxtx1HWY+AACg92TXgIgPAADoXXWAnHM2BgAAONzRi9D3sSkCzEAAAMDTkwTIJWNj7E1aAABA76ofwQIAAB6XyQEytr7inLMNU8e0FgQAAB6Hox7BGnv97TlNHVOEAADA5c0Wi8Vi2wHz+Xz49a9vq+u5Gt999Ntwe3t76csAAIBHxRoQAAAgI0AAAICMAAEAADJ7LUK3ePtw8/mlrwAAAB4fMyAAAEBGgAAAAJmjvgMyDMMwm80++Hv9rb7r+9ePG9u/PGY2m+0856b9m94uvLp91zkAAIDTOypAxuJgfdu2GFjdNxYOU8bcdq5DjwcAAE5j8iNYYzfsy1mLczhkzG3XITQAAOAyrAEBAAAyVx0g55yNAQAADnf0IvR9bIqAx/QYlPUfAADQSALkkjf3Y2/SWhIfAADQuepHsHYRHwAA0JocIGPrK855Uz91zE2/Ex8AANA76hGssdffntPUMVd/t/7fQ84DAABMd/QakF037Yfc1I994+NUYy63Cw0AALiMJ70GBAAAaAkQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgc/RreHd9S2PThwNXjxvbvzxm0wcD9xlz06t2V7f7BggAAPSOCpCxOFjfti0GVvft83Xyfcfcdq5DjwcAAE5j8iNYYzfsm75UfiqHjLntOoQGAABchjUgAABA5ug1II/Z2BqSpdUZErMiAABwfkmAbHoU6jHc8B+6/gQAADhOEiCXvLHfNQsCAAB0rAEBAAAykwNk7C1T55xtmDrm+u/O9ZYuAABgu6MewRp7/e05TR1z9XeXuG4AAOAEa0B23bgfcmM/9o2PU425ul1wAABAzxoQAAAgI0AAAICMAAEAADICBAAAyAgQAAAgI0AAAIDM0a/h3fU9jbGP/i2P2/ZRwOX3Onadc9P+Ta/ZPXQ7AABwWkcFyFgcrG/bdtO/um+fENh3zH2jwlfRAQCgM/kRrLEb/E1fGT+VQ8Y853UAAADTPOk1IB69AgCA1lUHiFkQAAB4XI5ehL6PTRFw6ZkHsx8AANBLAuSSN/pjb9ICAAB6V/0I1pjljMxsNvvg/wEAgPOaHCBj6yvOOdswdcz13y1f/7v6GmAzJAAAcH5HPYI19vrbc5o6pgXpAABweUevAdl1839IkIx94+NUYx66HQAAOK0nuQYEAAC4DAECAABkBAgAAJDZaw3IfD4/93UAAABPwGxhBTYAABDxCBYAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJD5H0F0Tf/N+jljAAAAAElFTkSuQmCC === After auto dark mode (autoDarkMode and prefers-color-scheme override) is enabled === data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAAAXNSR0IArs4c6QAAEQNJREFUeJzt3T9uG1cCwOHnxZ6ATmXoKO7SEQiQKun2AJGdhl0OkI6dbaTOIdSlCZSbxBBgJb6Ct1hoIcscin/EHxXq+5okMyPOQ6r54c2b92w2m30aAAAAgX8dewAAAMDTIUAAAICMAAEAADICBAAAyAgQAAAgI0AAAICMAAEAADL/3uSixWJx6HGcnOVyeewhAADAo/Psvo0IF4vFuLi4qMZzMubzuQgBAIA7vIIFAABkBAgAAJARIAAAQGajRejrXF5efvbfL1++XHv+7nVT52+uuby8vPc3V52/e2zq+NS1AADAw9srQDZ9oF8XA7fPbRIDm95z098CAAA6O7+CNfWAfzNrcQjb3PO+cWwz8/H999+P2Wz2xfHZbDa+++67jX4DAAB4wmtANo2Pb7/9drx+/Xq8e/duPH/+/P/Hnz9/Pt69ezd+/PHH8c033xxqmAAAcFJOOkAeYjbm999/H1dXV+Ps7Gy8fft2zGazMZvNxtu3b8fZ2dn4888/xx9//PFAIwYAgNO29yL0TayKgH/Kwu+PHz+OH374Ybx582acnZ2NX375ZYwxxosXL8b79+/H+fn5+Pjx45FHCQAA/wxJgBwzNqa+pLWN6+vr8fr16/HmzZvx4sWLMcYY79+/H69evRp///33Qw0VAABO3km/gvWQPnz4MM7Pz8eHDx/G1dXVePXq1bi+vj72sAAA4B9l5wCZWl9xyH01dr3nQ32Z6/r6epyfn4/z83PxAQAAO9jrFaypz98e0q73fKgIubq62vs3AADgqXo2m80+rbtgsViMi4uLajwnYz6fj+VyeexhAADAo2INCAAAkBEgAABARoAAAACZe9eAjPG/dSBsx/oPAAD40r0zIOJjN/6/AQDAlzb6DO9XX/906HGcnL9++/nYQwAAgEfHGhAAACAjQAAAgMxeO6GPMcavi893If/P8nLt+bvXTZ2/uebXxct7f3PV+bvHpo5PXQsAADy8vQJk0wf6dTFw+9wmMbDpPTf9LQAAoLPzK1hTD/g3sxaHsM097xuHmQ8AAOg92TUg4gMAAHonHSCHnI0BAAC2t/ci9E2sigAzEAAA8PQkAXLM2Jj6khYAANA76VewAACAx2XnAJlaX3HI2YZd72ktCAAAPA57vYI19fnbQ9r1niIEAACO79lsNvu07oLFYjG++vqnajwn46/ffh7L5fLYwwAAgEfFGhAAACAjQAAAgIwAAQAAMhstQrd4e3vz+fzYQwAAgEfHDAgAAJARIAAAQGavfUDGGOPy8vM9OF6+fLn2/N3rps7fXHN5eXnvb646f/fY3eP3/QYAAPDw9gqQqTi4e2xdDNw+NxUOu9xz3W9tez0AAPAwdn4Fa+qB/WbW4hC2uee6cQgNAAA4DmtAAACAzEkHyCFnYwAAgO3tvQh9E6si4DG9BmX9BwAANJIAOebD/dSXtG6IDwAA6Jz0K1j3ER8AANDaOUCm1lcc8qF+13uu+jvxAQAAvb1ewZr6/O0h7XrP239395/b/A4AALC7Z7PZ7NO6CxaLxbi4uKjGczLm8/lYLpfHHgYAADwqT3oNCAAA0BIgAABARoAAAAAZAQIAAGQECAAAkBEgAABAZq99QMa4fy+NVRsH3r5u6vzNNas2DNzknqv29Lh93B4gAADQ2ytApuLg7rF1MXD73Ca7k296z3W/te31AADAw9j5FaypB/ZVO5U/lG3uuW4cQgMAAI7DGhAAACCz9xqQx2xqDcmN2zMkZkUAAODwkgBZ9SrUY3jg33b9CQAAsJ8kQI75YH/fLAgAANCxBgQAAMjsHCBTX5k65GzDrve8+3eH+koXAACw3l6vYE19/vaQdr3n7b87xrgBAIAxns1ms0/rLlgsFuPi4qIaz8mYz+djuVweexgAAPCoWAMCAABkBAgAAJARIAAAQEaAAAAAGQECAABkBAgAAJDZax+QMb7c1O/ufhpTm/7dXLduU8Cb/Tru+81V51ft67HtcQAA4GHtFSBTcXD32LqH/tvnNgmBTe+5aVTYFR0AADo7v4I19YC/apfxh7LNPQ85DgAAYDdPeg2IV68AAKB10gFiFgQAAB6XvRehb2JVBBx75sHsBwAA9JIAOeaD/tSXtAAAgN5Jv4I15WZG5vLy8rN/BwAADmvnAJlaX3HI2YZd73n3724+/3v7M8BmSAAA4PD2egVr6vO3h7TrPS1IBwCA43s2m80+rbtgsViMi4uLajwnYz6fj+VyeexhAADAo/Ik14AAAADHIUAAAICMAAEAADIbLUKfz+eHHgcAAPAE3LsIHQAA4KF4BQsAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMj8FxtjyPFFdO+SAAAAAElFTkSuQmCC
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/4774354-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/4774354-expected.png index 40212eb..da189fa 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/4774354-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/4774354-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/repaint-across-writing-mode-boundary-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/repaint-across-writing-mode-boundary-expected.png index 7992e83..28ee138 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/repaint-across-writing-mode-boundary-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/repaint-across-writing-mode-boundary-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-expected.png index 785a361..6dd2c53 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt index 88aa5ff..f41b627 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt
@@ -1,10 +1,10 @@ { "layers": [ { - "name": "Scrolling background of LayoutView #document", + "name": "Scrolling background of LayoutNGView #document", "bounds": [800, 600], "contentsOpaque": true, - "backgroundColor": "#FFFFFF", + "backgroundColor": "#90EE90", "invalidations": [ [8, 8, 48, 32] ]
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.png index 94c8f58..b20f2d6 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt index 503481b..67c4ab79 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt
@@ -1,10 +1,10 @@ { "layers": [ { - "name": "Scrolling background of LayoutView #document", + "name": "Scrolling background of LayoutNGView #document", "bounds": [800, 600], "contentsOpaque": true, - "backgroundColor": "#FFFFFF", + "backgroundColor": "#90EE90", "invalidations": [ [0, 8, 40, 32] ]
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.png index 2849a72..7e3403a 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt index 003cb1e..82e3e6f 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt
@@ -1,10 +1,10 @@ { "layers": [ { - "name": "Scrolling background of LayoutView #document", + "name": "Scrolling background of LayoutNGView #document", "bounds": [800, 600], "contentsOpaque": true, - "backgroundColor": "#FFFFFF", + "backgroundColor": "#90EE90", "invalidations": [ [8, 8, 32, 48] ]
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.png index 9887934a..82f477a 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt index 003cb1e..82e3e6f 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt
@@ -1,10 +1,10 @@ { "layers": [ { - "name": "Scrolling background of LayoutView #document", + "name": "Scrolling background of LayoutNGView #document", "bounds": [800, 600], "contentsOpaque": true, - "backgroundColor": "#FFFFFF", + "backgroundColor": "#90EE90", "invalidations": [ [8, 8, 32, 48] ]
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.png index f04b9c95..ce4c510 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt similarity index 66% rename from third_party/blink/web_tests/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt rename to third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt index bed46977..b2a859e 100644 --- a/third_party/blink/web_tests/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt
@@ -1,10 +1,10 @@ { "layers": [ { - "name": "Scrolling background of LayoutView #document", + "name": "Scrolling background of LayoutNGView #document", "bounds": [800, 600], "contentsOpaque": true, - "backgroundColor": "#FFFFFF", + "backgroundColor": "#90EE90", "invalidations": [ [24, 8, 16, 16], [8, 24, 16, 16],
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.png index 8028bd6d3..8556d8b 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-after-remove-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-after-remove-expected.png index 56e82b7..d92a73e 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-after-remove-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-after-remove-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.png index eae6d71..4b9f844 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.png index 76d8e6f..c9ab563 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.png index bd1fec4..afbffdc 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-rl-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-rl-expected.png index 3e24792..7314432 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-rl-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-rl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-within-composited-scroller-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-within-composited-scroller-expected.png index fb477fe..d7ecad4 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-within-composited-scroller-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-within-composited-scroller-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.png index c0a5ea2..c1a30395 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-expected.png b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-expected.png index 085aa93..fc7e9ce7 100644 --- a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-font-64px-expected.png b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-font-64px-expected.png index a964c94..354938f 100644 --- a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-font-64px-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-font-64px-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-font-8px-expected.png b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-font-8px-expected.png index 41eda78b..b4ee83d 100644 --- a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-font-8px-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-font-8px-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-125-expected.png b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-125-expected.png index 6115b59..5097ee5 100644 --- a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-125-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-125-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-150-expected.png b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-150-expected.png index 5284b1e..ad982a7 100644 --- a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-150-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-150-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-175-expected.png b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-175-expected.png index 7aa1354..486ebf5 100644 --- a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-175-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-175-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-200-expected.png b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-200-expected.png index 5634b5d9..fa93640 100644 --- a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-200-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-200-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-2000-expected.png b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-2000-expected.png index 6c5d580..eee3d64 100644 --- a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-2000-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-2000-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-250-expected.png b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-250-expected.png index 54cd144..2025346 100644 --- a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-250-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-250-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/selection/image-writing-modes-expected.png b/third_party/blink/web_tests/platform/win/paint/selection/image-writing-modes-expected.png index a0ae21a2..305a6061 100644 --- a/third_party/blink/web_tests/platform/win/paint/selection/image-writing-modes-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/selection/image-writing-modes-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-inline-block-expected.png b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-inline-block-expected.png index 10c7a76..dcf2b0e 100644 --- a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-inline-block-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-inline-block-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-inline-block-rtl-expected.png b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-inline-block-rtl-expected.png index b8e8fe4..4d0e271 100644 --- a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-inline-block-rtl-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-inline-block-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-across-blocks-expected.png b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-across-blocks-expected.png index f04b9c95..ce4c510 100644 --- a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-across-blocks-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-across-blocks-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/paint/selection/text-selection-newline-across-blocks-line-beginning-end-expected.png b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-across-blocks-line-beginning-end-expected.png similarity index 84% rename from third_party/blink/web_tests/paint/selection/text-selection-newline-across-blocks-line-beginning-end-expected.png rename to third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-across-blocks-line-beginning-end-expected.png index c7db599b..743d927 100644 --- a/third_party/blink/web_tests/paint/selection/text-selection-newline-across-blocks-line-beginning-end-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-across-blocks-line-beginning-end-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-br-expected.png b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-br-expected.png index f04b9c95..ce4c510 100644 --- a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-br-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-br-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-clipped-by-overflow-expected.png b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-clipped-by-overflow-expected.png index 4b0ee85..50b7925 100644 --- a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-clipped-by-overflow-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-clipped-by-overflow-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-expected.png b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-expected.png index 785a361..6dd2c53 100644 --- a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.png b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.png index 67f69fe..757e77c 100644 --- a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-rtl-double-linebreak-expected.png b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-rtl-double-linebreak-expected.png index 9ac2f20..41de509 100644 --- a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-rtl-double-linebreak-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-rtl-double-linebreak-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-rtl-expected.png b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-rtl-expected.png index 94c8f58..b20f2d6 100644 --- a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-rtl-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-span-across-line-expected.png b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-span-across-line-expected.png index 8b759cf..d8517953 100644 --- a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-span-across-line-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-span-across-line-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-span-expected.png b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-span-expected.png index 24233494..c540c5a 100644 --- a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-span-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-span-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-vertical-lr-expected.png b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-vertical-lr-expected.png index 2849a72..7e3403a 100644 --- a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-vertical-lr-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-vertical-lr-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-vertical-rl-expected.png b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-vertical-rl-expected.png index 9887934a..82f477a 100644 --- a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-vertical-rl-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-newline-vertical-rl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-update-style-expected.png b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-update-style-expected.png index 419dc0d..ada2dc06 100644 --- a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-update-style-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-update-style-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-with-composition-expected.png b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-with-composition-expected.png index 30c16832..e530778 100644 --- a/third_party/blink/web_tests/platform/win/paint/selection/text-selection-with-composition-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/selection/text-selection-with-composition-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/text/selection-no-clip-text-expected.png b/third_party/blink/web_tests/platform/win/paint/text/selection-no-clip-text-expected.png index 70761e0..44f583e 100644 --- a/third_party/blink/web_tests/platform/win/paint/text/selection-no-clip-text-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/text/selection-no-clip-text-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/text/vertical-upright-oblique-expected.png b/third_party/blink/web_tests/platform/win/paint/text/vertical-upright-oblique-expected.png index 62bce779..adf92250 100644 --- a/third_party/blink/web_tests/platform/win/paint/text/vertical-upright-oblique-expected.png +++ b/third_party/blink/web_tests/platform/win/paint/text/vertical-upright-oblique-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/text/foreignObject-text-clipping-bug-expected.png b/third_party/blink/web_tests/platform/win/svg/text/foreignObject-text-clipping-bug-expected.png index 7158ccf8..7b25b1c 100644 --- a/third_party/blink/web_tests/platform/win/svg/text/foreignObject-text-clipping-bug-expected.png +++ b/third_party/blink/web_tests/platform/win/svg/text/foreignObject-text-clipping-bug-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/text-selection-outside-control-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/text-selection-outside-control-expected.png index c32116b..c17069e 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/text-selection-outside-control-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/text-selection-outside-control-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/text/input-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/text/input-focus-ring-expected.png index 9cd4cf4..d3f1f1bc 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/text/input-focus-ring-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/text/input-focus-ring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/atsui-kerning-and-ligatures-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/atsui-kerning-and-ligatures-expected.png index 16c62c7..a0989fff 100644 --- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/atsui-kerning-and-ligatures-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/atsui-kerning-and-ligatures-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/atsui-rtl-override-selection-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/atsui-rtl-override-selection-expected.png index 42dffea..3da680b6 100644 --- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/atsui-rtl-override-selection-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/atsui-rtl-override-selection-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/complex-text-rtl-selection-repaint-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/complex-text-rtl-selection-repaint-expected.png index 4a56d12..432ea37 100644 --- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/complex-text-rtl-selection-repaint-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/complex-text-rtl-selection-repaint-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/emphasis-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/emphasis-expected.png index 4476590c..1a6a0fda 100644 --- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/emphasis-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/emphasis-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/flexbox-selection-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/flexbox-selection-expected.png index 18d84d6..cad21d9 100644 --- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/flexbox-selection-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/flexbox-selection-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/flexbox-selection-nested-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/flexbox-selection-nested-expected.png index 26fbcea..c91b1877e 100644 --- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/flexbox-selection-nested-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/flexbox-selection-nested-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/khmer-selection-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/khmer-selection-expected.png index 15130b96..c430820 100644 --- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/khmer-selection-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/khmer-selection-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/mixed-directionality-selection-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/mixed-directionality-selection-expected.png index a424062..983d3550 100644 --- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/mixed-directionality-selection-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/mixed-directionality-selection-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/pre-wrap-overflow-selection-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/pre-wrap-overflow-selection-expected.png index 878dbe8..824d6fe6 100644 --- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/pre-wrap-overflow-selection-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/pre-wrap-overflow-selection-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/selection-painting-hidpi-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/selection-painting-hidpi-expected.png index 64257ec..9d909d2 100644 --- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/selection-painting-hidpi-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/selection-painting-hidpi-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/selection-with-inline-padding-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/selection-with-inline-padding-expected.png index cce9941a..d0b02407 100644 --- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/selection-with-inline-padding-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/selection-with-inline-padding-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/shaping-selection-rect-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/shaping-selection-rect-expected.png index f2ae473..9ba79001 100644 --- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/shaping-selection-rect-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/shaping-selection-rect-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/should-use-atsui-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/should-use-atsui-expected.png index ad352f6..8fd19e4 100644 --- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/should-use-atsui-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/should-use-atsui-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win10/fast/forms/select-popup/popup-menu-appearance-tall-expected.png b/third_party/blink/web_tests/platform/win10/fast/forms/select-popup/popup-menu-appearance-tall-expected.png index 17f238b2..9470ddb 100644 --- a/third_party/blink/web_tests/platform/win10/fast/forms/select-popup/popup-menu-appearance-tall-expected.png +++ b/third_party/blink/web_tests/platform/win10/fast/forms/select-popup/popup-menu-appearance-tall-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/virtual/prefetch/external/wpt/speculation-rules/prefetch/prefetch-traverse-reload.sub-expected.txt b/third_party/blink/web_tests/virtual/prefetch/external/wpt/speculation-rules/prefetch/prefetch-traverse-reload.sub-expected.txt new file mode 100644 index 0000000..ea1d86b4 --- /dev/null +++ b/third_party/blink/web_tests/virtual/prefetch/external/wpt/speculation-rules/prefetch/prefetch-traverse-reload.sub-expected.txt
@@ -0,0 +1,6 @@ +This is a testharness.js-based test. +PASS prefetches can be used for traversal navigations +FAIL History's Document is used for traversal navigations assert_equals: prefetch from different Document should not be used expected "" but got "prefetch" +PASS prefetches can be used for reload navigations +Harness: the test ran to completion. +
diff --git a/third_party/cpuinfo/cpuinfo.gni b/third_party/cpuinfo/cpuinfo.gni index be4e155..e0e8c02 100644 --- a/third_party/cpuinfo/cpuinfo.gni +++ b/third_party/cpuinfo/cpuinfo.gni
@@ -8,6 +8,8 @@ current_cpu != "s390" && current_cpu != "s390x" && # cpuinfo is not supported on fuchsia. !is_fuchsia && + # cpuinfo is crashy on the Windows Arm64 chips. + !(is_win && current_cpu == "arm64") && # There's a few arm architectures that are not supported by cpuinfo, # especially amongst ChromeOS devices. # See //third_party/cpuinfo/src/src/arm/linux/cp.h.
diff --git a/third_party/freetype/README.chromium b/third_party/freetype/README.chromium index 3395a082..363491c3 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-0-90-g9127c68f5 -Revision: 9127c68f593d9509bc289518bf907c311425e694 +Version: VER-2-13-0-97-g8fe50c2ad +Revision: 8fe50c2adca74a4eca1501c831251283b4cc6d9b CPEPrefix: cpe:/a:freetype:freetype:2.12.1 License: Custom license "inspired by the BSD, Artistic, and IJG (Independent JPEG Group) licenses"
diff --git a/third_party/libei/OWNERS b/third_party/libei/OWNERS index b6b89e7f..5dcd134 100644 --- a/third_party/libei/OWNERS +++ b/third_party/libei/OWNERS
@@ -1,3 +1,3 @@ lambroslambrou@chromium.org maxbooth@chromium.org -salmanmalik@chromium.org +rasputin@google.com
diff --git a/third_party/rust/Cargo.lock b/third_party/rust/Cargo.lock index a8470fbb..8e23e5c 100644 --- a/third_party/rust/Cargo.lock +++ b/third_party/rust/Cargo.lock
@@ -379,7 +379,7 @@ [[package]] name = "unicode-ident" -version = "1.0.3" +version = "1.0.8" [[package]] name = "unicode-linebreak"
diff --git a/third_party/rust/unicode_ident/v1/BUILD.gn b/third_party/rust/unicode_ident/v1/BUILD.gn index 25f41d6..4b12bbd 100644 --- a/third_party/rust/unicode_ident/v1/BUILD.gn +++ b/third_party/rust/unicode_ident/v1/BUILD.gn
@@ -18,7 +18,7 @@ build_native_rust_unit_tests = false sources = [ "crate/src/lib.rs" ] edition = "2018" - cargo_pkg_version = "1.0.3" + cargo_pkg_version = "1.0.8" cargo_pkg_authors = "David Tolnay <dtolnay@gmail.com>" cargo_pkg_name = "unicode-ident" cargo_pkg_description = "Determine whether characters have the XID_Start or XID_Continue properties according to Unicode Standard Annex #31"
diff --git a/third_party/rust/unicode_ident/v1/README.chromium b/third_party/rust/unicode_ident/v1/README.chromium index f0fd9d2..6b1116d 100644 --- a/third_party/rust/unicode_ident/v1/README.chromium +++ b/third_party/rust/unicode_ident/v1/README.chromium
@@ -1,6 +1,7 @@ Name: unicode-ident URL: https://crates.io/crates/unicode-ident Description: Determine whether characters have the XID_Start or XID_Continue properties according to Unicode Standard Annex #31 -Version: 1.0.3 +Version: 1.0.8 Security Critical: no -License: Apache 2.0, Unicode DFS 2016 +License: Apache 2.0, Unicode License Agreement - Data Files and Software (2016) +Revision: c4f455414fdb61f354bbed176d27528b8d726391
diff --git a/third_party/rust/unicode_ident/v1/crate/.cargo_vcs_info.json b/third_party/rust/unicode_ident/v1/crate/.cargo_vcs_info.json index e6a5bfe..295e0b8 100644 --- a/third_party/rust/unicode_ident/v1/crate/.cargo_vcs_info.json +++ b/third_party/rust/unicode_ident/v1/crate/.cargo_vcs_info.json
@@ -1,6 +1,6 @@ { "git": { - "sha1": "e970dad20b00d4e992c2e2fb1af32220d3e9398e" + "sha1": "c4f455414fdb61f354bbed176d27528b8d726391" }, "path_in_vcs": "" } \ No newline at end of file
diff --git a/third_party/rust/unicode_ident/v1/crate/.gitattributes b/third_party/rust/unicode_ident/v1/crate/.gitattributes index 696f4e6..735b3ee 100644 --- a/third_party/rust/unicode_ident/v1/crate/.gitattributes +++ b/third_party/rust/unicode_ident/v1/crate/.gitattributes
@@ -1,5 +1,5 @@ -generate/src/ucd.rs linguist-generated src/tables.rs linguist-generated tests/fst/xid_continue.fst linguist-generated tests/fst/xid_start.fst linguist-generated +tests/tables/tables.rs linguist-generated tests/trie/trie.rs linguist-generated
diff --git a/third_party/rust/unicode_ident/v1/crate/.github/FUNDING.yml b/third_party/rust/unicode_ident/v1/crate/.github/FUNDING.yml new file mode 100644 index 0000000..7507077 --- /dev/null +++ b/third_party/rust/unicode_ident/v1/crate/.github/FUNDING.yml
@@ -0,0 +1 @@ +github: dtolnay
diff --git a/third_party/rust/unicode_ident/v1/crate/.github/workflows/ci.yml b/third_party/rust/unicode_ident/v1/crate/.github/workflows/ci.yml index a9684ad..b74694e 100644 --- a/third_party/rust/unicode_ident/v1/crate/.github/workflows/ci.yml +++ b/third_party/rust/unicode_ident/v1/crate/.github/workflows/ci.yml
@@ -3,49 +3,66 @@ on: push: pull_request: + workflow_dispatch: schedule: [cron: "40 1 * * *"] +permissions: + contents: read + env: RUSTFLAGS: -Dwarnings jobs: + pre_ci: + uses: dtolnay/.github/.github/workflows/pre_ci.yml@master + unicode: name: latest Unicode runs-on: ubuntu-latest if: github.event_name != 'pull_request' + timeout-minutes: 45 steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable - id: ucd-generate - run: echo "::set-output name=version::$(grep 'ucd-generate [0-9]\+\.[0-9]\+\.[0-9]\+' generate/src/ucd.rs --only-matching)" + run: echo "version=$(grep 'ucd-generate [0-9]\+\.[0-9]\+\.[0-9]\+' tests/tables/tables.rs --only-matching)" >> $GITHUB_OUTPUT - run: cargo install ucd-generate - run: curl -LO https://www.unicode.org/Public/zipped/latest/UCD.zip - run: unzip UCD.zip -d UCD - - run: ucd-generate property-bool UCD --include XID_Start,XID_Continue > generate/src/ucd.rs + - run: ucd-generate property-bool UCD --include XID_Start,XID_Continue > tests/tables/tables.rs - run: ucd-generate property-bool UCD --include XID_Start,XID_Continue --fst-dir tests/fst - run: ucd-generate property-bool UCD --include XID_Start,XID_Continue --trie-set > tests/trie/trie.rs - run: cargo run --manifest-path generate/Cargo.toml - - run: sed --in-place 's/ucd-generate [0-9]\+\.[0-9]\+\.[0-9]\+/${{steps.ucd-generate.outputs.version}}/' generate/src/ucd.rs tests/trie/trie.rs + - run: sed --in-place 's/ucd-generate [0-9]\+\.[0-9]\+\.[0-9]\+/${{steps.ucd-generate.outputs.version}}/' tests/tables/tables.rs tests/trie/trie.rs - run: git diff --exit-code test: name: Rust ${{matrix.rust}} + needs: pre_ci + if: needs.pre_ci.outputs.continue runs-on: ubuntu-latest strategy: fail-fast: false matrix: rust: [nightly, beta, stable] + timeout-minutes: 45 steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@master with: toolchain: ${{matrix.rust}} + - name: Enable type layout randomization + run: echo RUSTFLAGS=${RUSTFLAGS}\ -Zrandomize-layout >> $GITHUB_ENV + if: matrix.rust == 'nightly' - run: cargo test - run: cargo check --benches msrv: name: Rust 1.31.0 + needs: pre_ci + if: needs.pre_ci.outputs.continue runs-on: ubuntu-latest + timeout-minutes: 45 steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@1.31.0 @@ -55,15 +72,17 @@ name: Clippy runs-on: ubuntu-latest if: github.event_name != 'pull_request' + timeout-minutes: 45 steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@clippy - - run: cargo clippy --tests --benches -- -Dclippy::all -Dclippy::pedantic + - run: cargo clippy --tests --benches --workspace -- -Dclippy::all -Dclippy::pedantic outdated: name: Outdated runs-on: ubuntu-latest if: github.event_name != 'pull_request' + timeout-minutes: 45 steps: - uses: actions/checkout@v3 - uses: dtolnay/install@cargo-outdated
diff --git a/third_party/rust/unicode_ident/v1/crate/Cargo.toml b/third_party/rust/unicode_ident/v1/crate/Cargo.toml index d946cc8..05687ca9 100644 --- a/third_party/rust/unicode_ident/v1/crate/Cargo.toml +++ b/third_party/rust/unicode_ident/v1/crate/Cargo.toml
@@ -13,12 +13,15 @@ edition = "2018" rust-version = "1.31" name = "unicode-ident" -version = "1.0.3" +version = "1.0.8" authors = ["David Tolnay <dtolnay@gmail.com>"] description = "Determine whether characters have the XID_Start or XID_Continue properties according to Unicode Standard Annex #31" documentation = "https://docs.rs/unicode-ident" readme = "README.md" -keywords = ["unicode"] +keywords = [ + "unicode", + "xid", +] categories = [ "development-tools::procedural-macro-helpers", "no-std", @@ -29,12 +32,15 @@ [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] +[lib] +doc-scrape-examples = false + [[bench]] name = "xid" harness = false [dev-dependencies.criterion] -version = "0.3" +version = "0.4" default-features = false [dev-dependencies.fst] @@ -45,11 +51,11 @@ features = ["small_rng"] [dev-dependencies.roaring] -version = "0.9" +version = "0.10" [dev-dependencies.ucd-trie] version = "0.1" default-features = false [dev-dependencies.unicode-xid] -version = "0.2" +version = "0.2.4"
diff --git a/third_party/rust/unicode_ident/v1/crate/Cargo.toml.orig b/third_party/rust/unicode_ident/v1/crate/Cargo.toml.orig index 5a56d8b..7f70f04c 100644 --- a/third_party/rust/unicode_ident/v1/crate/Cargo.toml.orig +++ b/third_party/rust/unicode_ident/v1/crate/Cargo.toml.orig
@@ -1,24 +1,23 @@ [package] name = "unicode-ident" -version = "1.0.3" +version = "1.0.8" authors = ["David Tolnay <dtolnay@gmail.com>"] categories = ["development-tools::procedural-macro-helpers", "no-std"] description = "Determine whether characters have the XID_Start or XID_Continue properties according to Unicode Standard Annex #31" documentation = "https://docs.rs/unicode-ident" edition = "2018" -keywords = ["unicode"] +keywords = ["unicode", "xid"] license = "(MIT OR Apache-2.0) AND Unicode-DFS-2016" -readme = "README.md" repository = "https://github.com/dtolnay/unicode-ident" rust-version = "1.31" [dev-dependencies] -criterion = { version = "0.3", default-features = false } +criterion = { version = "0.4", default-features = false } fst = "0.4" rand = { version = "0.8", features = ["small_rng"] } -roaring = "0.9" +roaring = "0.10" ucd-trie = { version = "0.1", default-features = false } -unicode-xid = "0.2" +unicode-xid = "0.2.4" [[bench]] name = "xid" @@ -27,5 +26,8 @@ [workspace] members = ["diagram", "generate"] +[lib] +doc-scrape-examples = false + [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"]
diff --git a/third_party/rust/unicode_ident/v1/crate/LICENSE-APACHE b/third_party/rust/unicode_ident/v1/crate/LICENSE-APACHE index 16fe87b..1b5ec8b 100644 --- a/third_party/rust/unicode_ident/v1/crate/LICENSE-APACHE +++ b/third_party/rust/unicode_ident/v1/crate/LICENSE-APACHE
@@ -174,28 +174,3 @@ of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -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 - - http://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.
diff --git a/third_party/rust/unicode_ident/v1/crate/README.md b/third_party/rust/unicode_ident/v1/crate/README.md index 5a63c613..dfb943b 100644 --- a/third_party/rust/unicode_ident/v1/crate/README.md +++ b/third_party/rust/unicode_ident/v1/crate/README.md
@@ -4,7 +4,7 @@ [<img alt="github" src="https://img.shields.io/badge/github-dtolnay/unicode--ident-8da0cb?style=for-the-badge&labelColor=555555&logo=github" height="20">](https://github.com/dtolnay/unicode-ident) [<img alt="crates.io" src="https://img.shields.io/crates/v/unicode-ident.svg?style=for-the-badge&color=fc8d62&logo=rust" height="20">](https://crates.io/crates/unicode-ident) [<img alt="docs.rs" src="https://img.shields.io/badge/docs.rs-unicode--ident-66c2a5?style=for-the-badge&labelColor=555555&logo=docs.rs" height="20">](https://docs.rs/unicode-ident) -[<img alt="build status" src="https://img.shields.io/github/workflow/status/dtolnay/unicode-ident/CI/master?style=for-the-badge" height="20">](https://github.com/dtolnay/unicode-ident/actions?query=branch%3Amaster) +[<img alt="build status" src="https://img.shields.io/github/actions/workflow/status/dtolnay/unicode-ident/ci.yml?branch=master&style=for-the-badge" height="20">](https://github.com/dtolnay/unicode-ident/actions?query=branch%3Amaster) Implementation of [Unicode Standard Annex #31][tr31] for determining which `char` values are valid in programming language identifiers. @@ -41,10 +41,10 @@ | | static storage | 0% nonascii | 1% | 10% | 100% nonascii | |---|---|---|---|---|---| -| **`unicode-ident`** | 9.75 K | 0.96 ns | 0.95 ns | 1.09 ns | 1.55 ns | -| **`unicode-xid`** | 11.34 K | 1.88 ns | 2.14 ns | 3.48 ns | 15.63 ns | -| **`ucd-trie`** | 9.95 K | 1.29 ns | 1.28 ns | 1.36 ns | 2.15 ns | -| **`fst`** | 133 K | 55.1 ns | 54.9 ns | 53.2 ns | 28.5 ns | +| **`unicode-ident`** | 10.0 K | 0.96 ns | 0.95 ns | 1.09 ns | 1.55 ns | +| **`unicode-xid`** | 11.5 K | 1.88 ns | 2.14 ns | 3.48 ns | 15.63 ns | +| **`ucd-trie`** | 10.2 K | 1.29 ns | 1.28 ns | 1.36 ns | 2.15 ns | +| **`fst`** | 138 K | 55.1 ns | 54.9 ns | 53.2 ns | 28.5 ns | | **`roaring`** | 66.1 K | 2.78 ns | 3.09 ns | 3.37 ns | 4.70 ns | Source code for the benchmark is provided in the *bench* directory of this repo
diff --git a/third_party/rust/unicode_ident/v1/crate/src/lib.rs b/third_party/rust/unicode_ident/v1/crate/src/lib.rs index 42126dd..b20ecc4 100644 --- a/third_party/rust/unicode_ident/v1/crate/src/lib.rs +++ b/third_party/rust/unicode_ident/v1/crate/src/lib.rs
@@ -242,6 +242,7 @@ //! this data structure is straight-line code with no need for branching. #![no_std] +#![doc(html_root_url = "https://docs.rs/unicode-ident/1.0.8")] #![allow(clippy::doc_markdown, clippy::must_use_candidate)] #[rustfmt::skip]
diff --git a/third_party/rust/unicode_ident/v1/crate/src/tables.rs b/third_party/rust/unicode_ident/v1/crate/src/tables.rs index a697636b..b355f30 100644 --- a/third_party/rust/unicode_ident/v1/crate/src/tables.rs +++ b/third_party/rust/unicode_ident/v1/crate/src/tables.rs
@@ -1,6 +1,6 @@ // @generated by ../generate. To regenerate, run the following in the repo root: // -// $ curl -LO https://www.unicode.org/Public/zipped/14.0.0/UCD.zip +// $ curl -LO https://www.unicode.org/Public/zipped/15.0.0/UCD.zip // $ unzip UCD.zip -d UCD // $ cargo run --manifest-path generate/Cargo.toml @@ -28,7 +28,7 @@ pub(crate) const CHUNK: usize = 64; -pub(crate) static TRIE_START: Align8<[u8; 394]> = Align8([ +pub(crate) static TRIE_START: Align8<[u8; 402]> = Align8([ 0x04, 0x0B, 0x0F, 0x13, 0x17, 0x1B, 0x1F, 0x23, 0x27, 0x2D, 0x31, 0x34, 0x38, 0x3C, 0x40, 0x02, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x4D, 0x00, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, @@ -39,21 +39,22 @@ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x60, 0x64, 0x66, 0x6A, 0x6E, 0x72, 0x28, 0x76, 0x78, 0x7C, 0x80, 0x84, 0x88, 0x8C, 0x90, 0x94, 0x98, 0x9E, 0xA2, 0x05, 0x2B, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x99, 0x05, 0x05, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x05, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0xAE, 0x00, 0xB2, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x32, 0x05, 0x05, 0xB6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0x43, 0xB8, 0x00, 0x00, 0x00, 0x00, 0xBB, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xC6, 0x00, 0x00, 0x00, 0xB9, - 0xBC, 0xCF, 0x00, 0xBF, 0xD3, 0x00, 0x00, 0xD7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x05, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x05, 0xB1, 0x00, 0xB5, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x32, 0x05, 0x05, 0xB9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0x43, 0xBB, 0x00, 0x00, 0x00, 0x00, 0xBE, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC8, 0x00, 0x00, 0x00, 0xAF, + 0xCE, 0xD2, 0xD6, 0xBC, 0xDA, 0x00, 0x00, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0xD9, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x52, 0xDC, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xDF, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0xDA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xE1, 0x00, 0x00, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xDD, + 0x05, 0x05, 0x05, 0xE0, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x52, 0xE3, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xE6, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0xE1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xE9, 0x00, 0x00, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xE4, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0xE7, ]); pub(crate) static TRIE_CONTINUE: Align8<[u8; 1793]> = Align8([ @@ -66,23 +67,23 @@ 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x62, 0x64, 0x68, 0x6C, 0x70, 0x74, 0x28, 0x76, 0x7A, 0x7E, 0x82, 0x86, 0x8A, 0x8E, 0x92, 0x96, 0x9B, 0xA0, 0xA4, - 0x05, 0x2B, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x99, 0x05, 0x05, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x05, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0xB0, 0x00, 0xB4, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x32, 0x05, 0x05, 0xB6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0x43, 0xB8, 0x00, 0x00, 0x00, 0x00, 0xBE, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA9, 0xAC, 0xC1, 0xC4, 0xC8, 0x00, 0xCA, 0x00, 0xB9, - 0xCD, 0xD1, 0x00, 0xBF, 0xD5, 0x00, 0x00, 0xD7, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0x00, 0x00, + 0x05, 0x2B, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x99, 0x05, 0x05, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x05, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x05, 0xB3, 0x00, 0xB7, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x32, 0x05, 0x05, 0xB9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0x43, 0xBB, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA9, 0xAC, 0xC4, 0xC6, 0xCA, 0x00, 0xCC, 0x00, 0xAF, + 0xD0, 0xD4, 0xD8, 0xBC, 0xDC, 0x00, 0x00, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBF, 0x00, 0x00, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0xD9, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x52, 0xDC, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xDF, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0xDA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xE1, 0x00, 0x00, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xDD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x05, 0x05, 0xE0, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x52, 0xE3, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xE6, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0xE1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xE9, 0x00, 0x00, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xE4, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -169,10 +170,10 @@ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xCB, + 0xC2, ]); -pub(crate) static LEAF: Align64<[u8; 7264]> = Align64([ +pub(crate) static LEAF: Align64<[u8; 7520]> = Align64([ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -240,7 +241,7 @@ 0xF0, 0xDF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x27, 0x00, 0x40, 0x70, 0x80, 0x03, 0x00, 0x00, 0xFC, 0xE0, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFB, 0x2F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xDF, 0xFD, 0xFF, 0xFF, 0xFD, 0xFF, 0xF3, 0xDF, 0x3D, 0x60, 0x27, 0xCF, 0xFF, 0x00, 0x00, - 0xEF, 0xDF, 0xFD, 0xFF, 0xFF, 0xFD, 0xEF, 0xF3, 0xDF, 0x3D, 0x60, 0x60, 0xCF, 0xFF, 0x06, 0x00, + 0xEF, 0xDF, 0xFD, 0xFF, 0xFF, 0xFD, 0xEF, 0xF3, 0xDF, 0x3D, 0x60, 0x60, 0xCF, 0xFF, 0x0E, 0x00, 0xFF, 0xDF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x7D, 0xF0, 0x80, 0xCF, 0xFF, 0x00, 0xFC, 0xEE, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFB, 0x2F, 0x7F, 0x84, 0x5F, 0xFF, 0xC0, 0xFF, 0x0C, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -248,7 +249,7 @@ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0x7F, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, - 0xD6, 0xF7, 0xFF, 0xFF, 0xAF, 0xFF, 0xFF, 0x3F, 0x5F, 0x3F, 0xFF, 0xF3, 0x00, 0x00, 0x00, 0x00, + 0xD6, 0xF7, 0xFF, 0xFF, 0xAF, 0xFF, 0xFF, 0x3F, 0x5F, 0x7F, 0xFF, 0xF3, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0xFF, 0x03, 0xA0, 0xC2, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, 0xFE, 0xFF, 0xDF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x80, 0x00, 0x00, 0x3F, 0x3C, 0x62, 0xC0, 0xE1, 0xFF, @@ -309,7 +310,7 @@ 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0xF0, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x27, 0x00, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -339,7 +340,7 @@ 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x00, 0x0C, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, @@ -434,7 +435,7 @@ 0xFF, 0xFF, 0xFF, 0x1F, 0x80, 0x00, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x1F, 0x80, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, @@ -445,11 +446,11 @@ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x04, 0x00, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xDE, 0xFF, 0x17, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0x0F, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xBD, 0xFF, 0xBF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xED, 0x23, 0x00, 0x00, 0x01, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xBD, 0xFF, 0xBF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0x03, 0xEF, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xED, 0xFB, 0x9F, 0x39, 0x81, 0xE0, 0xCF, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -499,28 +500,34 @@ 0xFF, 0x7F, 0xFB, 0x01, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x07, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF4, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0x07, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE3, 0x07, 0xF8, 0xE7, 0x0F, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0x7F, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xE0, @@ -545,26 +552,24 @@ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x6F, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0x1F, 0xFF, 0x01, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x80, 0x3F, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0x1F, 0xFF, 0x01, 0xFF, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x6F, 0xFF, 0x7F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x64, 0xDE, 0xFF, 0xEB, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xE7, 0xDF, 0xDF, 0xFF, 0xFF, 0xFF, 0x7B, 0x5F, 0xFC, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, @@ -581,10 +586,12 @@ 0x10, 0x00, 0x00, 0xF8, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, - 0x7F, 0xFF, 0xFF, 0xF9, 0xDB, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x80, 0x3F, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0xFF, 0xFF, 0xF9, 0xDB, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0x3F, 0xFF, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -595,6 +602,14 @@ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -617,12 +632,14 @@ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
diff --git a/third_party/rust/unicode_ident/v1/crate/tests/fst/xid_continue.fst b/third_party/rust/unicode_ident/v1/crate/tests/fst/xid_continue.fst index 5359051c..05e7b1aa 100644 --- a/third_party/rust/unicode_ident/v1/crate/tests/fst/xid_continue.fst +++ b/third_party/rust/unicode_ident/v1/crate/tests/fst/xid_continue.fst Binary files differ
diff --git a/third_party/rust/unicode_ident/v1/crate/tests/fst/xid_start.fst b/third_party/rust/unicode_ident/v1/crate/tests/fst/xid_start.fst index 5c2e43f..a5975b6 100644 --- a/third_party/rust/unicode_ident/v1/crate/tests/fst/xid_start.fst +++ b/third_party/rust/unicode_ident/v1/crate/tests/fst/xid_start.fst Binary files differ
diff --git a/third_party/rust/unicode_ident/v1/crate/tests/static_size.rs b/third_party/rust/unicode_ident/v1/crate/tests/static_size.rs index f0e04d4..610adf31 100644 --- a/third_party/rust/unicode_ident/v1/crate/tests/static_size.rs +++ b/third_party/rust/unicode_ident/v1/crate/tests/static_size.rs
@@ -1,4 +1,4 @@ -#![allow(clippy::unreadable_literal)] +#![allow(clippy::let_underscore_untyped, clippy::unreadable_literal)] use std::mem::size_of_val; @@ -13,20 +13,19 @@ + size_of_val(&tables::TRIE_START) + size_of_val(&tables::TRIE_CONTINUE) + size_of_val(&tables::LEAF); - assert_eq!(9752, size); + assert_eq!(10016, size); } #[test] fn test_xid_size() { #[deny(dead_code)] - #[allow(clippy::redundant_static_lifetimes)] - #[path = "../generate/src/ucd.rs"] - mod ucd; + #[path = "tables/mod.rs"] + mod tables; - let size = size_of_val(ucd::XID_START) + size_of_val(ucd::XID_CONTINUE); - assert_eq!(11344, size); + let size = size_of_val(tables::XID_START) + size_of_val(tables::XID_CONTINUE); + assert_eq!(11528, size); - let _ = ucd::BY_NAME; + let _ = tables::BY_NAME; } #[cfg(target_pointer_width = "64")] @@ -71,7 +70,7 @@ + size_of_val(tree3_level2) + size_of_val(tree3_level3); - assert_eq!(9952, start_size + continue_size); + assert_eq!(10208, start_size + continue_size); let _ = trie::BY_NAME; } @@ -81,7 +80,7 @@ let xid_start_fst = include_bytes!("fst/xid_start.fst"); let xid_continue_fst = include_bytes!("fst/xid_continue.fst"); let size = xid_start_fst.len() + xid_continue_fst.len(); - assert_eq!(132897, size); + assert_eq!(137749, size); } #[test]
diff --git a/third_party/rust/unicode_ident/v1/crate/tests/tables/mod.rs b/third_party/rust/unicode_ident/v1/crate/tests/tables/mod.rs new file mode 100644 index 0000000..72bfd8bd --- /dev/null +++ b/third_party/rust/unicode_ident/v1/crate/tests/tables/mod.rs
@@ -0,0 +1,7 @@ +#![allow(clippy::module_inception)] + +#[allow(clippy::redundant_static_lifetimes)] +#[rustfmt::skip] +mod tables; + +pub(crate) use self::tables::*;
diff --git a/third_party/rust/unicode_ident/v1/crate/tests/tables/tables.rs b/third_party/rust/unicode_ident/v1/crate/tests/tables/tables.rs new file mode 100644 index 0000000..30aeee9 --- /dev/null +++ b/third_party/rust/unicode_ident/v1/crate/tests/tables/tables.rs
@@ -0,0 +1,347 @@ +// DO NOT EDIT THIS FILE. IT WAS AUTOMATICALLY GENERATED BY: +// +// ucd-generate property-bool UCD --include XID_Start,XID_Continue +// +// Unicode version: 15.0.0. +// +// ucd-generate 0.2.13 is available on crates.io. + +pub const BY_NAME: &'static [(&'static str, &'static [(u32, u32)])] = &[ + ("XID_Continue", XID_CONTINUE), ("XID_Start", XID_START), +]; + +pub const XID_CONTINUE: &'static [(u32, u32)] = &[ + (48, 57), (65, 90), (95, 95), (97, 122), (170, 170), (181, 181), (183, 183), + (186, 186), (192, 214), (216, 246), (248, 705), (710, 721), (736, 740), + (748, 748), (750, 750), (768, 884), (886, 887), (891, 893), (895, 895), + (902, 906), (908, 908), (910, 929), (931, 1013), (1015, 1153), (1155, 1159), + (1162, 1327), (1329, 1366), (1369, 1369), (1376, 1416), (1425, 1469), + (1471, 1471), (1473, 1474), (1476, 1477), (1479, 1479), (1488, 1514), + (1519, 1522), (1552, 1562), (1568, 1641), (1646, 1747), (1749, 1756), + (1759, 1768), (1770, 1788), (1791, 1791), (1808, 1866), (1869, 1969), + (1984, 2037), (2042, 2042), (2045, 2045), (2048, 2093), (2112, 2139), + (2144, 2154), (2160, 2183), (2185, 2190), (2200, 2273), (2275, 2403), + (2406, 2415), (2417, 2435), (2437, 2444), (2447, 2448), (2451, 2472), + (2474, 2480), (2482, 2482), (2486, 2489), (2492, 2500), (2503, 2504), + (2507, 2510), (2519, 2519), (2524, 2525), (2527, 2531), (2534, 2545), + (2556, 2556), (2558, 2558), (2561, 2563), (2565, 2570), (2575, 2576), + (2579, 2600), (2602, 2608), (2610, 2611), (2613, 2614), (2616, 2617), + (2620, 2620), (2622, 2626), (2631, 2632), (2635, 2637), (2641, 2641), + (2649, 2652), (2654, 2654), (2662, 2677), (2689, 2691), (2693, 2701), + (2703, 2705), (2707, 2728), (2730, 2736), (2738, 2739), (2741, 2745), + (2748, 2757), (2759, 2761), (2763, 2765), (2768, 2768), (2784, 2787), + (2790, 2799), (2809, 2815), (2817, 2819), (2821, 2828), (2831, 2832), + (2835, 2856), (2858, 2864), (2866, 2867), (2869, 2873), (2876, 2884), + (2887, 2888), (2891, 2893), (2901, 2903), (2908, 2909), (2911, 2915), + (2918, 2927), (2929, 2929), (2946, 2947), (2949, 2954), (2958, 2960), + (2962, 2965), (2969, 2970), (2972, 2972), (2974, 2975), (2979, 2980), + (2984, 2986), (2990, 3001), (3006, 3010), (3014, 3016), (3018, 3021), + (3024, 3024), (3031, 3031), (3046, 3055), (3072, 3084), (3086, 3088), + (3090, 3112), (3114, 3129), (3132, 3140), (3142, 3144), (3146, 3149), + (3157, 3158), (3160, 3162), (3165, 3165), (3168, 3171), (3174, 3183), + (3200, 3203), (3205, 3212), (3214, 3216), (3218, 3240), (3242, 3251), + (3253, 3257), (3260, 3268), (3270, 3272), (3274, 3277), (3285, 3286), + (3293, 3294), (3296, 3299), (3302, 3311), (3313, 3315), (3328, 3340), + (3342, 3344), (3346, 3396), (3398, 3400), (3402, 3406), (3412, 3415), + (3423, 3427), (3430, 3439), (3450, 3455), (3457, 3459), (3461, 3478), + (3482, 3505), (3507, 3515), (3517, 3517), (3520, 3526), (3530, 3530), + (3535, 3540), (3542, 3542), (3544, 3551), (3558, 3567), (3570, 3571), + (3585, 3642), (3648, 3662), (3664, 3673), (3713, 3714), (3716, 3716), + (3718, 3722), (3724, 3747), (3749, 3749), (3751, 3773), (3776, 3780), + (3782, 3782), (3784, 3790), (3792, 3801), (3804, 3807), (3840, 3840), + (3864, 3865), (3872, 3881), (3893, 3893), (3895, 3895), (3897, 3897), + (3902, 3911), (3913, 3948), (3953, 3972), (3974, 3991), (3993, 4028), + (4038, 4038), (4096, 4169), (4176, 4253), (4256, 4293), (4295, 4295), + (4301, 4301), (4304, 4346), (4348, 4680), (4682, 4685), (4688, 4694), + (4696, 4696), (4698, 4701), (4704, 4744), (4746, 4749), (4752, 4784), + (4786, 4789), (4792, 4798), (4800, 4800), (4802, 4805), (4808, 4822), + (4824, 4880), (4882, 4885), (4888, 4954), (4957, 4959), (4969, 4977), + (4992, 5007), (5024, 5109), (5112, 5117), (5121, 5740), (5743, 5759), + (5761, 5786), (5792, 5866), (5870, 5880), (5888, 5909), (5919, 5940), + (5952, 5971), (5984, 5996), (5998, 6000), (6002, 6003), (6016, 6099), + (6103, 6103), (6108, 6109), (6112, 6121), (6155, 6157), (6159, 6169), + (6176, 6264), (6272, 6314), (6320, 6389), (6400, 6430), (6432, 6443), + (6448, 6459), (6470, 6509), (6512, 6516), (6528, 6571), (6576, 6601), + (6608, 6618), (6656, 6683), (6688, 6750), (6752, 6780), (6783, 6793), + (6800, 6809), (6823, 6823), (6832, 6845), (6847, 6862), (6912, 6988), + (6992, 7001), (7019, 7027), (7040, 7155), (7168, 7223), (7232, 7241), + (7245, 7293), (7296, 7304), (7312, 7354), (7357, 7359), (7376, 7378), + (7380, 7418), (7424, 7957), (7960, 7965), (7968, 8005), (8008, 8013), + (8016, 8023), (8025, 8025), (8027, 8027), (8029, 8029), (8031, 8061), + (8064, 8116), (8118, 8124), (8126, 8126), (8130, 8132), (8134, 8140), + (8144, 8147), (8150, 8155), (8160, 8172), (8178, 8180), (8182, 8188), + (8255, 8256), (8276, 8276), (8305, 8305), (8319, 8319), (8336, 8348), + (8400, 8412), (8417, 8417), (8421, 8432), (8450, 8450), (8455, 8455), + (8458, 8467), (8469, 8469), (8472, 8477), (8484, 8484), (8486, 8486), + (8488, 8488), (8490, 8505), (8508, 8511), (8517, 8521), (8526, 8526), + (8544, 8584), (11264, 11492), (11499, 11507), (11520, 11557), + (11559, 11559), (11565, 11565), (11568, 11623), (11631, 11631), + (11647, 11670), (11680, 11686), (11688, 11694), (11696, 11702), + (11704, 11710), (11712, 11718), (11720, 11726), (11728, 11734), + (11736, 11742), (11744, 11775), (12293, 12295), (12321, 12335), + (12337, 12341), (12344, 12348), (12353, 12438), (12441, 12442), + (12445, 12447), (12449, 12538), (12540, 12543), (12549, 12591), + (12593, 12686), (12704, 12735), (12784, 12799), (13312, 19903), + (19968, 42124), (42192, 42237), (42240, 42508), (42512, 42539), + (42560, 42607), (42612, 42621), (42623, 42737), (42775, 42783), + (42786, 42888), (42891, 42954), (42960, 42961), (42963, 42963), + (42965, 42969), (42994, 43047), (43052, 43052), (43072, 43123), + (43136, 43205), (43216, 43225), (43232, 43255), (43259, 43259), + (43261, 43309), (43312, 43347), (43360, 43388), (43392, 43456), + (43471, 43481), (43488, 43518), (43520, 43574), (43584, 43597), + (43600, 43609), (43616, 43638), (43642, 43714), (43739, 43741), + (43744, 43759), (43762, 43766), (43777, 43782), (43785, 43790), + (43793, 43798), (43808, 43814), (43816, 43822), (43824, 43866), + (43868, 43881), (43888, 44010), (44012, 44013), (44016, 44025), + (44032, 55203), (55216, 55238), (55243, 55291), (63744, 64109), + (64112, 64217), (64256, 64262), (64275, 64279), (64285, 64296), + (64298, 64310), (64312, 64316), (64318, 64318), (64320, 64321), + (64323, 64324), (64326, 64433), (64467, 64605), (64612, 64829), + (64848, 64911), (64914, 64967), (65008, 65017), (65024, 65039), + (65056, 65071), (65075, 65076), (65101, 65103), (65137, 65137), + (65139, 65139), (65143, 65143), (65145, 65145), (65147, 65147), + (65149, 65149), (65151, 65276), (65296, 65305), (65313, 65338), + (65343, 65343), (65345, 65370), (65382, 65470), (65474, 65479), + (65482, 65487), (65490, 65495), (65498, 65500), (65536, 65547), + (65549, 65574), (65576, 65594), (65596, 65597), (65599, 65613), + (65616, 65629), (65664, 65786), (65856, 65908), (66045, 66045), + (66176, 66204), (66208, 66256), (66272, 66272), (66304, 66335), + (66349, 66378), (66384, 66426), (66432, 66461), (66464, 66499), + (66504, 66511), (66513, 66517), (66560, 66717), (66720, 66729), + (66736, 66771), (66776, 66811), (66816, 66855), (66864, 66915), + (66928, 66938), (66940, 66954), (66956, 66962), (66964, 66965), + (66967, 66977), (66979, 66993), (66995, 67001), (67003, 67004), + (67072, 67382), (67392, 67413), (67424, 67431), (67456, 67461), + (67463, 67504), (67506, 67514), (67584, 67589), (67592, 67592), + (67594, 67637), (67639, 67640), (67644, 67644), (67647, 67669), + (67680, 67702), (67712, 67742), (67808, 67826), (67828, 67829), + (67840, 67861), (67872, 67897), (67968, 68023), (68030, 68031), + (68096, 68099), (68101, 68102), (68108, 68115), (68117, 68119), + (68121, 68149), (68152, 68154), (68159, 68159), (68192, 68220), + (68224, 68252), (68288, 68295), (68297, 68326), (68352, 68405), + (68416, 68437), (68448, 68466), (68480, 68497), (68608, 68680), + (68736, 68786), (68800, 68850), (68864, 68903), (68912, 68921), + (69248, 69289), (69291, 69292), (69296, 69297), (69373, 69404), + (69415, 69415), (69424, 69456), (69488, 69509), (69552, 69572), + (69600, 69622), (69632, 69702), (69734, 69749), (69759, 69818), + (69826, 69826), (69840, 69864), (69872, 69881), (69888, 69940), + (69942, 69951), (69956, 69959), (69968, 70003), (70006, 70006), + (70016, 70084), (70089, 70092), (70094, 70106), (70108, 70108), + (70144, 70161), (70163, 70199), (70206, 70209), (70272, 70278), + (70280, 70280), (70282, 70285), (70287, 70301), (70303, 70312), + (70320, 70378), (70384, 70393), (70400, 70403), (70405, 70412), + (70415, 70416), (70419, 70440), (70442, 70448), (70450, 70451), + (70453, 70457), (70459, 70468), (70471, 70472), (70475, 70477), + (70480, 70480), (70487, 70487), (70493, 70499), (70502, 70508), + (70512, 70516), (70656, 70730), (70736, 70745), (70750, 70753), + (70784, 70853), (70855, 70855), (70864, 70873), (71040, 71093), + (71096, 71104), (71128, 71133), (71168, 71232), (71236, 71236), + (71248, 71257), (71296, 71352), (71360, 71369), (71424, 71450), + (71453, 71467), (71472, 71481), (71488, 71494), (71680, 71738), + (71840, 71913), (71935, 71942), (71945, 71945), (71948, 71955), + (71957, 71958), (71960, 71989), (71991, 71992), (71995, 72003), + (72016, 72025), (72096, 72103), (72106, 72151), (72154, 72161), + (72163, 72164), (72192, 72254), (72263, 72263), (72272, 72345), + (72349, 72349), (72368, 72440), (72704, 72712), (72714, 72758), + (72760, 72768), (72784, 72793), (72818, 72847), (72850, 72871), + (72873, 72886), (72960, 72966), (72968, 72969), (72971, 73014), + (73018, 73018), (73020, 73021), (73023, 73031), (73040, 73049), + (73056, 73061), (73063, 73064), (73066, 73102), (73104, 73105), + (73107, 73112), (73120, 73129), (73440, 73462), (73472, 73488), + (73490, 73530), (73534, 73538), (73552, 73561), (73648, 73648), + (73728, 74649), (74752, 74862), (74880, 75075), (77712, 77808), + (77824, 78895), (78912, 78933), (82944, 83526), (92160, 92728), + (92736, 92766), (92768, 92777), (92784, 92862), (92864, 92873), + (92880, 92909), (92912, 92916), (92928, 92982), (92992, 92995), + (93008, 93017), (93027, 93047), (93053, 93071), (93760, 93823), + (93952, 94026), (94031, 94087), (94095, 94111), (94176, 94177), + (94179, 94180), (94192, 94193), (94208, 100343), (100352, 101589), + (101632, 101640), (110576, 110579), (110581, 110587), (110589, 110590), + (110592, 110882), (110898, 110898), (110928, 110930), (110933, 110933), + (110948, 110951), (110960, 111355), (113664, 113770), (113776, 113788), + (113792, 113800), (113808, 113817), (113821, 113822), (118528, 118573), + (118576, 118598), (119141, 119145), (119149, 119154), (119163, 119170), + (119173, 119179), (119210, 119213), (119362, 119364), (119808, 119892), + (119894, 119964), (119966, 119967), (119970, 119970), (119973, 119974), + (119977, 119980), (119982, 119993), (119995, 119995), (119997, 120003), + (120005, 120069), (120071, 120074), (120077, 120084), (120086, 120092), + (120094, 120121), (120123, 120126), (120128, 120132), (120134, 120134), + (120138, 120144), (120146, 120485), (120488, 120512), (120514, 120538), + (120540, 120570), (120572, 120596), (120598, 120628), (120630, 120654), + (120656, 120686), (120688, 120712), (120714, 120744), (120746, 120770), + (120772, 120779), (120782, 120831), (121344, 121398), (121403, 121452), + (121461, 121461), (121476, 121476), (121499, 121503), (121505, 121519), + (122624, 122654), (122661, 122666), (122880, 122886), (122888, 122904), + (122907, 122913), (122915, 122916), (122918, 122922), (122928, 122989), + (123023, 123023), (123136, 123180), (123184, 123197), (123200, 123209), + (123214, 123214), (123536, 123566), (123584, 123641), (124112, 124153), + (124896, 124902), (124904, 124907), (124909, 124910), (124912, 124926), + (124928, 125124), (125136, 125142), (125184, 125259), (125264, 125273), + (126464, 126467), (126469, 126495), (126497, 126498), (126500, 126500), + (126503, 126503), (126505, 126514), (126516, 126519), (126521, 126521), + (126523, 126523), (126530, 126530), (126535, 126535), (126537, 126537), + (126539, 126539), (126541, 126543), (126545, 126546), (126548, 126548), + (126551, 126551), (126553, 126553), (126555, 126555), (126557, 126557), + (126559, 126559), (126561, 126562), (126564, 126564), (126567, 126570), + (126572, 126578), (126580, 126583), (126585, 126588), (126590, 126590), + (126592, 126601), (126603, 126619), (126625, 126627), (126629, 126633), + (126635, 126651), (130032, 130041), (131072, 173791), (173824, 177977), + (177984, 178205), (178208, 183969), (183984, 191456), (194560, 195101), + (196608, 201546), (201552, 205743), (917760, 917999), +]; + +pub const XID_START: &'static [(u32, u32)] = &[ + (65, 90), (97, 122), (170, 170), (181, 181), (186, 186), (192, 214), + (216, 246), (248, 705), (710, 721), (736, 740), (748, 748), (750, 750), + (880, 884), (886, 887), (891, 893), (895, 895), (902, 902), (904, 906), + (908, 908), (910, 929), (931, 1013), (1015, 1153), (1162, 1327), + (1329, 1366), (1369, 1369), (1376, 1416), (1488, 1514), (1519, 1522), + (1568, 1610), (1646, 1647), (1649, 1747), (1749, 1749), (1765, 1766), + (1774, 1775), (1786, 1788), (1791, 1791), (1808, 1808), (1810, 1839), + (1869, 1957), (1969, 1969), (1994, 2026), (2036, 2037), (2042, 2042), + (2048, 2069), (2074, 2074), (2084, 2084), (2088, 2088), (2112, 2136), + (2144, 2154), (2160, 2183), (2185, 2190), (2208, 2249), (2308, 2361), + (2365, 2365), (2384, 2384), (2392, 2401), (2417, 2432), (2437, 2444), + (2447, 2448), (2451, 2472), (2474, 2480), (2482, 2482), (2486, 2489), + (2493, 2493), (2510, 2510), (2524, 2525), (2527, 2529), (2544, 2545), + (2556, 2556), (2565, 2570), (2575, 2576), (2579, 2600), (2602, 2608), + (2610, 2611), (2613, 2614), (2616, 2617), (2649, 2652), (2654, 2654), + (2674, 2676), (2693, 2701), (2703, 2705), (2707, 2728), (2730, 2736), + (2738, 2739), (2741, 2745), (2749, 2749), (2768, 2768), (2784, 2785), + (2809, 2809), (2821, 2828), (2831, 2832), (2835, 2856), (2858, 2864), + (2866, 2867), (2869, 2873), (2877, 2877), (2908, 2909), (2911, 2913), + (2929, 2929), (2947, 2947), (2949, 2954), (2958, 2960), (2962, 2965), + (2969, 2970), (2972, 2972), (2974, 2975), (2979, 2980), (2984, 2986), + (2990, 3001), (3024, 3024), (3077, 3084), (3086, 3088), (3090, 3112), + (3114, 3129), (3133, 3133), (3160, 3162), (3165, 3165), (3168, 3169), + (3200, 3200), (3205, 3212), (3214, 3216), (3218, 3240), (3242, 3251), + (3253, 3257), (3261, 3261), (3293, 3294), (3296, 3297), (3313, 3314), + (3332, 3340), (3342, 3344), (3346, 3386), (3389, 3389), (3406, 3406), + (3412, 3414), (3423, 3425), (3450, 3455), (3461, 3478), (3482, 3505), + (3507, 3515), (3517, 3517), (3520, 3526), (3585, 3632), (3634, 3634), + (3648, 3654), (3713, 3714), (3716, 3716), (3718, 3722), (3724, 3747), + (3749, 3749), (3751, 3760), (3762, 3762), (3773, 3773), (3776, 3780), + (3782, 3782), (3804, 3807), (3840, 3840), (3904, 3911), (3913, 3948), + (3976, 3980), (4096, 4138), (4159, 4159), (4176, 4181), (4186, 4189), + (4193, 4193), (4197, 4198), (4206, 4208), (4213, 4225), (4238, 4238), + (4256, 4293), (4295, 4295), (4301, 4301), (4304, 4346), (4348, 4680), + (4682, 4685), (4688, 4694), (4696, 4696), (4698, 4701), (4704, 4744), + (4746, 4749), (4752, 4784), (4786, 4789), (4792, 4798), (4800, 4800), + (4802, 4805), (4808, 4822), (4824, 4880), (4882, 4885), (4888, 4954), + (4992, 5007), (5024, 5109), (5112, 5117), (5121, 5740), (5743, 5759), + (5761, 5786), (5792, 5866), (5870, 5880), (5888, 5905), (5919, 5937), + (5952, 5969), (5984, 5996), (5998, 6000), (6016, 6067), (6103, 6103), + (6108, 6108), (6176, 6264), (6272, 6312), (6314, 6314), (6320, 6389), + (6400, 6430), (6480, 6509), (6512, 6516), (6528, 6571), (6576, 6601), + (6656, 6678), (6688, 6740), (6823, 6823), (6917, 6963), (6981, 6988), + (7043, 7072), (7086, 7087), (7098, 7141), (7168, 7203), (7245, 7247), + (7258, 7293), (7296, 7304), (7312, 7354), (7357, 7359), (7401, 7404), + (7406, 7411), (7413, 7414), (7418, 7418), (7424, 7615), (7680, 7957), + (7960, 7965), (7968, 8005), (8008, 8013), (8016, 8023), (8025, 8025), + (8027, 8027), (8029, 8029), (8031, 8061), (8064, 8116), (8118, 8124), + (8126, 8126), (8130, 8132), (8134, 8140), (8144, 8147), (8150, 8155), + (8160, 8172), (8178, 8180), (8182, 8188), (8305, 8305), (8319, 8319), + (8336, 8348), (8450, 8450), (8455, 8455), (8458, 8467), (8469, 8469), + (8472, 8477), (8484, 8484), (8486, 8486), (8488, 8488), (8490, 8505), + (8508, 8511), (8517, 8521), (8526, 8526), (8544, 8584), (11264, 11492), + (11499, 11502), (11506, 11507), (11520, 11557), (11559, 11559), + (11565, 11565), (11568, 11623), (11631, 11631), (11648, 11670), + (11680, 11686), (11688, 11694), (11696, 11702), (11704, 11710), + (11712, 11718), (11720, 11726), (11728, 11734), (11736, 11742), + (12293, 12295), (12321, 12329), (12337, 12341), (12344, 12348), + (12353, 12438), (12445, 12447), (12449, 12538), (12540, 12543), + (12549, 12591), (12593, 12686), (12704, 12735), (12784, 12799), + (13312, 19903), (19968, 42124), (42192, 42237), (42240, 42508), + (42512, 42527), (42538, 42539), (42560, 42606), (42623, 42653), + (42656, 42735), (42775, 42783), (42786, 42888), (42891, 42954), + (42960, 42961), (42963, 42963), (42965, 42969), (42994, 43009), + (43011, 43013), (43015, 43018), (43020, 43042), (43072, 43123), + (43138, 43187), (43250, 43255), (43259, 43259), (43261, 43262), + (43274, 43301), (43312, 43334), (43360, 43388), (43396, 43442), + (43471, 43471), (43488, 43492), (43494, 43503), (43514, 43518), + (43520, 43560), (43584, 43586), (43588, 43595), (43616, 43638), + (43642, 43642), (43646, 43695), (43697, 43697), (43701, 43702), + (43705, 43709), (43712, 43712), (43714, 43714), (43739, 43741), + (43744, 43754), (43762, 43764), (43777, 43782), (43785, 43790), + (43793, 43798), (43808, 43814), (43816, 43822), (43824, 43866), + (43868, 43881), (43888, 44002), (44032, 55203), (55216, 55238), + (55243, 55291), (63744, 64109), (64112, 64217), (64256, 64262), + (64275, 64279), (64285, 64285), (64287, 64296), (64298, 64310), + (64312, 64316), (64318, 64318), (64320, 64321), (64323, 64324), + (64326, 64433), (64467, 64605), (64612, 64829), (64848, 64911), + (64914, 64967), (65008, 65017), (65137, 65137), (65139, 65139), + (65143, 65143), (65145, 65145), (65147, 65147), (65149, 65149), + (65151, 65276), (65313, 65338), (65345, 65370), (65382, 65437), + (65440, 65470), (65474, 65479), (65482, 65487), (65490, 65495), + (65498, 65500), (65536, 65547), (65549, 65574), (65576, 65594), + (65596, 65597), (65599, 65613), (65616, 65629), (65664, 65786), + (65856, 65908), (66176, 66204), (66208, 66256), (66304, 66335), + (66349, 66378), (66384, 66421), (66432, 66461), (66464, 66499), + (66504, 66511), (66513, 66517), (66560, 66717), (66736, 66771), + (66776, 66811), (66816, 66855), (66864, 66915), (66928, 66938), + (66940, 66954), (66956, 66962), (66964, 66965), (66967, 66977), + (66979, 66993), (66995, 67001), (67003, 67004), (67072, 67382), + (67392, 67413), (67424, 67431), (67456, 67461), (67463, 67504), + (67506, 67514), (67584, 67589), (67592, 67592), (67594, 67637), + (67639, 67640), (67644, 67644), (67647, 67669), (67680, 67702), + (67712, 67742), (67808, 67826), (67828, 67829), (67840, 67861), + (67872, 67897), (67968, 68023), (68030, 68031), (68096, 68096), + (68112, 68115), (68117, 68119), (68121, 68149), (68192, 68220), + (68224, 68252), (68288, 68295), (68297, 68324), (68352, 68405), + (68416, 68437), (68448, 68466), (68480, 68497), (68608, 68680), + (68736, 68786), (68800, 68850), (68864, 68899), (69248, 69289), + (69296, 69297), (69376, 69404), (69415, 69415), (69424, 69445), + (69488, 69505), (69552, 69572), (69600, 69622), (69635, 69687), + (69745, 69746), (69749, 69749), (69763, 69807), (69840, 69864), + (69891, 69926), (69956, 69956), (69959, 69959), (69968, 70002), + (70006, 70006), (70019, 70066), (70081, 70084), (70106, 70106), + (70108, 70108), (70144, 70161), (70163, 70187), (70207, 70208), + (70272, 70278), (70280, 70280), (70282, 70285), (70287, 70301), + (70303, 70312), (70320, 70366), (70405, 70412), (70415, 70416), + (70419, 70440), (70442, 70448), (70450, 70451), (70453, 70457), + (70461, 70461), (70480, 70480), (70493, 70497), (70656, 70708), + (70727, 70730), (70751, 70753), (70784, 70831), (70852, 70853), + (70855, 70855), (71040, 71086), (71128, 71131), (71168, 71215), + (71236, 71236), (71296, 71338), (71352, 71352), (71424, 71450), + (71488, 71494), (71680, 71723), (71840, 71903), (71935, 71942), + (71945, 71945), (71948, 71955), (71957, 71958), (71960, 71983), + (71999, 71999), (72001, 72001), (72096, 72103), (72106, 72144), + (72161, 72161), (72163, 72163), (72192, 72192), (72203, 72242), + (72250, 72250), (72272, 72272), (72284, 72329), (72349, 72349), + (72368, 72440), (72704, 72712), (72714, 72750), (72768, 72768), + (72818, 72847), (72960, 72966), (72968, 72969), (72971, 73008), + (73030, 73030), (73056, 73061), (73063, 73064), (73066, 73097), + (73112, 73112), (73440, 73458), (73474, 73474), (73476, 73488), + (73490, 73523), (73648, 73648), (73728, 74649), (74752, 74862), + (74880, 75075), (77712, 77808), (77824, 78895), (78913, 78918), + (82944, 83526), (92160, 92728), (92736, 92766), (92784, 92862), + (92880, 92909), (92928, 92975), (92992, 92995), (93027, 93047), + (93053, 93071), (93760, 93823), (93952, 94026), (94032, 94032), + (94099, 94111), (94176, 94177), (94179, 94179), (94208, 100343), + (100352, 101589), (101632, 101640), (110576, 110579), (110581, 110587), + (110589, 110590), (110592, 110882), (110898, 110898), (110928, 110930), + (110933, 110933), (110948, 110951), (110960, 111355), (113664, 113770), + (113776, 113788), (113792, 113800), (113808, 113817), (119808, 119892), + (119894, 119964), (119966, 119967), (119970, 119970), (119973, 119974), + (119977, 119980), (119982, 119993), (119995, 119995), (119997, 120003), + (120005, 120069), (120071, 120074), (120077, 120084), (120086, 120092), + (120094, 120121), (120123, 120126), (120128, 120132), (120134, 120134), + (120138, 120144), (120146, 120485), (120488, 120512), (120514, 120538), + (120540, 120570), (120572, 120596), (120598, 120628), (120630, 120654), + (120656, 120686), (120688, 120712), (120714, 120744), (120746, 120770), + (120772, 120779), (122624, 122654), (122661, 122666), (122928, 122989), + (123136, 123180), (123191, 123197), (123214, 123214), (123536, 123565), + (123584, 123627), (124112, 124139), (124896, 124902), (124904, 124907), + (124909, 124910), (124912, 124926), (124928, 125124), (125184, 125251), + (125259, 125259), (126464, 126467), (126469, 126495), (126497, 126498), + (126500, 126500), (126503, 126503), (126505, 126514), (126516, 126519), + (126521, 126521), (126523, 126523), (126530, 126530), (126535, 126535), + (126537, 126537), (126539, 126539), (126541, 126543), (126545, 126546), + (126548, 126548), (126551, 126551), (126553, 126553), (126555, 126555), + (126557, 126557), (126559, 126559), (126561, 126562), (126564, 126564), + (126567, 126570), (126572, 126578), (126580, 126583), (126585, 126588), + (126590, 126590), (126592, 126601), (126603, 126619), (126625, 126627), + (126629, 126633), (126635, 126651), (131072, 173791), (173824, 177977), + (177984, 178205), (178208, 183969), (183984, 191456), (194560, 195101), + (196608, 201546), (201552, 205743), +];
diff --git a/third_party/rust/unicode_ident/v1/crate/tests/trie/trie.rs b/third_party/rust/unicode_ident/v1/crate/tests/trie/trie.rs index 7f7a14f3..821e7cb 100644 --- a/third_party/rust/unicode_ident/v1/crate/tests/trie/trie.rs +++ b/third_party/rust/unicode_ident/v1/crate/tests/trie/trie.rs
@@ -2,9 +2,9 @@ // // ucd-generate property-bool UCD --include XID_Start,XID_Continue --trie-set // -// Unicode version: 14.0.0. +// Unicode version: 15.0.0. // -// ucd-generate 0.2.10 is available on crates.io. +// ucd-generate 0.2.13 is available on crates.io. pub const BY_NAME: &'static [(&'static str, &'static ::ucd_trie::TrieSet)] = &[ ("XID_Continue", XID_CONTINUE), ("XID_Start", XID_START), @@ -77,10 +77,10 @@ 0xF3C5FDFFFFF99FEF, 0x5003FFCFB080799F, 0xD36DFDFFFFF987EE, 0x3FFFC05E023987, 0xF3EDFDFFFFFBBFEE, 0xFE00FFCF00013BBF, 0xF3EDFDFFFFF99FEE, 0x2FFCFB0E0399F, 0xC3FFC718D63DC7EC, 0xFFC000813DC7, - 0xF3FFFDFFFFFDDFFF, 0xFFCF27603DDF, 0xF3EFFDFFFFFDDFEF, 0x6FFCF60603DDF, + 0xF3FFFDFFFFFDDFFF, 0xFFCF27603DDF, 0xF3EFFDFFFFFDDFEF, 0xEFFCF60603DDF, 0xFFFFFFFFFFFDDFFF, 0xFC00FFCF80F07DDF, 0x2FFBFFFFFC7FFFEE, 0xCFFC0FF5F847F, 0x7FFFFFFFFFFFFFE, 0x3FF7FFF, 0x3FFFFFAFFFFFF7D6, - 0xF3FF3F5F, 0xC2A003FF03000001, 0xFFFE1FFFFFFFFEFF, 0x1FFFFFFFFEFFFFDF, + 0xF3FF7F5F, 0xC2A003FF03000001, 0xFFFE1FFFFFFFFEFF, 0x1FFFFFFFFEFFFFDF, 0x40, 0xFFFFFFFFFFFF03FF, 0xFFFFFFFF3FFFFFFF, 0xF7FFFFFFFFFF20BF, 0xFFFFFFFF3D7F3DFF, 0x7F3DFFFFFFFF3DFF, 0xFFFFFFFFFF7FFF3D, 0xFFFFFFFFFF3DFFFF, 0x3FE00E7FFFFFF, 0xFFFFFFFF0000FFFF, @@ -112,78 +112,80 @@ ], tree3_level1: &[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 5, 9, 10, 11, 12, 13, 14, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 15, 16, 17, 7, 18, 19, 7, 20, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 7, 7, 7, 15, 16, 17, 7, 18, 19, 7, 20, 21, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 21, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 22, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ], tree3_level2: &[ 0, 1, 2, 3, 4, 5, 4, 6, 4, 4, 7, 8, 9, 10, 11, 12, 2, 2, 13, 14, 15, 16, 17, 4, 2, 2, 2, 2, 18, 19, 20, 4, 21, 22, 23, 24, 25, 4, 26, 4, 27, 28, - 29, 30, 31, 32, 33, 4, 2, 34, 35, 35, 36, 4, 4, 4, 4, 4, 37, 4, 38, 39, - 40, 41, 2, 42, 3, 43, 44, 45, 2, 46, 47, 4, 48, 49, 50, 51, 4, 4, 2, 52, - 2, 53, 4, 4, 54, 55, 2, 56, 57, 58, 59, 60, 4, 4, 3, 4, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 57, 4, 4, 4, 4, 70, 71, 72, 4, 73, 74, 75, 4, 4, 4, 4, - 76, 4, 4, 77, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 78, 4, 2, 79, - 2, 2, 2, 80, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 81, 82, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 79, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 29, 30, 31, 32, 33, 4, 2, 34, 35, 35, 36, 4, 4, 4, 4, 4, 37, 38, 39, 40, + 41, 42, 2, 43, 3, 44, 45, 46, 2, 47, 48, 49, 50, 51, 52, 53, 4, 4, 2, 54, + 2, 55, 4, 4, 56, 57, 2, 58, 59, 60, 61, 62, 4, 4, 3, 4, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 59, 4, 4, 4, 4, 72, 73, 74, 4, 75, 76, 77, 4, 4, 4, 4, + 78, 79, 80, 81, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 82, 4, 2, 83, + 2, 2, 2, 84, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 85, 86, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 87, 88, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 60, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 62, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, - 2, 2, 2, 2, 2, 2, 2, 57, 83, 67, 84, 18, 85, 86, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 2, 4, 4, 2, 87, 88, 89, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 59, 89, 69, 90, 18, 91, 92, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 2, 4, 4, 2, 93, 94, 95, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 90, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 91, 34, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 2, 2, 2, 2, 2, 96, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 88, 34, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 92, 2, 2, 2, 2, 93, 94, 2, 2, 2, 2, 2, 95, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 97, 2, 2, 2, 2, 98, 99, 2, 2, 2, 2, 2, 100, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 2, 96, 97, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 2, 101, 102, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 98, 60, 4, 4, 4, 4, 4, 4, 4, 99, 100, 4, 4, 101, 4, 4, - 4, 4, 4, 4, 2, 102, 103, 104, 105, 106, 2, 2, 2, 2, 107, 108, 109, 110, - 111, 112, 4, 4, 4, 4, 4, 4, 4, 4, 113, 114, 115, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 23, 4, 4, 4, 116, 4, 4, 4, 117, 118, 4, 4, 4, - 4, 119, 120, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 121, - 2, 2, 2, 122, 2, 123, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 124, 125, 126, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 103, 62, 4, 4, 4, 4, 4, 4, 4, 104, 105, 4, 4, 106, 4, + 4, 4, 4, 4, 4, 2, 107, 108, 109, 110, 111, 2, 2, 2, 2, 112, 113, 114, 115, + 116, 117, 4, 4, 4, 4, 4, 4, 4, 4, 118, 119, 120, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 121, 4, 4, 4, 122, 123, 124, 4, 125, 126, 4, 4, + 4, 4, 127, 128, 4, 4, 4, 4, 4, 4, 4, 129, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 130, 2, 2, 2, 131, 2, 132, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 133, 134, 135, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 127, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 128, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 136, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 137, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 57, 2, 2, 2, 11, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 128, 2, 2, 2, + 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 138, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 129, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 139, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, + 2, 2, 2, 140, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 141, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 130, 4, 4, 4, 4, 4, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 87, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, - 2, 131, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 132, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 87, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 133, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, ], tree3_level3: &[ 0xB7FFFF7FFFFFEFFF, 0x3FFF3FFF, 0xFFFFFFFFFFFFFFFF, 0x7FFFFFFFFFFFFFF, 0, @@ -195,32 +197,34 @@ 0x37FFFF00000000, 0x3FFFFFF003FFFFF, 0xC0FFFFFFFFFFFFFF, 0x873FFFFFFEEFF06F, 0x1FFFFFFF00000000, 0x1FFFFFFF, 0x7FFFFFFEFF, 0x3FFFFFFFFFFFFF, 0x7FFFF003FFFFF, 0x3FFFF, 0x1FF, 0x7FFFFFFFFFFFF, - 0x3FF00FFFFFFFFFF, 0x31BFFFFFFFFFF, 0xFFFF00801FFFFFFF, - 0xFFFF00000001FFFF, 0xFFFF00000000003F, 0x7FFFFF0000001F, - 0x803FFFC00000007F, 0x3FF01FFFFFF0004, 0xFFDFFFFFFFFFFFFF, - 0x4FFFFFFFFF00F0, 0x17FFDE1F, 0x40FFFFFFFFFBFFFF, 0xFFFF01FFBFFFBD7F, - 0x3FF07FFFFFFFFFF, 0xFBEDFDFFFFF99FEF, 0x1F1FCFE081399F, 0x3C3FF07FF, - 0x3FF00BF, 0xFF3FFFFFFFFFFFFF, 0x3F000001, 0x3FF0011, 0x1FFFFFFFFFFFFFF, - 0x3FF, 0x3FF0FFFE7FFFFFF, 0x7F, 0xFFFFFFFF00000000, 0x800003FFFFFFFFFF, - 0xF9BFFFFFFF6FF27F, 0x3FF000F, 0xFFFFFCFF00000000, 0x1BFCFFFFFF, - 0x7FFFFFFFFFFFFFFF, 0xFFFFFFFFFFFF0080, 0xFFFF000023FFFFFF, - 0xFF7FFFFFFFFFFDFF, 0xFFFC000003FF0001, 0x7FFEFFFFFCFFFF, - 0xB47FFFFFFFFFFB7F, 0xFFFFFDBF03FF00FF, 0x3FF01FB7FFF, 0x7FFFFF00000000, - 0x1000000000000, 0x3FFFFFF, 0x7FFFFFFFFFFF, 0xF, 0xFFFFFFFFFFFF0000, - 0x1FFFFFFFFFFFF, 0xFFFF03FF7FFFFFFF, 0x1F3FFFFFFF03FF, 0xE0FFFFF803FF000F, - 0xFFFF, 0xFFFFFFFFFFFF87FF, 0xFFFF80FF, 0x3001B00000000, 0xFFFFFFFFFFFFFF, - 0x3FFFFF, 0x6FEF000000000000, 0x7FFFFFFFF, 0xFFFF00F000070000, - 0xFFFFFFFFFFFFFFF, 0x1FFF07FFFFFFFFFF, 0x63FF01FF, 0xFFFF3FFFFFFFFFFF, - 0xF807E3E000000000, 0x3C0000000FE7, 0x1C, 0xFFFFFFFFFFDFFFFF, - 0xEBFFDE64DFFFFFFF, 0xFFFFFFFFFFFFFFEF, 0x7BFFFFFFDFDFE7BF, - 0xFFFFFFFFFFFDFC5F, 0xFFFFFF3FFFFFFFFF, 0xF7FFFFFFF7FFFFFD, - 0xFFDFFFFFFFDFFFFF, 0xFFFF7FFFFFFF7FFF, 0xFFFFFDFFFFFFFDFF, - 0xFFFFFFFFFFFFCFF7, 0xF87FFFFFFFFFFFFF, 0x201FFFFFFFFFFF, 0xFFFEF8000010, - 0x7DBF9FFFF7F, 0x3FFF1FFFFFFFFFFF, 0x43FF, 0x7FFFFFFF0000, - 0x3FFFFFFFFFFFFFF, 0x7FFF6F7F00000000, 0x7F001F, 0x3FF0FFF, - 0xAF7FE96FFFFFFEF, 0x5EF7F796AA96EA84, 0xFFFFBEE0FFFFBFF, + 0x3FF00FFFFFFFFFF, 0x31BFFFFFFFFFF, 0xE000000000000000, + 0xFFFF00801FFFFFFF, 0xFFFF00000001FFFF, 0xFFFF00000000003F, + 0x7FFFFF0000001F, 0x803FFFC00000007F, 0x3FF01FFFFFF0004, + 0xFFDFFFFFFFFFFFFF, 0x4FFFFFFFFF00F0, 0x17FFDE1F, 0xC0FFFFFFFFFBFFFF, 0x3, + 0xFFFF01FFBFFFBD7F, 0x3FF07FFFFFFFFFF, 0xFBEDFDFFFFF99FEF, + 0x1F1FCFE081399F, 0x3C3FF07FF, 0x3FF00BF, 0xFF3FFFFFFFFFFFFF, 0x3F000001, + 0x3FF0011, 0x1FFFFFFFFFFFFFF, 0x3FF, 0x3FF0FFFE7FFFFFF, 0x7F, + 0xFFFFFFFF00000000, 0x800003FFFFFFFFFF, 0xF9BFFFFFFF6FF27F, 0x3FF000F, + 0xFFFFFCFF00000000, 0x1BFCFFFFFF, 0x7FFFFFFFFFFFFFFF, 0xFFFFFFFFFFFF0080, + 0xFFFF000023FFFFFF, 0xFF7FFFFFFFFFFDFF, 0xFFFC000003FF0001, + 0x7FFEFFFFFCFFFF, 0xB47FFFFFFFFFFB7F, 0xFFFFFDBF03FF00FF, 0x3FF01FB7FFF, + 0x7FFFFF00000000, 0xC7FFFFFFFFFDFFFF, 0x3FF0007, 0x1000000000000, + 0x3FFFFFF, 0x7FFFFFFFFFFF, 0xF, 0xFFFFFFFFFFFF0000, 0x1FFFFFFFFFFFF, + 0xFFFFFFFFFFFF, 0x3FFFFF, 0xFFFF03FF7FFFFFFF, 0x1F3FFFFFFF03FF, + 0xE0FFFFF803FF000F, 0xFFFF, 0xFFFFFFFFFFFF87FF, 0xFFFF80FF, + 0x3001B00000000, 0xFFFFFFFFFFFFFF, 0x6FEF000000000000, 0x40007FFFFFFFF, + 0xFFFF00F000270000, 0xFFFFFFFFFFFFFFF, 0x1FFF07FFFFFFFFFF, 0x63FF01FF, + 0xFFFF3FFFFFFFFFFF, 0xF807E3E000000000, 0x3C0000000FE7, 0x1C, + 0xFFFFFFFFFFDFFFFF, 0xEBFFDE64DFFFFFFF, 0xFFFFFFFFFFFFFFEF, + 0x7BFFFFFFDFDFE7BF, 0xFFFFFFFFFFFDFC5F, 0xFFFFFF3FFFFFFFFF, + 0xF7FFFFFFF7FFFFFD, 0xFFDFFFFFFFDFFFFF, 0xFFFF7FFFFFFF7FFF, + 0xFFFFFDFFFFFFFDFF, 0xFFFFFFFFFFFFCFF7, 0xF87FFFFFFFFFFFFF, + 0x201FFFFFFFFFFF, 0xFFFEF8000010, 0x7E07FFFFFFF, 0xFFFF07DBF9FFFF7F, + 0x3FFFFFFFFFFF, 0x8000, 0x3FFF1FFFFFFFFFFF, 0x43FF, 0x7FFFFFFF0000, + 0x3FFFFFFFFFFFFFF, 0x3FFFFFFFFFF0000, 0x7FFF6F7F00000000, 0x7F001F, + 0x3FF0FFF, 0xAF7FE96FFFFFFEF, 0x5EF7F796AA96EA84, 0xFFFFBEE0FFFFBFF, 0x3FF000000000000, 0xFFFFFFFF, 0xFFFF0003FFFFFFFF, 0x1FFFFFFFF, - 0x3FFFFFFF, 0x7FF, 0xFFFFFFFFFFFF, + 0x3FFFFFFF, 0xFFFFFFFFFFFF07FF, ], }; @@ -336,7 +340,7 @@ ], tree3_level1: &[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 5, 9, 10, 5, 11, 12, 5, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 13, 14, 15, 7, 16, 17, 7, 18, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 7, 7, 13, 14, 15, 7, 16, 17, 7, 18, 19, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -345,61 +349,63 @@ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ], tree3_level2: &[ 0, 1, 2, 3, 4, 5, 4, 4, 4, 4, 6, 7, 8, 9, 10, 11, 2, 2, 12, 13, 14, 15, 16, 4, 2, 2, 2, 2, 17, 18, 19, 4, 20, 21, 22, 23, 24, 4, 25, 4, 26, 27, 28, 29, 30, 31, 32, 4, 2, 33, 34, 34, 35, 4, 4, 4, 4, 4, 36, 4, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 4, 50, 22, 51, 52, 4, 4, 5, - 53, 54, 55, 4, 4, 56, 57, 54, 58, 59, 4, 60, 61, 4, 4, 62, 4, 63, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 4, 4, 4, 4, 73, 74, 75, 4, 76, 77, 78, 4, 4, - 4, 4, 79, 4, 4, 80, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 81, 4, 2, - 56, 2, 2, 2, 82, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 83, 84, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 56, 4, 4, 4, 4, 4, 4, 4, 4, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 22, 52, 53, 4, 4, 5, + 54, 55, 56, 4, 4, 57, 58, 55, 59, 60, 4, 61, 62, 4, 4, 63, 4, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 4, 4, 4, 4, 74, 75, 76, 4, 77, 78, 79, 4, 4, + 4, 4, 80, 81, 4, 82, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 83, 4, + 2, 57, 2, 2, 2, 84, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 85, 86, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 55, 87, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 61, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 62, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 2, 2, 2, 2, 2, 2, 2, 2, 72, 85, 86, 87, 54, 88, 75, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 2, 4, 4, 2, 89, 90, 91, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 4, 2, 2, 2, 2, 2, 2, 2, 2, 73, 88, 89, 90, 55, 91, 76, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 2, 4, 4, 2, 92, 93, 94, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 92, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 93, 33, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 2, 2, 2, 2, 2, 2, 2, 95, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 96, 33, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 94, 2, 2, 2, 2, 95, 96, 2, 2, 2, 2, 2, 97, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 97, 2, 2, 2, 2, 98, 99, 2, 2, 2, 2, 2, 100, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 2, 98, 99, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 100, 101, 102, 103, 104, 2, 2, - 2, 2, 105, 106, 107, 108, 109, 110, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 22, 4, 4, 4, 4, 4, 4, 4, 111, - 112, 4, 4, 4, 4, 87, 62, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 113, 2, 2, 2, 114, 2, 115, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 116, 117, 118, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 119, 2, 2, 2, 2, 2, 2, + 4, 4, 4, 4, 4, 4, 2, 101, 102, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 103, 104, 105, 106, 107, + 2, 2, 2, 2, 108, 109, 110, 111, 112, 113, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 114, 4, 4, 4, 115, 116, + 4, 4, 117, 118, 4, 4, 4, 4, 90, 63, 4, 4, 4, 4, 4, 4, 4, 119, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 120, 2, 2, 2, 121, 2, 122, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 123, 124, 125, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 126, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 72, 2, 2, 2, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 127, 2, 2, 2, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 120, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 128, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 121, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 129, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 122, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 123, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 130, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 131, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 55, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, ], tree3_level3: &[ 0xB7FFFF7FFFFFEFFF, 0x3FFF3FFF, 0xFFFFFFFFFFFFFFFF, 0x7FFFFFFFFFFFFFF, 0, @@ -414,23 +420,25 @@ 0x303FFFFFFFFFF, 0xFFFF00801FFFFFFF, 0xFFFF00000000003F, 0xFFFF000000000003, 0x7FFFFF0000001F, 0xFFFFFFFFFFFFF8, 0x26000000000000, 0xFFFFFFFFFFF8, 0x1FFFFFF0000, 0x7FFFFFFFF8, 0x47FFFFFFFF0090, - 0x7FFFFFFFFFFF8, 0x1400001E, 0xFFFFFFBFFFF, 0xFFFF01FFBFFFBD7F, + 0x7FFFFFFFFFFF8, 0x1400001E, 0x80000FFFFFFBFFFF, 0x1, 0xFFFF01FFBFFFBD7F, 0x23EDFDFFFFF99FE0, 0x3E0010000, 0x380000780, 0xFFFFFFFFFFFF, 0xB0, 0x7FFFFFFFFFFF, 0xF000000, 0x10, 0x10007FFFFFFFFFF, 0x7FFFFFF, 0x7F, 0xFFFFFFFFFFF, 0xFFFFFFFF00000000, 0x80000000FFFFFFFF, 0x8000FFFFFF6FF27F, 0x2, 0xFFFFFCFF00000000, 0xA0001FFFF, 0x407FFFFFFFFF801, 0xFFFFFFFFF0010000, 0xFFFF0000200003FF, 0x1FFFFFFFFFFFFFF, 0x7FFFFFFFFDFF, 0xFFFC000000000001, 0xFFFF, 0x1FFFFFFFFFB7F, 0xFFFFFDBF00000040, - 0x10003FF, 0x7FFFF00000000, 0x1000000000000, 0x3FFFFFF, 0xF, - 0xFFFFFFFFFFFF0000, 0x1FFFFFFFFFFFF, 0xFFFF00007FFFFFFF, + 0x10003FF, 0x7FFFF00000000, 0xFFFFFFFFDFFF4, 0x1000000000000, 0x3FFFFFF, + 0xF, 0xFFFFFFFFFFFF0000, 0x1FFFFFFFFFFFF, 0x7E, 0xFFFF00007FFFFFFF, 0x7FFFFFFFFFFFFFFF, 0x3FFFFFFF0000, 0xE0FFFFF80000000F, 0x107FF, 0xFFF80000, 0xB00000000, 0xFFFFFFFFFFFFFF, 0x3FFFFF, 0x6FEF000000000000, - 0x7FFFFFFFF, 0xFFFF00F000070000, 0xFFFFFFFFFFFFFFF, 0x1FFF07FFFFFFFFFF, - 0x3FF01FF, 0xFFFFFFFFFFDFFFFF, 0xEBFFDE64DFFFFFFF, 0xFFFFFFFFFFFFFFEF, - 0x7BFFFFFFDFDFE7BF, 0xFFFFFFFFFFFDFC5F, 0xFFFFFF3FFFFFFFFF, - 0xF7FFFFFFF7FFFFFD, 0xFFDFFFFFFFDFFFFF, 0xFFFF7FFFFFFF7FFF, - 0xFFFFFDFFFFFFFDFF, 0xFF7, 0x3F801FFFFFFFFFFF, 0x4000, 0x7FFF6F7F00000000, - 0x1F, 0x80F, 0xAF7FE96FFFFFFEF, 0x5EF7F796AA96EA84, 0xFFFFBEE0FFFFBFF, - 0xFFFFFFFF, 0xFFFF0003FFFFFFFF, 0x1FFFFFFFF, 0x3FFFFFFF, 0x7FF, + 0x40007FFFFFFFF, 0xFFFF00F000270000, 0xFFFFFFFFFFFFFFF, + 0x1FFF07FFFFFFFFFF, 0x3FF01FF, 0xFFFFFFFFFFDFFFFF, 0xEBFFDE64DFFFFFFF, + 0xFFFFFFFFFFFFFFEF, 0x7BFFFFFFDFDFE7BF, 0xFFFFFFFFFFFDFC5F, + 0xFFFFFF3FFFFFFFFF, 0xF7FFFFFFF7FFFFFD, 0xFFDFFFFFFFDFFFFF, + 0xFFFF7FFFFFFF7FFF, 0xFFFFFDFFFFFFFDFF, 0xFF7, 0x7E07FFFFFFF, + 0xFFFF000000000000, 0x3FFFFFFFFFFF, 0x3F801FFFFFFFFFFF, 0x4000, + 0xFFFFFFF0000, 0x7FFF6F7F00000000, 0x1F, 0x80F, 0xAF7FE96FFFFFFEF, + 0x5EF7F796AA96EA84, 0xFFFFBEE0FFFFBFF, 0xFFFFFFFF, 0x3FFFFFFFFFFFFFF, + 0xFFFF0003FFFFFFFF, 0x1FFFFFFFF, 0x3FFFFFFF, 0xFFFFFFFFFFFF07FF, ], };
diff --git a/tools/cast3p/runtime.version b/tools/cast3p/runtime.version index 5c190c22..38507ff 100644 --- a/tools/cast3p/runtime.version +++ b/tools/cast3p/runtime.version
@@ -1 +1 @@ -359153 +359700
diff --git a/tools/crates/gnrt/download.rs b/tools/crates/gnrt/download.rs index 6fbe752b5..5c35839 100644 --- a/tools/crates/gnrt/download.rs +++ b/tools/crates/gnrt/download.rs
@@ -161,5 +161,8 @@ ("ISC", "ISC"), ("MIT OR Zlib OR Apache-2.0", "Apache 2.0"), ("0BSD OR MIT OR Apache-2.0", "Apache 2.0"), - ("Unicode-DFS-2016", "Unicode License Agreement - Data Files and Software (2016)"), + ( + "(MIT OR Apache-2.0) AND Unicode-DFS-2016", + "Apache 2.0 AND Unicode License Agreement - Data Files and Software (2016)", + ), ];
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index fe34ccb..e8772f6 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -2271,7 +2271,7 @@ ], 'chromeos_js_coverage_reclient': [ - 'chromeos_with_codecs', 'release_bot_reclient', 'also_build_lacros_chrome', 'use_javascript_coverage', 'enable_webui_inline_sourcemaps_on', 'optimize_webui_off', + 'chromeos_with_codecs', 'release_bot_reclient', 'use_javascript_coverage', 'enable_webui_inline_sourcemaps_on', 'optimize_webui_off', ], 'chromeos_kevin_include_unwind_tables_official_dchecks': [
diff --git a/tools/mb/mb_config_expectations/chromium.coverage.json b/tools/mb/mb_config_expectations/chromium.coverage.json index e2730a5..ace2046 100644 --- a/tools/mb/mb_config_expectations/chromium.coverage.json +++ b/tools/mb/mb_config_expectations/chromium.coverage.json
@@ -59,7 +59,6 @@ }, "chromeos-js-code-coverage": { "gn_args": { - "also_build_lacros_chrome": true, "dcheck_always_on": false, "enable_webui_inline_sourcemaps": true, "ffmpeg_branding": "ChromeOS",
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.linux.json b/tools/mb/mb_config_expectations/tryserver.chromium.linux.json index f8da936..e4ba3b8 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.linux.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.linux.json
@@ -12,7 +12,6 @@ }, "chromeos-js-code-coverage": { "gn_args": { - "also_build_lacros_chrome": true, "dcheck_always_on": false, "enable_webui_inline_sourcemaps": true, "ffmpeg_branding": "ChromeOS",
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index dd0e8d3..ecaadb8 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -6866,6 +6866,8 @@ <int value="2033" label="NUMERIC_QUANTITY: accepted"/> <int value="2048" label="ONE_TIME_CODE: edited"/> <int value="2049" label="ONE_TIME_CODE: accepted"/> + <int value="2176" label="ADDRESS_HOME_LANDMARK: edited"/> + <int value="2177" label="ADDRESS_HOME_LANDMARK: accepted"/> </enum> <enum name="AutofillErrorDialogType"> @@ -7206,6 +7208,16 @@ <int value="9479" label="IBAN: False Positive (Empty)"/> <int value="9480" label="IBAN: False Negative (Mismatch)"/> <int value="9481" label="IBAN: False Negative (Unknown)"/> + <int value="9672" label="Landmark: True Positive"/> + <int value="9673" label="Landmark: True Negative (Ambiguous)"/> + <int value="9674" label="Landmark: True Negative (Unknown)"/> + <int value="9675" label="Landmark: True Negative (Empty)"/> + <int value="9676" label="Landmark: False Positive (Mismatch)"/> + <int value="9677" label="Landmark: False Positive (Ambiguous)"/> + <int value="9678" label="Landmark: False Positive (Unknown)"/> + <int value="9679" label="Landmark: False Positive (Empty)"/> + <int value="9680" label="Landmark: False Negative (Mismatch)"/> + <int value="9681" label="Landmark: False Negative (Unknown)"/> </enum> <enum name="AutofillFormControlType"> @@ -9333,6 +9345,22 @@ <int value="780" label="ONE_TIME_CODE - Predictions different - Value agrees with both predictions"/> + <int value="817" + label="ADDRESS_HOME_LANDMARK - Predictions equal - Value agrees"/> + <int value="818" + label="ADDRESS_HOME_LANDMARK - Predictions equal - Value disagrees"/> + <int value="819" + label="ADDRESS_HOME_LANDMARK - Predictions different - Value agrees + with old prediction"/> + <int value="820" + label="ADDRESS_HOME_LANDMARK - Predictions different - Value agrees + with new prediction"/> + <int value="821" + label="ADDRESS_HOME_LANDMARK - Predictions different - Value agrees + with neither prediction"/> + <int value="822" + label="ADDRESS_HOME_LANDMARK - Predictions different - Value agrees + with both predictions"/> </enum> <enum name="AutofillPredictionSource"> @@ -9619,6 +9647,7 @@ <int value="127" label="RESERVED"/> <int value="128" label="NUMERIC_QUANTITY"/> <int value="129" label="ONE_TIME_CODE"/> + <int value="136" label="ADDRESS_HOME_LANDMARK"/> </enum> <enum name="AutofillServerPredictionAvailability"> @@ -18914,7 +18943,6 @@ <enum name="ContentType"> <int value="-1" label="Invalid setting"/> - <int value="0" label="Cookies setting"/> <int value="1" label="Images setting"/> <int value="2" label="JavaScript setting"/> <int value="3" label="Plugins setting [removed in M91]"/> @@ -19007,7 +19035,12 @@ <int value="94" label="Federated identity auto re-authn"/> <int value="95" label="Federated identity IdP Registration API"/> <int value="96" label="Anti-abuse"/> - <int value="97" label="Third-Party Storage Partitioning"/> + <int value="97" label="Third-Party StoragePartitioning"/> + <int value="98" label="HTTPS Enforcement"/> + <int value="99" label="USB Chooser Data"/> + <int value="100" label="Cookies setting"/> + <int value="101" label="Get Display Media Set Select All Screens"/> + <int value="102" label="MIDI"/> </enum> <enum name="ContentTypeParseableResult"> @@ -25657,6 +25690,7 @@ <int value="2" label="Close Incognito tabs"/> <int value="3" label="Cookies in use dialog"/> <int value="4" label="Site settings page"/> + <int value="5" label="History Page Entries"/> <int value="6" label="Quick delete"/> <int value="7" label="Page info permission reset"/> </enum> @@ -32658,14 +32692,15 @@ <int value="1056" label="KioskTroubleshootingToolsEnabled"/> <int value="1057" label="ForceEnablePepperVideoDecoderDevAPI"/> <int value="1058" label="DomainReliabilityAllowed"/> - <int value="1059" label="ScreensaverEnabled"/> - <int value="1060" label="ScreensaverIdleTimeoutSeconds"/> - <int value="1061" label="ScreensaverImageDisplayIntervalSeconds"/> - <int value="1062" label="ScreensaverImages"/> - <int value="1063" label="DeviceScreensaverEnabled"/> - <int value="1064" label="DeviceScreensaverIdleTimeoutSeconds"/> - <int value="1065" label="DeviceScreensaverImageDisplayIntervalSeconds"/> - <int value="1066" label="DeviceScreensaverImages"/> + <int value="1059" label="ScreensaverLockScreenEnabled"/> + <int value="1060" label="ScreensaverLockScreenIdleTimeoutSeconds"/> + <int value="1061" label="ScreensaverLockScreenImageDisplayIntervalSeconds"/> + <int value="1062" label="ScreensaverLockScreenImages"/> + <int value="1063" label="DeviceScreensaverLoginScreenEnabled"/> + <int value="1064" label="DeviceScreensaverLoginScreenIdleTimeoutSeconds"/> + <int value="1065" + label="DeviceScreensaverLoginScreenImageDisplayIntervalSeconds"/> + <int value="1066" label="DeviceScreensaverLoginScreenImages"/> <int value="1067" label="DefaultWindowManagementSetting"/> <int value="1068" label="WindowManagementAllowedForUrls"/> <int value="1069" label="WindowManagementBlockedForUrls"/> @@ -32703,6 +32738,7 @@ <int value="1098" label="SafeBrowsingExtensionProtectionAllowed"/> <int value="1099" label="ShowDisplaySizeScreenEnabled"/> <int value="1100" label="AnonymousSearchEnabled"/> + <int value="1101" label="LegacyTechReportAllowlist"/> </enum> <enum name="EnterprisePoliciesSources"> @@ -79435,6 +79471,22 @@ <int value="9" label="Change password automatically"/> </enum> +<enum name="PasswordCheckInteractionIOS"> + <int value="0" label="Change password"/> + <int value="1" label="Edit password"/> + <int value="2" label="Remove password"/> + <int value="3" label="Show password"/> + <int value="4" label="Mute warning"/> + <int value="5" label="Unmute warning"/> + <int value="6" label="Show list of warnings"/> +</enum> + +<enum name="PasswordCheckInteractionIOSWithoutContext"> + <int value="0" label="Check started automatically"/> + <int value="1" label="Check started manually"/> + <int value="2" label="Open password checkup homepage"/> +</enum> + <enum name="PasswordCheckReferrer"> <int value="0" label="Safety Check"/> <int value="1" label="Password Settings"/> @@ -83376,8 +83428,8 @@ </enum> <enum name="PrefetchProxyPrefetchStatus"> - <int value="0" label="Prefetch Used, No Probe"> - The interceptor used a prefetch. + <int value="0" label="DEPRECATED Prefetch Used, No Probe"> + The interceptor used a prefetch. (Deprecated M115) </int> <int value="1" label="Prefetch Used, Probe Success"> The interceptor used a prefetch after successfully probing the origin. @@ -83390,9 +83442,9 @@ The url was eligible to be prefetched, but the network request was never made. </int> - <int value="4" label="Prefetch Not,Eligible: Google Domain"> + <int value="4" label="DEPRECATED Prefetch Not Eligible: Google Domain"> The url was not eligible to be prefetched because it is a Google-owned - domain. + domain. (Deprecated M115) </int> <int value="5" label="Prefetch Not Eligible: User Has Cookies"> The url was not eligible to be prefetched because the user had cookies for @@ -83406,7 +83458,7 @@ The url was not eligible to be prefetched because its scheme was not https://. </int> - <int value="8" label="Prefetch Not Eligible: Host Is IP Address"> + <int value="8" label="DEPRECATED Prefetch Not Eligible: Host Is IP Address"> The url was not eligible to be prefetched because its host was an IP address. (Deprecated M100) </int> @@ -83430,64 +83482,86 @@ <int value="14" label="Prefetch Successful"> The prefetch finished successfully but was never used. </int> - <int value="15" label="Navigated To Link Not On SRP"> + <int value="15" label="DEPRECATED Navigated To Link Not On SRP"> The navigation off of the Google SRP was to a url that was not on the SRP. + (Deprecated M115) </int> - <int value="16" label="Prefetch Used, No Probe, Did NoStatePrefetch"> + <int value="16" + label="DEPRECATED Prefetch Used, No Probe, Did NoStatePrefetch"> The url was prefetched and No State Prerendered and committed without a - probe to the origin. + probe to the origin. (Deprecated M115) </int> - <int value="17" label="Prefetch Used, Probe Success, Did NoStatePrefetch"> + <int value="17" + label="DEPRECATED Prefetch Used, Probe Success, Did NoStatePrefetch"> The url was prefetched and No State Prerendered and committed with a - successful probe to the origin. + successful probe to the origin. (Deprecated M115) </int> - <int value="18" label="Prefetch Not Used, Probe Failed, Did NoStatePrefetch"> + <int value="18" + label="DEPRECATED Prefetch Not Used, Probe Failed, Did NoStatePrefetch"> The url was prefetched and No State Prerendered but the origin probe failed - and the prefetch was not used. + and the prefetch was not used. (Deprecated M115) </int> <int value="19" - label="Prefetch Used, No Probe, NoStatePrefetch Attempt Denied"> + label="DEPRECATED Prefetch Used, No Probe, NoStatePrefetch Attempt + Denied"> The url was prefetched but was not No State Prerendered despite attempting - to do so and committed without a probe to the origin. + to do so and committed without a probe to the origin. (Deprecated M115) </int> <int value="20" - label="Prefetch Used, Probe Success, NoStatePrefetch Attempt Denied"> + label="DEPRECATED Prefetch Used, Probe Success, NoStatePrefetch Attempt + Denied"> The url was prefetched but was not No State Prerendered despite attempting - to do so and committed with a successful probe to the origin. + to do so and committed with a successful probe to the origin. (Deprecated + M115) </int> <int value="21" - label="Prefetch Not Used, Probe Failed, NoStatePrefetch Attempt Denied"> + label="DEPRECATED Prefetch Not Used, Probe Failed, NoStatePrefetch + Attempt Denied"> The url was prefetched but was not No State Prerendered despite attempting to do so, and the origin probe failed and the prefetch was not used. + (Deprecated M115) </int> - <int value="22" label="Prefetch Used, No Probe, NoStatePrefetch Not Started"> + <int value="22" + label="DEPRECATED Prefetch Used, No Probe, NoStatePrefetch Not Started"> The url was prefetched and eligible for NoStatePrerender but wasn't started - and committed without a probe to the origin. + and committed without a probe to the origin. (Deprecated M115) </int> <int value="23" - label="Prefetch Used, Probe Success, NoStatePrefetch Not Started"> + label="DEPRECATED Prefetch Used, Probe Success, NoStatePrefetch Not + Started"> The url was prefetched and eligible for NoStatePrerender but wasn't started - and committed with a successful probe to the origin. + and committed with a successful probe to the origin. (Deprecated M115) </int> <int value="24" - label="Prefetch Not Used, Probe Failed, NoStatePrefetch Not Started"> + label="DEPRECATED Prefetch Not Used, Probe Failed, NoStatePrefetch Not + Started"> The url was prefetched and eligible for NoStatePrerender but wasn't started - and the origin probe failed and the prefetch was not used. + and the origin probe failed and the prefetch was not used. (Deprecated M115) </int> - <int value="25" label="Subresource throttled"/> - <int value="26" label="Prediction position not eligible"/> + <int value="25" label="DEPRECATED Subresource throttled"> + (Deprecated M115) + </int> + <int value="26" label="DEPRECATED Prediction position not eligible"> + (Deprecated M115) + </int> <int value="27" label="Prefetch Not Eligible: Retry-After not elasped"/> <int value="28" label="Connecting to the prefetch proxy previously failed"/> <int value="29" label="Decoy request"/> <int value="30" label="Stale prefetch"/> - <int value="31" label="Stale prefetch with NSP"/> - <int value="32" label="Stale prefetch, NSP attempt denied"/> - <int value="33" label="Stale prefetch, NSP not started"/> + <int value="31" label="DEPRECATED Stale prefetch with NSP"> + (Deprecated M115) + </int> + <int value="32" label="DEPRECATED Stale prefetch, NSP attempt denied"> + (Deprecated M115) + </int> + <int value="33" label="DEPRECATED Stale prefetch, NSP not started"> + (Deprecated M115) + </int> <int value="34" label="Prefetch Not Used, Cookies Changed"> The url was prefetched but not used, because cookies were added to the URL at some point after the initial eligibility check. </int> - <int value="35" label="Prefetch failed, redirects disabled"> + <int value="35" label="DEPRECATED Prefetch failed, redirects disabled"> The url was prefetched and was redirected; however, redirects were disabled, so the prefetch failed. (Deprecated M113) </int> @@ -100339,7 +100413,7 @@ <int value="18" label="SERVER_RETURN_CLIENT_DATA_OBSOLETE"/> <int value="19" label="SERVER_RETURN_ENCRYPTION_OBSOLETE"/> <int value="20" label="(deprecated) DATATYPE_TRIGGERED_RETRY"/> - <int value="21" label="SERVER_MORE_TO_DOWNLOAD"/> + <int value="21" label="(deprecated) SERVER_MORE_TO_DOWNLOAD"/> <int value="22" label="SYNCER_OK"/> </enum>
diff --git a/tools/metrics/histograms/metadata/net/histograms.xml b/tools/metrics/histograms/metadata/net/histograms.xml index d22487a8..7d3042e 100644 --- a/tools/metrics/histograms/metadata/net/histograms.xml +++ b/tools/metrics/histograms/metadata/net/histograms.xml
@@ -1946,7 +1946,7 @@ </histogram> <histogram name="Net.HttpJob.CanIncludeCookies" enum="Boolean" - expires_after="2023-06-18"> + expires_after="2024-06-18"> <owner>cfredric@chromium.org</owner> <owner>kaustubhag@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/page/histograms.xml b/tools/metrics/histograms/metadata/page/histograms.xml index a689540..26e3d73f 100644 --- a/tools/metrics/histograms/metadata/page/histograms.xml +++ b/tools/metrics/histograms/metadata/page/histograms.xml
@@ -3091,58 +3091,6 @@ </summary> </histogram> -<histogram - name="PageSerialization.MhtmlGeneration.BrowserWaitForRendererTime.FrameTree" - units="ms" expires_after="2020-12-01"> - <owner>sclittle@chromium.org</owner> - <owner>offline-dev@chromium.org</owner> - <summary> - Total time the browser process waited for all render processes to save their - respective frames while saving a page into MHTML. - </summary> -</histogram> - -<histogram - name="PageSerialization.MhtmlGeneration.BrowserWaitForRendererTime.SingleFrame" - units="ms" expires_after="2020-12-01"> - <owner>sclittle@chromium.org</owner> - <owner>offline-dev@chromium.org</owner> - <summary> - Time the browser process waited on a single frame to be saved by a render - processes while saving a page into MHTML. - </summary> -</histogram> - -<histogram name="PageSerialization.MhtmlGeneration.FinalSaveStatus" - enum="MhtmlGenerationFinalSaveStatus" expires_after="2021-08-08"> - <owner>sclittle@chromium.org</owner> - <owner>offline-dev@chromium.org</owner> - <summary>Final status of the MHTML save operation for a page.</summary> -</histogram> - -<histogram - name="PageSerialization.MhtmlGeneration.RendererMainThreadTime.SingleFrame" - units="ms" expires_after="2020-12-01"> - <owner>sclittle@chromium.org</owner> - <owner>offline-dev@chromium.org</owner> - <summary> - Time spent by the renderer main thread while saving one frame of a page to - MHTML. - </summary> -</histogram> - -<histogram name="PageSerialization.MhtmlGeneration.WriteToDiskTime.SingleFrame" - units="ms" expires_after="2020-12-01"> - <owner>sclittle@chromium.org</owner> - <owner>offline-dev@chromium.org</owner> - <summary> - Time spent writing a frame's encoded MHTML data to the file or data pipe - handle passed to the Renderer, recorded when the writing is done and the - handle is closed. Note that when writing to a data pipe, this metric does - not precisely reflect the time taken to write the data to disk. - </summary> -</histogram> - <histogram name="PageSerialization.MhtmlLoading.LoadResult" enum="MhtmlLoadResult" expires_after="2023-04-23"> <owner>sclittle@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/password/histograms.xml b/tools/metrics/histograms/metadata/password/histograms.xml index f7ac025..4d66705 100644 --- a/tools/metrics/histograms/metadata/password/histograms.xml +++ b/tools/metrics/histograms/metadata/password/histograms.xml
@@ -1141,7 +1141,47 @@ enum="PasswordCheckInteraction" expires_after="2023-09-10"> <owner>vsemeniuk@google.com</owner> <owner>vasilii@chromium.org</owner> - <summary>User actions performed on the Password Check settings page.</summary> + <summary> + User actions performed on the Password Check settings page. Replaced on IOS + by PasswordManager.BulkCheck.UserAction.IOS.* in M114. + </summary> +</histogram> + +<histogram name="PasswordManager.BulkCheck.UserAction.IOS.General" + enum="PasswordCheckInteractionIOSWithoutContext" expires_after="2023-10-28"> + <owner>eic@google.com</owner> + <owner>noemies@google.com</owner> + <summary> + User actions performed on the Password Check UI inside the Password Manager. + After M114, the Password Check UI on iOS was divided into multiple views to + display each type of password check warning: compromised passwords, reused + passwords, and weak passwords. User actions taken in the Password Check UI + while viewing a specific type of warning are logged in + PasswordManager.BulkCheck.UserAction.IOS{Context}. The actions logged are + done from Password Check UI not specific to a type of warning. + </summary> +</histogram> + +<histogram name="PasswordManager.BulkCheck.UserAction.IOS{Context}" + enum="PasswordCheckInteractionIOS" expires_after="2023-10-28"> + <owner>eic@google.com</owner> + <owner>noemies@google.com</owner> + <summary> + User actions performed on the Password Check UI inside the Password Manager. + After M114, the Password Check UI on iOS was divided into multiple views to + display each type of password check warning: compromised passwords, reused + passwords, and weak passwords. This histogram represents actions taken in + the Password Check UI while viewing a specific type of warning. See + PasswordManager.BulkCheck.UserAction.IOS.General for actions not specific to + a type of warning. + </summary> + <token key="Context"> + <variant name="" summary="Aggregated across all breakdowns"/> + <variant name=".Compromised"/> + <variant name=".MutedCompromised"/> + <variant name=".Reused"/> + <variant name=".Weak"/> + </token> </histogram> <histogram name="PasswordManager.BulkCheck.UserActionAndroid"
diff --git a/tools/metrics/histograms/metadata/sb_client/histograms.xml b/tools/metrics/histograms/metadata/sb_client/histograms.xml index 27665243..36fab16 100644 --- a/tools/metrics/histograms/metadata/sb_client/histograms.xml +++ b/tools/metrics/histograms/metadata/sb_client/histograms.xml
@@ -576,6 +576,17 @@ </token> </histogram> +<histogram name="SBClientPhishing.ApplyTfliteTime.Classify" units="ms" + expires_after="2024-05-05"> + <owner>andysjlim@chromium.org</owner> + <owner>chrome-counter-abuse-alerts@google.com</owner> + <summary> + Records the duration of running the TfLite classification, which is one step + in applying the TfLite model for phishing detection. This model is applied + roughly once per navigation. + </summary> +</histogram> + <histogram name="SBClientPhishing.BrowserReadyOnClassifierNotReady" enum="BooleanReady" expires_after="2023-07-24"> <owner>andysjlim@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/security/histograms.xml b/tools/metrics/histograms/metadata/security/histograms.xml index 9bf4997b..b941bca 100644 --- a/tools/metrics/histograms/metadata/security/histograms.xml +++ b/tools/metrics/histograms/metadata/security/histograms.xml
@@ -814,7 +814,7 @@ </histogram> <histogram name="SiteIsolation.IsolatableSandboxedIframes" units="processes" - expires_after="2023-05-09"> + expires_after="2023-11-08"> <owner>wjmaclean@chromium.org</owner> <owner>alexmos@chromium.org</owner> <owner>creis@chromium.org</owner> @@ -833,7 +833,7 @@ </histogram> <histogram name="SiteIsolation.IsolatableSandboxedIframes.UniqueOrigins" - units="processes" expires_after="2023-05-09"> + units="processes" expires_after="2023-11-08"> <owner>wjmaclean@chromium.org</owner> <owner>alexmos@chromium.org</owner> <owner>creis@chromium.org</owner> @@ -848,7 +848,7 @@ </histogram> <histogram name="SiteIsolation.IsolatableSandboxedIframes.UniqueSites" - units="processes" expires_after="2023-05-09"> + units="processes" expires_after="2023-11-08"> <owner>wjmaclean@chromium.org</owner> <owner>alexmos@chromium.org</owner> <owner>creis@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/service/histograms.xml b/tools/metrics/histograms/metadata/service/histograms.xml index b82ced5..823ac3d 100644 --- a/tools/metrics/histograms/metadata/service/histograms.xml +++ b/tools/metrics/histograms/metadata/service/histograms.xml
@@ -1483,9 +1483,8 @@ <owner>ayui@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary> - The time to perform 'match' operations of type {MatchType} on the Cache - object in the ServiceWorker Cache API. This histogram was temporarily - disabled from M96 through early 12/2021. + Histogram for the ServiceWorker Cache API. {MatchType} This histogram was + temporarily disabled from M96 through early 12/2021. </summary> <token key="ServiceWorkerCacheProcessType" variants="ServiceWorkerCacheProcessType"/> @@ -1510,9 +1509,8 @@ <owner>ayui@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary> - The time to perform the {ProcessOps} operation on the Cache object in the - ServiceWorker Cache API. This histogram was temporarily disabled from M96 - through early 12/2021. + Histogram for the ServiceWorker Cache API. {ProcessOps} This histogram was + temporarily disabled from M96 through early 12/2021. </summary> <token key="ServiceWorkerCacheProcessType" variants="ServiceWorkerCacheProcessType"/> @@ -1555,9 +1553,8 @@ <owner>ayui@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary> - The time to perform the {ProcessOps} operations on the CacheStorage object - in the ServiceWorker Cache API. This histogram was temporarily disabled from - M96 through early 12/2021. + Histogram for the ServiceWorker Cache API. {ProcessOps} This histogram was + temporarily disabled from M96 through early 12/2021. </summary> <token key="ServiceWorkerCacheProcessType" variants="ServiceWorkerCacheProcessType"/>
diff --git a/tools/metrics/histograms/metadata/tab/histograms.xml b/tools/metrics/histograms/metadata/tab/histograms.xml index f2f81665..b401f06 100644 --- a/tools/metrics/histograms/metadata/tab/histograms.xml +++ b/tools/metrics/histograms/metadata/tab/histograms.xml
@@ -526,6 +526,26 @@ </summary> </histogram> +<histogram name="TabGroups.SavedTabGroupCount" units="groups" + expires_after="2023-12-27"> + <owner>dljames@chromium.org</owner> + <owner>chrome-desktop-ui-sea@google.com</owner> + <summary> + Records once an hour once the SavedTabGroupKeyedService is instantiated. + Tracks the total number of groups saved in the profile. + </summary> +</histogram> + +<histogram name="TabGroups.SavedTabGroupTabCount" units="tabs" + expires_after="2023-12-27"> + <owner>dljames@chromium.org</owner> + <owner>chrome-desktop-ui-sea@google.com</owner> + <summary> + Records once an hour once the SavedTabGroupKeyedService is instantiated. + Tracks the number of tabs in a SavedTabGroup. + </summary> +</histogram> + <histogram name="TabGroups.SessionsPerGroup" units="sessions" expires_after="2023-10-22"> <owner>yusufo@chromium.org</owner> @@ -558,6 +578,26 @@ </summary> </histogram> +<histogram name="TabGroups.UnsavedTabGroupCount" units="groups" + expires_after="2023-12-27"> + <owner>dljames@chromium.org</owner> + <owner>chrome-desktop-ui-sea@google.com</owner> + <summary> + Records once an hour once the SavedTabGroupKeyedService is instantiated. + Tracks the number of unsaved TabGroups. + </summary> +</histogram> + +<histogram name="TabGroups.UnsavedTabGroupTabCount" units="tabs" + expires_after="2023-12-27"> + <owner>dljames@chromium.org</owner> + <owner>chrome-desktop-ui-sea@google.com</owner> + <summary> + Records once an hour once the SavedTabGroupKeyedService is instantiated. + Tracks the number of tabs in an unsaved TabGroup. + </summary> +</histogram> + <histogram name="TabGroups.UserCustomizedGroupCountPerLoad" units="groups" expires_after="2023-09-03"> <owner>dpenning@chromium.org</owner>
diff --git a/tools/origin_trials/generate_token.py b/tools/origin_trials/generate_token.py index 61513a4a..cb488c1 100755 --- a/tools/origin_trials/generate_token.py +++ b/tools/origin_trials/generate_token.py
@@ -8,8 +8,8 @@ usage: generate_token.py [-h] [--key-file KEY_FILE] [--expire-days EXPIRE_DAYS | --expire-timestamp EXPIRE_TIMESTAMP] - [--is_subdomain | --no-subdomain] - [--is_third-party | --no-third-party] + [--is-subdomain | --no-subdomain] + [--is-third-party | --no-third-party] [--usage-restriction USAGE_RESTRICTION] --version=VERSION origin trial_name
diff --git a/ui/accessibility/test_ax_tree_update_json_reader.h b/ui/accessibility/test_ax_tree_update_json_reader.h index e4f00d1..d4298fcbb 100644 --- a/ui/accessibility/test_ax_tree_update_json_reader.h +++ b/ui/accessibility/test_ax_tree_update_json_reader.h
@@ -18,7 +18,7 @@ // NOTE: This parser is not complete and only processes the required tags for // the existing tests. // |role_conversions| is a map of role strings in the JSON file to Chrome roles. -// TODO(https://crbug.com/1278249): Drop |role_conversions| once Chrome roles +// TODO(https://crbug.com/1341655): Drop |role_conversions| once Chrome roles // are added to the JSON file. AXTreeUpdate AXTreeUpdateFromJSON( const base::Value& json,
diff --git a/ui/android/java/src/org/chromium/ui/base/UiAndroidFeatureList.java b/ui/android/java/src/org/chromium/ui/base/UiAndroidFeatureList.java index 15732b1..b53c05df 100644 --- a/ui/android/java/src/org/chromium/ui/base/UiAndroidFeatureList.java +++ b/ui/android/java/src/org/chromium/ui/base/UiAndroidFeatureList.java
@@ -6,13 +6,11 @@ import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; /** * Java accessor for ui/android/ui_android_feature_list.cc state */ @JNINamespace("ui") -@MainDex public class UiAndroidFeatureList { // Do not instantiate this class private UiAndroidFeatureList() {}
diff --git a/ui/android/java/src/org/chromium/ui/display/DisplayAndroidManager.java b/ui/android/java/src/org/chromium/ui/display/DisplayAndroidManager.java index 73a38ea8..f1773b73 100644 --- a/ui/android/java/src/org/chromium/ui/display/DisplayAndroidManager.java +++ b/ui/android/java/src/org/chromium/ui/display/DisplayAndroidManager.java
@@ -21,13 +21,11 @@ import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; import org.chromium.base.compat.ApiHelperForR; -import org.chromium.build.annotations.MainDex; /** * DisplayAndroidManager is a class that informs its observers Display changes. */ @JNINamespace("ui") -@MainDex public class DisplayAndroidManager { /** * DisplayListenerBackend is used to handle the actual listening of display changes. It handles
diff --git a/ui/android/java/src/org/chromium/ui/gl/ScopedJavaSurfaceControl.java b/ui/android/java/src/org/chromium/ui/gl/ScopedJavaSurfaceControl.java index 36e30fa..3355b02 100644 --- a/ui/android/java/src/org/chromium/ui/gl/ScopedJavaSurfaceControl.java +++ b/ui/android/java/src/org/chromium/ui/gl/ScopedJavaSurfaceControl.java
@@ -11,11 +11,9 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; -import org.chromium.build.annotations.MainDex; @RequiresApi(Build.VERSION_CODES.Q) @JNINamespace("gl") -@MainDex class ScopedJavaSurfaceControl { @CalledByNative private static void releaseSurfaceControl(SurfaceControl surfaceControl) {
diff --git a/ui/android/java/src/org/chromium/ui/gl/SurfaceTextureListener.java b/ui/android/java/src/org/chromium/ui/gl/SurfaceTextureListener.java index 9f50ca8..84fb3fd 100644 --- a/ui/android/java/src/org/chromium/ui/gl/SurfaceTextureListener.java +++ b/ui/android/java/src/org/chromium/ui/gl/SurfaceTextureListener.java
@@ -8,13 +8,11 @@ import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; /** * Listener to an android SurfaceTexture object for frame availability. */ @JNINamespace("gl") -@MainDex class SurfaceTextureListener implements SurfaceTexture.OnFrameAvailableListener { // Used to determine the class instance to dispatch the native call to. private final long mNativeSurfaceTextureListener;
diff --git a/ui/android/java/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java b/ui/android/java/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java index a8d28445..0e2e6b586 100644 --- a/ui/android/java/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java +++ b/ui/android/java/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java
@@ -9,14 +9,12 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; -import org.chromium.build.annotations.MainDex; /** * Wrapper class for the underlying platform's SurfaceTexture in order to * provide a stable JNI API. */ @JNINamespace("gl") -@MainDex class SurfaceTexturePlatformWrapper { private static final String TAG = "SurfaceTexturePlatformWrapper";
diff --git a/ui/android/java/src/org/chromium/ui/resources/ResourceManager.java b/ui/android/java/src/org/chromium/ui/resources/ResourceManager.java index 25574611..8420777 100644 --- a/ui/android/java/src/org/chromium/ui/resources/ResourceManager.java +++ b/ui/android/java/src/org/chromium/ui/resources/ResourceManager.java
@@ -12,7 +12,6 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.display.DisplayAndroid; import org.chromium.ui.resources.ResourceLoader.ResourceLoaderCallback; @@ -26,7 +25,6 @@ * This class does not hold any resource state, but passes it directly to native as they are loaded. */ @JNINamespace("ui") -@MainDex public class ResourceManager implements ResourceLoaderCallback { private final SparseArray<ResourceLoader> mResourceLoaders = new SparseArray<ResourceLoader>(); private final SparseArray<SparseArray<LayoutResource>> mLoadedResources =
diff --git a/ui/base/accelerators/accelerator.h b/ui/base/accelerators/accelerator.h index bcc4452..d5fe7062 100644 --- a/ui/base/accelerators/accelerator.h +++ b/ui/base/accelerators/accelerator.h
@@ -154,8 +154,8 @@ // Whether the accelerator is interrupted by a mouse press/release. This is // optionally used by AcceleratorController. Even this is set to true, the // accelerator may still be handled successfully. (Currently only - // TOGGLE_APP_LIST is disabled when mouse press/release occurs between search - // key down and up. See crbug.com/665897) + // AcceleratorAction::kToggleAppList is disabled when mouse press/release + // occurs between search key down and up. See crbug.com/665897) bool interrupted_by_mouse_event_; // The |source_device_id_| of the KeyEvent.
diff --git a/ui/chromeos/styles/cros_typography.json5 b/ui/chromeos/styles/cros_typography.json5 index f5f314f..d0525552 100644 --- a/ui/chromeos/styles/cros_typography.json5 +++ b/ui/chromeos/styles/cros_typography.json5
@@ -58,6 +58,12 @@ font_size: 13, font_weight: 500, line_height: 20, + }, + title_1: { + font_family: '$font_family_google_sans', + font_size: 16, + font_weight: 500, + line_height: 24, } } },
diff --git a/ui/color/BUILD.gn b/ui/color/BUILD.gn index 71e3aa2..e36b69c 100644 --- a/ui/color/BUILD.gn +++ b/ui/color/BUILD.gn
@@ -61,12 +61,13 @@ ] if (is_mac) { - frameworks = [ "AppKit.framework" ] sources += [ "mac/native_color_transform.mm", "mac/system_color_utils.h", "mac/system_color_utils.mm", ] + configs += [ "//build/config/compiler:enable_arc" ] + frameworks = [ "AppKit.framework" ] } } @@ -159,8 +160,9 @@ if (is_chromeos) { sources += [ "chromeos/native_color_mixers_chromeos.cc" ] } else if (is_mac) { - frameworks = [ "AppKit.framework" ] sources += [ "mac/native_color_mixers_mac.mm" ] + configs += [ "//build/config/compiler:enable_arc" ] + frameworks = [ "AppKit.framework" ] } else if (is_win) { sources += [ "win/native_color_mixers_win.cc" ] deps += [
diff --git a/ui/color/mac/native_color_mixers_mac.mm b/ui/color/mac/native_color_mixers_mac.mm index 4f9127a..be72694 100644 --- a/ui/color/mac/native_color_mixers_mac.mm +++ b/ui/color/mac/native_color_mixers_mac.mm
@@ -15,6 +15,10 @@ #include "ui/color/color_recipe.h" #include "ui/gfx/color_palette.h" +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + namespace ui { namespace {
diff --git a/ui/color/mac/native_color_transform.mm b/ui/color/mac/native_color_transform.mm index b77a298..207c80e 100644 --- a/ui/color/mac/native_color_transform.mm +++ b/ui/color/mac/native_color_transform.mm
@@ -12,6 +12,10 @@ #include "ui/color/mac/system_color_utils.h" #include "ui/gfx/color_utils.h" +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + namespace ui { ColorTransform ApplySystemControlTintIfNeeded() {
diff --git a/ui/color/mac/system_color_utils.mm b/ui/color/mac/system_color_utils.mm index 61c794d..d4264a1 100644 --- a/ui/color/mac/system_color_utils.mm +++ b/ui/color/mac/system_color_utils.mm
@@ -8,6 +8,10 @@ #include "ui/gfx/color_utils.h" +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + namespace { bool graphite_tint_test_override = false; } @@ -18,7 +22,7 @@ if (graphite_tint_test_override) return true; - return [NSColor currentControlTint] == NSGraphiteControlTint; + return NSColor.currentControlTint == NSGraphiteControlTint; } SkColor ColorToGrayscale(SkColor color) { @@ -35,4 +39,4 @@ graphite_tint_test_override = original_test_override_; } -} // ui +} // namespace ui
diff --git a/ui/events/ash/event_rewriter_ash.cc b/ui/events/ash/event_rewriter_ash.cc index 851301e..863b3ffe9 100644 --- a/ui/events/ash/event_rewriter_ash.cc +++ b/ui/events/ash/event_rewriter_ash.cc
@@ -704,6 +704,7 @@ } bool EventRewriterAsh::RewriteModifierKeys(const KeyEvent& key_event, + int device_id, MutableKeyState* state) { DCHECK(key_event.type() == ET_KEY_PRESSED || key_event.type() == ET_KEY_RELEASED); @@ -732,13 +733,13 @@ if (IsISOLevel5ShiftUsedByCurrentInputMethod()) { if (incoming.code == DomCode::CAPS_LOCK) { characteristic_flag = EF_ALTGR_DOWN | EF_MOD3_DOWN; - remapped_key = GetRemappedKey( - last_keyboard_device_id_, mojom::ModifierKey::kCapsLock, - prefs::kLanguageRemapCapsLockKeyTo, delegate_); + remapped_key = + GetRemappedKey(device_id, mojom::ModifierKey::kCapsLock, + prefs::kLanguageRemapCapsLockKeyTo, delegate_); } else { characteristic_flag = EF_ALTGR_DOWN; - remapped_key = GetSearchRemappedKey( - delegate_, last_keyboard_device_id_, *keyboard_capability_); + remapped_key = + GetSearchRemappedKey(delegate_, device_id, *keyboard_capability_); } } if (remapped_key && remapped_key->result.key_code == VKEY_CAPITAL) { @@ -783,15 +784,15 @@ } characteristic_flag = EF_CAPS_LOCK_ON; - remapped_key = GetRemappedKey( - last_keyboard_device_id_, mojom::ModifierKey::kCapsLock, - prefs::kLanguageRemapCapsLockKeyTo, delegate_); + remapped_key = + GetRemappedKey(device_id, mojom::ModifierKey::kCapsLock, + prefs::kLanguageRemapCapsLockKeyTo, delegate_); break; case DomCode::META_LEFT: case DomCode::META_RIGHT: characteristic_flag = EF_COMMAND_DOWN; - remapped_key = GetSearchRemappedKey(delegate_, last_keyboard_device_id_, - *keyboard_capability_); + remapped_key = + GetSearchRemappedKey(delegate_, device_id, *keyboard_capability_); // Default behavior is Super key, hence don't remap the event if the pref // is unavailable. break; @@ -799,31 +800,30 @@ case DomCode::CONTROL_RIGHT: characteristic_flag = EF_CONTROL_DOWN; remapped_key = - GetRemappedKey(last_keyboard_device_id_, mojom::ModifierKey::kControl, + GetRemappedKey(device_id, mojom::ModifierKey::kControl, prefs::kLanguageRemapControlKeyTo, delegate_); break; case DomCode::ALT_LEFT: case DomCode::ALT_RIGHT: // ALT key characteristic_flag = EF_ALT_DOWN; - remapped_key = - GetRemappedKey(last_keyboard_device_id_, mojom::ModifierKey::kAlt, - prefs::kLanguageRemapAltKeyTo, delegate_); + remapped_key = GetRemappedKey(device_id, mojom::ModifierKey::kAlt, + prefs::kLanguageRemapAltKeyTo, delegate_); break; case DomCode::ESCAPE: remapped_key = - GetRemappedKey(last_keyboard_device_id_, mojom::ModifierKey::kEscape, + GetRemappedKey(device_id, mojom::ModifierKey::kEscape, prefs::kLanguageRemapEscapeKeyTo, delegate_); break; case DomCode::BACKSPACE: - remapped_key = GetRemappedKey( - last_keyboard_device_id_, mojom::ModifierKey::kBackspace, - prefs::kLanguageRemapBackspaceKeyTo, delegate_); + remapped_key = + GetRemappedKey(device_id, mojom::ModifierKey::kBackspace, + prefs::kLanguageRemapBackspaceKeyTo, delegate_); break; case DomCode::LAUNCH_ASSISTANT: - remapped_key = GetRemappedKey( - last_keyboard_device_id_, mojom::ModifierKey::kAssistant, - prefs::kLanguageRemapAssistantKeyTo, delegate_); + remapped_key = + GetRemappedKey(device_id, mojom::ModifierKey::kAssistant, + prefs::kLanguageRemapAssistantKeyTo, delegate_); break; default: break; @@ -856,7 +856,7 @@ } // Next, remap modifier bits. - state->flags |= GetRemappedModifierMasks(key_event, incoming.flags); + state->flags |= GetRemappedModifierMasks(device_id, incoming.flags); // If the DomKey is not a modifier before remapping but is after, set the // modifier latches for the later non-modifier key's modifier states. @@ -903,18 +903,20 @@ return exact_event; } -void EventRewriterAsh::DeviceKeyPressedOrReleased(int device_id) { - KeyboardCapability::DeviceType type = - keyboard_capability_->GetDeviceType(device_id); - - // Ignore virtual Xorg keyboard (magic that generates key repeat - // events). Pretend that the previous real keyboard is the one that is still - // in use. - if (type == KeyboardCapability::DeviceType::kDeviceVirtualCoreKeyboard) { - return; +int EventRewriterAsh::GetKeyboardDeviceId(int keyboard_device_id, + int last_keyboard_device_id) const { + if (keyboard_device_id == ED_UNKNOWN_DEVICE) { + return ED_UNKNOWN_DEVICE; } - last_keyboard_device_id_ = device_id; + // Ignore virtual Xorg keyboard (magic that generates key repeat events). + // Pretend that the previous real keyboard is the one that is still in use. + if (keyboard_capability_->GetDeviceType(keyboard_device_id) == + KeyboardCapability::DeviceType::kDeviceVirtualCoreKeyboard) { + return last_keyboard_device_id; + } + + return keyboard_device_id; } bool EventRewriterAsh::IsHotrodRemote(int device_id) const { @@ -922,7 +924,7 @@ KeyboardCapability::DeviceType::kDeviceHotrodRemote; } -int EventRewriterAsh::GetRemappedModifierMasks(const Event& event, +int EventRewriterAsh::GetRemappedModifierMasks(int device_id, int original_flags) const { int unmodified_flags = original_flags; int rewritten_flags = pressed_modifier_latches_ | latched_modifier_latches_; @@ -934,8 +936,8 @@ } switch (kModifierRemappings[i].flag) { case EF_COMMAND_DOWN: - remapped_key = GetSearchRemappedKey(delegate_, last_keyboard_device_id_, - *keyboard_capability_); + remapped_key = + GetSearchRemappedKey(delegate_, device_id, *keyboard_capability_); break; case EF_MOD3_DOWN: // If EF_MOD3_DOWN is used by the current input method, leave it alone; @@ -959,9 +961,9 @@ break; } if (!remapped_key && kModifierRemappings[i].pref_name) { - remapped_key = GetRemappedKey( - last_keyboard_device_id_, kModifierRemappings[i].remap_to, - kModifierRemappings[i].pref_name, delegate_); + remapped_key = + GetRemappedKey(device_id, kModifierRemappings[i].remap_to, + kModifierRemappings[i].pref_name, delegate_); } if (remapped_key) { unmodified_flags &= ~kModifierRemappings[i].flag; @@ -1035,6 +1037,7 @@ } void EventRewriterAsh::RecordModifierKeyPressedAfterRemapping( + int device_id, DomCode dom_code) { const ModifierKeyUsageMapping* modifier_key_usage_mapping = nullptr; for (const auto& mapping : modifier_key_usage_mappings) { @@ -1048,7 +1051,7 @@ return; } - switch (keyboard_capability_->GetDeviceType(last_keyboard_device_id_)) { + switch (keyboard_capability_->GetDeviceType(device_id)) { case KeyboardCapability::DeviceType::kDeviceInternalKeyboard: UMA_HISTOGRAM_ENUMERATION( "ChromeOS.Inputs.Keyboard.RemappedModifierPressed.Internal", @@ -1078,6 +1081,7 @@ } void EventRewriterAsh::RecordModifierKeyPressedBeforeRemapping( + int device_id, DomCode dom_code) { const ModifierKeyUsageMapping* modifier_key_usage_mapping = nullptr; for (const auto& mapping : modifier_key_usage_mappings) { @@ -1091,7 +1095,7 @@ return; } - switch (keyboard_capability_->GetDeviceType(last_keyboard_device_id_)) { + switch (keyboard_capability_->GetDeviceType(device_id)) { case KeyboardCapability::DeviceType::kDeviceInternalKeyboard: UMA_HISTOGRAM_ENUMERATION( "ChromeOS.Inputs.Keyboard.ModifierPressed.Internal", @@ -1123,14 +1127,15 @@ EventRewriteStatus EventRewriterAsh::RewriteKeyEvent( const KeyEvent& key_event, std::unique_ptr<Event>* rewritten_event) { - if (key_event.source_device_id() != ED_UNKNOWN_DEVICE) { - DeviceKeyPressedOrReleased(key_event.source_device_id()); + int device_id = GetKeyboardDeviceId(key_event.source_device_id(), + last_keyboard_device_id_); + if (device_id != ED_UNKNOWN_DEVICE) { + last_keyboard_device_id_ = device_id; } // Drop repeated keys from Hotrod remote. if ((key_event.flags() & EF_IS_REPEAT) && - (key_event.type() == ET_KEY_PRESSED) && - IsHotrodRemote(last_keyboard_device_id_) && + (key_event.type() == ET_KEY_PRESSED) && IsHotrodRemote(device_id) && key_event.key_code() != VKEY_BACK) { return EVENT_REWRITE_DISCARD; } @@ -1139,7 +1144,7 @@ const bool should_record_modifier_key_press_metrics = !(key_event.flags() & EF_IS_REPEAT) && key_event.type() == ET_KEY_PRESSED; if (should_record_modifier_key_press_metrics) { - RecordModifierKeyPressedBeforeRemapping(key_event.code()); + RecordModifierKeyPressedBeforeRemapping(device_id, key_event.code()); } MutableKeyState state = {key_event.flags(), key_event.code(), @@ -1151,9 +1156,9 @@ // If RewriteModifierKeys() returns true there should be no more processing // done to the key event. It will only return true if the key event is // rewritten to ALTGR. A false return is not an error. - if (RewriteModifierKeys(key_event, &state)) { + if (RewriteModifierKeys(key_event, device_id, &state)) { if (should_record_modifier_key_press_metrics) { - RecordModifierKeyPressedAfterRemapping(state.code); + RecordModifierKeyPressedAfterRemapping(device_id, state.code); } // Early exit with completed event. BuildRewrittenKeyEvent(key_event, state, rewritten_event); @@ -1163,7 +1168,7 @@ } if (should_record_modifier_key_press_metrics) { - RecordModifierKeyPressedAfterRemapping(state.code); + RecordModifierKeyPressedAfterRemapping(device_id, state.code); } if (delegate_ && @@ -1209,7 +1214,7 @@ // thereafter. if (!is_sticky_key_extension_command && !(key_event.flags() & EF_FINAL)) { RewriteExtendedKeys(key_event, &state); - RewriteFunctionKeys(key_event, &state); + RewriteFunctionKeys(key_event, device_id, &state); } if ((key_event.flags() == state.flags) && (key_event.key_code() == state.key_code) && @@ -1529,6 +1534,7 @@ } void EventRewriterAsh::RewriteFunctionKeys(const KeyEvent& key_event, + int device_id, MutableKeyState* state) { CHECK(key_event.type() == ET_KEY_PRESSED || key_event.type() == ET_KEY_RELEASED); @@ -1549,24 +1555,24 @@ } KeyboardCapability::KeyboardTopRowLayout layout = - keyboard_capability_->GetTopRowLayout(key_event.source_device_id()); + keyboard_capability_->GetTopRowLayout(device_id); const bool search_is_pressed = (state->flags & EF_COMMAND_DOWN) != 0; - const bool flip_remapping = ShouldRewriteMetaTopRowKeyComboEvents( - delegate_, last_keyboard_device_id_) && - search_is_pressed; + const bool flip_remapping = + ShouldRewriteMetaTopRowKeyComboEvents(delegate_, device_id) && + search_is_pressed; if (layout == KeyboardCapability::KeyboardTopRowLayout::kKbdTopRowLayoutCustom) { - if (RewriteTopRowKeysForCustomLayout(key_event.source_device_id(), - key_event, search_is_pressed, state)) { + if (RewriteTopRowKeysForCustomLayout(key_event, device_id, + search_is_pressed, state)) { return; } } else if (layout == KeyboardCapability::KeyboardTopRowLayout:: kKbdTopRowLayoutWilco || layout == KeyboardCapability::KeyboardTopRowLayout:: kKbdTopRowLayoutDrallion) { - if (RewriteTopRowKeysForLayoutWilco(key_event, search_is_pressed, state, - layout)) { + if (RewriteTopRowKeysForLayoutWilco(key_event, device_id, search_is_pressed, + state, layout)) { return; } } else if ((state->key_code >= VKEY_F1) && (state->key_code <= VKEY_F12)) { @@ -1580,8 +1586,7 @@ // No System No Fn -> System // Yes Fn No Unchanged // Yes System No Unchanged - if (ForceTopRowAsFunctionKeys(key_event.source_device_id()) == - flip_remapping) { + if (ForceTopRowAsFunctionKeys(device_id) == flip_remapping) { // Rewrite the F1-F12 keys on a Chromebook keyboard to system keys. // This is the original Chrome OS layout. static const KeyboardRemapping kFkeysToSystemKeys1[] = { @@ -1740,7 +1745,9 @@ if (!delegate_) { return event.flags(); } - return GetRemappedModifierMasks(event, event.flags()); + + // Use the keyboard device_id for the last KeyEvent. + return GetRemappedModifierMasks(last_keyboard_device_id_, event.flags()); } int EventRewriterAsh::RewriteModifierClick(const MouseEvent& mouse_event, @@ -1938,8 +1945,8 @@ // No Yes No Action Unchanged // Yes Yes No Action Unchanged bool EventRewriterAsh::RewriteTopRowKeysForCustomLayout( - int device_id, const KeyEvent& key_event, + int device_id, bool search_is_pressed, EventRewriterAsh::MutableKeyState* state) { // Incoming function keys are never remapped. @@ -1947,9 +1954,9 @@ return true; } - const bool flip_remapping = ShouldRewriteMetaTopRowKeyComboEvents( - delegate_, last_keyboard_device_id_) && - search_is_pressed; + const bool flip_remapping = + ShouldRewriteMetaTopRowKeyComboEvents(delegate_, device_id) && + search_is_pressed; const auto* scan_code_vector_ptr = keyboard_capability_->GetTopRowScanCodes(device_id); @@ -1965,8 +1972,7 @@ // If the scan code appears in the top row mapping it is an action key. const bool is_action_key = (key_iter != scan_code_vector.end()); if (is_action_key) { - if (flip_remapping != - ForceTopRowAsFunctionKeys(key_event.source_device_id())) { + if (flip_remapping != ForceTopRowAsFunctionKeys(device_id)) { ApplyRemapping(kCustomTopRowLayoutFKeys[std::distance( scan_code_vector.begin(), key_iter)], state); @@ -2010,6 +2016,7 @@ // Yes Yes No Action Action -> Fn bool EventRewriterAsh::RewriteTopRowKeysForLayoutWilco( const KeyEvent& key_event, + int device_id, bool search_is_pressed, MutableKeyState* state, KeyboardCapability::KeyboardTopRowLayout layout) { @@ -2084,9 +2091,9 @@ {{EF_NONE, VKEY_PRIVACY_SCREEN_TOGGLE}, {EF_NONE, DomCode::F12, DomKey::F12, VKEY_F12}}, }; - const bool flip_remapping = ShouldRewriteMetaTopRowKeyComboEvents( - delegate_, last_keyboard_device_id_) && - search_is_pressed; + const bool flip_remapping = + ShouldRewriteMetaTopRowKeyComboEvents(delegate_, device_id) && + search_is_pressed; MutableKeyState incoming_with_command_removed_if_neccessary = *state; if (flip_remapping) { incoming_with_command_removed_if_neccessary.flags &= ~EF_COMMAND_DOWN; @@ -2118,8 +2125,7 @@ std::size(kActionToFnKeys))) { // Incoming key code is an action key. Check if it needs to be mapped back // to its corresponding function key. - if (flip_remapping != - ForceTopRowAsFunctionKeys(key_event.source_device_id())) { + if (flip_remapping != ForceTopRowAsFunctionKeys(device_id)) { // On Drallion, mirror mode toggle is on its own key so don't remap it. if (layout == KeyboardCapability::KeyboardTopRowLayout:: kKbdTopRowLayoutDrallion &&
diff --git a/ui/events/ash/event_rewriter_ash.h b/ui/events/ash/event_rewriter_ash.h index 6e089729..92738d7 100644 --- a/ui/events/ash/event_rewriter_ash.h +++ b/ui/events/ash/event_rewriter_ash.h
@@ -215,11 +215,20 @@ // Returns true when the input |state| has key |DomKey::ALT_GRAPH_LATCH| and // is remapped. - bool RewriteModifierKeys(const KeyEvent& event, MutableKeyState* state); - void RewriteFunctionKeys(const KeyEvent& event, MutableKeyState* state); + // TODO(crbug.com/1440147): Remove this function. + bool RewriteModifierKeys(const KeyEvent& event, MutableKeyState* state) { + return RewriteModifierKeys(event, last_keyboard_device_id_, state); + } + void RewriteFunctionKeys(const KeyEvent& event, MutableKeyState* state) { + return RewriteFunctionKeys(event, last_keyboard_device_id_, state); + } private: - void DeviceKeyPressedOrReleased(int device_id); + // Returns the fixed-up keyboard device id. + // |keyboard_device_id| should be KeyEvent::source_device_id() for the current + // event, and |last_keyboard_device_id| is the previous one. + int GetKeyboardDeviceId(int keyboard_device_id, + int last_keyboard_device_id) const; // By default the top row (F1-F12) keys are system keys for back, forward, // brightness, volume, etc. However, windows for v2 apps can optionally @@ -231,7 +240,7 @@ // Given modifier flags |original_flags|, returns the remapped modifiers // according to user preferences and/or event properties. - int GetRemappedModifierMasks(const Event& event, int original_flags) const; + int GetRemappedModifierMasks(int device_id, int original_flags) const; // Returns true if this event should be remapped to a right-click. // |matched_mask| will be set to the variant (Alt+Click or Search+Click) @@ -251,8 +260,8 @@ // Records when modifier keys are pressed to metrics for tracking usage of // various metrics before and after remapping. - void RecordModifierKeyPressedBeforeRemapping(DomCode dom_code); - void RecordModifierKeyPressedAfterRemapping(DomCode dom_code); + void RecordModifierKeyPressedBeforeRemapping(int device_id, DomCode dom_code); + void RecordModifierKeyPressedAfterRemapping(int device_id, DomCode dom_code); // Rewrite a particular kind of event. EventRewriteStatus RewriteKeyEvent(const KeyEvent& key_event, @@ -269,22 +278,28 @@ // Rewriter phases. These can inspect the original |event|, but operate using // the current |state|, which may have been modified by previous phases. + bool RewriteModifierKeys(const KeyEvent& event, + int device_id, + MutableKeyState* state); void RewriteNumPadKeys(const KeyEvent& event, MutableKeyState* state); + void RewriteFunctionKeys(const KeyEvent& event, + int device_id, + MutableKeyState* state); void RewriteExtendedKeys(const KeyEvent& event, MutableKeyState* state); int RewriteLocatedEvent(const Event& event); int RewriteModifierClick(const MouseEvent& event, int* flags); // Handle Function <-> Action key remapping for new CrOS keyboards that // support supplying a custom layout via sysfs. - bool RewriteTopRowKeysForCustomLayout( - int device_id, - const ui::KeyEvent& key_event, - bool search_is_pressed, - ui::EventRewriterAsh::MutableKeyState* state); + bool RewriteTopRowKeysForCustomLayout(const ui::KeyEvent& key_event, + int device_id, + bool search_is_pressed, + MutableKeyState* state); // Handle Fn/Action key remapping for Wilco keyboard layout. bool RewriteTopRowKeysForLayoutWilco( const KeyEvent& key_event, + int device_id, bool search_is_pressed, MutableKeyState* state, KeyboardCapability::KeyboardTopRowLayout layout);
diff --git a/ui/gfx/color_conversion_sk_filter_cache.cc b/ui/gfx/color_conversion_sk_filter_cache.cc index 43ba6c1..391ec51 100644 --- a/ui/gfx/color_conversion_sk_filter_cache.cc +++ b/ui/gfx/color_conversion_sk_filter_cache.cc
@@ -86,6 +86,20 @@ dst(dst), sdr_max_luminance_nits(sdr_max_luminance_nits) {} +ColorConversionSkFilterCache::Value::Value() = default; + +ColorConversionSkFilterCache::Value::Value(Value&& other) + : transform(std::move(other.transform)), effect(std::move(other.effect)) {} + +ColorConversionSkFilterCache::Value& +ColorConversionSkFilterCache::Value::operator=(Value&& other) { + transform = std::move(other.transform); + effect = std::move(other.effect); + return *this; +} + +ColorConversionSkFilterCache::Value::~Value() = default; + sk_sp<SkColorFilter> ColorConversionSkFilterCache::Get( const gfx::ColorSpace& src, const gfx::ColorSpace& dst, @@ -112,23 +126,27 @@ } const Key key(src, src_bit_depth.value_or(0), dst, sdr_max_luminance_nits); - sk_sp<SkRuntimeEffect>& effect = cache_[key]; + Value& value = cache_[key]; - gfx::ColorTransform::Options options; - options.tone_map_pq_and_hlg_to_dst = true; - if (src_bit_depth) - options.src_bit_depth = src_bit_depth.value(); + if (!value.effect) { + gfx::ColorTransform::Options options; + options.tone_map_pq_and_hlg_to_dst = true; + if (src_bit_depth) { + options.src_bit_depth = src_bit_depth.value(); + } + options.sdr_max_luminance_nits = sdr_max_luminance_nits; + value.transform = gfx::ColorTransform::NewColorTransform(src, dst, options); + value.effect = value.transform->GetSkRuntimeEffect(); + } + + gfx::ColorTransform::RuntimeOptions options; + options.offset = resource_offset; + options.multiplier = resource_multiplier; options.sdr_max_luminance_nits = sdr_max_luminance_nits; options.src_hdr_metadata = src_hdr_metadata; options.dst_max_luminance_relative = dst_max_luminance_relative; - if (!effect) { - std::unique_ptr<gfx::ColorTransform> transform = - gfx::ColorTransform::NewColorTransform(src, dst, options); - effect = transform->GetSkRuntimeEffect(); - } - - return effect->makeColorFilter(gfx::ColorTransform::GetSkShaderUniforms( - src, dst, resource_offset, resource_multiplier, options)); + return value.effect->makeColorFilter( + value.transform->GetSkShaderUniforms(options)); } sk_sp<SkImage> ColorConversionSkFilterCache::ApplyGainmap(
diff --git a/ui/gfx/color_conversion_sk_filter_cache.h b/ui/gfx/color_conversion_sk_filter_cache.h index 9f5184d..4ad672c 100644 --- a/ui/gfx/color_conversion_sk_filter_cache.h +++ b/ui/gfx/color_conversion_sk_filter_cache.h
@@ -21,6 +21,8 @@ namespace gfx { +class ColorTransform; + class COLOR_SPACE_EXPORT ColorConversionSkFilterCache { public: ColorConversionSkFilterCache(); @@ -90,8 +92,19 @@ bool operator!=(const Key& other) const; bool operator<(const Key& other) const; }; + struct Value { + Value(); + Value(const Value&) = delete; + Value(Value&&); + Value& operator=(const Value&) = delete; + Value& operator=(Value&&); + ~Value(); - base::flat_map<Key, sk_sp<SkRuntimeEffect>> cache_; + std::unique_ptr<ColorTransform> transform; + sk_sp<SkRuntimeEffect> effect; + }; + + base::flat_map<Key, Value> cache_; }; } // namespace gfx
diff --git a/ui/gfx/color_transform.cc b/ui/gfx/color_transform.cc index b5c4bbb..efef02b 100644 --- a/ui/gfx/color_transform.cc +++ b/ui/gfx/color_transform.cc
@@ -35,6 +35,15 @@ namespace { +struct SkShaderUniforms { + float offset = 0.f; + float multiplier = 0.f; + float pq_tonemap_a = 1.f; + float pq_tonemap_b = 1.f; + float hlg_ootf_gamma_minus_one = 0.f; + float hlg_dst_max_luminance_relative = 1.0f; +}; + void InitStringStream(std::stringstream* ss) { ss->imbue(std::locale::classic()); ss->precision(8); @@ -147,9 +156,10 @@ // Returns true if tone mapping will be a non-identity operation. Computes the // constants used by the tone mapping algorithm described in // https://colab.research.google.com/drive/1hI10nq6L6ru_UFvz7-f7xQaQp0qarz_K -bool ComputePQToneMapConstants(const gfx::ColorTransform::Options& options, - float& a, - float& b) { +bool ComputePQToneMapConstants( + const gfx::ColorTransform::RuntimeOptions& options, + float& a, + float& b) { const auto hdr_metadata = gfx::HDRMetadata::PopulateUnspecifiedWithDefaults( options.src_hdr_metadata); const float src_max_lum_nits = @@ -170,8 +180,9 @@ return false; } -void ComputeHLGToneMapConstants(const gfx::ColorTransform::Options& options, - float& gamma_minus_one) { +void ComputeHLGToneMapConstants( + const gfx::ColorTransform::RuntimeOptions& options, + float& gamma_minus_one) { const float dst_max_luminance_nits = options.sdr_max_luminance_nits * options.dst_max_luminance_relative; gamma_minus_one = @@ -207,8 +218,13 @@ // Return true if this is a null transform. virtual bool IsNull() { return false; } - virtual void Transform(ColorTransform::TriStim* color, size_t num) const = 0; + virtual void Transform( + ColorTransform::TriStim* color, + size_t num, + const ColorTransform::RuntimeOptions& options) const = 0; virtual void AppendSkShaderSource(std::stringstream* src) const = 0; + virtual void SetShaderUniforms(const ColorTransform::RuntimeOptions& options, + SkShaderUniforms* uniforms) const {} }; class ColorTransformInternal : public ColorTransform { @@ -222,11 +238,21 @@ gfx::ColorSpace GetDstColorSpace() const override { return dst_; } void Transform(TriStim* colors, size_t num) const override { + const ColorTransform::RuntimeOptions options; for (const auto& step : steps_) { - step->Transform(colors, num); + step->Transform(colors, num, options); + } + } + void Transform(TriStim* colors, + size_t num, + const ColorTransform::RuntimeOptions& options) const override { + for (const auto& step : steps_) { + step->Transform(colors, num, options); } } sk_sp<SkRuntimeEffect> GetSkRuntimeEffect() const override; + sk_sp<SkData> GetSkShaderUniforms( + const RuntimeOptions& options) const override; bool IsIdentity() const override { return steps_.empty(); } size_t NumberOfStepsForTesting() const override { return steps_.size(); } @@ -245,7 +271,10 @@ public: ColorTransformNull* GetNull() override { return this; } bool IsNull() override { return true; } - void Transform(ColorTransform::TriStim* color, size_t num) const override {} + void Transform(ColorTransform::TriStim* color, + size_t num, + const ColorTransform::RuntimeOptions& options) const override { + } void AppendSkShaderSource(std::stringstream* src) const override {} }; @@ -263,7 +292,9 @@ bool IsNull() override { return SkM44IsApproximatelyIdentity(matrix_); } - void Transform(ColorTransform::TriStim* colors, size_t num) const override { + void Transform(ColorTransform::TriStim* colors, + size_t num, + const ColorTransform::RuntimeOptions& options) const override { for (size_t i = 0; i < num; i++) { auto& color = colors[i]; SkV4 mapped = matrix_.map(color.x(), color.y(), color.z(), 1); @@ -306,7 +337,9 @@ explicit ColorTransformPerChannelTransferFn(bool extended) : extended_(extended) {} - void Transform(ColorTransform::TriStim* colors, size_t num) const override { + void Transform(ColorTransform::TriStim* colors, + size_t num, + const ColorTransform::RuntimeOptions& options) const override { for (size_t i = 0; i < num; i++) { ColorTransform::TriStim& c = colors[i]; if (extended_) { @@ -841,7 +874,9 @@ // the U and V values. class ColorTransformFromBT2020CL : public ColorTransformStep { public: - void Transform(ColorTransform::TriStim* YUV, size_t num) const override { + void Transform(ColorTransform::TriStim* YUV, + size_t num, + const ColorTransform::RuntimeOptions& options) const override { for (size_t i = 0; i < num; i++) { float Y = YUV[i].x(); float U = YUV[i].y() - 0.5; @@ -870,10 +905,7 @@ // Apply the HLG OOTF for a specified maximum luminance. class ColorTransformHLGOOTF : public ColorTransformStep { public: - explicit ColorTransformHLGOOTF(float gamma_minus_one, - float dst_max_luminance_relative) - : gamma_minus_one_(gamma_minus_one), - dst_max_luminance_relative_(dst_max_luminance_relative) {} + ColorTransformHLGOOTF() = default; // The luminance vector in linear space. static constexpr float kLr = 0.2627; @@ -881,13 +913,19 @@ static constexpr float kLb = 0.0593; // ColorTransformStep implementation: - void Transform(ColorTransform::TriStim* color, size_t num) const override { + void Transform(ColorTransform::TriStim* color, + size_t num, + const ColorTransform::RuntimeOptions& options) const override { + const float dst_max_luminance_relative = options.dst_max_luminance_relative; + float gamma_minus_one = 0.f; + ComputeHLGToneMapConstants(options, gamma_minus_one); + for (size_t i = 0; i < num; i++) { float L = kLr * color[i].x() + kLg * color[i].y() + kLb * color[i].z(); if (L > 0.f) { - color[i].Scale(powf(L, gamma_minus_one_)); + color[i].Scale(powf(L, gamma_minus_one)); // Scale the result to the full HDR range. - color[i].Scale(dst_max_luminance_relative_); + color[i].Scale(dst_max_luminance_relative); } } } @@ -902,18 +940,19 @@ << " }\n" << "}\n"; } - - private: - // The gamma parameter for the power function specified in Rec 2100. - const float gamma_minus_one_; - const float dst_max_luminance_relative_; + void SetShaderUniforms(const ColorTransform::RuntimeOptions& options, + SkShaderUniforms* uniforms) const override { + uniforms->hlg_dst_max_luminance_relative = + options.dst_max_luminance_relative; + ComputeHLGToneMapConstants(options, uniforms->hlg_ootf_gamma_minus_one); + } }; // Scale the color such that the luminance `input_max_value` maps to // `output_max_value`. class ColorTransformToneMapInRec2020Linear : public ColorTransformStep { public: - ColorTransformToneMapInRec2020Linear(float a, float b) : a_(a), b_(b) {} + ColorTransformToneMapInRec2020Linear() = default; // The luminance vector in linear space. static constexpr float kLr = 0.2627; @@ -921,11 +960,17 @@ static constexpr float kLb = 0.0593; // ColorTransformStep implementation: - void Transform(ColorTransform::TriStim* color, size_t num) const override { + void Transform(ColorTransform::TriStim* color, + size_t num, + const ColorTransform::RuntimeOptions& options) const override { + float a = 0.f; + float b = 0.f; + ComputePQToneMapConstants(options, a, b); + for (size_t i = 0; i < num; i++) { float L = kLr * color[i].x() + kLg * color[i].y() + kLb * color[i].z(); if (L > 0.f) - color[i].Scale((1.f + a_ * L) / (1.f + b_ * L)); + color[i].Scale((1.f + a * L) / (1.f + b * L)); } } void AppendSkShaderSource(std::stringstream* src) const override { @@ -934,16 +979,16 @@ << ", 0.0);\n" << " half L = dot(color, luma_vec);\n" << " if (L > 0.0) {\n" - << " color.rgb *= (1.0 + pq_tonemap_a *L) / \n" - << " (1.0 + pq_tonemap_b *L);\n" + << " color.rgb *= (1.0 + pq_tonemap_a * L) / \n" + << " (1.0 + pq_tonemap_b * L);\n" << " }\n" << "}\n"; } - - private: - // Constants derived from `input_max_value` and `output_max_value`. - const float a_; - const float b_; + void SetShaderUniforms(const ColorTransform::RuntimeOptions& options, + SkShaderUniforms* uniforms) const override { + ComputePQToneMapConstants(options, uniforms->pq_tonemap_a, + uniforms->pq_tonemap_b); + } }; void ColorTransformInternal::AppendColorSpaceToColorSpaceTransform( @@ -1027,23 +1072,17 @@ switch (src.GetTransferID()) { case ColorSpace::TransferID::HLG: { // Apply the HLG OOTF for the specified maximum luminance. - float gamma_minus_one = 0.f; - ComputeHLGToneMapConstants(options, gamma_minus_one); - steps_.push_back(std::make_unique<ColorTransformHLGOOTF>( - gamma_minus_one, options.dst_max_luminance_relative)); + steps_.push_back(std::make_unique<ColorTransformHLGOOTF>()); break; } case ColorSpace::TransferID::PQ: { - float a = 0.f; - float b = 0.f; - ComputePQToneMapConstants(options, a, b); const ColorSpace rec2020_linear( ColorSpace::PrimaryID::BT2020, ColorSpace::TransferID::LINEAR, ColorSpace::MatrixID::RGB, ColorSpace::RangeID::FULL); steps_.push_back(std::make_unique<ColorTransformMatrix>( Invert(rec2020_linear.GetPrimaryMatrix()))); steps_.push_back( - std::make_unique<ColorTransformToneMapInRec2020Linear>(a, b)); + std::make_unique<ColorTransformToneMapInRec2020Linear>()); steps_.push_back(std::make_unique<ColorTransformMatrix>( rec2020_linear.GetPrimaryMatrix())); break; @@ -1165,34 +1204,13 @@ return result.effect; } -struct SkShaderUniforms { - float offset = 0.f; - float multiplier = 0.f; - float pq_tonemap_a = 1.f; - float pq_tonemap_b = 1.f; - float hlg_ootf_gamma_minus_one = 0.f; - float hlg_dst_max_luminance_relative = 1.0f; -}; - -// static -sk_sp<SkData> ColorTransform::GetSkShaderUniforms(const ColorSpace& src, - const ColorSpace& dst, - float offset, - float multiplier, - const Options& options) { +sk_sp<SkData> ColorTransformInternal::GetSkShaderUniforms( + const RuntimeOptions& options) const { SkShaderUniforms data; - data.offset = offset; - data.multiplier = multiplier; - data.hlg_dst_max_luminance_relative = options.dst_max_luminance_relative; - switch (src.GetTransferID()) { - case ColorSpace::TransferID::PQ: - ComputePQToneMapConstants(options, data.pq_tonemap_a, data.pq_tonemap_b); - break; - case ColorSpace::TransferID::HLG: - ComputeHLGToneMapConstants(options, data.hlg_ootf_gamma_minus_one); - break; - default: - break; + data.offset = options.offset; + data.multiplier = options.multiplier; + for (const auto& step : steps_) { + step->SetShaderUniforms(options, &data); } return SkData::MakeWithCopy(&data, sizeof(data)); }
diff --git a/ui/gfx/color_transform.h b/ui/gfx/color_transform.h index 88c4b4e..dddad7c 100644 --- a/ui/gfx/color_transform.h +++ b/ui/gfx/color_transform.h
@@ -20,6 +20,8 @@ class COLOR_SPACE_EXPORT ColorTransform { public: + // Parameters that must be specified at creation time. Changing these + // parameters will result in an entirely different SkShader. struct Options { // Used in testing to verify that optimizations have no effect. bool disable_optimizations = false; @@ -28,13 +30,23 @@ uint32_t src_bit_depth = kDefaultBitDepth; uint32_t dst_bit_depth = kDefaultBitDepth; - // If set to true, then map PQ and HLG imputs such that their maximum + // If set to true, then map PQ and HLG inputs such that their maximum // luminance will be `dst_max_luminance_relative`. bool tone_map_pq_and_hlg_to_dst = false; - // Used for tone mapping and for interpreting color spaces whose - // definition depends on an SDR white point. - // TODO(https://crbug.com/1286082): Use this value in the transform. + // Used for interpreting color spaces whose definition depends on an SDR + // white point. + float sdr_max_luminance_nits = ColorSpace::kDefaultSDRWhiteLevel; + }; + + // Parameters that may be specified when the transform is applied. Changing + // these parameters will change the uniforms for a single SkShader. + struct RuntimeOptions { + // Offset and multiplier used when sampling textures; + float offset = 0.f; + float multiplier = 1.f; + + // Used for tone mapping. float sdr_max_luminance_nits = ColorSpace::kDefaultSDRWhiteLevel; // Used for tone mapping PQ sources. @@ -42,8 +54,6 @@ // The maximum luminance value for the destination, as a multiple of // `sdr_max_luminance_nits` (so this is 1 for SDR displays). - // TODO(https://crbug.com/1286076): Use this value for transforming - // PQ and HLG content. float dst_max_luminance_relative = 1.f; }; @@ -62,16 +72,16 @@ // Perform transformation of colors, |colors| is both input and output. virtual void Transform(TriStim* colors, size_t num) const = 0; + virtual void Transform(TriStim* colors, + size_t num, + const RuntimeOptions& options) const = 0; // Return an SkRuntimeEffect to perform this transform. virtual sk_sp<SkRuntimeEffect> GetSkRuntimeEffect() const = 0; // Return the uniforms used by the above SkRuntimeEffect. - static sk_sp<SkData> GetSkShaderUniforms(const ColorSpace& src, - const ColorSpace& dst, - float offset, - float multiplier, - const Options& options); + virtual sk_sp<SkData> GetSkShaderUniforms( + const RuntimeOptions& options) const = 0; // Returns true if this transform is the identity. virtual bool IsIdentity() const = 0;
diff --git a/ui/gfx/color_transform_unittest.cc b/ui/gfx/color_transform_unittest.cc index 739ca14..9b9ad9a 100644 --- a/ui/gfx/color_transform_unittest.cc +++ b/ui/gfx/color_transform_unittest.cc
@@ -623,6 +623,123 @@ EXPECT_NEAR(val_scaled.z() / val_unscaled.z(), scale, kMathEpsilon); } +TEST(ColorSpaceTest, ScrgbLinear80Nits) { + ColorSpace dst(ColorSpace::PrimaryID::BT2020, + ColorSpace::TransferID::SCRGB_LINEAR_80_NITS); + + // PQ's 80 nits maps to 80 nits. + { + ColorSpace src_pq = ColorSpace::CreateHDR10(); + + ColorTransform::Options options; + ColorTransform::RuntimeOptions runtime_options; + + std::unique_ptr<ColorTransform> xform( + ColorTransform::NewColorTransform(src_pq, dst, options)); + + constexpr float kPq80Nits = 0.4858567653886785f; + ColorTransform::TriStim val(kPq80Nits, kPq80Nits, kPq80Nits); + xform->Transform(&val, 1, runtime_options); + EXPECT_NEAR(val.x(), 1.f, kMathEpsilon); + } + + // SDR white is scaled by 80 nits. + { + constexpr float kSdrWhite = 300.f; + + ColorSpace src_srgb = ColorSpace::CreateSRGB(); + + ColorTransform::Options options; + ColorTransform::RuntimeOptions runtime_options; + options.sdr_max_luminance_nits = kSdrWhite; + runtime_options.sdr_max_luminance_nits = kSdrWhite; + + std::unique_ptr<ColorTransform> xform( + ColorTransform::NewColorTransform(src_srgb, dst, options)); + + ColorTransform::TriStim val(1.f, 1.f, 1.f); + xform->Transform(&val, 1, runtime_options); + EXPECT_NEAR(val.x(), kSdrWhite / 80.f, kMathEpsilon); + } + + // PQ's maximum maps to the maximum value when tonemapped. + { + constexpr float kSdrWhite = 150.f; + constexpr float kDstMaxLumRel = 2.f; + + ColorSpace src_pq = ColorSpace::CreateHDR10(); + + ColorTransform::Options options; + ColorTransform::RuntimeOptions runtime_options; + options.tone_map_pq_and_hlg_to_dst = true; + options.sdr_max_luminance_nits = kSdrWhite; + runtime_options.sdr_max_luminance_nits = kSdrWhite; + runtime_options.dst_max_luminance_relative = kDstMaxLumRel; + + std::unique_ptr<ColorTransform> xform( + ColorTransform::NewColorTransform(src_pq, dst, options)); + + ColorTransform::TriStim val(1.f, 1.f, 1.f); + xform->Transform(&val, 1, runtime_options); + EXPECT_NEAR(val.x(), kDstMaxLumRel * kSdrWhite / 80.f, kMathEpsilon); + } + + // HLG's maximum value will be 12 times 203 nits. + // TODO(https://crbug.com/1442884): This is not an appropriate value. + { + constexpr float kSdrWhite = 300.f; + + ColorSpace src_hlg(ColorSpace::PrimaryID::BT2020, + ColorSpace::TransferID::HLG); + + ColorTransform::Options options; + ColorTransform::RuntimeOptions runtime_options; + options.sdr_max_luminance_nits = kSdrWhite; + runtime_options.sdr_max_luminance_nits = kSdrWhite; + + std::unique_ptr<ColorTransform> xform( + ColorTransform::NewColorTransform(src_hlg, dst, options)); + + ColorTransform::TriStim val(1.f, 1.f, 1.f); + xform->Transform(&val, 1, runtime_options); + EXPECT_NEAR(val.x(), 12.f * ColorSpace::kDefaultSDRWhiteLevel / 80.f, + kMathEpsilon); + } + + // HLG's maximum maps to the maximum value when tonemapped. + { + constexpr float kSdrWhite = 200.f; + constexpr float kDstMaxLumRel = 2.f; + constexpr float kMathLargeEpsilon = 0.025f; + + ColorSpace src_hlg(ColorSpace::PrimaryID::BT2020, + ColorSpace::TransferID::HLG); + + ColorTransform::Options options; + ColorTransform::RuntimeOptions runtime_options; + options.tone_map_pq_and_hlg_to_dst = true; + options.sdr_max_luminance_nits = kSdrWhite; + runtime_options.sdr_max_luminance_nits = kSdrWhite; + runtime_options.dst_max_luminance_relative = kDstMaxLumRel; + + std::unique_ptr<ColorTransform> xform( + ColorTransform::NewColorTransform(src_hlg, dst, options)); + + { + ColorTransform::TriStim val(1.f, 1.f, 1.f); + xform->Transform(&val, 1, runtime_options); + EXPECT_NEAR(val.x(), kDstMaxLumRel * kSdrWhite / 80.f, kMathLargeEpsilon); + } + + // Test a non-maximum value which is affected by the OOTF curve. + { + ColorTransform::TriStim val(0.5f, 0.5f, 0.5f); + xform->Transform(&val, 1, runtime_options); + EXPECT_NEAR(val.x(), 0.38373923301696777f, kMathLargeEpsilon); + } + } +} + TEST(ColorSpaceTest, PQSDRWhiteLevel) { // The PQ function maps |pq_encoded_nits| to |nits|. We mangle it a bit with // the SDR white level.
diff --git a/ui/message_center/BUILD.gn b/ui/message_center/BUILD.gn index dae2be0c..8eab55f 100644 --- a/ui/message_center/BUILD.gn +++ b/ui/message_center/BUILD.gn
@@ -137,6 +137,7 @@ "//ui/views", ] if (is_mac) { + configs += [ "//build/config/compiler:enable_arc" ] frameworks = [ "Foundation.framework" ] } if (is_chromeos) {
diff --git a/ui/message_center/views/message_popup_view_mac.mm b/ui/message_center/views/message_popup_view_mac.mm index a8a447e..7b2b6f4 100644 --- a/ui/message_center/views/message_popup_view_mac.mm +++ b/ui/message_center/views/message_popup_view_mac.mm
@@ -8,12 +8,17 @@ #include "ui/views/widget/widget.h" +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + namespace message_center { float MessagePopupView::GetOpacity() const { - if (!IsWidgetValid()) + if (!IsWidgetValid()) { return 0.f; - return [GetWidget()->GetNativeWindow().GetNativeNSWindow() alphaValue]; + } + return GetWidget()->GetNativeWindow().GetNativeNSWindow().alphaValue; } } // namespace message_center
diff --git a/ui/snapshot/BUILD.gn b/ui/snapshot/BUILD.gn index 34e4040..a6c710c8 100644 --- a/ui/snapshot/BUILD.gn +++ b/ui/snapshot/BUILD.gn
@@ -34,6 +34,10 @@ defines = [ "SNAPSHOT_IMPLEMENTATION" ] + if (is_apple) { + configs += [ "//build/config/compiler:enable_arc" ] + } + deps = [ ":snapshot_export", "//base", @@ -110,6 +114,10 @@ data_deps = [ "//testing/buildbot/filters:snapshot_unittests_filters" ] + if (is_apple) { + configs += [ "//build/config/compiler:enable_arc" ] + } + if (use_aura) { sources += [ "snapshot_aura_unittest.cc" ] deps += [
diff --git a/ui/snapshot/snapshot_ios.mm b/ui/snapshot/snapshot_ios.mm index c9fb310..49e830c4 100644 --- a/ui/snapshot/snapshot_ios.mm +++ b/ui/snapshot/snapshot_ios.mm
@@ -8,6 +8,10 @@ #include "ui/gfx/geometry/rect.h" #include "ui/gfx/image/image.h" +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + namespace ui { bool GrabViewSnapshot(gfx::NativeView view,
diff --git a/ui/snapshot/snapshot_mac.mm b/ui/snapshot/snapshot_mac.mm index eeb32148..5e2296b5 100644 --- a/ui/snapshot/snapshot_mac.mm +++ b/ui/snapshot/snapshot_mac.mm
@@ -12,19 +12,22 @@ #include "ui/gfx/geometry/rect.h" #include "ui/gfx/image/image.h" +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + namespace ui { bool GrabViewSnapshot(gfx::NativeView native_view, const gfx::Rect& snapshot_bounds, gfx::Image* image) { NSView* view = native_view.GetNativeNSView(); - NSWindow* window = [view window]; - NSScreen* screen = [[NSScreen screens] firstObject]; - gfx::Rect screen_bounds = gfx::Rect(NSRectToCGRect([screen frame])); - + NSWindow* window = view.window; + NSScreen* screen = NSScreen.screens.firstObject; + gfx::Rect screen_bounds = gfx::Rect(NSRectToCGRect(screen.frame)); // Get the view bounds relative to the screen - NSRect frame = [view convertRect:[view bounds] toView:nil]; + NSRect frame = [view convertRect:view.bounds toView:nil]; frame = [window convertRectToScreen:frame]; gfx::Rect view_bounds = gfx::Rect(NSRectToCGRect(frame)); @@ -41,17 +44,14 @@ DCHECK_LE(screen_snapshot_bounds.right(), view_bounds.right()); DCHECK_LE(screen_snapshot_bounds.bottom(), view_bounds.bottom()); - base::ScopedCFTypeRef<CGImageRef> windowSnapshot( - CGWindowListCreateImage(screen_snapshot_bounds.ToCGRect(), - kCGWindowListOptionIncludingWindow, - [window windowNumber], - kCGWindowImageBoundsIgnoreFraming)); + base::ScopedCFTypeRef<CGImageRef> windowSnapshot(CGWindowListCreateImage( + screen_snapshot_bounds.ToCGRect(), kCGWindowListOptionIncludingWindow, + window.windowNumber, kCGWindowImageBoundsIgnoreFraming)); if (CGImageGetWidth(windowSnapshot) <= 0) return false; - *image = - gfx::Image([[[NSImage alloc] initWithCGImage:windowSnapshot - size:NSZeroSize] autorelease]); + *image = gfx::Image([[NSImage alloc] initWithCGImage:windowSnapshot + size:NSZeroSize]); return true; } @@ -61,8 +61,7 @@ // Make sure to grab the "window frame" view so we get current tab + // tabstrip. NSWindow* window = native_window.GetNativeNSWindow(); - return GrabViewSnapshot([[window contentView] superview], snapshot_bounds, - image); + return GrabViewSnapshot(window.contentView.superview, snapshot_bounds, image); } void GrabWindowSnapshotAndScaleAsync( @@ -83,7 +82,7 @@ const gfx::Rect& source_rect, GrabWindowSnapshotAsyncCallback callback) { NSWindow* window = native_window.GetNativeNSWindow(); - return GrabViewSnapshotAsync([[window contentView] superview], source_rect, + return GrabViewSnapshotAsync(window.contentView.superview, source_rect, std::move(callback)); }
diff --git a/ui/snapshot/snapshot_mac_unittest.mm b/ui/snapshot/snapshot_mac_unittest.mm index d7b56a3..47dbe4b9 100644 --- a/ui/snapshot/snapshot_mac_unittest.mm +++ b/ui/snapshot/snapshot_mac_unittest.mm
@@ -9,7 +9,6 @@ #include <memory> #include "base/mac/mac_util.h" -#include "base/mac/scoped_nsobject.h" #include "base/test/task_environment.h" #include "testing/platform_test.h" #import "ui/base/test/cocoa_helper.h" @@ -17,6 +16,10 @@ #include "ui/gfx/geometry/rect.h" #include "ui/gfx/image/image.h" +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + namespace ui { namespace { @@ -43,12 +46,12 @@ const NSUInteger window_size = 400; NSRect frame = NSMakeRect(0, 0, window_size, window_size); NSWindow* window = test_window(); - base::scoped_nsobject<WindowedNSNotificationObserver> waiter( + WindowedNSNotificationObserver* waiter = [[WindowedNSNotificationObserver alloc] initForNotification:NSWindowDidUpdateNotification - object:window]); + object:window]; [window setFrame:frame display:false]; - [window setBackgroundColor:NSColor.blueColor]; + window.backgroundColor = NSColor.blueColor; [window makeKeyAndOrderFront:nil]; [window display]; EXPECT_TRUE([waiter wait]);
diff --git a/url/android/java/src/org/chromium/url/GURL.java b/url/android/java/src/org/chromium/url/GURL.java index 34bd924..0fdd7f6 100644 --- a/url/android/java/src/org/chromium/url/GURL.java +++ b/url/android/java/src/org/chromium/url/GURL.java
@@ -21,7 +21,6 @@ import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.task.PostTask; import org.chromium.base.task.TaskTraits; -import org.chromium.build.annotations.MainDex; import org.chromium.url.mojom.Url; import org.chromium.url.mojom.UrlConstants; @@ -39,7 +38,6 @@ * reconstruct a GURL in Java, allowing it to be much faster in the common case and easier to use. */ @JNINamespace("url") -@MainDex @DoNotMock("Create a real instance instead. For Robolectric, see JUnitTestGURLs.java") public class GURL { private static final String TAG = "GURL";
diff --git a/url/android/java/src/org/chromium/url/Parsed.java b/url/android/java/src/org/chromium/url/Parsed.java index ca41cfb..75d12cb9 100644 --- a/url/android/java/src/org/chromium/url/Parsed.java +++ b/url/android/java/src/org/chromium/url/Parsed.java
@@ -7,12 +7,10 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.build.annotations.MainDex; /** * A java wrapper for Parsed, GURL's internal parsed URI representation. */ -@MainDex @JNINamespace("url") /* package */ class Parsed { /* package */ final int mSchemeBegin;
diff --git a/weblayer/browser/browser_main_parts_impl.cc b/weblayer/browser/browser_main_parts_impl.cc index 6ca44fa..2d9cfef 100644 --- a/weblayer/browser/browser_main_parts_impl.cc +++ b/weblayer/browser/browser_main_parts_impl.cc
@@ -101,7 +101,8 @@ IDR_SUBRESOURCE_FILTER_UNINDEXED_RULESET_MANIFEST_JSON); auto ruleset_manifest = base::JSONReader::Read(ruleset_manifest_string); DCHECK(ruleset_manifest); - std::string* content_version = ruleset_manifest->FindStringKey("version"); + std::string* content_version = + ruleset_manifest->GetDict().FindString("version"); // Instruct the RulesetService to obtain the unindexed ruleset data from the // ResourceBundle and give it the version of that data.
diff --git a/weblayer/browser/subresource_filter_browsertest.cc b/weblayer/browser/subresource_filter_browsertest.cc index b8dce79..7b87e9a 100644 --- a/weblayer/browser/subresource_filter_browsertest.cc +++ b/weblayer/browser/subresource_filter_browsertest.cc
@@ -100,7 +100,7 @@ auto packaged_ruleset_manifest = base::JSONReader::Read(packaged_ruleset_manifest_string); std::string* packaged_content_version = - packaged_ruleset_manifest->FindStringKey("version"); + packaged_ruleset_manifest->GetDict().FindString("version"); EXPECT_EQ(most_recently_indexed_content_version, *packaged_content_version); }