diff --git a/DEPS b/DEPS index 961c2880..3107c2c 100644 --- a/DEPS +++ b/DEPS
@@ -304,7 +304,7 @@ # 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': 'a8b49a804a98e172dcf4289f081affe287b508f7', + 'skia_revision': '845f3b1f4a34382e831c1b07f264727b69edda60', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. @@ -312,7 +312,7 @@ # 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': 'f4e71351b3bf462ab58f3d698ae1ab1355eca736', + 'angle_revision': '108c0cefda0973dd004a71ac41bd583631724122', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -331,7 +331,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Fuchsia sdk # and whatever else without interference from each other. - 'fuchsia_version': 'version:12.20230315.2.1', + 'fuchsia_version': 'version:12.20230316.0.1', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling google-toolbox-for-mac # and whatever else without interference from each other. @@ -391,7 +391,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': '8c409dff40103fb74f44ae35282b4ff53a6ff8c0', + 'devtools_frontend_revision': '7b49754df676955e8113616da59e8c33af4708cf', # 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. @@ -431,11 +431,11 @@ # 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': '81d11b3cf1d5d10427b3ee5ac08f3e209d37a97f', + 'dawn_revision': '26e2ac363b28fa2e4a5480dc2c6fcfa26d4f10ff', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'quiche_revision': '43b21e0a3d87ec56531f08c2013bf538411a352b', + 'quiche_revision': '7e67f01d296f9a57f63ca41af665f7b354078772', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ios_webkit # and whatever else without interference from each other. @@ -779,7 +779,7 @@ 'src/clank': { 'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' + - '33905fa4b4a4173c7d8213f7e828fd4ea2b40f55', + '8ba0a335991d3abde7d093e36936782837c5881d', 'condition': 'checkout_android and checkout_src_internal', }, @@ -968,7 +968,7 @@ 'packages': [ { 'package': 'chromium/third_party/androidx', - 'version': 'UjyqFgfjWns1GoUnCZ1Tzij-Q8mSQI5jF-KKnMDfWlgC', + 'version': 'e9eKZvUOc4VSe98_QZw5MGh7kRki3usVeIBkxstBRtYC', }, ], 'condition': 'checkout_android', @@ -1225,7 +1225,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' + '@' + 'ef6c0a3496908ca01866aa78161b7d2f140aea02', + 'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + '07cea9e5724c6f6b2a5aaf7acf0b3f8a46807fb4', 'condition': 'checkout_src_internal', }, @@ -1553,7 +1553,7 @@ Var('chromium_git') + '/webm/libwebp.git' + '@' + 'fd7b5d48464475408d32d2611bdb6947d4246b97', 'src/third_party/libyuv': - Var('chromium_git') + '/libyuv/libyuv.git' + '@' + '76468711d5c8302431a900499ff73d34fdfc146b', + Var('chromium_git') + '/libyuv/libyuv.git' + '@' + '3f219a3501e555ffef7aeaa90abbaf90a90d2258', 'src/third_party/lighttpd': { 'url': Var('chromium_git') + '/chromium/deps/lighttpd.git' + '@' + Var('lighttpd_revision'), @@ -1691,7 +1691,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + '6cd6c28bb7077172f40adc45c63cd884da03abb0', + Var('android_git') + '/platform/external/perfetto.git' + '@' + '97e3427eef4fcbd27f4863061620af93cbfff9bb', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1836,7 +1836,7 @@ 'dep_type': 'cipd', }, - 'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@b139bd7b805459e4303407fb6c7d1820392620d7', + 'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@7248c680579d80c47e5c3783b3c356b2d000b39a', 'src/third_party/vulkan_memory_allocator': Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git' + '@' + 'ebe84bec02c041d28f902da0214bf442743fc907', @@ -1876,7 +1876,7 @@ Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '25861c8b4eb4b358a7be7bfdb427f814e382f9b3', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + 'ebce84a5020b10cc4f15566d1d1a1013d8e84224', + Var('webrtc_git') + '/src.git' + '@' + 'b3e59696585d222a53c1c59292eb92a66e604643', # 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. @@ -1953,7 +1953,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': Var('chrome_git') + '/chrome/src-internal.git@80ef7d793ac432c9e32669e03f9f07542c7cd21e', + 'url': Var('chrome_git') + '/chrome/src-internal.git@b4e092549c6c8805b98e4e0a1b4b77a76904d735', 'condition': 'checkout_src_internal', },
diff --git a/PRESUBMIT.py b/PRESUBMIT.py index fd9de82..3684c4bb 100644 --- a/PRESUBMIT.py +++ b/PRESUBMIT.py
@@ -457,6 +457,7 @@ True, excluded_paths=( 'ios/chrome/browser/ui/icons/symbol_helpers.mm', + 'ios/chrome/search_widget_extension/', ), ), )
diff --git a/android_webview/browser/variations/aw_variations_service_client.cc b/android_webview/browser/variations/aw_variations_service_client.cc index 646cc5d5..e589dca5 100644 --- a/android_webview/browser/variations/aw_variations_service_client.cc +++ b/android_webview/browser/variations/aw_variations_service_client.cc
@@ -43,4 +43,9 @@ return false; } +// WebView doesn't support Profiles (or user signin / sync) and therefore there +// is nothing to do here. +void AwVariationsServiceClient::RemoveGoogleGroupsFromPrefsForDeletedProfiles( + PrefService* local_state) {} + } // namespace android_webview
diff --git a/android_webview/browser/variations/aw_variations_service_client.h b/android_webview/browser/variations/aw_variations_service_client.h index f37340aaf..5fcec35 100644 --- a/android_webview/browser/variations/aw_variations_service_client.h +++ b/android_webview/browser/variations/aw_variations_service_client.h
@@ -35,6 +35,8 @@ version_info::Channel GetChannel() override; bool OverridesRestrictParameter(std::string* parameter) override; bool IsEnterprise() override; + void RemoveGoogleGroupsFromPrefsForDeletedProfiles( + PrefService* local_state) override; }; } // namespace android_webview
diff --git a/ash/components/arc/arc_features.cc b/ash/components/arc/arc_features.cc index 9e541cb..2c211a2 100644 --- a/ash/components/arc/arc_features.cc +++ b/ash/components/arc/arc_features.cc
@@ -149,6 +149,15 @@ const base::FeatureParam<int> kGuestZramSwappiness{&kGuestZram, "swappiness", 0}; +// Controls whether to do per-process reclaim from the ARCVM guest. +const base::FeatureParam<bool> kGuestReclaimEnabled{ + &kGuestZram, "guest_reclaim_enabled", false}; + +// Controls whether only anonymous pages are reclaimed from the ARCVM guest. +// Ignored when the "guest_reclaim_enabled" param is false. +const base::FeatureParam<bool> kGuestReclaimOnlyAnonymous{ + &kGuestZram, "guest_reclaim_only_anonymous", false}; + // Enables/disables ghost when user launch ARC app from shelf/launcher when // App already ready for launch. BASE_FEATURE(kInstantResponseWindowOpen,
diff --git a/ash/components/arc/arc_features.h b/ash/components/arc/arc_features.h index 87fb5515..33772df 100644 --- a/ash/components/arc/arc_features.h +++ b/ash/components/arc/arc_features.h
@@ -38,6 +38,8 @@ BASE_DECLARE_FEATURE(kGuestZram); extern const base::FeatureParam<int> kGuestZramSize; extern const base::FeatureParam<int> kGuestZramSwappiness; +extern const base::FeatureParam<bool> kGuestReclaimEnabled; +extern const base::FeatureParam<bool> kGuestReclaimOnlyAnonymous; BASE_DECLARE_FEATURE(kInstantResponseWindowOpen); BASE_DECLARE_FEATURE(kLockGuestMemory); BASE_DECLARE_FEATURE(kLvmApplicationContainers);
diff --git a/ash/components/arc/session/arc_vm_data_migration_status.h b/ash/components/arc/session/arc_vm_data_migration_status.h index 4500cf2..42715cb 100644 --- a/ash/components/arc/session/arc_vm_data_migration_status.h +++ b/ash/components/arc/session/arc_vm_data_migration_status.h
@@ -9,6 +9,15 @@ namespace arc { +constexpr char kArcVmDataMigrationStatusOnArcStartedHistogramName[] = + "Arc.VmDataMigration.MigrationStatusOnArcStarted"; + +constexpr char kArcVmDataMigrationFinishReasonHistogramName[] = + "Arc.VmDataMigration.MigrationFinishReason"; + +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused. Please keep in sync with +// "ArcVmDataMigrationStatus" in tools/metrics/histograms/enums.xml. enum class ArcVmDataMigrationStatus { // The user has not been notified of the /data migration. kUnnotified = 0, @@ -22,6 +31,20 @@ kStarted = 3, // The migration has been completed and not needed anymore. kFinished = 4, + kMaxValue = kFinished, +}; + +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused. Please keep in sync with +// "ArcVmDataMigrationFinishReason" in tools/metrics/histograms/enums.xml. +enum class ArcVmDataMigrationFinishReason { + // There is no /data to migrate, so virtio-blk can be just enabled. + kNoDataToMigrate = 0, + // Migration finishes successfully. + kMigrationSuccess = 1, + // Migration fails, resulting in enabling virtio-blk on wiped /data. + kMigrationFailure = 2, + kMaxValue = kMigrationFailure, }; std::ostream& operator<<(std::ostream& os, ArcVmDataMigrationStatus status);
diff --git a/ash/constants/ash_features.cc b/ash/constants/ash_features.cc index a4cd78f..89fe1d8 100644 --- a/ash/constants/ash_features.cc +++ b/ash/constants/ash_features.cc
@@ -296,6 +296,11 @@ "CameraAppLowStorageWarning", base::FEATURE_ENABLED_BY_DEFAULT); +// Enables to allow time-lapse video recording in the camera app. +BASE_FEATURE(kCameraAppTimeLapse, + "CameraAppTimeLapse", + base::FEATURE_DISABLED_BY_DEFAULT); + // Controls whether the camera privacy switch toasts and notification should be // displayed. BASE_FEATURE(kCameraPrivacySwitchNotifications,
diff --git a/ash/constants/ash_features.h b/ash/constants/ash_features.h index 9e0323f3..4af5d01 100644 --- a/ash/constants/ash_features.h +++ b/ash/constants/ash_features.h
@@ -87,6 +87,7 @@ COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kCalendarJelly); COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kCameraAppLowStorageWarning); +COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kCameraAppTimeLapse); COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kCameraPrivacySwitchNotifications); COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kCaptivePortalErrorPage);
diff --git a/ash/public/cpp/app_list/app_list_metrics.h b/ash/public/cpp/app_list/app_list_metrics.h index d83b9c9..0a63160 100644 --- a/ash/public/cpp/app_list/app_list_metrics.h +++ b/ash/public/cpp/app_list/app_list_metrics.h
@@ -180,6 +180,8 @@ BRUSCHETTA_APP, // A System Info Answer Card Result. SYSTEM_INFO, + // A local image search result. + IMAGE_SEARCH, // Boundary is always last. SEARCH_RESULT_TYPE_BOUNDARY };
diff --git a/ash/quick_pair/fast_pair_handshake/fast_pair_encryption.cc b/ash/quick_pair/fast_pair_handshake/fast_pair_encryption.cc index 7f7e2b94..76ced7a 100644 --- a/ash/quick_pair/fast_pair_handshake/fast_pair_encryption.cc +++ b/ash/quick_pair/fast_pair_handshake/fast_pair_encryption.cc
@@ -6,8 +6,6 @@ #include <algorithm> #include <array> -#include <cstring> -#include <iterator> #include "ash/quick_pair/common/logging.h" #include "ash/quick_pair/fast_pair_handshake/fast_pair_key_pair.h" @@ -142,47 +140,6 @@ return encrypted_bytes; } -const std::vector<uint8_t> EncryptAdditionalData( - const std::array<uint8_t, kSecretKeyByteSize>& secret_key, - std::array<uint8_t, kNonceByteSize> nonce, - const std::vector<uint8_t>& data) { - if (data.empty()) { - return {}; - } - - AES_KEY aes_key; - int aes_key_was_set = - AES_set_encrypt_key(secret_key.data(), secret_key.size() * 8, &aes_key); - DCHECK(aes_key_was_set == 0) << "Invalid AES key size."; - - uint bytes_read = 0; - unsigned char ivec[AES_BLOCK_SIZE] = {}; - unsigned char ecount[AES_BLOCK_SIZE] = {}; - - uint8_t encrypted_data[data.size()]; - uint num_blocks = data.size() / AES_BLOCK_SIZE; - - // The Fast Pair Spec AES-CTR version increments the first byte of the - // initialization vector; the typical AES-CTR algorithm increments the - // last byte. So, instead of calling AES_ctr128_encrypt() once on all of - // `data`, it is called on each 128-bit block of `data` and the counter is - // incremented manually. - for (uint i = 0; i <= num_blocks; i++) { - std::memset(ivec, 0, AES_BLOCK_SIZE); - std::memcpy(ivec + 8, nonce.data(), kNonceByteSize); - ivec[0] = i; - uint offset = i * AES_BLOCK_SIZE; - AES_ctr128_encrypt(/*in=*/data.data() + offset, - /*out=*/encrypted_data + offset, - /*len=*/AES_BLOCK_SIZE, &aes_key, /*ivec=*/ivec, - /*ecount=*/ecount, &bytes_read); - } - - return std::vector<uint8_t>( - encrypted_data, - encrypted_data + sizeof(encrypted_data) / sizeof(uint8_t)); -} - } // namespace fast_pair_encryption } // namespace quick_pair } // namespace ash
diff --git a/ash/quick_pair/fast_pair_handshake/fast_pair_encryption.h b/ash/quick_pair/fast_pair_handshake/fast_pair_encryption.h index b029fcd..4af79e44 100644 --- a/ash/quick_pair/fast_pair_handshake/fast_pair_encryption.h +++ b/ash/quick_pair/fast_pair_handshake/fast_pair_encryption.h
@@ -18,8 +18,6 @@ namespace fast_pair_encryption { constexpr int kBlockByteSize = 16; -constexpr int kNonceByteSize = 8; -constexpr int kSecretKeyByteSize = 16; absl::optional<KeyPair> GenerateKeysWithEcdhKeyAgreement( const std::string& decoded_public_anti_spoofing); @@ -28,15 +26,6 @@ const std::array<uint8_t, kBlockByteSize>& aes_key_bytes, const std::array<uint8_t, kBlockByteSize>& bytes_to_encrypt); -// Encrypts `data` according to the Fast Pair Spec implementation of AES-CTR: -// https://developers.google.com/nearby/fast-pair/specifications/characteristics#AdditionalData. -// Notably used to encrypt data written to the GATT Additional Data -// characteristic. -const std::vector<uint8_t> EncryptAdditionalData( - const std::array<uint8_t, kSecretKeyByteSize>& secret_key, - std::array<uint8_t, kNonceByteSize> nonce, - const std::vector<uint8_t>& data); - } // namespace fast_pair_encryption } // namespace quick_pair } // namespace ash
diff --git a/ash/quick_pair/fast_pair_handshake/fast_pair_encryption_unittest.cc b/ash/quick_pair/fast_pair_handshake/fast_pair_encryption_unittest.cc index 31f6aadc..6007e956 100644 --- a/ash/quick_pair/fast_pair_handshake/fast_pair_encryption_unittest.cc +++ b/ash/quick_pair/fast_pair_handshake/fast_pair_encryption_unittest.cc
@@ -15,7 +15,7 @@ namespace quick_pair { namespace fast_pair_encryption { -constexpr std::array<uint8_t, kBlockByteSize> aes_key_bytes = { +std::array<uint8_t, kBlockByteSize> aes_key_bytes = { 0xA0, 0xBA, 0xF0, 0xBB, 0x95, 0x1F, 0xF7, 0xB6, 0xCF, 0x5E, 0x3F, 0x45, 0x61, 0xC3, 0x32, 0x1D}; @@ -75,82 +75,6 @@ .has_value()); } -// `input`, `secret_key`, `nonce` and `expected` values taken from the Fast Pair -// spec: -// https://developers.google.com/nearby/fast-pair/specifications/appendix/testcases#aes_encryption -TEST_F(FastPairEncryptionTest, EncryptAdditionalData_Success) { - const std::vector<uint8_t> input = {0x53, 0x6F, 0x6D, 0x65, 0x6F, 0x6E, 0x65, - 0x27, 0x73, 0x20, 0x47, 0x6F, 0x6F, 0x67, - 0x6C, 0x65, 0x20, 0x48, 0x65, 0x61, 0x64, - 0x70, 0x68, 0x6F, 0x6E, 0x65}; - - const std::array<uint8_t, kSecretKeyByteSize> secret_key = { - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}; - - std::array<uint8_t, kNonceByteSize> nonce = {0x00, 0x01, 0x02, 0x03, - 0x04, 0x05, 0x06, 0x07}; - - const std::vector<uint8_t> expected = { - 0xEE, 0x4A, 0x24, 0x83, 0x73, 0x80, 0x52, 0xE4, 0x4E, - 0x9B, 0x2A, 0x14, 0x5E, 0x5D, 0xDF, 0xAA, 0x44, 0xB9, - 0xE5, 0x53, 0x6A, 0xF4, 0x38, 0xE1, 0xE5, 0xC6}; - - EXPECT_EQ(EncryptAdditionalData(secret_key, nonce, input), expected); -} - -TEST_F(FastPairEncryptionTest, EncryptAdditionalData_Failure) { - // The first byte is 0x54 instead of 0x53 - const std::vector<uint8_t> input = {0x54, 0x6F, 0x6D, 0x65, 0x6F, 0x6E, 0x65, - 0x27, 0x73, 0x20, 0x47, 0x6F, 0x6F, 0x67, - 0x6C, 0x65, 0x20, 0x48, 0x65, 0x61, 0x64, - 0x70, 0x68, 0x6F, 0x6E, 0x65}; - - const std::array<uint8_t, kSecretKeyByteSize> secret_key = { - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}; - - std::array<uint8_t, kNonceByteSize> nonce = {0x00, 0x01, 0x02, 0x03, - 0x04, 0x05, 0x06, 0x07}; - - const std::vector<uint8_t> expected = { - 0xEE, 0x4A, 0x24, 0x83, 0x73, 0x80, 0x52, 0xE4, 0x4E, - 0x9B, 0x2A, 0x14, 0x5E, 0x5D, 0xDF, 0xAA, 0x44, 0xB9, - 0xE5, 0x53, 0x6A, 0xF4, 0x38, 0xE1, 0xE5, 0xC6}; - - EXPECT_NE(EncryptAdditionalData(secret_key, nonce, input), expected); -} - -TEST_F(FastPairEncryptionTest, EncryptAdditionalData_EmptyData) { - const std::vector<uint8_t> input = {}; - - const std::array<uint8_t, kSecretKeyByteSize> secret_key = { - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}; - - std::array<uint8_t, kNonceByteSize> nonce = {0x00, 0x01, 0x02, 0x03, - 0x04, 0x05, 0x06, 0x07}; - - const std::vector<uint8_t> expected = {}; - - EXPECT_EQ(EncryptAdditionalData(secret_key, nonce, input), expected); -} - -TEST_F(FastPairEncryptionTest, EncryptAdditionalData_OneByteData) { - const std::vector<uint8_t> input = {0x00}; - - const std::array<uint8_t, kSecretKeyByteSize> secret_key = { - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}; - - std::array<uint8_t, kNonceByteSize> nonce = {0x00, 0x01, 0x02, 0x03, - 0x04, 0x05, 0x06, 0x07}; - - const std::vector<uint8_t> expected = {0xBD}; - - EXPECT_EQ(EncryptAdditionalData(secret_key, nonce, input), expected); -} - } // namespace fast_pair_encryption } // namespace quick_pair } // namespace ash
diff --git a/ash/system/power/power_event_observer_unittest.cc b/ash/system/power/power_event_observer_unittest.cc index dc45837b..e8c3312 100644 --- a/ash/system/power/power_event_observer_unittest.cc +++ b/ash/system/power/power_event_observer_unittest.cc
@@ -758,7 +758,14 @@ 1))); } -TEST_F(LockOnSuspendUsageTest, No_ShouldLockScreenAutomatically) { +// TODO(crbug.com/1425006): Test is failing on "Linux ChromiumOS MSan Tests". +#if defined(MEMORY_SANITIZER) +#define MAYBE_No_ShouldLockScreenAutomatically \ + DISABLED_No_ShouldLockScreenAutomatically +#else +#define MAYBE_No_ShouldLockScreenAutomatically No_ShouldLockScreenAutomatically +#endif +TEST_F(LockOnSuspendUsageTest, MAYBE_No_ShouldLockScreenAutomatically) { SetCanLockScreen(true); SetShouldLockScreenAutomatically(false);
diff --git a/ash/webui/camera_app_ui/resources.h b/ash/webui/camera_app_ui/resources.h index bc50e35..63955dd3 100644 --- a/ash/webui/camera_app_ui/resources.h +++ b/ash/webui/camera_app_ui/resources.h
@@ -93,6 +93,8 @@ {"label_no_resolution_option", IDS_LABEL_NO_RESOLUTION_OPTION}, {"label_record_gif_video_option", IDS_LABEL_RECORD_GIF_VIDEO_OPTION}, {"label_record_normal_video_option", IDS_LABEL_RECORD_NORMAL_VIDEO_OPTION}, + {"label_record_time_lapse_video_option", + IDS_LABEL_RECORD_TIME_LAPSE_VIDEO_OPTION}, {"label_resolution_mp", IDS_LABEL_RESOLUTION_MP}, {"label_retake", IDS_LABEL_RETAKE}, {"label_save", IDS_LABEL_SAVE}, @@ -154,6 +156,7 @@ {"ptz_reset_all_button", IDS_PTZ_RESET_ALL_BUTTON}, {"record_gif_video_option", IDS_RECORD_GIF_VIDEO_OPTION}, {"record_normal_video_option", IDS_RECORD_NORMAL_VIDEO_OPTION}, + {"record_time_lapse_video_option", IDS_RECORD_TIME_LAPSE_VIDEO_OPTION}, {"record_video_pause_button", IDS_RECORD_VIDEO_PAUSE_BUTTON}, {"record_video_paused_msg", IDS_RECORD_VIDEO_PAUSED_MSG}, {"record_video_resume_button", IDS_RECORD_VIDEO_RESUME_BUTTON},
diff --git a/ash/webui/camera_app_ui/resources/css/main.css b/ash/webui/camera_app_ui/resources/css/main.css index 3008a1e..748a4f6 100644 --- a/ash/webui/camera_app_ui/resources/css/main.css +++ b/ash/webui/camera_app_ui/resources/css/main.css
@@ -353,6 +353,11 @@ display: none; } +/* TODO(b/236800499): Handle pause for time-lapse recording */ +body.record-type-time-lapse #pause-recordvideo { + display: none; +} + #video-snapshot-holder { bottom: calc(var(--shutter-vertical-center) + 84px); transform: translate(50%, 50%); @@ -500,7 +505,7 @@ background: transparent; } -body:is(:not(.video), .record-type-gif) #toggle-mic, +body:is(:not(.video), .record-type-gif, .record-type-time-lapse) #toggle-mic, body:not(.multi-camera) #switch-device { visibility: hidden; }
diff --git a/ash/webui/camera_app_ui/resources/js/flag.ts b/ash/webui/camera_app_ui/resources/js/flag.ts index e07c4a2..81e16f4 100644 --- a/ash/webui/camera_app_ui/resources/js/flag.ts +++ b/ash/webui/camera_app_ui/resources/js/flag.ts
@@ -7,5 +7,5 @@ */ export enum Flag { LOW_STORAGE_WARNING = 'lowStorageWarning', - PLACEHOLDER_FLAG = '', + TIME_LAPSE = 'timeLapse', }
diff --git a/ash/webui/camera_app_ui/resources/js/i18n_string.ts b/ash/webui/camera_app_ui/resources/js/i18n_string.ts index 43eadf4..cda01b48 100644 --- a/ash/webui/camera_app_ui/resources/js/i18n_string.ts +++ b/ash/webui/camera_app_ui/resources/js/i18n_string.ts
@@ -84,6 +84,7 @@ LABEL_OTHER_ASPECT_RATIO = 'label_other_aspect_ratio', LABEL_RECORD_GIF_VIDEO_OPTION = 'label_record_gif_video_option', LABEL_RECORD_NORMAL_VIDEO_OPTION = 'label_record_normal_video_option', + LABEL_RECORD_TIME_LAPSE_VIDEO_OPTION = 'label_record_time_lapse_video_option', LABEL_RESOLUTION_MP = 'label_resolution_mp', LABEL_RETAKE = 'label_retake', LABEL_SAVE = 'label_save', @@ -140,6 +141,7 @@ PTZ_RESET_ALL_BUTTON = 'ptz_reset_all_button', RECORD_GIF_VIDEO_OPTION = 'record_gif_video_option', RECORD_NORMAL_VIDEO_OPTION = 'record_normal_video_option', + RECORD_TIME_LAPSE_VIDEO_OPTION = 'record_time_lapse_video_option', RECORD_VIDEO_PAUSE_BUTTON = 'record_video_pause_button', RECORD_VIDEO_PAUSED_MSG = 'record_video_paused_msg', RECORD_VIDEO_RESUME_BUTTON = 'record_video_resume_button',
diff --git a/ash/webui/camera_app_ui/resources/js/main.ts b/ash/webui/camera_app_ui/resources/js/main.ts index ab308f7..773e262 100644 --- a/ash/webui/camera_app_ui/resources/js/main.ts +++ b/ash/webui/camera_app_ui/resources/js/main.ts
@@ -12,6 +12,7 @@ import * as dom from './dom.js'; import {reportError} from './error.js'; import * as expert from './expert.js'; +import {Flag} from './flag.js'; import {GalleryButton} from './gallerybutton.js'; import {I18nString} from './i18n_string.js'; import {Intent} from './intent.js'; @@ -118,6 +119,7 @@ this.setupToggles(); localStorage.cleanup(); this.setupEffect(); + this.setupExperimentalFeatures(); // Set up views navigation by their DOM z-order. nav.setup([ @@ -215,6 +217,13 @@ }); } + private setupExperimentalFeatures() { + if (loadTimeData.getChromeFlag(Flag.TIME_LAPSE)) { + const modeButton = dom.get('#time-lapse-mode', HTMLDivElement); + modeButton.classList.remove('hidden'); + } + } + /** * Starts the app by loading the model and opening the camera-view. */
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings.grd b/ash/webui/camera_app_ui/resources/strings/camera_strings.grd index b486fa4..ef5138e 100644 --- a/ash/webui/camera_app_ui/resources/strings/camera_strings.grd +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings.grd
@@ -451,6 +451,12 @@ <message desc="Label for spoken feedback to read out for recording GIF type video." name="IDS_RECORD_GIF_VIDEO_OPTION"> Record GIF video </message> + <message desc="Label for recording time-lapse video option." name="IDS_LABEL_RECORD_TIME_LAPSE_VIDEO_OPTION"> + Time-lapse + </message> + <message desc="Label for spoken feedback to read out for recording time-lapse video." name="IDS_RECORD_TIME_LAPSE_VIDEO_OPTION"> + Record time-lapse video + </message> <message desc="Label for the confirm button to confirm with the reviewed photo or video." name="IDS_CONFIRM_REVIEW_BUTTON"> Confirm </message>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_grd/IDS_LABEL_RECORD_TIME_LAPSE_VIDEO_OPTION.png.sha1 b/ash/webui/camera_app_ui/resources/strings/camera_strings_grd/IDS_LABEL_RECORD_TIME_LAPSE_VIDEO_OPTION.png.sha1 new file mode 100644 index 0000000..5206bcb --- /dev/null +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_grd/IDS_LABEL_RECORD_TIME_LAPSE_VIDEO_OPTION.png.sha1
@@ -0,0 +1 @@ +977b43f7aeaee644adb3f58d9dc2e8ba96242943 \ No newline at end of file
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_grd/IDS_RECORD_TIME_LAPSE_VIDEO_OPTION.png.sha1 b/ash/webui/camera_app_ui/resources/strings/camera_strings_grd/IDS_RECORD_TIME_LAPSE_VIDEO_OPTION.png.sha1 new file mode 100644 index 0000000..5206bcb --- /dev/null +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_grd/IDS_RECORD_TIME_LAPSE_VIDEO_OPTION.png.sha1
@@ -0,0 +1 @@ +977b43f7aeaee644adb3f58d9dc2e8ba96242943 \ No newline at end of file
diff --git a/ash/webui/camera_app_ui/resources/views/main.html b/ash/webui/camera_app_ui/resources/views/main.html index 303efa5e..a1ea0ba 100644 --- a/ash/webui/camera_app_ui/resources/views/main.html +++ b/ash/webui/camera_app_ui/resources/views/main.html
@@ -174,10 +174,11 @@ aria-hidden="true"></div> </div> <div class="item hidden" id="time-lapse-mode"> - <!-- TODO(b/236800499): Add i18n-aria and put under expert mode --> <input type="radio" tabindex="0" name="record-type" - data-state="record-type-time-lapse"> - <div class="label" aria-hidden="true">Time-lapse</div> + data-state="record-type-time-lapse" + i18n-aria="record_time_lapse_video_option"> + <div class="label" i18n-text="label_record_time_lapse_video_option" + aria-hidden="true"></div> </div> </div> <div id="video-snapshot-holder" class="buttons right-stripe circle">
diff --git a/base/allocator/partition_allocator/partition_root.h b/base/allocator/partition_allocator/partition_root.h index 62bc4d6..d4124a2 100644 --- a/base/allocator/partition_allocator/partition_root.h +++ b/base/allocator/partition_allocator/partition_root.h
@@ -1052,6 +1052,7 @@ // // This isn't a general purpose function. The caller is responsible for ensuring // that the ref-count is in place for this allocation. +PA_COMPONENT_EXPORT(PARTITION_ALLOC) PtrPosWithinAlloc IsPtrWithinSameAlloc(uintptr_t orig_address, uintptr_t test_address, size_t type_size);
diff --git a/build/fuchsia/gcs_download_test.py b/build/fuchsia/gcs_download_test.py index 7aebe7d8..50e15cd 100755 --- a/build/fuchsia/gcs_download_test.py +++ b/build/fuchsia/gcs_download_test.py
@@ -62,7 +62,7 @@ # Verify cmd. cmd = ' '.join(mock_run.call_args[0][0]) self.assertRegex( - cmd, r'.*python\s.*gsutil.py\s+cp\s+gs://some/url\s+' + image_tgz_path) + cmd, r'.*python3?\s.*gsutil.py\s+cp\s+gs://some/url\s+' + image_tgz_path) def testFailedTarOpen(self, mock_tarfile, mock_run, mock_tmp_dir): mock_run.return_value = _mock_task(stderr='some error')
diff --git a/build/fuchsia/linux_internal.sdk.sha1 b/build/fuchsia/linux_internal.sdk.sha1 index 7ec8373..31274d7 100644 --- a/build/fuchsia/linux_internal.sdk.sha1 +++ b/build/fuchsia/linux_internal.sdk.sha1
@@ -1 +1 @@ -12.20230315.3.1 +12.20230316.0.1
diff --git a/build_overrides/partition_alloc.gni b/build_overrides/partition_alloc.gni index c2f7bd29..63e64ae 100644 --- a/build_overrides/partition_alloc.gni +++ b/build_overrides/partition_alloc.gni
@@ -38,7 +38,8 @@ # issues on some (e.g. Windows with shims, Android with non-universal symbol # wrapping), and has not been validated on others. # - Windows: debug CRT is not compatible, see below. -_disable_partition_alloc_everywhere = is_component_build || (is_win && is_debug) +_disable_partition_alloc_everywhere = + (!is_linux && is_component_build) || (is_win && is_debug) # - NaCl: No plans to support it. # - iOS: Depends on ios_partition_alloc_enabled.
diff --git a/cc/raster/bitmap_raster_buffer_provider.cc b/cc/raster/bitmap_raster_buffer_provider.cc index b7738dc..9250d66 100644 --- a/cc/raster/bitmap_raster_buffer_provider.cc +++ b/cc/raster/bitmap_raster_buffer_provider.cc
@@ -76,8 +76,8 @@ size_t stride = 0u; RasterBufferProvider::PlaybackToMemory( - pixels_, viz::RGBA_8888, resource_size_, stride, raster_source, - raster_full_rect, playback_rect, transform, color_space_, + pixels_, viz::SinglePlaneFormat::kRGBA_8888, resource_size_, stride, + raster_source, raster_full_rect, playback_rect, transform, color_space_, /*gpu_compositing=*/false, playback_settings); }
diff --git a/cc/raster/zero_copy_raster_buffer_provider.cc b/cc/raster/zero_copy_raster_buffer_provider.cc index df408233..b432c44 100644 --- a/cc/raster/zero_copy_raster_buffer_provider.cc +++ b/cc/raster/zero_copy_raster_buffer_provider.cc
@@ -75,7 +75,7 @@ gpu_memory_buffer_manager_(gpu_memory_buffer_manager), shutdown_event_(shutdown_event), resource_size_(in_use_resource.size()), - resource_format_(in_use_resource.format()), + format_(viz::SharedImageFormat::SinglePlane(in_use_resource.format())), resource_color_space_(in_use_resource.color_space()), gpu_memory_buffer_(std::move(backing_->gpu_memory_buffer)) {} ZeroCopyRasterBufferImpl(const ZeroCopyRasterBufferImpl&) = delete; @@ -126,8 +126,8 @@ if (!gpu_memory_buffer_) { gpu_memory_buffer_ = gpu_memory_buffer_manager_->CreateGpuMemoryBuffer( - resource_size_, viz::BufferFormat(resource_format_), kBufferUsage, - gpu::kNullSurfaceHandle, shutdown_event_); + resource_size_, viz::BufferFormat(format_.resource_format()), + kBufferUsage, gpu::kNullSurfaceHandle, shutdown_event_); // Note that GpuMemoryBuffer allocation can fail. // https://crbug.com/554541 if (!gpu_memory_buffer_) @@ -144,7 +144,7 @@ // TODO(danakj): Implement partial raster with raster_dirty_rect. RasterBufferProvider::PlaybackToMemory( - gpu_memory_buffer_->memory(0), resource_format_, resource_size_, + gpu_memory_buffer_->memory(0), format_, resource_size_, gpu_memory_buffer_->stride(0), raster_source, raster_full_rect, raster_full_rect, transform, resource_color_space_, /*gpu_compositing=*/true, playback_settings); @@ -161,7 +161,7 @@ raw_ptr<gpu::GpuMemoryBufferManager> gpu_memory_buffer_manager_; raw_ptr<base::WaitableEvent> shutdown_event_; gfx::Size resource_size_; - viz::ResourceFormat resource_format_; + viz::SharedImageFormat format_; gfx::ColorSpace resource_color_space_; std::unique_ptr<gfx::GpuMemoryBuffer> gpu_memory_buffer_; };
diff --git a/cc/tiles/tile_manager_unittest.cc b/cc/tiles/tile_manager_unittest.cc index a515f9f..4c2efe7 100644 --- a/cc/tiles/tile_manager_unittest.cc +++ b/cc/tiles/tile_manager_unittest.cc
@@ -1735,7 +1735,8 @@ class TestSoftwareRasterBufferProvider : public FakeRasterBufferProviderImpl { public: static constexpr bool kIsGpuCompositing = true; - static constexpr viz::ResourceFormat kResourceFormat = viz::RGBA_8888; + static constexpr viz::SharedImageFormat kSharedImageFormat = + viz::SinglePlaneFormat::kRGBA_8888; std::unique_ptr<RasterBuffer> AcquireBufferForRaster( const ResourcePool::InUsePoolResource& resource, @@ -1748,8 +1749,8 @@ auto backing = std::make_unique<TestSoftwareBacking>(); backing->shared_bitmap_id = viz::SharedBitmap::GenerateId(); backing->pixels = std::make_unique<uint32_t[]>( - viz::ResourceSizes::CheckedSizeInBytes<size_t>(resource.size(), - kResourceFormat)); + viz::ResourceSizes::CheckedSizeInBytes<size_t>( + resource.size(), kSharedImageFormat.resource_format())); resource.set_software_backing(std::move(backing)); } auto* backing = @@ -1772,9 +1773,9 @@ const RasterSource::PlaybackSettings& playback_settings, const GURL& url) override { RasterBufferProvider::PlaybackToMemory( - pixels_, kResourceFormat, size_, /*stride=*/0, raster_source, - raster_full_rect, /*playback_rect=*/raster_full_rect, transform, - gfx::ColorSpace(), kIsGpuCompositing, playback_settings); + pixels_, kSharedImageFormat, size_, /*stride=*/0, raster_source, + raster_full_rect, /*canvas_playback_rect=*/raster_full_rect, + transform, gfx::ColorSpace(), kIsGpuCompositing, playback_settings); } bool SupportsBackgroundThreadPriority() const override { return true; } @@ -2102,9 +2103,9 @@ EXPECT_TRUE(tile->draw_info().IsReadyToDraw()); gfx::Size resource_size = tile->draw_info().resource_size(); - SkColorType ct = ResourceFormatToClosestSkColorType( + SkColorType ct = ToClosestSkColorType( TestSoftwareRasterBufferProvider::kIsGpuCompositing, - TestSoftwareRasterBufferProvider::kResourceFormat); + TestSoftwareRasterBufferProvider::kSharedImageFormat); auto info = SkImageInfo::Make(resource_size.width(), resource_size.height(), ct, kPremul_SkAlphaType); // CreateLayerTreeFrameSink() sets up a software compositing, so the
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index b4da02e..fd4f9bf 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -2722,13 +2722,6 @@ {"Enable", media::switches::kForceControlFaceAe, "enable"}, {"Disable", media::switches::kForceControlFaceAe, "disable"}}; -const FeatureEntry::Choice kHdrNetOverrideChoices[] = { - {"Default", "", ""}, - {"Force enabled", media::switches::kHdrNetOverride, - media::switches::kHdrNetForceEnabled}, - {"Force disabled", media::switches::kHdrNetOverride, - media::switches::kHdrNetForceDisabled}}; - const FeatureEntry::Choice kAutoFramingOverrideChoices[] = { {"Default", "", ""}, {"Force enabled", media::switches::kAutoFramingOverride, @@ -5162,9 +5155,6 @@ {"force-control-face-ae", flag_descriptions::kForceControlFaceAeName, flag_descriptions::kForceControlFaceAeDescription, kOsCrOS, MULTI_VALUE_TYPE(kForceControlFaceAeChoices)}, - {"hdrnet-override", flag_descriptions::kHdrNetOverrideName, - flag_descriptions::kHdrNetOverrideDescription, kOsCrOS, - MULTI_VALUE_TYPE(kHdrNetOverrideChoices)}, {"auto-framing-override", flag_descriptions::kAutoFramingOverrideName, flag_descriptions::kAutoFramingOverrideDescription, kOsCrOS, MULTI_VALUE_TYPE(kAutoFramingOverrideChoices)}, @@ -5172,6 +5162,9 @@ flag_descriptions::kCameraAppLowStorageWarningName, flag_descriptions::kCameraAppLowStorageWarningDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kCameraAppLowStorageWarning)}, + {"camera-app-time-lapse", flag_descriptions::kCameraAppTimeLapseName, + flag_descriptions::kCameraAppTimeLapseDescription, kOsCrOS, + FEATURE_VALUE_TYPE(ash::features::kCameraAppTimeLapse)}, {"crostini-gpu-support", flag_descriptions::kCrostiniGpuSupportName, flag_descriptions::kCrostiniGpuSupportDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kCrostiniGpuSupport)},
diff --git a/chrome/browser/apps/platform_apps/api/media_galleries/media_galleries_api.cc b/chrome/browser/apps/platform_apps/api/media_galleries/media_galleries_api.cc index 7c1bc99e..704fb15 100644 --- a/chrome/browser/apps/platform_apps/api/media_galleries/media_galleries_api.cc +++ b/chrome/browser/apps/platform_apps/api/media_galleries/media_galleries_api.cc
@@ -354,7 +354,7 @@ const std::string& extension_id, MediaGalleryPrefId gallery_id) { MediaGalleries::GalleryChangeDetails details; - details.type = MediaGalleries::GALLERY_CHANGE_TYPE_CONTENTS_CHANGED; + details.type = MediaGalleries::GalleryChangeType::kContentsChanged; details.gallery_id = base::NumberToString(gallery_id); DispatchEventToExtension( extension_id, extensions::events::MEDIA_GALLERIES_ON_GALLERY_CHANGED, @@ -366,7 +366,7 @@ const std::string& extension_id, MediaGalleryPrefId gallery_id) { MediaGalleries::GalleryChangeDetails details; - details.type = MediaGalleries::GALLERY_CHANGE_TYPE_WATCH_DROPPED; + details.type = MediaGalleries::GalleryChangeType::kWatchDropped; details.gallery_id = base::NumberToString(gallery_id); DispatchEventToExtension( extension_id, extensions::events::MEDIA_GALLERIES_ON_GALLERY_CHANGED, @@ -399,10 +399,10 @@ GetMediaFileSystems::Params::Create(args())); EXTENSION_FUNCTION_VALIDATE(params); MediaGalleries::GetMediaFileSystemsInteractivity interactive = - MediaGalleries::GET_MEDIA_FILE_SYSTEMS_INTERACTIVITY_NO; + MediaGalleries::GetMediaFileSystemsInteractivity::kNo; if (params->details && params->details->interactive != - MediaGalleries::GET_MEDIA_FILE_SYSTEMS_INTERACTIVITY_NONE) { + MediaGalleries::GetMediaFileSystemsInteractivity::kNone) { interactive = params->details->interactive; } @@ -421,7 +421,7 @@ void MediaGalleriesGetMediaFileSystemsFunction::OnPreferencesInit( MediaGalleries::GetMediaFileSystemsInteractivity interactive) { switch (interactive) { - case MediaGalleries::GET_MEDIA_FILE_SYSTEMS_INTERACTIVITY_YES: { + case MediaGalleries::GetMediaFileSystemsInteractivity::kYes: { // The MediaFileSystemRegistry only updates preferences for extensions // that it knows are in use. Since this may be the first call to // chrome.getMediaFileSystems for this extension, call @@ -431,16 +431,16 @@ &MediaGalleriesGetMediaFileSystemsFunction::AlwaysShowDialog, this)); return; } - case MediaGalleries::GET_MEDIA_FILE_SYSTEMS_INTERACTIVITY_IF_NEEDED: { + case MediaGalleries::GetMediaFileSystemsInteractivity::kIfNeeded: { GetMediaFileSystemsForExtension(base::BindOnce( &MediaGalleriesGetMediaFileSystemsFunction::ShowDialogIfNoGalleries, this)); return; } - case MediaGalleries::GET_MEDIA_FILE_SYSTEMS_INTERACTIVITY_NO: + case MediaGalleries::GetMediaFileSystemsInteractivity::kNo: GetAndReturnGalleries(); return; - case MediaGalleries::GET_MEDIA_FILE_SYSTEMS_INTERACTIVITY_NONE: + case MediaGalleries::GetMediaFileSystemsInteractivity::kNone: NOTREACHED(); } Respond(Error("Error initializing Media Galleries preferences.")); @@ -681,7 +681,7 @@ return; } - if (metadata_type == MediaGalleries::GET_METADATA_TYPE_MIMETYPEONLY) { + if (metadata_type == MediaGalleries::GetMetadataType::kMimeTypeOnly) { MediaGalleries::MediaMetadata metadata; metadata.mime_type = mime_type; @@ -694,8 +694,8 @@ // We get attached images by default. GET_METADATA_TYPE_NONE is the default // value if the caller doesn't specify the metadata type. bool get_attached_images = - metadata_type == MediaGalleries::GET_METADATA_TYPE_ALL || - metadata_type == MediaGalleries::GET_METADATA_TYPE_NONE; + metadata_type == MediaGalleries::GetMetadataType::kAll || + metadata_type == MediaGalleries::GetMetadataType::kNone; auto media_data_source_factory = std::make_unique<BlobDataSourceFactory>(browser_context(), blob_uuid);
diff --git a/chrome/browser/ash/app_list/search/arc/arc_playstore_search_provider.cc b/chrome/browser/ash/app_list/search/arc/arc_playstore_search_provider.cc index 729a17a..bf3317b 100644 --- a/chrome/browser/ash/app_list/search/arc/arc_playstore_search_provider.cc +++ b/chrome/browser/ash/app_list/search/arc/arc_playstore_search_provider.cc
@@ -188,19 +188,13 @@ UMA_HISTOGRAM_TIMES("Arc.PlayStoreSearch.QueryTime", base::TimeTicks::Now() - query_start_time); - if (results.size() > 0) { - UMA_HISTOGRAM_EXACT_LINEAR("Arc.PlayStoreSearch.ReturnedAppsTotal", - results.size(), kHistogramBuckets); - } - if (results.size() - instant_app_count > 0) { - UMA_HISTOGRAM_EXACT_LINEAR("Arc.PlayStoreSearch.ReturnedUninstalledApps", - results.size() - instant_app_count, - kHistogramBuckets); - } - if (instant_app_count > 0) { - UMA_HISTOGRAM_EXACT_LINEAR("Arc.PlayStoreSearch.ReturnedInstantApps", - instant_app_count, kHistogramBuckets); - } + UMA_HISTOGRAM_EXACT_LINEAR("Arc.PlayStoreSearch.ReturnedAppsTotalV2", + results.size(), kHistogramBuckets); + UMA_HISTOGRAM_EXACT_LINEAR("Arc.PlayStoreSearch.ReturnedUninstalledAppsV2", + results.size() - instant_app_count, + kHistogramBuckets); + UMA_HISTOGRAM_EXACT_LINEAR("Arc.PlayStoreSearch.ReturnedInstantAppsV2", + instant_app_count, kHistogramBuckets); } } // namespace app_list
diff --git a/chrome/browser/ash/app_list/search/common/types_util.cc b/chrome/browser/ash/app_list/search/common/types_util.cc index b3d37d4..d149314f 100644 --- a/chrome/browser/ash/app_list/search/common/types_util.cc +++ b/chrome/browser/ash/app_list/search/common/types_util.cc
@@ -177,6 +177,8 @@ return "SEARCH_RESULT_TYPE_BOUNDARY"; case ash::SearchResultType::SYSTEM_INFO: return "SYSTEM_INFO"; + case ash::SearchResultType::IMAGE_SEARCH: + return "IMAGE_SEARCH"; } NOTREACHED(); }
diff --git a/chrome/browser/ash/app_list/search/files/file_result.cc b/chrome/browser/ash/app_list/search/files/file_result.cc index 5578219..2363bcb 100644 --- a/chrome/browser/ash/app_list/search/files/file_result.cc +++ b/chrome/browser/ash/app_list/search/files/file_result.cc
@@ -137,7 +137,7 @@ SetMetricsType(ash::DRIVE_SEARCH); break; case ResultType::kImageSearch: - // TODO(b/260646344): fix the metric type. + SetMetricsType(ash::IMAGE_SEARCH); break; default: NOTREACHED();
diff --git a/chrome/browser/ash/arc/notification/arc_vm_data_migration_notifier.cc b/chrome/browser/ash/arc/notification/arc_vm_data_migration_notifier.cc index 8a0bd13..d0f74f1 100644 --- a/chrome/browser/ash/arc/notification/arc_vm_data_migration_notifier.cc +++ b/chrome/browser/ash/arc/notification/arc_vm_data_migration_notifier.cc
@@ -14,6 +14,7 @@ #include "ash/strings/grit/ash_strings.h" #include "base/metrics/histogram_functions.h" #include "base/time/time.h" +#include "chrome/browser/ash/arc/arc_util.h" #include "chrome/browser/ash/arc/policy/arc_policy_util.h" #include "chrome/browser/lifetime/application_lifetime.h" #include "chrome/browser/notifications/notification_display_service.h" @@ -36,8 +37,6 @@ bool ShouldShowNotification(Profile* profile) { // Do not show a notification for managed users. if (policy_util::IsAccountManaged(profile)) { - // TODO(b/272151802): Report to UMA that the migration is skipped for a - // managed user. return false; } @@ -78,6 +77,16 @@ if (!base::FeatureList::IsEnabled(kEnableArcVmDataMigration)) return; + // Report the migration status at the beginning of each ARC session. + // The status might have been changed to kFinished by ArcSessionManager in its + // initialization step when there is no Android /data to migrate. + // The status might be changed to kNotified within this function call when the + // notification is shown. + base::UmaHistogramEnumeration( + GetHistogramNameByUserType( + kArcVmDataMigrationStatusOnArcStartedHistogramName, profile_), + GetArcVmDataMigrationStatus(profile_->GetPrefs())); + // Do not show a notification if virtio-blk /data is forcibly enabled, in // which case the migration is not needed. if (base::FeatureList::IsEnabled(kEnableVirtioBlkForData))
diff --git a/chrome/browser/ash/arc/session/arc_session_manager.cc b/chrome/browser/ash/arc/session/arc_session_manager.cc index 9f32b23..1bdec2c 100644 --- a/chrome/browser/ash/arc/session/arc_session_manager.cc +++ b/chrome/browser/ash/arc/session/arc_session_manager.cc
@@ -1533,6 +1533,10 @@ if (!result.value_or(true)) { VLOG(1) << "No need to perform ARCVM /data migration. Marking the migration" << " as finished"; + base::UmaHistogramEnumeration( + GetHistogramNameByUserType(kArcVmDataMigrationFinishReasonHistogramName, + profile_), + ArcVmDataMigrationFinishReason::kNoDataToMigrate); SetArcVmDataMigrationStatus(profile_->GetPrefs(), ArcVmDataMigrationStatus::kFinished); }
diff --git a/chrome/browser/ash/arc/vmm/arc_system_state_bridge.cc b/chrome/browser/ash/arc/vmm/arc_system_state_bridge.cc index b99e2c2..e26dd0a 100644 --- a/chrome/browser/ash/arc/vmm/arc_system_state_bridge.cc +++ b/chrome/browser/ash/arc/vmm/arc_system_state_bridge.cc
@@ -58,7 +58,7 @@ void ArcSystemStateBridge::UpdateAppRunningState( mojom::SystemAppRunningStatePtr state) { - // TODO(sstan): Implementation. + state_ = state.Clone(); } } // namespace arc
diff --git a/chrome/browser/ash/arc/vmm/arc_system_state_bridge.h b/chrome/browser/ash/arc/vmm/arc_system_state_bridge.h index 1f0e5009..093f970 100644 --- a/chrome/browser/ash/arc/vmm/arc_system_state_bridge.h +++ b/chrome/browser/ash/arc/vmm/arc_system_state_bridge.h
@@ -36,12 +36,18 @@ ArcSystemStateBridge& operator=(const ArcSystemStateBridge&) = delete; ~ArcSystemStateBridge() override; + const mojom::SystemAppRunningState& system_app_running_state() { + return *state_; + } + // mojom::SystemStateHost override: void UpdateAppRunningState(mojom::SystemAppRunningStatePtr state) override; private: ArcBridgeService* const arc_bridge_service_; // Owned by ArcServiceManager. + mojom::SystemAppRunningStatePtr state_; + Profile* const profile_; base::WeakPtrFactory<ArcSystemStateBridge> weak_ptr_factory_{this};
diff --git a/chrome/browser/ash/crosapi/login_ash.cc b/chrome/browser/ash/crosapi/login_ash.cc index e709222..4a1943697 100644 --- a/chrome/browser/ash/crosapi/login_ash.cc +++ b/chrome/browser/ash/crosapi/login_ash.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/ash/crosapi/login_ash.h" +#include "ash/system/session/guest_session_confirmation_dialog.h" #include "base/notreached.h" #include "chrome/browser/ash/login/existing_user_controller.h" #include "chrome/browser/ash/login/ui/login_display_host.h" @@ -272,6 +273,10 @@ } } +void LoginAsh::ShowGuestSessionConfirmationDialog() { + ash::GuestSessionConfirmationDialog::Show(); +} + void LoginAsh::REMOVED_0(const absl::optional<std::string>& password, REMOVED_0Callback callback) { NOTIMPLEMENTED();
diff --git a/chrome/browser/ash/crosapi/login_ash.h b/chrome/browser/ash/crosapi/login_ash.h index e023631..ba1d68ac 100644 --- a/chrome/browser/ash/crosapi/login_ash.h +++ b/chrome/browser/ash/crosapi/login_ash.h
@@ -59,6 +59,7 @@ mojo::PendingRemote<mojom::ExternalLogoutRequestObserver> observer) override; void NotifyOnExternalLogoutDone() override; + void ShowGuestSessionConfirmationDialog() override; // Methods that are removed from mojom::Login interface. The methods cannot be // completely removed, only renamed, because the interface is Stable and has // to preserve backward-compatibility.
diff --git a/chrome/browser/ash/crostini/crostini_metrics_service.cc b/chrome/browser/ash/crostini/crostini_metrics_service.cc index d12c4ee..b3903d0 100644 --- a/chrome/browser/ash/crostini/crostini_metrics_service.cc +++ b/chrome/browser/ash/crostini/crostini_metrics_service.cc
@@ -4,11 +4,15 @@ #include "chrome/browser/ash/crostini/crostini_metrics_service.h" +#include "base/metrics/histogram_functions.h" #include "base/no_destructor.h" #include "chrome/browser/ash/crostini/crostini_features.h" #include "chrome/browser/ash/crostini/crostini_pref_names.h" #include "chrome/browser/ash/crostini/crostini_util.h" #include "chrome/browser/profiles/profile.h" +#include "components/exo/wm_helper.h" +#include "ui/base/ime/ash/input_method_manager.h" +#include "ui/wm/public/activation_client.h" namespace crostini { @@ -63,9 +67,17 @@ std::make_unique<guest_os::GuestOsEngagementMetrics>( profile->GetPrefs(), base::BindRepeating(IsCrostiniWindow), prefs::kEngagementPrefsPrefix, kUmaPrefix); + + if (exo::WMHelper::HasInstance()) { + exo::WMHelper::GetInstance()->AddActivationObserver(this); + } } -CrostiniMetricsService::~CrostiniMetricsService() = default; +CrostiniMetricsService::~CrostiniMetricsService() { + if (exo::WMHelper::HasInstance()) { + exo::WMHelper::GetInstance()->RemoveActivationObserver(this); + } +} void CrostiniMetricsService::SetBackgroundActive(bool background_active) { // If policy changes to enable Crostini, we won't have created the helper @@ -77,4 +89,24 @@ guest_os_engagement_metrics_->SetBackgroundActive(background_active); } +void CrostiniMetricsService::OnWindowActivated( + wm::ActivationChangeObserver::ActivationReason reason, + aura::Window* gained_active, + aura::Window* lost_active) { + if (lost_active && IsCrostiniWindow(lost_active)) { + // Log the current input method when a Crostini window loses focus. This is + // a simple way for us to record which input method are being used with + // Crostini, and doesn't require us to hook into keyboard events. Enum + // format matches InputMethod.ID2. + + auto* imm = ash::input_method::InputMethodManager::Get(); + if (imm && imm->GetActiveIMEState()) { + base::UmaHistogramSparse( + "Crostini.InputMethodOnBlur", + static_cast<int32_t>(base::PersistentHash( + imm->GetActiveIMEState()->GetCurrentInputMethod().id()))); + } + } +} + } // namespace crostini
diff --git a/chrome/browser/ash/crostini/crostini_metrics_service.h b/chrome/browser/ash/crostini/crostini_metrics_service.h index 81f988d..16812f62 100644 --- a/chrome/browser/ash/crostini/crostini_metrics_service.h +++ b/chrome/browser/ash/crostini/crostini_metrics_service.h
@@ -9,13 +9,15 @@ #include "chrome/browser/profiles/profile_keyed_service_factory.h" #include "components/guest_os/guest_os_engagement_metrics.h" #include "components/keyed_service/core/keyed_service.h" +#include "ui/wm/public/activation_change_observer.h" class Profile; namespace crostini { // A KeyedService for various Crostini metrics. -class CrostiniMetricsService : public KeyedService { +class CrostiniMetricsService : public KeyedService, + public wm::ActivationChangeObserver { public: class Factory : public ProfileKeyedServiceFactory { public: @@ -46,6 +48,11 @@ // can correctly track background active time. void SetBackgroundActive(bool background_active); + // wm::ActivationChangeObserver: + void OnWindowActivated(wm::ActivationChangeObserver::ActivationReason reason, + aura::Window* gained_active, + aura::Window* lost_active) override; + private: std::unique_ptr<guest_os::GuestOsEngagementMetrics> guest_os_engagement_metrics_;
diff --git a/chrome/browser/ash/dbus/fusebox_service_provider.cc b/chrome/browser/ash/dbus/fusebox_service_provider.cc index 7a05074..d489fac 100644 --- a/chrome/browser/ash/dbus/fusebox_service_provider.cc +++ b/chrome/browser/ash/dbus/fusebox_service_provider.cc
@@ -55,6 +55,7 @@ ExportProtoMethod(fusebox::kOpen2Method, &fusebox::Server::Open2); ExportProtoMethod(fusebox::kRead2Method, &fusebox::Server::Read2); ExportProtoMethod(fusebox::kReadDir2Method, &fusebox::Server::ReadDir2); + ExportProtoMethod(fusebox::kRenameMethod, &fusebox::Server::Rename); ExportProtoMethod(fusebox::kRmDirMethod, &fusebox::Server::RmDir); ExportProtoMethod(fusebox::kStat2Method, &fusebox::Server::Stat2); ExportProtoMethod(fusebox::kTruncateMethod, &fusebox::Server::Truncate);
diff --git a/chrome/browser/ash/fusebox/fusebox_server.cc b/chrome/browser/ash/fusebox/fusebox_server.cc index 2021535..1495c8da 100644 --- a/chrome/browser/ash/fusebox/fusebox_server.cc +++ b/chrome/browser/ash/fusebox/fusebox_server.cc
@@ -25,6 +25,7 @@ #include "content/public/browser/browser_thread.h" #include "net/base/io_buffer.h" #include "storage/browser/file_system/async_file_util.h" +#include "storage/browser/file_system/copy_or_move_hook_delegate.h" #include "storage/browser/file_system/external_mount_points.h" #include "storage/browser/file_system/file_system_backend.h" #include "storage/browser/file_system/file_system_url.h" @@ -58,6 +59,13 @@ file_manager::util::kFuseBoxSubdirPrefixMTP); } +bool HaveSameSubdir(base::StringPiece src, base::StringPiece dst) { + size_t s = src.find('/'); + size_t d = dst.find('/'); + return (s != std::string::npos) && (d != std::string::npos) && + (src.substr(0, s) == dst.substr(0, d)); +} + std::pair<std::string, bool> ResolvePrefixMap( const fusebox::Server::PrefixMap& prefix_map, const std::string& s) { @@ -312,6 +320,24 @@ metadata_fields, std::move(outer_callback))); } +void RunRenameCallback( + Server::RenameCallback callback, + scoped_refptr<storage::FileSystemContext> fs_context, // See § above. + base::File::Error error_code) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + + int posix_error_code = FileErrorToErrno(error_code); + if (posix_error_code) { + RenameResponseProto response_proto; + response_proto.set_posix_error_code(posix_error_code); + std::move(callback).Run(response_proto); + return; + } + + RenameResponseProto response_proto; + std::move(callback).Run(response_proto); +} + void RunRmDirCallback( Server::RmDirCallback callback, scoped_refptr<storage::FileSystemContext> fs_context, // See § above. @@ -959,6 +985,74 @@ parsed->fs_url, std::move(outer_callback))); } +void Server::Rename(const RenameRequestProto& request_proto, + RenameCallback callback) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + + std::string src_fs_url_as_string = request_proto.has_src_file_system_url() + ? request_proto.src_file_system_url() + : std::string(); + std::string dst_fs_url_as_string = request_proto.has_dst_file_system_url() + ? request_proto.dst_file_system_url() + : std::string(); + + // TODO(b/255703917): allow cross-subdir renames. + if (!HaveSameSubdir(src_fs_url_as_string, dst_fs_url_as_string)) { + RenameResponseProto response_proto; + response_proto.set_posix_error_code(EINVAL); + std::move(callback).Run(response_proto); + return; + } + + auto src_parsed = + ParseFileSystemURL(moniker_map_, prefix_map_, src_fs_url_as_string); + if (!src_parsed.has_value()) { + RenameResponseProto response_proto; + response_proto.set_posix_error_code(src_parsed.error().posix_error_code); + std::move(callback).Run(response_proto); + return; + } else if (src_parsed->read_only) { + RenameResponseProto response_proto; + response_proto.set_posix_error_code(EACCES); + std::move(callback).Run(response_proto); + return; + } + + auto dst_parsed = + ParseFileSystemURL(moniker_map_, prefix_map_, dst_fs_url_as_string); + if (!dst_parsed.has_value()) { + RenameResponseProto response_proto; + response_proto.set_posix_error_code(dst_parsed.error().posix_error_code); + std::move(callback).Run(response_proto); + return; + } else if (dst_parsed->read_only) { + RenameResponseProto response_proto; + response_proto.set_posix_error_code(EACCES); + std::move(callback).Run(response_proto); + return; + } + + auto outer_callback = base::BindPostTaskToCurrentDefault(base::BindOnce( + &RunRenameCallback, std::move(callback), src_parsed->fs_context)); + + constexpr storage::FileSystemOperation::CopyOrMoveOptionSet options = + storage::FileSystemOperation::CopyOrMoveOptionSet( + storage::FileSystemOperation::CopyOrMoveOption::kPreserveLastModified, + storage::FileSystemOperation::CopyOrMoveOption:: + kRemovePartiallyCopiedFilesOnError); + + content::GetIOThreadTaskRunner({})->PostTask( + FROM_HERE, + base::BindOnce( + base::IgnoreResult(&storage::FileSystemOperationRunner::Move), + // Unretained is safe: fs_context owns its operation runner. + base::Unretained(src_parsed->fs_context->operation_runner()), + src_parsed->fs_url, dst_parsed->fs_url, options, + storage::FileSystemOperation::ERROR_BEHAVIOR_ABORT, + std::make_unique<storage::CopyOrMoveHookDelegate>(), + std::move(outer_callback))); +} + void Server::RmDir(const RmDirRequestProto& request_proto, RmDirCallback callback) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
diff --git a/chrome/browser/ash/fusebox/fusebox_server.h b/chrome/browser/ash/fusebox/fusebox_server.h index 2297565..69fdc6c 100644 --- a/chrome/browser/ash/fusebox/fusebox_server.h +++ b/chrome/browser/ash/fusebox/fusebox_server.h
@@ -114,6 +114,11 @@ base::OnceCallback<void(const Open2ResponseProto& response)>; void Open2(const Open2RequestProto& request, Open2Callback callback); + // Rename is analogous to "/usr/bin/mv". + using RenameCallback = + base::OnceCallback<void(const RenameResponseProto& response)>; + void Rename(const RenameRequestProto& request, RenameCallback callback); + // Read2 reads from a virtual file opened by Open2. using Read2Callback = base::OnceCallback<void(const Read2ResponseProto& response)>;
diff --git a/chrome/browser/ash/login/screens/arc_vm_data_migration_screen.cc b/chrome/browser/ash/login/screens/arc_vm_data_migration_screen.cc index d5b83f6..eac6bd4 100644 --- a/chrome/browser/ash/login/screens/arc_vm_data_migration_screen.cc +++ b/chrome/browser/ash/login/screens/arc_vm_data_migration_screen.cc
@@ -16,11 +16,13 @@ #include "ash/shell.h" #include "base/feature_list.h" #include "base/logging.h" +#include "base/metrics/histogram_functions.h" #include "base/notreached.h" #include "base/strings/string_number_conversions.h" #include "base/strings/stringprintf.h" #include "base/time/default_tick_clock.h" #include "base/time/time.h" +#include "chrome/browser/ash/arc/arc_util.h" #include "chrome/browser/ash/login/ui/login_feedback.h" #include "chrome/browser/ash/profiles/profile_helper.h" #include "chrome/browser/lifetime/application_lifetime.h" @@ -516,6 +518,10 @@ return; case arc::data_migrator::DATA_MIGRATION_SUCCESS: VLOG(1) << "ARCVM /data migration finished successfully"; + base::UmaHistogramEnumeration( + arc::GetHistogramNameByUserType( + arc::kArcVmDataMigrationFinishReasonHistogramName, profile_), + arc::ArcVmDataMigrationFinishReason::kMigrationSuccess); migration_progress_observation_.Reset(); SetArcVmDataMigrationStatus(profile_->GetPrefs(), arc::ArcVmDataMigrationStatus::kFinished); @@ -599,6 +605,10 @@ // could not be removed. profile_->GetPrefs()->SetBoolean(arc::prefs::kArcDataRemoveRequested, true); } + base::UmaHistogramEnumeration( + arc::GetHistogramNameByUserType( + arc::kArcVmDataMigrationFinishReasonHistogramName, profile_), + arc::ArcVmDataMigrationFinishReason::kMigrationFailure); SetArcVmDataMigrationStatus(profile_->GetPrefs(), arc::ArcVmDataMigrationStatus::kFinished); UpdateUIState(ArcVmDataMigrationScreenView::UIState::kFailure);
diff --git a/chrome/browser/ash/policy/networking/network_policy_application_browsertest.cc b/chrome/browser/ash/policy/networking/network_policy_application_browsertest.cc index 8f1359fe..7d4af9bc 100644 --- a/chrome/browser/ash/policy/networking/network_policy_application_browsertest.cc +++ b/chrome/browser/ash/policy/networking/network_policy_application_browsertest.cc
@@ -17,6 +17,7 @@ #include "base/json/json_writer.h" #include "base/ranges/algorithm.h" #include "base/strings/stringprintf.h" +#include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" #include "base/test/test_future.h" #include "base/test/values_test_util.h" @@ -77,6 +78,9 @@ constexpr char kUIDataKeyUserSettings[] = "user_settings"; +constexpr char kOncRecommendedFieldsWorkaroundActionHistogram[] = + "Network.Ethernet.Policy.OncRecommendedFieldsWorkaroundAction"; + // A utility to wait until a FakeShillServiceClient's service has been // connected. // Usage: @@ -1362,23 +1366,30 @@ "ethernet_any", shill::kTypeEthernet, shill::kStateOnline, /*visible=*/true); - // For Ethernet, not mentioning "Recommended" currently means that the IP - // address is editable by the user. - std::string kDeviceONC1 = base::StringPrintf(R"( - { - "NetworkConfigurations": [ - { - "GUID": "%s", - "Name": "EthernetName", - "Type": "Ethernet", - "Ethernet": { - "Authentication": "None" + { + base::HistogramTester histogram_tester; + // For Ethernet, not mentioning "Recommended" currently means that the IP + // address is editable by the user. + std::string kDeviceONC1 = base::StringPrintf(R"( + { + "NetworkConfigurations": [ + { + "GUID": "%s", + "Name": "EthernetName", + "Type": "Ethernet", + "Ethernet": { + "Authentication": "None" + } } - } - ] - })", - kEthernetGuid); - SetDeviceOpenNetworkConfiguration(kDeviceONC1, /*wait_applied=*/true); + ] + })", + kEthernetGuid); + SetDeviceOpenNetworkConfiguration(kDeviceONC1, /*wait_applied=*/true); + // Expect "Enabled by feature, ONC NetworkConfiguration eligible". + histogram_tester.ExpectUniqueSample( + kOncRecommendedFieldsWorkaroundActionHistogram, + /*sample=kEnabledAndAffected*/ 1, /*count=*/1); + } { const base::Value::Dict* eth_service_properties = @@ -1422,9 +1433,11 @@ "192.168.1.44"); } - // Modify the policy: Force custom nameserver, but allow IP address to be - // modifiable. - std::string kDeviceONC2 = base::StringPrintf(R"( + { + base::HistogramTester histogram_tester; + // Modify the policy: Force custom nameserver, but allow IP address to be + // modifiable. + std::string kDeviceONC2 = base::StringPrintf(R"( { "NetworkConfigurations": [ { @@ -1443,8 +1456,13 @@ } ] })", - kEthernetGuid); - SetDeviceOpenNetworkConfiguration(kDeviceONC2, /*wait_applied=*/true); + kEthernetGuid); + SetDeviceOpenNetworkConfiguration(kDeviceONC2, /*wait_applied=*/true); + // Expect "Enabled by feature, ONC NetworkConfiguration not eligible". + histogram_tester.ExpectUniqueSample( + kOncRecommendedFieldsWorkaroundActionHistogram, + /*sample=kEnabledAndNotAffected*/ 0, /*count=*/1); + } // Verify that the Static IP is still active, and the custom name server has // been applied. @@ -1731,6 +1749,8 @@ "ethernet_any", shill::kTypeEthernet, shill::kStateOnline, /*visible=*/true); + base::HistogramTester histogram_tester; + // For Ethernet, not mentioning "Recommended" currently means that the IP // address is not editable by the user. std::string kDeviceONCNothingRecommended = base::StringPrintf(R"( @@ -1749,6 +1769,10 @@ kEthernetGuid); SetDeviceOpenNetworkConfiguration(kDeviceONCNothingRecommended, /*wait_applied=*/true); + // Expect "Disabled by feature, ONC NetworkConfiguration eligible". + histogram_tester.ExpectUniqueSample( + kOncRecommendedFieldsWorkaroundActionHistogram, + /*sample=kDisabledAndAffected*/ 3, /*count=*/1); { const base::Value::Dict* eth_service_properties = @@ -1808,6 +1832,8 @@ "ethernet_any", shill::kTypeEthernet, shill::kStateOnline, /*visible=*/true); + base::HistogramTester histogram_tester; + // Modify the policy: Explicitly recommend both IP address and Nameservers, // allowing the user to modify them. std::string kDeviceONCEverythingRecommended = @@ -1832,6 +1858,10 @@ kEthernetGuid); SetDeviceOpenNetworkConfiguration(kDeviceONCEverythingRecommended, /*wait_applied=*/true); + // Expect "Disabled by feature, ONC NetworkConfiguration not eligible". + histogram_tester.ExpectUniqueSample( + kOncRecommendedFieldsWorkaroundActionHistogram, + /*sample=kDisabledAndAffected*/ 2, /*count=*/1); // Check that IP address is modifiable and policy-recommended. {
diff --git a/chrome/browser/ash/web_applications/camera_app/chrome_camera_app_ui_delegate.cc b/chrome/browser/ash/web_applications/camera_app/chrome_camera_app_ui_delegate.cc index 393a1c9d..095ca06 100644 --- a/chrome/browser/ash/web_applications/camera_app/chrome_camera_app_ui_delegate.cc +++ b/chrome/browser/ash/web_applications/camera_app/chrome_camera_app_ui_delegate.cc
@@ -311,6 +311,8 @@ source->AddBoolean( "lowStorageWarning", base::FeatureList::IsEnabled(ash::features::kCameraAppLowStorageWarning)); + source->AddBoolean("timeLapse", base::FeatureList::IsEnabled( + ash::features::kCameraAppTimeLapse)); } bool ChromeCameraAppUIDelegate::IsMetricsAndCrashReportingEnabled() {
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/telemetry/telemetry_api.cc b/chrome/browser/chromeos/extensions/telemetry/api/telemetry/telemetry_api.cc index 60e087e..65a61841 100644 --- a/chrome/browser/chromeos/extensions/telemetry/api/telemetry/telemetry_api.cc +++ b/chrome/browser/chromeos/extensions/telemetry/api/telemetry/telemetry_api.cc
@@ -198,7 +198,7 @@ } // Don't include networks with an undefined type. - if (converted_network.type != telemetry::NetworkType::NETWORK_TYPE_NONE) { + if (converted_network.type != telemetry::NetworkType::kNone) { result.networks.push_back(std::move(converted_network)); } }
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/telemetry/telemetry_api_converters.cc b/chrome/browser/chromeos/extensions/telemetry/api/telemetry/telemetry_api_converters.cc index 524c94e0..97d1e4cf 100644 --- a/chrome/browser/chromeos/extensions/telemetry/api/telemetry/telemetry_api_converters.cc +++ b/chrome/browser/chromeos/extensions/telemetry/api/telemetry/telemetry_api_converters.cc
@@ -379,13 +379,13 @@ telemetry_service::ProbeCpuArchitectureEnum input) { switch (input) { case telemetry_service::ProbeCpuArchitectureEnum::kUnknown: - return telemetry_api::CpuArchitectureEnum::CPU_ARCHITECTURE_ENUM_UNKNOWN; + return telemetry_api::CpuArchitectureEnum::kUnknown; case telemetry_service::ProbeCpuArchitectureEnum::kX86_64: - return telemetry_api::CpuArchitectureEnum::CPU_ARCHITECTURE_ENUM_X86_64; + return telemetry_api::CpuArchitectureEnum::kX8664; case telemetry_service::ProbeCpuArchitectureEnum::kAArch64: - return telemetry_api::CpuArchitectureEnum::CPU_ARCHITECTURE_ENUM_AARCH64; + return telemetry_api::CpuArchitectureEnum::kAarch64; case telemetry_service::ProbeCpuArchitectureEnum::kArmv7l: - return telemetry_api::CpuArchitectureEnum::CPU_ARCHITECTURE_ENUM_ARMV7L; + return telemetry_api::CpuArchitectureEnum::kArmv7l; } NOTREACHED(); } @@ -394,21 +394,21 @@ chromeos::network_health::mojom::NetworkState input) { switch (input) { case network_health::mojom::NetworkState::kUninitialized: - return telemetry_api::NetworkState::NETWORK_STATE_UNINITIALIZED; + return telemetry_api::NetworkState::kUninitialized; case network_health::mojom::NetworkState::kDisabled: - return telemetry_api::NetworkState::NETWORK_STATE_DISABLED; + return telemetry_api::NetworkState::kDisabled; case network_health::mojom::NetworkState::kProhibited: - return telemetry_api::NetworkState::NETWORK_STATE_PROHIBITED; + return telemetry_api::NetworkState::kProhibited; case network_health::mojom::NetworkState::kNotConnected: - return telemetry_api::NetworkState::NETWORK_STATE_NOT_CONNECTED; + return telemetry_api::NetworkState::kNotConnected; case network_health::mojom::NetworkState::kConnecting: - return telemetry_api::NetworkState::NETWORK_STATE_CONNECTING; + return telemetry_api::NetworkState::kConnecting; case network_health::mojom::NetworkState::kPortal: - return telemetry_api::NetworkState::NETWORK_STATE_PORTAL; + return telemetry_api::NetworkState::kPortal; case network_health::mojom::NetworkState::kConnected: - return telemetry_api::NetworkState::NETWORK_STATE_CONNECTED; + return telemetry_api::NetworkState::kConnected; case network_health::mojom::NetworkState::kOnline: - return telemetry_api::NetworkState::NETWORK_STATE_ONLINE; + return telemetry_api::NetworkState::kOnline; } NOTREACHED(); } @@ -421,21 +421,21 @@ // cases. switch (input) { case network_config::mojom::NetworkType::kAll: - return telemetry_api::NetworkType::NETWORK_TYPE_NONE; + return telemetry_api::NetworkType::kNone; case network_config::mojom::NetworkType::kCellular: - return telemetry_api::NetworkType::NETWORK_TYPE_CELLULAR; + return telemetry_api::NetworkType::kCellular; case network_config::mojom::NetworkType::kEthernet: - return telemetry_api::NetworkType::NETWORK_TYPE_ETHERNET; + return telemetry_api::NetworkType::kEthernet; case network_config::mojom::NetworkType::kMobile: - return telemetry_api::NetworkType::NETWORK_TYPE_NONE; + return telemetry_api::NetworkType::kNone; case network_config::mojom::NetworkType::kTether: - return telemetry_api::NetworkType::NETWORK_TYPE_TETHER; + return telemetry_api::NetworkType::kTether; case network_config::mojom::NetworkType::kVPN: - return telemetry_api::NetworkType::NETWORK_TYPE_VPN; + return telemetry_api::NetworkType::kVpn; case network_config::mojom::NetworkType::kWireless: - return telemetry_api::NetworkType::NETWORK_TYPE_NONE; + return telemetry_api::NetworkType::kNone; case network_config::mojom::NetworkType::kWiFi: - return telemetry_api::NetworkType::NETWORK_TYPE_WIFI; + return telemetry_api::NetworkType::kWifi; } NOTREACHED(); } @@ -444,11 +444,11 @@ crosapi::mojom::ProbeTpmGSCVersion input) { switch (input) { case telemetry_service::ProbeTpmGSCVersion::kNotGSC: - return telemetry_api::TpmGSCVersion::TPM_GSC_VERSION_NOT_GSC; + return telemetry_api::TpmGSCVersion::kNotGsc; case telemetry_service::ProbeTpmGSCVersion::kCr50: - return telemetry_api::TpmGSCVersion::TPM_GSC_VERSION_CR50; + return telemetry_api::TpmGSCVersion::kCr50; case telemetry_service::ProbeTpmGSCVersion::kTi50: - return telemetry_api::TpmGSCVersion::TPM_GSC_VERSION_TI50; + return telemetry_api::TpmGSCVersion::kTi50; } NOTREACHED(); } @@ -457,32 +457,31 @@ telemetry_service::ProbeFwupdVersionFormat input) { switch (input) { case crosapi::mojom::ProbeFwupdVersionFormat::kUnknown: - return telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_PLAIN; + return telemetry_api::FwupdVersionFormat::kPlain; case crosapi::mojom::ProbeFwupdVersionFormat::kPlain: - return telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_PLAIN; + return telemetry_api::FwupdVersionFormat::kPlain; case crosapi::mojom::ProbeFwupdVersionFormat::kNumber: - return telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_NUMBER; + return telemetry_api::FwupdVersionFormat::kNumber; case crosapi::mojom::ProbeFwupdVersionFormat::kPair: - return telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_PAIR; + return telemetry_api::FwupdVersionFormat::kPair; case crosapi::mojom::ProbeFwupdVersionFormat::kTriplet: - return telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_TRIPLET; + return telemetry_api::FwupdVersionFormat::kTriplet; case crosapi::mojom::ProbeFwupdVersionFormat::kQuad: - return telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_QUAD; + return telemetry_api::FwupdVersionFormat::kQuad; case crosapi::mojom::ProbeFwupdVersionFormat::kBcd: - return telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_BCD; + return telemetry_api::FwupdVersionFormat::kBcd; case crosapi::mojom::ProbeFwupdVersionFormat::kIntelMe: - return telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_INTELME; + return telemetry_api::FwupdVersionFormat::kIntelMe; case crosapi::mojom::ProbeFwupdVersionFormat::kIntelMe2: - return telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_INTELME2; + return telemetry_api::FwupdVersionFormat::kIntelMe2; case crosapi::mojom::ProbeFwupdVersionFormat::kSurfaceLegacy: - return telemetry_api::FwupdVersionFormat:: - FWUPD_VERSION_FORMAT_SURFACELEGACY; + return telemetry_api::FwupdVersionFormat::kSurfaceLegacy; case crosapi::mojom::ProbeFwupdVersionFormat::kSurface: - return telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_SURFACE; + return telemetry_api::FwupdVersionFormat::kSurface; case crosapi::mojom::ProbeFwupdVersionFormat::kDellBios: - return telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_DELLBIOS; + return telemetry_api::FwupdVersionFormat::kDellBios; case crosapi::mojom::ProbeFwupdVersionFormat::kHex: - return telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_HEX; + return telemetry_api::FwupdVersionFormat::kHex; } NOTREACHED(); } @@ -490,13 +489,13 @@ telemetry_api::UsbVersion Convert(telemetry_service::ProbeUsbVersion input) { switch (input) { case crosapi::mojom::ProbeUsbVersion::kUnknown: - return telemetry_api::UsbVersion::USB_VERSION_UNKNOWN; + return telemetry_api::UsbVersion::kUnknown; case crosapi::mojom::ProbeUsbVersion::kUsb1: - return telemetry_api::UsbVersion::USB_VERSION_USB1; + return telemetry_api::UsbVersion::kUsb1; case crosapi::mojom::ProbeUsbVersion::kUsb2: - return telemetry_api::UsbVersion::USB_VERSION_USB2; + return telemetry_api::UsbVersion::kUsb2; case crosapi::mojom::ProbeUsbVersion::kUsb3: - return telemetry_api::UsbVersion::USB_VERSION_USB3; + return telemetry_api::UsbVersion::kUsb3; } NOTREACHED(); } @@ -505,19 +504,19 @@ telemetry_service::ProbeUsbSpecSpeed input) { switch (input) { case crosapi::mojom::ProbeUsbSpecSpeed::kUnknown: - return telemetry_api::UsbSpecSpeed::USB_SPEC_SPEED_UNKNOWN; + return telemetry_api::UsbSpecSpeed::kUnknown; case crosapi::mojom::ProbeUsbSpecSpeed::k1_5Mbps: - return telemetry_api::UsbSpecSpeed::USB_SPEC_SPEED_N1_5MBPS; + return telemetry_api::UsbSpecSpeed::kN15mbps; case crosapi::mojom::ProbeUsbSpecSpeed::k12Mbps: - return telemetry_api::UsbSpecSpeed::USB_SPEC_SPEED_N12MBPS; + return telemetry_api::UsbSpecSpeed::kN12Mbps; case crosapi::mojom::ProbeUsbSpecSpeed::k480Mbps: - return telemetry_api::UsbSpecSpeed::USB_SPEC_SPEED_N480MBPS; + return telemetry_api::UsbSpecSpeed::kN480Mbps; case crosapi::mojom::ProbeUsbSpecSpeed::k5Gbps: - return telemetry_api::UsbSpecSpeed::USB_SPEC_SPEED_N5GBPS; + return telemetry_api::UsbSpecSpeed::kN5Gbps; case crosapi::mojom::ProbeUsbSpecSpeed::k10Gbps: - return telemetry_api::UsbSpecSpeed::USB_SPEC_SPEED_N10GBPS; + return telemetry_api::UsbSpecSpeed::kN10Gbps; case crosapi::mojom::ProbeUsbSpecSpeed::k20Gbps: - return telemetry_api::UsbSpecSpeed::USB_SPEC_SPEED_N20GBPS; + return telemetry_api::UsbSpecSpeed::kN20Gbps; } NOTREACHED(); }
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/telemetry/telemetry_api_converters_unittest.cc b/chrome/browser/chromeos/extensions/telemetry/api/telemetry/telemetry_api_converters_unittest.cc index 974e714..7a1caee083 100644 --- a/chrome/browser/chromeos/extensions/telemetry/api/telemetry/telemetry_api_converters_unittest.cc +++ b/chrome/browser/chromeos/extensions/telemetry/api/telemetry/telemetry_api_converters_unittest.cc
@@ -193,13 +193,13 @@ } TEST(TelemetryApiConverters, CpuArchitectureEnum) { - EXPECT_EQ(telemetry_api::CpuArchitectureEnum::CPU_ARCHITECTURE_ENUM_UNKNOWN, + EXPECT_EQ(telemetry_api::CpuArchitectureEnum::kUnknown, Convert(telemetry_service::ProbeCpuArchitectureEnum::kUnknown)); - EXPECT_EQ(telemetry_api::CpuArchitectureEnum::CPU_ARCHITECTURE_ENUM_X86_64, + EXPECT_EQ(telemetry_api::CpuArchitectureEnum::kX8664, Convert(telemetry_service::ProbeCpuArchitectureEnum::kX86_64)); - EXPECT_EQ(telemetry_api::CpuArchitectureEnum::CPU_ARCHITECTURE_ENUM_AARCH64, + EXPECT_EQ(telemetry_api::CpuArchitectureEnum::kAarch64, Convert(telemetry_service::ProbeCpuArchitectureEnum::kAArch64)); - EXPECT_EQ(telemetry_api::CpuArchitectureEnum::CPU_ARCHITECTURE_ENUM_ARMV7L, + EXPECT_EQ(telemetry_api::CpuArchitectureEnum::kArmv7l, Convert(telemetry_service::ProbeCpuArchitectureEnum::kArmv7l)); } @@ -499,43 +499,43 @@ TEST(TelemetryApiConverters, NetworkStateEnum) { EXPECT_EQ( - telemetry_api::NetworkState::NETWORK_STATE_UNINITIALIZED, + telemetry_api::NetworkState::kUninitialized, Convert(chromeos::network_health::mojom::NetworkState::kUninitialized)); - EXPECT_EQ(telemetry_api::NetworkState::NETWORK_STATE_DISABLED, + EXPECT_EQ(telemetry_api::NetworkState::kDisabled, Convert(chromeos::network_health::mojom::NetworkState::kDisabled)); EXPECT_EQ( - telemetry_api::NetworkState::NETWORK_STATE_PROHIBITED, + telemetry_api::NetworkState::kProhibited, Convert(chromeos::network_health::mojom::NetworkState::kProhibited)); EXPECT_EQ( - telemetry_api::NetworkState::NETWORK_STATE_NOT_CONNECTED, + telemetry_api::NetworkState::kNotConnected, Convert(chromeos::network_health::mojom::NetworkState::kNotConnected)); EXPECT_EQ( - telemetry_api::NetworkState::NETWORK_STATE_CONNECTING, + telemetry_api::NetworkState::kConnecting, Convert(chromeos::network_health::mojom::NetworkState::kConnecting)); - EXPECT_EQ(telemetry_api::NetworkState::NETWORK_STATE_PORTAL, + EXPECT_EQ(telemetry_api::NetworkState::kPortal, Convert(chromeos::network_health::mojom::NetworkState::kPortal)); - EXPECT_EQ(telemetry_api::NetworkState::NETWORK_STATE_CONNECTED, + EXPECT_EQ(telemetry_api::NetworkState::kConnected, Convert(chromeos::network_health::mojom::NetworkState::kConnected)); - EXPECT_EQ(telemetry_api::NetworkState::NETWORK_STATE_ONLINE, + EXPECT_EQ(telemetry_api::NetworkState::kOnline, Convert(chromeos::network_health::mojom::NetworkState::kOnline)); } TEST(TelemetryApiConverters, NetworkTypeEnum) { - EXPECT_EQ(telemetry_api::NetworkType::NETWORK_TYPE_NONE, + EXPECT_EQ(telemetry_api::NetworkType::kNone, Convert(chromeos::network_config::mojom::NetworkType::kAll)); - EXPECT_EQ(telemetry_api::NetworkType::NETWORK_TYPE_CELLULAR, + EXPECT_EQ(telemetry_api::NetworkType::kCellular, Convert(chromeos::network_config::mojom::NetworkType::kCellular)); - EXPECT_EQ(telemetry_api::NetworkType::NETWORK_TYPE_ETHERNET, + EXPECT_EQ(telemetry_api::NetworkType::kEthernet, Convert(chromeos::network_config::mojom::NetworkType::kEthernet)); - EXPECT_EQ(telemetry_api::NetworkType::NETWORK_TYPE_NONE, + EXPECT_EQ(telemetry_api::NetworkType::kNone, Convert(chromeos::network_config::mojom::NetworkType::kMobile)); - EXPECT_EQ(telemetry_api::NetworkType::NETWORK_TYPE_TETHER, + EXPECT_EQ(telemetry_api::NetworkType::kTether, Convert(chromeos::network_config::mojom::NetworkType::kTether)); - EXPECT_EQ(telemetry_api::NetworkType::NETWORK_TYPE_VPN, + EXPECT_EQ(telemetry_api::NetworkType::kVpn, Convert(chromeos::network_config::mojom::NetworkType::kVPN)); - EXPECT_EQ(telemetry_api::NetworkType::NETWORK_TYPE_NONE, + EXPECT_EQ(telemetry_api::NetworkType::kNone, Convert(chromeos::network_config::mojom::NetworkType::kWireless)); - EXPECT_EQ(telemetry_api::NetworkType::NETWORK_TYPE_WIFI, + EXPECT_EQ(telemetry_api::NetworkType::kWifi, Convert(chromeos::network_config::mojom::NetworkType::kWiFi)); } @@ -555,8 +555,8 @@ chromeos::network_health::mojom::UInt32Value::New(kSignalStrength); auto result = ConvertPtr<telemetry_api::NetworkInfo>(std::move(input)); - EXPECT_EQ(result.type, telemetry_api::NetworkType::NETWORK_TYPE_WIFI); - EXPECT_EQ(result.state, telemetry_api::NetworkState::NETWORK_STATE_ONLINE); + EXPECT_EQ(result.type, telemetry_api::NetworkType::kWifi); + EXPECT_EQ(result.state, telemetry_api::NetworkState::kOnline); ASSERT_TRUE(result.ipv4_address); EXPECT_EQ(*result.ipv4_address, kIpv4Address); @@ -587,8 +587,7 @@ input->vendor_specific = kVendorSpecific; auto result = ConvertPtr<telemetry_api::TpmVersion>(std::move(input)); - EXPECT_EQ(telemetry_api::TpmGSCVersion::TPM_GSC_VERSION_CR50, - result.gsc_version); + EXPECT_EQ(telemetry_api::TpmGSCVersion::kCr50, result.gsc_version); ASSERT_TRUE(result.family); EXPECT_EQ(kFamily, static_cast<uint32_t>(*result.family)); ASSERT_TRUE(result.spec_level); @@ -704,8 +703,7 @@ auto result = ConvertPtr<telemetry_api::TpmInfo>(std::move(input)); auto version_result = std::move(result.version); - EXPECT_EQ(telemetry_api::TpmGSCVersion::TPM_GSC_VERSION_CR50, - version_result.gsc_version); + EXPECT_EQ(telemetry_api::TpmGSCVersion::kCr50, version_result.gsc_version); ASSERT_TRUE(version_result.family); EXPECT_EQ(kFamily, static_cast<uint32_t>(*version_result.family)); ASSERT_TRUE(version_result.spec_level); @@ -744,78 +742,77 @@ TEST(TelemetryApiConverters, UsbVersion) { EXPECT_EQ(Convert(crosapi::mojom::ProbeUsbVersion::kUnknown), - telemetry_api::UsbVersion::USB_VERSION_UNKNOWN); + telemetry_api::UsbVersion::kUnknown); EXPECT_EQ(Convert(crosapi::mojom::ProbeUsbVersion::kUsb1), - telemetry_api::UsbVersion::USB_VERSION_USB1); + telemetry_api::UsbVersion::kUsb1); EXPECT_EQ(Convert(crosapi::mojom::ProbeUsbVersion::kUsb2), - telemetry_api::UsbVersion::USB_VERSION_USB2); + telemetry_api::UsbVersion::kUsb2); EXPECT_EQ(Convert(crosapi::mojom::ProbeUsbVersion::kUsb3), - telemetry_api::UsbVersion::USB_VERSION_USB3); + telemetry_api::UsbVersion::kUsb3); } TEST(TelemetryApiConverters, UsbSpecSpeed) { EXPECT_EQ(Convert(crosapi::mojom::ProbeUsbSpecSpeed::kUnknown), - telemetry_api::UsbSpecSpeed::USB_SPEC_SPEED_UNKNOWN); + telemetry_api::UsbSpecSpeed::kUnknown); EXPECT_EQ(Convert(crosapi::mojom::ProbeUsbSpecSpeed::k1_5Mbps), - telemetry_api::UsbSpecSpeed::USB_SPEC_SPEED_N1_5MBPS); + telemetry_api::UsbSpecSpeed::kN15mbps); EXPECT_EQ(Convert(crosapi::mojom::ProbeUsbSpecSpeed::k12Mbps), - telemetry_api::UsbSpecSpeed::USB_SPEC_SPEED_N12MBPS); + telemetry_api::UsbSpecSpeed::kN12Mbps); EXPECT_EQ(Convert(crosapi::mojom::ProbeUsbSpecSpeed::k480Mbps), - telemetry_api::UsbSpecSpeed::USB_SPEC_SPEED_N480MBPS); + telemetry_api::UsbSpecSpeed::kN480Mbps); EXPECT_EQ(Convert(crosapi::mojom::ProbeUsbSpecSpeed::k5Gbps), - telemetry_api::UsbSpecSpeed::USB_SPEC_SPEED_N5GBPS); + telemetry_api::UsbSpecSpeed::kN5Gbps); EXPECT_EQ(Convert(crosapi::mojom::ProbeUsbSpecSpeed::k10Gbps), - telemetry_api::UsbSpecSpeed::USB_SPEC_SPEED_N10GBPS); + telemetry_api::UsbSpecSpeed::kN10Gbps); EXPECT_EQ(Convert(crosapi::mojom::ProbeUsbSpecSpeed::k20Gbps), - telemetry_api::UsbSpecSpeed::USB_SPEC_SPEED_N20GBPS); + telemetry_api::UsbSpecSpeed::kN20Gbps); } TEST(TelemetryApiConverters, FwupdVersionFormat) { EXPECT_EQ(Convert(crosapi::mojom::ProbeFwupdVersionFormat::kUnknown), - telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_PLAIN); + telemetry_api::FwupdVersionFormat::kPlain); EXPECT_EQ(Convert(crosapi::mojom::ProbeFwupdVersionFormat::kPlain), - telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_PLAIN); + telemetry_api::FwupdVersionFormat::kPlain); EXPECT_EQ(Convert(crosapi::mojom::ProbeFwupdVersionFormat::kNumber), - telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_NUMBER); + telemetry_api::FwupdVersionFormat::kNumber); EXPECT_EQ(Convert(crosapi::mojom::ProbeFwupdVersionFormat::kPair), - telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_PAIR); + telemetry_api::FwupdVersionFormat::kPair); EXPECT_EQ(Convert(crosapi::mojom::ProbeFwupdVersionFormat::kTriplet), - telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_TRIPLET); + telemetry_api::FwupdVersionFormat::kTriplet); EXPECT_EQ(Convert(crosapi::mojom::ProbeFwupdVersionFormat::kBcd), - telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_BCD); + telemetry_api::FwupdVersionFormat::kBcd); EXPECT_EQ(Convert(crosapi::mojom::ProbeFwupdVersionFormat::kIntelMe), - telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_INTELME); + telemetry_api::FwupdVersionFormat::kIntelMe); EXPECT_EQ(Convert(crosapi::mojom::ProbeFwupdVersionFormat::kIntelMe2), - telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_INTELME2); + telemetry_api::FwupdVersionFormat::kIntelMe2); - EXPECT_EQ( - Convert(crosapi::mojom::ProbeFwupdVersionFormat::kSurfaceLegacy), - telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_SURFACELEGACY); + EXPECT_EQ(Convert(crosapi::mojom::ProbeFwupdVersionFormat::kSurfaceLegacy), + telemetry_api::FwupdVersionFormat::kSurfaceLegacy); EXPECT_EQ(Convert(crosapi::mojom::ProbeFwupdVersionFormat::kSurface), - telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_SURFACE); + telemetry_api::FwupdVersionFormat::kSurface); EXPECT_EQ(Convert(crosapi::mojom::ProbeFwupdVersionFormat::kDellBios), - telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_DELLBIOS); + telemetry_api::FwupdVersionFormat::kDellBios); EXPECT_EQ(Convert(crosapi::mojom::ProbeFwupdVersionFormat::kHex), - telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_HEX); + telemetry_api::FwupdVersionFormat::kHex); } TEST(TelemetryApiConverters, FwupdFirmwareVersionInfo) { @@ -828,8 +825,7 @@ ConvertPtr<telemetry_api::FwupdFirmwareVersionInfo>(std::move(input)); EXPECT_EQ(result.version, kVersion); - EXPECT_EQ(result.version_format, - telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_HEX); + EXPECT_EQ(result.version_format, telemetry_api::FwupdVersionFormat::kHex); } TEST(TelemetryApiConverters, UsbBusInterfaceInfo) { @@ -928,11 +924,10 @@ ASSERT_TRUE(result.fwupd_firmware_version_info); EXPECT_EQ(result.fwupd_firmware_version_info->version, kVersion); EXPECT_EQ(result.fwupd_firmware_version_info->version_format, - telemetry_api::FwupdVersionFormat::FWUPD_VERSION_FORMAT_PAIR); + telemetry_api::FwupdVersionFormat::kPair); - EXPECT_EQ(result.version, telemetry_api::UsbVersion::USB_VERSION_USB3); - EXPECT_EQ(result.spec_speed, - telemetry_api::UsbSpecSpeed::USB_SPEC_SPEED_N20GBPS); + EXPECT_EQ(result.version, telemetry_api::UsbVersion::kUsb3); + EXPECT_EQ(result.spec_speed, telemetry_api::UsbSpecSpeed::kN20Gbps); } } // namespace converters
diff --git a/chrome/browser/devtools/chrome_devtools_manager_delegate.cc b/chrome/browser/devtools/chrome_devtools_manager_delegate.cc index 9068a8e..95dc0aa 100644 --- a/chrome/browser/devtools/chrome_devtools_manager_delegate.cc +++ b/chrome/browser/devtools/chrome_devtools_manager_delegate.cc
@@ -47,7 +47,9 @@ #include "extensions/browser/extension_host.h" #include "extensions/browser/extension_registry.h" #include "extensions/browser/process_manager.h" +#include "extensions/browser/view_type_utils.h" #include "extensions/common/manifest.h" +#include "extensions/common/mojom/view_type.mojom.h" #include "ui/base/resource/resource_bundle.h" #if BUILDFLAG(IS_CHROMEOS_ASH) @@ -62,6 +64,7 @@ const char ChromeDevToolsManagerDelegate::kTypeApp[] = "app"; const char ChromeDevToolsManagerDelegate::kTypeBackgroundPage[] = "background_page"; +const char ChromeDevToolsManagerDelegate::kTypePage[] = "page"; namespace { @@ -90,7 +93,11 @@ *type = ChromeDevToolsManagerDelegate::kTypeApp; return true; } - return false; + // Note that we are intentionally not setting name here, so that we can + // construct a name based on the URL or page title in + // RenderFrameDevToolsAgentHost::GetTitle() + *type = ChromeDevToolsManagerDelegate::kTypePage; + return true; } ChromeDevToolsManagerDelegate* g_instance;
diff --git a/chrome/browser/devtools/chrome_devtools_manager_delegate.h b/chrome/browser/devtools/chrome_devtools_manager_delegate.h index 06ed131..5a1519d7 100644 --- a/chrome/browser/devtools/chrome_devtools_manager_delegate.h +++ b/chrome/browser/devtools/chrome_devtools_manager_delegate.h
@@ -33,6 +33,7 @@ public: static const char kTypeApp[]; static const char kTypeBackgroundPage[]; + static const char kTypePage[]; ChromeDevToolsManagerDelegate();
diff --git a/chrome/browser/enterprise/connectors/device_trust/signals/decorators/common/context_signals_decorator.cc b/chrome/browser/enterprise/connectors/device_trust/signals/decorators/common/context_signals_decorator.cc index d5b2595..78b6080 100644 --- a/chrome/browser/enterprise/connectors/device_trust/signals/decorators/common/context_signals_decorator.cc +++ b/chrome/browser/enterprise/connectors/device_trust/signals/decorators/common/context_signals_decorator.cc
@@ -93,11 +93,6 @@ signals.Set(device_signals::names::kSystemDnsServers, ToListValue(context_info.system_dns_servers)); - if (context_info.chrome_cleanup_enabled) { - signals.Set(device_signals::names::kChromeCleanupEnabled, - context_info.chrome_cleanup_enabled.value()); - } - if (context_info.third_party_blocking_enabled) { signals.Set(device_signals::names::kThirdPartyBlockingEnabled, context_info.third_party_blocking_enabled.value());
diff --git a/chrome/browser/enterprise/signals/context_info_fetcher.cc b/chrome/browser/enterprise/signals/context_info_fetcher.cc index 109f0da..02a61bd6 100644 --- a/chrome/browser/enterprise/signals/context_info_fetcher.cc +++ b/chrome/browser/enterprise/signals/context_info_fetcher.cc
@@ -223,8 +223,6 @@ content::SiteIsolationPolicy::UseDedicatedProcessesForAllSites(); info.built_in_dns_client_enabled = utils::GetBuiltInDnsClientEnabled(g_browser_process->local_state()); - info.chrome_cleanup_enabled = - utils::GetChromeCleanupEnabled(g_browser_process->local_state()); info.chrome_remote_desktop_app_blocked = utils::GetChromeRemoteDesktopAppBlocked( PolicyBlocklistFactory::GetForBrowserContext(browser_context_));
diff --git a/chrome/browser/enterprise/signals/context_info_fetcher.h b/chrome/browser/enterprise/signals/context_info_fetcher.h index 1346a3e..9c169ff 100644 --- a/chrome/browser/enterprise/signals/context_info_fetcher.h +++ b/chrome/browser/enterprise/signals/context_info_fetcher.h
@@ -46,7 +46,6 @@ bool built_in_dns_client_enabled; absl::optional<safe_browsing::PasswordProtectionTrigger> password_protection_warning_trigger; - absl::optional<bool> chrome_cleanup_enabled; bool chrome_remote_desktop_app_blocked; absl::optional<bool> third_party_blocking_enabled; SettingValue os_firewall;
diff --git a/chrome/browser/enterprise/signals/signals_utils.cc b/chrome/browser/enterprise/signals/signals_utils.cc index a958f126..0bdc887 100644 --- a/chrome/browser/enterprise/signals/signals_utils.cc +++ b/chrome/browser/enterprise/signals/signals_utils.cc
@@ -74,15 +74,6 @@ profile_prefs->GetInteger(prefs::kPasswordProtectionWarningTrigger)); } -absl::optional<bool> GetChromeCleanupEnabled(PrefService* local_state) { - DCHECK(local_state); -#if BUILDFLAG(IS_WIN) - return local_state->GetBoolean(prefs::kSwReporterEnabled); -#else - return absl::nullopt; -#endif -} - bool GetChromeRemoteDesktopAppBlocked(PolicyBlocklistService* service) { DCHECK(service); return IsURLBlocked(GURL("https://remotedesktop.google.com"), service) ||
diff --git a/chrome/browser/enterprise/signals/signals_utils.h b/chrome/browser/enterprise/signals/signals_utils.h index b95dc83..d975f3c 100644 --- a/chrome/browser/enterprise/signals/signals_utils.h +++ b/chrome/browser/enterprise/signals/signals_utils.h
@@ -19,8 +19,6 @@ bool GetBuiltInDnsClientEnabled(PrefService* local_state); -absl::optional<bool> GetChromeCleanupEnabled(PrefService* local_state); - absl::optional<safe_browsing::PasswordProtectionTrigger> GetPasswordProtectionWarningTrigger(PrefService* profile_prefs);
diff --git a/chrome/browser/extensions/activity_log/activity_actions.cc b/chrome/browser/extensions/activity_log/activity_actions.cc index 25c302e..8460577 100644 --- a/chrome/browser/extensions/activity_log/activity_actions.cc +++ b/chrome/browser/extensions/activity_log/activity_actions.cc
@@ -140,30 +140,30 @@ // without affecting the database. switch (action_type()) { case ACTION_API_CALL: - result.activity_type = activity_log::EXTENSION_ACTIVITY_TYPE_API_CALL; + result.activity_type = activity_log::ExtensionActivityType::kApiCall; break; case ACTION_API_EVENT: - result.activity_type = activity_log::EXTENSION_ACTIVITY_TYPE_API_EVENT; + result.activity_type = activity_log::ExtensionActivityType::kApiEvent; break; case ACTION_CONTENT_SCRIPT: result.activity_type = - activity_log::EXTENSION_ACTIVITY_TYPE_CONTENT_SCRIPT; + activity_log::ExtensionActivityType::kContentScript; break; case ACTION_DOM_ACCESS: - result.activity_type = activity_log::EXTENSION_ACTIVITY_TYPE_DOM_ACCESS; + result.activity_type = activity_log::ExtensionActivityType::kDomAccess; break; case ACTION_DOM_EVENT: - result.activity_type = activity_log::EXTENSION_ACTIVITY_TYPE_DOM_EVENT; + result.activity_type = activity_log::ExtensionActivityType::kDomEvent; break; case ACTION_WEB_REQUEST: - result.activity_type = activity_log::EXTENSION_ACTIVITY_TYPE_WEB_REQUEST; + result.activity_type = activity_log::ExtensionActivityType::kWebRequest; break; case UNUSED_ACTION_API_BLOCKED: case ACTION_ANY: default: // This shouldn't be reached, but some people might have old or otherwise // weird db entries. Treat it like an API call if that happens. - result.activity_type = activity_log::EXTENSION_ACTIVITY_TYPE_API_CALL; + result.activity_type = activity_log::ExtensionActivityType::kApiCall; break; } @@ -201,38 +201,37 @@ switch (static_cast<DomActionType::Type>(dom_verb.value())) { case DomActionType::GETTER: result.other->dom_verb = - activity_log::EXTENSION_ACTIVITY_DOM_VERB_GETTER; + activity_log::ExtensionActivityDomVerb::kGetter; break; case DomActionType::SETTER: result.other->dom_verb = - activity_log::EXTENSION_ACTIVITY_DOM_VERB_SETTER; + activity_log::ExtensionActivityDomVerb::kSetter; break; case DomActionType::METHOD: result.other->dom_verb = - activity_log::EXTENSION_ACTIVITY_DOM_VERB_METHOD; + activity_log::ExtensionActivityDomVerb::kMethod; break; case DomActionType::INSERTED: result.other->dom_verb = - activity_log::EXTENSION_ACTIVITY_DOM_VERB_INSERTED; + activity_log::ExtensionActivityDomVerb::kInserted; break; case DomActionType::XHR: - result.other->dom_verb = - activity_log::EXTENSION_ACTIVITY_DOM_VERB_XHR; + result.other->dom_verb = activity_log::ExtensionActivityDomVerb::kXhr; break; case DomActionType::WEBREQUEST: result.other->dom_verb = - activity_log::EXTENSION_ACTIVITY_DOM_VERB_WEBREQUEST; + activity_log::ExtensionActivityDomVerb::kWebrequest; break; case DomActionType::MODIFIED: result.other->dom_verb = - activity_log::EXTENSION_ACTIVITY_DOM_VERB_MODIFIED; + activity_log::ExtensionActivityDomVerb::kModified; break; default: result.other->dom_verb = - activity_log::EXTENSION_ACTIVITY_DOM_VERB_NONE; + activity_log::ExtensionActivityDomVerb::kNone; } } else { - result.other->dom_verb = activity_log::EXTENSION_ACTIVITY_DOM_VERB_NONE; + result.other->dom_verb = activity_log::ExtensionActivityDomVerb::kNone; } }
diff --git a/chrome/browser/extensions/api/activity_log_private/activity_log_private_api.cc b/chrome/browser/extensions/api/activity_log_private/activity_log_private_api.cc index 11a9ded..9f68744 100644 --- a/chrome/browser/extensions/api/activity_log_private/activity_log_private_api.cc +++ b/chrome/browser/extensions/api/activity_log_private/activity_log_private_api.cc
@@ -108,25 +108,25 @@ Filter filter = std::move(params->filter); Action::ActionType action_type = Action::ACTION_API_CALL; switch (filter.activity_type) { - case activity_log_private::EXTENSION_ACTIVITY_FILTER_API_CALL: + case activity_log_private::ExtensionActivityFilter::kApiCall: action_type = Action::ACTION_API_CALL; break; - case activity_log_private::EXTENSION_ACTIVITY_FILTER_API_EVENT: + case activity_log_private::ExtensionActivityFilter::kApiEvent: action_type = Action::ACTION_API_EVENT; break; - case activity_log_private::EXTENSION_ACTIVITY_FILTER_CONTENT_SCRIPT: + case activity_log_private::ExtensionActivityFilter::kContentScript: action_type = Action::ACTION_CONTENT_SCRIPT; break; - case activity_log_private::EXTENSION_ACTIVITY_FILTER_DOM_ACCESS: + case activity_log_private::ExtensionActivityFilter::kDomAccess: action_type = Action::ACTION_DOM_ACCESS; break; - case activity_log_private::EXTENSION_ACTIVITY_FILTER_DOM_EVENT: + case activity_log_private::ExtensionActivityFilter::kDomEvent: action_type = Action::ACTION_DOM_EVENT; break; - case activity_log_private::EXTENSION_ACTIVITY_FILTER_WEB_REQUEST: + case activity_log_private::ExtensionActivityFilter::kWebRequest: action_type = Action::ACTION_WEB_REQUEST; break; - case activity_log_private::EXTENSION_ACTIVITY_FILTER_ANY: + case activity_log_private::ExtensionActivityFilter::kAny: default: action_type = Action::ACTION_ANY; }
diff --git a/chrome/browser/extensions/api/activity_log_private/activity_log_private_api_unittest.cc b/chrome/browser/extensions/api/activity_log_private/activity_log_private_api_unittest.cc index 559d3f9..f235fe6 100644 --- a/chrome/browser/extensions/api/activity_log_private/activity_log_private_api_unittest.cc +++ b/chrome/browser/extensions/api/activity_log_private/activity_log_private_api_unittest.cc
@@ -37,7 +37,7 @@ kApiCall)); action->set_args(std::move(args)); ExtensionActivity result = action->ConvertToExtensionActivity(); - ASSERT_EQ(api::activity_log_private::EXTENSION_ACTIVITY_TYPE_API_CALL, + ASSERT_EQ(api::activity_log_private::ExtensionActivityType::kApiCall, result.activity_type); ASSERT_EQ(kExtensionId, *result.extension_id); ASSERT_EQ(kApiCall, *result.api_call); @@ -67,7 +67,7 @@ ASSERT_EQ(kApiCall, *result.api_call); ASSERT_EQ(kArgs, *result.args); auto other = std::move(result.other); - ASSERT_EQ(api::activity_log_private::EXTENSION_ACTIVITY_DOM_VERB_INSERTED, + ASSERT_EQ(api::activity_log_private::ExtensionActivityDomVerb::kInserted, other->dom_verb); ASSERT_TRUE(other->prerender); ASSERT_EQ("12345", *result.activity_id);
diff --git a/chrome/browser/extensions/api/bookmarks/bookmark_api_helpers.cc b/chrome/browser/extensions/api/bookmarks/bookmark_api_helpers.cc index 08464d3..6783e39 100644 --- a/chrome/browser/extensions/api/bookmarks/bookmark_api_helpers.cc +++ b/chrome/browser/extensions/api/bookmarks/bookmark_api_helpers.cc
@@ -88,7 +88,7 @@ if (bookmarks::IsDescendantOf(node, managed->managed_node())) { out_bookmark_tree_node->unmodifiable = - api::bookmarks::BOOKMARK_TREE_NODE_UNMODIFIABLE_MANAGED; + api::bookmarks::BookmarkTreeNodeUnmodifiable::kManaged; } if (recurse && node->is_folder()) {
diff --git a/chrome/browser/extensions/api/bookmarks/bookmark_api_helpers_unittest.cc b/chrome/browser/extensions/api/bookmarks/bookmark_api_helpers_unittest.cc index c6f029e5..3064d3d 100644 --- a/chrome/browser/extensions/api/bookmarks/bookmark_api_helpers_unittest.cc +++ b/chrome/browser/extensions/api/bookmarks/bookmark_api_helpers_unittest.cc
@@ -119,7 +119,7 @@ EXPECT_EQ("Digg", tree.title); ASSERT_TRUE(tree.url); EXPECT_EQ("http://www.reddit.com/", *tree.url); - EXPECT_EQ(api::bookmarks::BOOKMARK_TREE_NODE_UNMODIFIABLE_NONE, + EXPECT_EQ(api::bookmarks::BookmarkTreeNodeUnmodifiable::kNone, tree.unmodifiable); } @@ -132,7 +132,7 @@ false); // Only folders. EXPECT_EQ("Chromium", tree.title); EXPECT_EQ("http://www.chromium.org/", *tree.url); - EXPECT_EQ(api::bookmarks::BOOKMARK_TREE_NODE_UNMODIFIABLE_MANAGED, + EXPECT_EQ(api::bookmarks::BookmarkTreeNodeUnmodifiable::kManaged, tree.unmodifiable); }
diff --git a/chrome/browser/extensions/api/debugger/debugger_api.cc b/chrome/browser/extensions/api/debugger/debugger_api.cc index 23b35b1f..c22bcf93 100644 --- a/chrome/browser/extensions/api/debugger/debugger_api.cc +++ b/chrome/browser/extensions/api/debugger/debugger_api.cc
@@ -788,7 +788,11 @@ if (type == DevToolsAgentHost::kTypePage) { int tab_id = extensions::ExtensionTabUtil::GetTabId(host->GetWebContents()); - dictionary.Set(kTargetTabIdField, tab_id); + if (tab_id != api::tabs::TAB_ID_NONE) { + dictionary.Set(kTargetTabIdField, tab_id); + } else { + dictionary.Set(kTargetExtensionIdField, host->GetURL().host()); + } target_type = kTargetTypePage; } else if (type == ChromeDevToolsManagerDelegate::kTypeBackgroundPage) { dictionary.Set(kTargetExtensionIdField, host->GetURL().host());
diff --git a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_api.cc b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_api.cc index e789555..95fe6fdd 100644 --- a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_api.cc +++ b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_api.cc
@@ -86,7 +86,6 @@ info.on_security_event_providers = std::move(signals.on_security_event_providers); info.site_isolation_enabled = signals.site_isolation_enabled; - info.chrome_cleanup_enabled = signals.chrome_cleanup_enabled; info.chrome_remote_desktop_app_blocked = signals.chrome_remote_desktop_app_blocked; info.third_party_blocking_enabled = signals.third_party_blocking_enabled;
diff --git a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_apitest.cc b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_apitest.cc index 6a85654..a1406b5 100644 --- a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_apitest.cc +++ b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_apitest.cc
@@ -463,20 +463,13 @@ init_params->device_properties->serial_number = kFakeDeviceID; chromeos::BrowserInitParams::SetInitParamsForTests(std::move(init_params)); #endif // BUILDFLAG(IS_CHROMEOS_LACROS) -#if BUILDFLAG(IS_WIN) - constexpr char kChromeCleanupEnabledType[] = "boolean"; -#if BUILDFLAG(GOOGLE_CHROME_BRANDING) +#if BUILDFLAG(IS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING) constexpr char kThirdPartyBlockingEnabledType[] = "boolean"; - constexpr char kCount[] = "19"; -#else - constexpr char kThirdPartyBlockingEnabledType[] = "undefined"; constexpr char kCount[] = "18"; -#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING) #else - constexpr char kChromeCleanupEnabledType[] = "undefined"; constexpr char kThirdPartyBlockingEnabledType[] = "undefined"; constexpr char kCount[] = "17"; -#endif // BUILDFLAG(IS_WIN) +#endif // BUILDFLAG(IS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING) constexpr char kTest[] = R"( chrome.test.assertEq( @@ -500,7 +493,6 @@ chrome.test.assertEq(typeof info.builtInDnsClientEnabled, 'boolean'); chrome.test.assertEq (typeof info.passwordProtectionWarningTrigger, 'string'); - chrome.test.assertEq(typeof info.chromeCleanupEnabled, '%s'); chrome.test.assertEq (typeof info.chromeRemoteDesktopAppBlocked, 'boolean'); chrome.test.assertEq(typeof info.thirdPartyBlockingEnabled,'%s'); @@ -510,8 +502,7 @@ chrome.test.notifyPass(); });)"; - RunTest(base::StringPrintf(kTest, kCount, kChromeCleanupEnabledType, - kThirdPartyBlockingEnabledType)); + RunTest(base::StringPrintf(kTest, kCount, kThirdPartyBlockingEnabledType)); } IN_PROC_BROWSER_TEST_F(EnterpriseReportingPrivateApiTest, GetCertificate) {
diff --git a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_browsertest.cc b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_browsertest.cc index 037bd8f6..207b1c5 100644 --- a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_browsertest.cc +++ b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_browsertest.cc
@@ -291,15 +291,6 @@ #endif } - void ExpectDefaultChromeCleanupEnabled( - const enterprise_reporting_private::ContextInfo& info) { -#if BUILDFLAG(IS_WIN) - EXPECT_TRUE(*info.chrome_cleanup_enabled); -#else - EXPECT_FALSE(info.chrome_cleanup_enabled.has_value()); -#endif - } - void ExpectDefaultThirdPartyBlockingEnabled( const enterprise_reporting_private::ContextInfo& info) { #if BUILDFLAG(IS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING) @@ -341,7 +332,6 @@ EXPECT_EQ( enterprise_reporting_private::PASSWORD_PROTECTION_TRIGGER_POLICY_UNSET, info.password_protection_warning_trigger); - ExpectDefaultChromeCleanupEnabled(info); EXPECT_FALSE(info.chrome_remote_desktop_app_blocked); ExpectDefaultThirdPartyBlockingEnabled(info); EXPECT_EQ(dev_mode_enabled() ? api::enterprise_reporting_private:: @@ -407,11 +397,6 @@ EXPECT_EQ( enterprise_reporting_private::PASSWORD_PROTECTION_TRIGGER_POLICY_UNSET, info.password_protection_warning_trigger); -#if BUILDFLAG(IS_WIN) - EXPECT_TRUE(*info.chrome_cleanup_enabled); -#else - EXPECT_FALSE(info.chrome_cleanup_enabled.has_value()); -#endif EXPECT_FALSE(info.chrome_remote_desktop_app_blocked); #if BUILDFLAG(IS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING) EXPECT_TRUE(*info.third_party_blocking_enabled);
diff --git a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_unittest.cc b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_unittest.cc index 5565965..e5ada08 100644 --- a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_unittest.cc +++ b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_unittest.cc
@@ -462,14 +462,6 @@ #endif } - void ExpectDefaultChromeCleanupEnabled( - const enterprise_reporting_private::ContextInfo& info) { -#if BUILDFLAG(IS_WIN) - EXPECT_TRUE(*info.chrome_cleanup_enabled); -#else - EXPECT_FALSE(info.chrome_cleanup_enabled.has_value()); -#endif - } void ExpectDefaultThirdPartyBlockingEnabled( const enterprise_reporting_private::ContextInfo& info) { #if BUILDFLAG(IS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING) @@ -501,7 +493,6 @@ EXPECT_EQ( enterprise_reporting_private::PASSWORD_PROTECTION_TRIGGER_POLICY_UNSET, info.password_protection_warning_trigger); - ExpectDefaultChromeCleanupEnabled(info); EXPECT_FALSE(info.chrome_remote_desktop_app_blocked); ExpectDefaultThirdPartyBlockingEnabled(info); EXPECT_TRUE(info.enterprise_profile_id); @@ -533,7 +524,6 @@ info.safe_browsing_protection_level); EXPECT_EQ(BuiltInDnsClientPlatformDefault(), info.built_in_dns_client_enabled); - ExpectDefaultChromeCleanupEnabled(info); EXPECT_FALSE(info.chrome_remote_desktop_app_blocked); EXPECT_EQ(policyValue, *info.third_party_blocking_enabled); } @@ -725,7 +715,6 @@ EXPECT_EQ( enterprise_reporting_private::PASSWORD_PROTECTION_TRIGGER_POLICY_UNSET, info.password_protection_warning_trigger); - ExpectDefaultChromeCleanupEnabled(info); EXPECT_FALSE(info.chrome_remote_desktop_app_blocked); ExpectDefaultThirdPartyBlockingEnabled(info); EXPECT_TRUE(info.enterprise_profile_id); @@ -798,46 +787,6 @@ enterprise_reporting_private::SETTING_VALUE_UNKNOWN)); #endif // BUILDFLAG(IS_LINUX) -#if BUILDFLAG(IS_WIN) -class EnterpriseReportingPrivateGetContextInfoChromeCleanupTest - : public EnterpriseReportingPrivateGetContextInfoTest, - public testing::WithParamInterface<bool> {}; - -TEST_P(EnterpriseReportingPrivateGetContextInfoChromeCleanupTest, Test) { - bool policy_value = GetParam(); - - g_browser_process->local_state()->SetBoolean(prefs::kSwReporterEnabled, - policy_value); - - enterprise_reporting_private::ContextInfo info = GetContextInfo(); - - EXPECT_TRUE(info.browser_affiliation_ids.empty()); - EXPECT_TRUE(info.profile_affiliation_ids.empty()); - EXPECT_TRUE(info.on_file_attached_providers.empty()); - EXPECT_TRUE(info.on_file_downloaded_providers.empty()); - EXPECT_TRUE(info.on_bulk_data_entry_providers.empty()); - EXPECT_EQ(enterprise_reporting_private::REALTIME_URL_CHECK_MODE_DISABLED, - info.realtime_url_check_mode); - EXPECT_TRUE(info.on_security_event_providers.empty()); - EXPECT_EQ(version_info::GetVersionNumber(), info.browser_version); - EXPECT_EQ(enterprise_reporting_private::SAFE_BROWSING_LEVEL_STANDARD, - info.safe_browsing_protection_level); - EXPECT_EQ(BuiltInDnsClientPlatformDefault(), - info.built_in_dns_client_enabled); - EXPECT_EQ( - enterprise_reporting_private::PASSWORD_PROTECTION_TRIGGER_POLICY_UNSET, - info.password_protection_warning_trigger); - ExpectDefaultThirdPartyBlockingEnabled(info); - EXPECT_EQ(policy_value, *info.chrome_cleanup_enabled); - EXPECT_TRUE(info.enterprise_profile_id); -} - -INSTANTIATE_TEST_SUITE_P( - , - EnterpriseReportingPrivateGetContextInfoChromeCleanupTest, - testing::Bool()); -#endif // BUILDFLAG(IS_WIN) - class EnterpriseReportingPrivateGetContextInfoChromeRemoteDesktopAppBlockedTest : public EnterpriseReportingPrivateGetContextInfoTest, public testing::WithParamInterface<const char*> { @@ -874,7 +823,6 @@ EXPECT_EQ( enterprise_reporting_private::PASSWORD_PROTECTION_TRIGGER_POLICY_UNSET, info.password_protection_warning_trigger); - ExpectDefaultChromeCleanupEnabled(info); ExpectDefaultThirdPartyBlockingEnabled(info); EXPECT_TRUE(info.enterprise_profile_id); } @@ -1009,7 +957,6 @@ EXPECT_EQ( enterprise_reporting_private::PASSWORD_PROTECTION_TRIGGER_POLICY_UNSET, info.password_protection_warning_trigger); - ExpectDefaultChromeCleanupEnabled(info); EXPECT_FALSE(info.chrome_remote_desktop_app_blocked); ExpectDefaultThirdPartyBlockingEnabled(info); EXPECT_EQ(ToInfoSettingValue(firewall_value_), info.os_firewall);
diff --git a/chrome/browser/extensions/api/media_perception_private/media_perception_api_delegate_chromeos.cc b/chrome/browser/extensions/api/media_perception_private/media_perception_api_delegate_chromeos.cc index 3014007d..219526e 100644 --- a/chrome/browser/extensions/api/media_perception_private/media_perception_api_delegate_chromeos.cc +++ b/chrome/browser/extensions/api/media_perception_private/media_perception_api_delegate_chromeos.cc
@@ -27,11 +27,11 @@ std::string GetComponentNameForComponentType( const extensions::api::media_perception_private::ComponentType& type) { switch (type) { - case extensions::api::media_perception_private::COMPONENT_TYPE_LIGHT: + case extensions::api::media_perception_private::ComponentType::kLight: return kLightComponentName; - case extensions::api::media_perception_private::COMPONENT_TYPE_FULL: + case extensions::api::media_perception_private::ComponentType::kFull: return kFullComponentName; - case extensions::api::media_perception_private::COMPONENT_TYPE_NONE: + case extensions::api::media_perception_private::ComponentType::kNone: LOG(ERROR) << "No component type requested."; return ""; } @@ -45,27 +45,27 @@ switch (error) { case component_updater::CrOSComponentManager::Error::ERROR_MAX: case component_updater::CrOSComponentManager::Error::NONE: - return api::media_perception_private::COMPONENT_INSTALLATION_ERROR_NONE; + return api::media_perception_private::ComponentInstallationError::kNone; case component_updater::CrOSComponentManager::Error::UNKNOWN_COMPONENT: - return api::media_perception_private:: - COMPONENT_INSTALLATION_ERROR_UNKNOWN_COMPONENT; + return api::media_perception_private::ComponentInstallationError:: + kUnknownComponent; case component_updater::CrOSComponentManager::Error::INSTALL_FAILURE: case component_updater::CrOSComponentManager::Error::UPDATE_IN_PROGRESS: - return api::media_perception_private:: - COMPONENT_INSTALLATION_ERROR_INSTALL_FAILURE; + return api::media_perception_private::ComponentInstallationError:: + kInstallFailure; case component_updater::CrOSComponentManager::Error::MOUNT_FAILURE: - return api::media_perception_private:: - COMPONENT_INSTALLATION_ERROR_MOUNT_FAILURE; + return api::media_perception_private::ComponentInstallationError:: + kMountFailure; case component_updater::CrOSComponentManager::Error:: COMPATIBILITY_CHECK_FAILED: - return api::media_perception_private:: - COMPONENT_INSTALLATION_ERROR_COMPATIBILITY_CHECK_FAILED; + return api::media_perception_private::ComponentInstallationError:: + kCompatibilityCheckFailed; case component_updater::CrOSComponentManager::Error::NOT_FOUND: - return api::media_perception_private:: - COMPONENT_INSTALLATION_ERROR_NOT_FOUND; + return api::media_perception_private::ComponentInstallationError:: + kNotFound; } NOTREACHED() << "Reached component error type not in switch."; - return api::media_perception_private::COMPONENT_INSTALLATION_ERROR_NONE; + return api::media_perception_private::ComponentInstallationError::kNone; } void OnLoadComponent(
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 8887c7c..c28450a8 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -898,6 +898,11 @@ "expiry_milestone": 114 }, { + "name": "camera-app-time-lapse", + "owners": [ "kamchonlathorn", "chromeos-camera-app-eng@google.com" ], + "expiry_milestone": 120 + }, + { "name": "canvas-2d-layers", "owners": [ "fserb", "jpgravel", "juanmihd", "yiyix" ], "expiry_milestone": 114 @@ -4162,11 +4167,6 @@ "expiry_milestone": 113 }, { - "name": "hdrnet-override", - "owners": [ "jcliang", "chromeos-camera-eng@google.com" ], - "expiry_milestone": 110 - }, - { "name": "heavy-ad-privacy-mitigations", "owners": [ "johnidel", "jkarlin" ], "expiry_milestone": 97
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 9c1c71d..48badb28 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -5056,10 +5056,6 @@ const char kForceControlFaceAeDescription[] = "Control this flag to force enable or disable face AE for camera"; -const char kHdrNetOverrideName[] = "HDRnet control override"; -const char kHdrNetOverrideDescription[] = - "Overrides the default to forcibly enable or disable the HDRnet feature"; - const char kCellularBypassESimInstallationConnectivityCheckName[] = "Bypass eSIM installation connectivity check"; const char kCellularBypassESimInstallationConnectivityCheckDescription[] = @@ -5148,6 +5144,10 @@ "Enable this flag to show warning and handle the video recording when " "device storage is running low"; +const char kCameraAppTimeLapseName[] = "Camera App Time-lapse Recording"; +const char kCameraAppTimeLapseDescription[] = + "Enable this flag to record time-lapse video in Camera app."; + const char kDisableBufferBWCompressionName[] = "Disable buffer bandwidth compression"; const char kDisableBufferBWCompressionDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 617dc940..c0bafd7 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -2905,9 +2905,6 @@ extern const char kForceControlFaceAeName[]; extern const char kForceControlFaceAeDescription[]; -extern const char kHdrNetOverrideName[]; -extern const char kHdrNetOverrideDescription[]; - extern const char kCellularBypassESimInstallationConnectivityCheckName[]; extern const char kCellularBypassESimInstallationConnectivityCheckDescription[]; @@ -2965,6 +2962,9 @@ extern const char kCameraAppLowStorageWarningName[]; extern const char kCameraAppLowStorageWarningDescription[]; +extern const char kCameraAppTimeLapseName[]; +extern const char kCameraAppTimeLapseDescription[]; + extern const char kDisableBufferBWCompressionName[]; extern const char kDisableBufferBWCompressionDescription[];
diff --git a/chrome/browser/metrics/variations/BUILD.gn b/chrome/browser/metrics/variations/BUILD.gn index ee36186..49388733 100644 --- a/chrome/browser/metrics/variations/BUILD.gn +++ b/chrome/browser/metrics/variations/BUILD.gn
@@ -20,6 +20,7 @@ "//components/strings:components_chromium_strings", "//components/strings:components_google_chrome_strings", "//components/strings:components_strings", + "//components/variations:variations", ] namespace = "chrome_variations" header_filename = "ui_string_overrider_factory.h"
diff --git a/chrome/browser/metrics/variations/chrome_variations_service_client.cc b/chrome/browser/metrics/variations/chrome_variations_service_client.cc index 323c120..3ec4691 100644 --- a/chrome/browser/metrics/variations/chrome_variations_service_client.cc +++ b/chrome/browser/metrics/variations/chrome_variations_service_client.cc
@@ -4,14 +4,22 @@ #include "chrome/browser/metrics/variations/chrome_variations_service_client.h" +#include "base/feature_list.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "build/config/chromebox_for_meetings/buildflags.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/google/google_brand.h" +#include "chrome/browser/metrics/variations/google_groups_updater_service_factory.h" #include "chrome/browser/net/system_network_context_manager.h" +#include "chrome/browser/profiles/profile_attributes_storage.h" +#include "chrome/browser/profiles/profile_manager.h" #include "chrome/common/channel_info.h" +#include "chrome/common/pref_names.h" +#include "components/prefs/scoped_user_pref_update.h" +#include "components/variations/pref_names.h" #include "components/variations/seed_response.h" +#include "components/variations/service/google_groups_updater_service.h" #include "components/variations/service/variations_service_client.h" #include "components/version_info/version_info.h" #include "services/network/public/cpp/shared_url_loader_factory.h" @@ -121,3 +129,30 @@ return nullptr; #endif } + +// Remove any profiles from variations prefs that no longer exist in the +// ProfileAttributesStorage source-of-truth. +void ChromeVariationsServiceClient:: + RemoveGoogleGroupsFromPrefsForDeletedProfiles(PrefService* local_state) { + // Get the list of profiles in attribute storage. + base::flat_set<std::string> profile_keys = + ProfileAttributesStorage::GetAllProfilesKeys(local_state); + + // Get the current value of the local state dict. + const base::Value::Dict& cached_profiles = + local_state->GetDict(variations::prefs::kVariationsGoogleGroups); + std::vector<std::string> variations_profiles_to_delete; + for (std::pair<const std::string&, const base::Value&> profile : + cached_profiles) { + if (!profile_keys.contains(profile.first)) { + variations_profiles_to_delete.push_back(profile.first); + } + } + + ScopedDictPrefUpdate variations_prefs_update( + local_state, variations::prefs::kVariationsGoogleGroups); + base::Value::Dict& variations_prefs_dict = variations_prefs_update.Get(); + for (const auto& profile : variations_profiles_to_delete) { + variations_prefs_dict.Remove(profile); + } +}
diff --git a/chrome/browser/metrics/variations/chrome_variations_service_client.h b/chrome/browser/metrics/variations/chrome_variations_service_client.h index 25259fae..daed8430 100644 --- a/chrome/browser/metrics/variations/chrome_variations_service_client.h +++ b/chrome/browser/metrics/variations/chrome_variations_service_client.h
@@ -36,6 +36,8 @@ bool IsEnterprise() override; std::unique_ptr<variations::SeedResponse> TakeSeedFromNativeVariationsSeedStore() override; + void RemoveGoogleGroupsFromPrefsForDeletedProfiles( + PrefService* local_state) override; private: // variations::VariationsServiceClient:
diff --git a/chrome/browser/metrics/variations/chrome_variations_service_client_unittest.cc b/chrome/browser/metrics/variations/chrome_variations_service_client_unittest.cc new file mode 100644 index 0000000..6ba653a0 --- /dev/null +++ b/chrome/browser/metrics/variations/chrome_variations_service_client_unittest.cc
@@ -0,0 +1,115 @@ +// 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/metrics/variations/chrome_variations_service_client.h" + +#include "chrome/browser/profiles/profile_attributes_storage.h" +#include "chrome/common/pref_names.h" +#include "components/metrics/clean_exit_beacon.h" +#include "components/prefs/scoped_user_pref_update.h" +#include "components/prefs/testing_pref_service.h" +#include "components/variations/pref_names.h" +#include "components/variations/service/variations_service.h" +#include "testing/gtest/include/gtest/gtest.h" + +class ChromeVariationsServiceClientTest : public ::testing::Test { + public: + ChromeVariationsServiceClientTest() { + // Call the methods that register all the prefs used by this class. + ProfileAttributesStorage::RegisterPrefs(local_state_.registry()); + metrics::CleanExitBeacon::RegisterPrefs(local_state_.registry()); + variations::VariationsService::RegisterPrefs(local_state_.registry()); + } + + protected: + // Adds an entry to the variations Google Groups preference. + void AddVariationsEntry(const std::string& profile_key) { + ScopedDictPrefUpdate variations_prefs_update( + &local_state_, variations::prefs::kVariationsGoogleGroups); + base::Value::Dict& variations_prefs = variations_prefs_update.Get(); + + // Just set an empty list of groups as the code under test is agnostic to + // the value of the entry. + base::Value::List groups; + variations_prefs.Set(profile_key, std::move(groups)); + } + + // Add an entry to ProfileAttributesStorage. + // Ideally we would mock the ProfileAttributesStorage::GetAllProfilesKeys() + // call, but it is a static method and the logic is straightforward so we + // write the pref directly instead. + void AddProfileAttributesStorageEntry(const std::string& profile_key) { + ScopedDictPrefUpdate profile_attributes_prefs_update( + &local_state_, prefs::kProfileAttributes); + base::Value::Dict& profile_prefs = profile_attributes_prefs_update.Get(); + + base::Value::Dict profile_info; + profile_prefs.Set(profile_key, std::move(profile_info)); + } + + ChromeVariationsServiceClient variations_service_client_; + TestingPrefServiceSimple local_state_; +}; + +TEST_F(ChromeVariationsServiceClientTest, + RemoveGoogleGroupsFromPrefsForDeletedProfiles_NoPrefNoProfile) { + variations_service_client_.RemoveGoogleGroupsFromPrefsForDeletedProfiles( + &local_state_); + + const base::Value::Dict& cached_profiles = + local_state_.GetDict(variations::prefs::kVariationsGoogleGroups); + ASSERT_EQ(cached_profiles.size(), 0UL); +} + +TEST_F(ChromeVariationsServiceClientTest, + RemoveGoogleGroupsFromPrefsForDeletedProfiles_PrefNoProfile) { + AddVariationsEntry("Profile 1"); + + variations_service_client_.RemoveGoogleGroupsFromPrefsForDeletedProfiles( + &local_state_); + + const base::Value::Dict& cached_profiles = + local_state_.GetDict(variations::prefs::kVariationsGoogleGroups); + ASSERT_EQ(cached_profiles.size(), 0UL); +} + +TEST_F(ChromeVariationsServiceClientTest, + RemoveGoogleGroupsFromPrefsForDeletedProfiles_NoPrefProfile) { + AddProfileAttributesStorageEntry("Profile 1"); + + variations_service_client_.RemoveGoogleGroupsFromPrefsForDeletedProfiles( + &local_state_); + + const base::Value::Dict& cached_profiles = + local_state_.GetDict(variations::prefs::kVariationsGoogleGroups); + ASSERT_EQ(cached_profiles.size(), 0UL); +} + +TEST_F(ChromeVariationsServiceClientTest, + RemoveGoogleGroupsFromPrefsForDeletedProfiles_PrefAndDifferentProfile) { + AddVariationsEntry("Profile 1"); + AddProfileAttributesStorageEntry("Profile 2"); + + variations_service_client_.RemoveGoogleGroupsFromPrefsForDeletedProfiles( + &local_state_); + + const base::Value::Dict& cached_profiles = + local_state_.GetDict(variations::prefs::kVariationsGoogleGroups); + ASSERT_EQ(cached_profiles.size(), 0UL); +} + +TEST_F(ChromeVariationsServiceClientTest, + RemoveGoogleGroupsFromPrefsForDeletedProfiles_PrefAndSameProfile) { + std::string profile_key = "Profile 1"; + AddVariationsEntry(profile_key); + AddProfileAttributesStorageEntry(profile_key); + + variations_service_client_.RemoveGoogleGroupsFromPrefsForDeletedProfiles( + &local_state_); + + const base::Value::Dict& cached_profiles = + local_state_.GetDict(variations::prefs::kVariationsGoogleGroups); + ASSERT_EQ(cached_profiles.size(), 1UL); + ASSERT_TRUE(cached_profiles.Find(profile_key)); +}
diff --git a/chrome/browser/net/storage_test_utils.cc b/chrome/browser/net/storage_test_utils.cc index 8532453..4836ae9 100644 --- a/chrome/browser/net/storage_test_utils.cc +++ b/chrome/browser/net/storage_test_utils.cc
@@ -27,8 +27,8 @@ " .then(() => document.hasStorageAccess())" " .catch(() => false);"; -constexpr char kRequestStorageAccessForOrigin[] = - "document.requestStorageAccessForOrigin($1).then(" +constexpr char kRequestStorageAccessFor[] = + "document.requestStorageAccessFor($1).then(" " () => true," " () => false," ");"; @@ -139,8 +139,8 @@ bool RequestStorageAccessForOrigin(content::RenderFrameHost* frame, const std::string& origin) { - return content::EvalJs( - frame, content::JsReplace(kRequestStorageAccessForOrigin, origin)) + return content::EvalJs(frame, + content::JsReplace(kRequestStorageAccessFor, origin)) .ExtractBool(); }
diff --git a/chrome/browser/net/storage_test_utils.h b/chrome/browser/net/storage_test_utils.h index 2e52e1b..ab94849 100644 --- a/chrome/browser/net/storage_test_utils.h +++ b/chrome/browser/net/storage_test_utils.h
@@ -38,7 +38,7 @@ // true; false otherwise. bool RequestAndCheckStorageAccessForFrame(content::RenderFrameHost* frame); // Helper to request storage access with a site override for a frame using -// document.requestStorageAccessForOrigin(origin). Returns true if the promise +// document.requestStorageAccessFor(origin). Returns true if the promise // resolves; false if it rejects. bool RequestStorageAccessForOrigin(content::RenderFrameHost* frame, const std::string& origin);
diff --git a/chrome/browser/password_manager/android/save_update_password_message_delegate_unittest.cc b/chrome/browser/password_manager/android/save_update_password_message_delegate_unittest.cc index 0a40643b..97088ee 100644 --- a/chrome/browser/password_manager/android/save_update_password_message_delegate_unittest.cc +++ b/chrome/browser/password_manager/android/save_update_password_message_delegate_unittest.cc
@@ -518,17 +518,12 @@ EXPECT_EQ(ResourceMapper::MapToJavaDrawableId( IDR_ANDROID_PASSWORD_MANAGER_LOGO_24DP), GetMessageWrapper()->GetIconResourceId()); - EXPECT_EQ( - l10n_util::GetStringUTF16(IDS_PASSWORD_MESSAGE_NEVER_SAVE_MENU_ITEM), - GetMessageWrapper()->GetSecondaryButtonMenuText()); } else { EXPECT_EQ(l10n_util::GetStringUTF16(IDS_SAVE_PASSWORD), GetMessageWrapper()->GetTitle()); EXPECT_EQ( ResourceMapper::MapToJavaDrawableId(IDR_ANDROID_INFOBAR_SAVE_PASSWORD), GetMessageWrapper()->GetIconResourceId()); - EXPECT_EQ(l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_BLOCKLIST_BUTTON), - GetMessageWrapper()->GetSecondaryButtonMenuText()); } EXPECT_EQ(ResourceMapper::MapToJavaDrawableId(IDR_ANDROID_MESSAGE_SETTINGS), @@ -537,6 +532,32 @@ DismissMessage(messages::DismissReason::UNKNOWN); } +// Tests that secondary button title is right. +// kPasswordEditDialogWithDetails feature off. +TEST_P(SaveUpdatePasswordMessageDelegateTest, + MessageSecondaryButtonProperty_SavePassword) { + base::test::ScopedFeatureList scoped_feature_state; + scoped_feature_state.InitAndDisableFeature( + password_manager::features::kPasswordEditDialogWithDetails); + + SetPendingCredentials(kUsername, kPassword); + auto form_manager = + CreateFormManager(GURL(kDefaultUrl), empty_best_matches()); + EnqueueMessage(std::move(form_manager), /*user_signed_in=*/false, + /*update_password=*/false); + + if (GetParam().with_unified_password_manager_android) { + // password_manager::features::kUnifiedPasswordManagerAndroid is enabled + EXPECT_EQ( + l10n_util::GetStringUTF16(IDS_PASSWORD_MESSAGE_NEVER_SAVE_MENU_ITEM), + GetMessageWrapper()->GetSecondaryButtonMenuText()); + } else { + EXPECT_EQ(l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_BLOCKLIST_BUTTON), + GetMessageWrapper()->GetSecondaryButtonMenuText()); + } + DismissMessage(messages::DismissReason::UNKNOWN); +} + // Tests that message properties (title, description, icon, button text) are // set correctly for update password message. TEST_P(SaveUpdatePasswordMessageDelegateTest, @@ -575,7 +596,6 @@ } // Tests that secondary menu icon is set for the save password message -// with kPasswordEditDialogWithDetails feature on. TEST_P(SaveUpdatePasswordMessageDelegateTest, CogButton_SavePassword_PasswordEditDialogWithDetails) { base::test::ScopedFeatureList scoped_feature_state; @@ -597,7 +617,6 @@ // Tests that secondary menu icon is set for the update password message // in case when user has only single credential stored for the web site -// with kPasswordEditDialogWithDetails feature on. TEST_P(SaveUpdatePasswordMessageDelegateTest, CogButton_SingleCredUpdatePassword_PasswordEditDialogWithDetails) { base::test::ScopedFeatureList scoped_feature_state; @@ -619,7 +638,6 @@ // Tests that secondary menu icon is not set for the update password message // in case when user has multiple credentials stored for the web site -// with kPasswordEditDialogWithDetails feature on. TEST_P(SaveUpdatePasswordMessageDelegateTest, NoCogButton_MultipleCredUpdatePassword_PasswordEditDialogWithDetails) { base::test::ScopedFeatureList scoped_feature_state; @@ -911,7 +929,14 @@ password_manager::metrics_util::CLICKED_ACCEPT, 1); } -TEST_P(SaveUpdatePasswordMessageDelegateTest, DialogPropertiesSignedIn) { +// Tests that the update dialog is shown after the message in case if multiple +// password match the form. +TEST_P(SaveUpdatePasswordMessageDelegateTest, + TriggeredEditDialogLegacy_TwoFormsMatching_UpdatePassword) { + base::test::ScopedFeatureList scoped_feature_state; + scoped_feature_state.InitAndDisableFeature( + password_manager::features::kPasswordEditDialogWithDetails); + SetPendingCredentials(kUsername, kPassword); auto form_manager = CreateFormManager(GURL(kDefaultUrl), two_forms_best_matches()); @@ -927,25 +952,13 @@ TriggerDialogDismissedCallback(/*dialog_accepted=*/false); } -TEST_P(SaveUpdatePasswordMessageDelegateTest, DialogPropertiesSignedOut) { - SetPendingCredentials(kUsername, kPassword); - auto form_manager = - CreateFormManager(GURL(kDefaultUrl), two_forms_best_matches()); - MockPasswordEditDialog* mock_dialog = PreparePasswordEditDialog(); - // Verify parameters to Show() call. - EXPECT_CALL(*mock_dialog, ShowLegacyPasswordEditDialog( - ElementsAre(std::u16string(kUsername), - std::u16string(kUsername2)), - 0, std::string())); - EnqueueMessage(std::move(form_manager), /*user_signed_in=*/false, - /*update_password=*/true); - TriggerActionClick(); - TriggerDialogDismissedCallback(/*dialog_accepted=*/false); -} - // Tests triggering password edit dialog and saving credentials after the // user accepts the dialog. -TEST_P(SaveUpdatePasswordMessageDelegateTest, TriggerEditDialog_Accept) { +TEST_P(SaveUpdatePasswordMessageDelegateTest, TriggerEditDialogLegacy_Accept) { + base::test::ScopedFeatureList scoped_feature_state; + scoped_feature_state.InitAndDisableFeature( + password_manager::features::kPasswordEditDialogWithDetails); + base::HistogramTester histogram_tester; ukm::TestAutoSetUkmRecorder test_ukm_recorder; @@ -974,7 +987,11 @@ // Tests triggering password edit dialog and saving credentials with // empty username after the user accepts the dialog. TEST_P(SaveUpdatePasswordMessageDelegateTest, - TriggerEditDialog_WithEmptyUsername_Accept) { + TriggerEditDialogLegacy_WithEmptyUsername_Accept) { + base::test::ScopedFeatureList scoped_feature_state; + scoped_feature_state.InitAndDisableFeature( + password_manager::features::kPasswordEditDialogWithDetails); + SetPendingCredentials(kUsername, kPassword); PasswordForm any_pasword_form = CreatePasswordForm(kUsername, kPassword); PasswordForm empty_username_password_form = @@ -1001,7 +1018,11 @@ // Tests that credentials are not saved if the user cancels password edit // dialog. -TEST_P(SaveUpdatePasswordMessageDelegateTest, TriggerEditDialog_Cancel) { +TEST_P(SaveUpdatePasswordMessageDelegateTest, TriggerEditDialogLegacy_Cancel) { + base::test::ScopedFeatureList scoped_feature_state; + scoped_feature_state.InitAndDisableFeature( + password_manager::features::kPasswordEditDialogWithDetails); + base::HistogramTester histogram_tester; ukm::TestAutoSetUkmRecorder test_ukm_recorder;
diff --git a/chrome/browser/performance_manager/mechanisms/working_set_trimmer_chromeos.cc b/chrome/browser/performance_manager/mechanisms/working_set_trimmer_chromeos.cc index d99b58cb..86e60b86 100644 --- a/chrome/browser/performance_manager/mechanisms/working_set_trimmer_chromeos.cc +++ b/chrome/browser/performance_manager/mechanisms/working_set_trimmer_chromeos.cc
@@ -6,6 +6,7 @@ #include <utility> +#include "ash/components/arc/arc_features.h" #include "ash/components/arc/memory/arc_memory_bridge.h" #include "base/files/file_path.h" #include "base/files/file_util.h" @@ -125,15 +126,66 @@ return; } - // Do the actual VM trimming regardless of the |result|. - arc::ArcSessionManager* arc_session_manager = arc::ArcSessionManager::Get(); - if (!arc_session_manager) { - LOG(ERROR) << "ArcSessionManager unavailable"; - std::move(callback).Run(false, "ArcSessionManager unavailable"); - return; - } + // Do the actual VM trimming regardless of the |result|. When "ArcGuestZram" + // feature is enabled, guest memory is locked and should be reclaimed from + // guest through ArcMemoryBridge's reclaim API (if "guest_reclaim_enabled" + // param is enabled). Otherwise the memory should be reclaimed from host + // through ArcSessionManager's TrimVmMemory. + if (base::FeatureList::IsEnabled(arc::kGuestZram) && + arc::kGuestReclaimEnabled.Get()) { + content::BrowserContext* context = + context_for_testing_ ? context_for_testing_ : GetContext(); + if (!context) { + LogErrorAndInvokeCallback("BrowserContext unavailable", + std::move(callback)); + return; + } - arc_session_manager->TrimVmMemory(std::move(callback), page_limit); + auto* bridge = + context ? arc::ArcMemoryBridge::GetForBrowserContext(context) : nullptr; + if (!bridge) { + LogErrorAndInvokeCallback("ArcMemoryBridge unavailable", + std::move(callback)); + return; + } + + auto reclaim_request = arc::mojom::ReclaimRequest::New( + arc::kGuestReclaimOnlyAnonymous.Get() ? arc::mojom::ReclaimType::ANON + : arc::mojom::ReclaimType::ALL); + bridge->Reclaim( + std::move(reclaim_request), + base::BindOnce(&WorkingSetTrimmerChromeOS::OnArcVmMemoryGuestReclaim, + weak_factory_.GetMutableWeakPtr(), std::move(callback))); + } else { + arc::ArcSessionManager* arc_session_manager = arc::ArcSessionManager::Get(); + if (!arc_session_manager) { + LogErrorAndInvokeCallback("ArcSessionManager unavailable", + std::move(callback)); + return; + } + + arc_session_manager->TrimVmMemory(std::move(callback), page_limit); + } +} + +void WorkingSetTrimmerChromeOS::OnArcVmMemoryGuestReclaim( + TrimArcVmWorkingSetCallback callback, + arc::mojom::ReclaimResultPtr result) { + VLOG(2) << "Finished trimming memory from guest. " << result->reclaimed + << " processes were reclaimed successfully. " << result->unreclaimed + << " processes were not reclaimed."; + if (result->reclaimed == 0) { + std::move(callback).Run(false, "No guest process was reclaimed"); + } else { + std::move(callback).Run(true, ""); + } +} + +void WorkingSetTrimmerChromeOS::LogErrorAndInvokeCallback( + const char* error, + TrimArcVmWorkingSetCallback callback) { + LOG(ERROR) << error; + std::move(callback).Run(false, error); } void WorkingSetTrimmerChromeOS::TrimWorkingSet(
diff --git a/chrome/browser/performance_manager/mechanisms/working_set_trimmer_chromeos.h b/chrome/browser/performance_manager/mechanisms/working_set_trimmer_chromeos.h index be725063..dd77c67 100644 --- a/chrome/browser/performance_manager/mechanisms/working_set_trimmer_chromeos.h +++ b/chrome/browser/performance_manager/mechanisms/working_set_trimmer_chromeos.h
@@ -5,6 +5,7 @@ #ifndef CHROME_BROWSER_PERFORMANCE_MANAGER_MECHANISMS_WORKING_SET_TRIMMER_CHROMEOS_H_ #define CHROME_BROWSER_PERFORMANCE_MANAGER_MECHANISMS_WORKING_SET_TRIMMER_CHROMEOS_H_ +#include "ash/components/arc/mojom/memory.mojom-forward.h" #include "base/functional/callback_forward.h" #include "base/memory/weak_ptr.h" #include "base/no_destructor.h" @@ -72,6 +73,11 @@ ArcVmReclaimType reclaim_type, int page_limit, bool result); + void OnArcVmMemoryGuestReclaim(TrimArcVmWorkingSetCallback callback, + arc::mojom::ReclaimResultPtr result); + + void LogErrorAndInvokeCallback(const char* error, + TrimArcVmWorkingSetCallback callback); // The constructor is made private to prevent instantiation of this class // directly, it should always be retrieved via
diff --git a/chrome/browser/performance_manager/mechanisms/working_set_trimmer_chromeos_unittest.cc b/chrome/browser/performance_manager/mechanisms/working_set_trimmer_chromeos_unittest.cc index 908a739c..033f683a 100644 --- a/chrome/browser/performance_manager/mechanisms/working_set_trimmer_chromeos_unittest.cc +++ b/chrome/browser/performance_manager/mechanisms/working_set_trimmer_chromeos_unittest.cc
@@ -8,6 +8,7 @@ #include <string> #include <utility> +#include "ash/components/arc/arc_features.h" #include "ash/components/arc/memory/arc_memory_bridge.h" #include "ash/components/arc/session/arc_bridge_service.h" #include "ash/components/arc/session/arc_service_manager.h" @@ -198,6 +199,99 @@ EXPECT_FALSE(*result); } +TEST_F(TestWorkingSetTrimmerChromeOS, + TrimArcVmWorkingSet_GuestReclaimEnabled_Success) { + base::test::ScopedFeatureList feature_list; + base::FieldTrialParams params; + params["guest_reclaim_enabled"] = "true"; + feature_list.InitAndEnableFeatureWithParameters(arc::kGuestZram, params); + memory_instance()->set_reclaim_all_result(2, 0); + // Making arc session trim result to be false to be sure it's not being used. + FakeArcSessionHolder session_holder(arc_session_runner()); + session_holder.session()->set_trim_result(false, "test_reason"); + + absl::optional<bool> result; + TrimArcVmWorkingSet(base::BindLambdaForTesting( + [&result](bool r, const std::string&) { result = r; })); + base::RunLoop().RunUntilIdle(); + + ASSERT_TRUE(result); + ASSERT_TRUE(*result); +} + +TEST_F(TestWorkingSetTrimmerChromeOS, + TrimArcVmWorkingSet_GuestReclaimEnabled_Failure) { + base::test::ScopedFeatureList feature_list; + base::FieldTrialParams params; + params["guest_reclaim_enabled"] = "true"; + feature_list.InitAndEnableFeatureWithParameters(arc::kGuestZram, params); + memory_instance()->set_reclaim_all_result(0, 0); + + absl::optional<bool> result; + TrimArcVmWorkingSet(base::BindLambdaForTesting( + [&result](bool r, const std::string&) { result = r; })); + base::RunLoop().RunUntilIdle(); + + ASSERT_TRUE(result); + ASSERT_FALSE(*result); +} + +TEST_F(TestWorkingSetTrimmerChromeOS, + TrimArcVmWorkingSet_GuestReclaimEnabled_AnonPagesOnly) { + base::test::ScopedFeatureList feature_list; + base::FieldTrialParams params; + params["guest_reclaim_enabled"] = "true"; + params["guest_reclaim_only_anonymous"] = "true"; + feature_list.InitAndEnableFeatureWithParameters(arc::kGuestZram, params); + memory_instance()->set_reclaim_all_result(0, 0); + memory_instance()->set_reclaim_anon_result(2, 0); + + absl::optional<bool> result; + TrimArcVmWorkingSet(base::BindLambdaForTesting( + [&result](bool r, const std::string&) { result = r; })); + base::RunLoop().RunUntilIdle(); + + ASSERT_TRUE(result); + ASSERT_TRUE(*result); +} + +TEST_F(TestWorkingSetTrimmerChromeOS, + TrimArcVmWorkingSet_GuestZramDisabled_ArcSessionIsUsed) { + FakeArcSessionHolder session_holder(arc_session_runner()); + session_holder.session()->set_trim_result(true, ""); + base::test::ScopedFeatureList feature_list; + feature_list.InitAndDisableFeature(arc::kGuestZram); + // If memory_instance is used then the trim operation should fail. + memory_instance()->set_reclaim_all_result(0, 0); + + absl::optional<bool> result; + TrimArcVmWorkingSet(base::BindLambdaForTesting( + [&result](bool r, const std::string&) { result = r; })); + base::RunLoop().RunUntilIdle(); + + ASSERT_TRUE(result); + ASSERT_TRUE(*result); +} + +TEST_F( + TestWorkingSetTrimmerChromeOS, + TrimArcVmWorkingSet_GuestZramEnabledWithNoGuestReclaim_ArcSessionIsUsed) { + FakeArcSessionHolder session_holder(arc_session_runner()); + session_holder.session()->set_trim_result(true, ""); + base::test::ScopedFeatureList feature_list; + feature_list.InitAndEnableFeature(arc::kGuestZram); + // If memory_instance is used then the trim operation should fail. + memory_instance()->set_reclaim_all_result(0, 0); + + absl::optional<bool> result; + TrimArcVmWorkingSet(base::BindLambdaForTesting( + [&result](bool r, const std::string&) { result = r; })); + base::RunLoop().RunUntilIdle(); + + ASSERT_TRUE(result); + ASSERT_TRUE(*result); +} + // Tests that TrimArcVmWorkingSetDropPageCachesOnly runs the passed callback. TEST_F(TestWorkingSetTrimmerChromeOS, TrimArcVmWorkingSetDropPageCachesOnly) { absl::optional<bool> result;
diff --git a/chrome/browser/policy/networking/network_configuration_updater.cc b/chrome/browser/policy/networking/network_configuration_updater.cc index 9db1fb2..9a3c37c7 100644 --- a/chrome/browser/policy/networking/network_configuration_updater.cc +++ b/chrome/browser/policy/networking/network_configuration_updater.cc
@@ -8,6 +8,7 @@ #include "base/functional/bind.h" #include "base/functional/callback_helpers.h" #include "base/logging.h" +#include "base/metrics/histogram_functions.h" #include "base/values.h" #include "chromeos/components/onc/onc_utils.h" #include "components/policy/core/common/policy_map.h" @@ -57,6 +58,40 @@ return extension_ids; } +const char* const kOncRecommendedFieldsWorkaroundActionHistogram = + "Network.Ethernet.Policy.OncRecommendedFieldsWorkaroundAction"; + +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused. +enum class OncRecommendedFieldsWorkaroundAction { + kEnabledAndNotAffected = 0, + kEnabledAndAffected = 1, + kDisabledAndNotAffected = 2, + kDisabledAndAffected = 3, + kMaxValue = kDisabledAndAffected, +}; + +void ReportOncRecommendedFieldsWorkaroundAction(bool enabled_by_feature, + bool affected) { + OncRecommendedFieldsWorkaroundAction action; + if (enabled_by_feature) { + if (affected) { + action = OncRecommendedFieldsWorkaroundAction::kEnabledAndAffected; + } else { + action = OncRecommendedFieldsWorkaroundAction::kEnabledAndNotAffected; + } + } else { + if (affected) { + action = OncRecommendedFieldsWorkaroundAction::kDisabledAndAffected; + } else { + action = OncRecommendedFieldsWorkaroundAction::kDisabledAndNotAffected; + } + } + + base::UmaHistogramEnumeration(kOncRecommendedFieldsWorkaroundActionHistogram, + action); +} + // Sets the "Recommended" list of recommended field names in |onc_value|, // which must be a dictionary, to |recommended_field_names|. If a // "Recommended" list already existed in |onc_dict|, it's replaced. @@ -72,10 +107,14 @@ void MarkFieldsAsRecommendedForBackwardsCompatibility( base::Value::Dict& network_config_onc_dict) { + const bool enabled_by_feature = !base::FeatureList::IsEnabled( + kDisablePolicyEthernetRecommendedWorkaround); + + bool affected = true; // If anything has been recommended, trust the server and don't change // anything. if (network_config_onc_dict.contains(::onc::kRecommended)) { - return; + affected = false; } // Ensure kStaticIPConfig exists because a "Recommended" field will be added @@ -83,6 +122,12 @@ base::Value::Dict* static_ip_config = network_config_onc_dict.EnsureDict( ::onc::network_config::kStaticIPConfig); if (static_ip_config->contains(::onc::kRecommended)) { + affected = false; + } + + ReportOncRecommendedFieldsWorkaroundAction(enabled_by_feature, affected); + + if (!enabled_by_feature || !affected) { return; } @@ -104,11 +149,6 @@ // "Recommended". void MarkFieldsAsRecommendedForBackwardsCompatibility( base::Value::List& network_configs_onc) { - if (base::FeatureList::IsEnabled( - kDisablePolicyEthernetRecommendedWorkaround)) { - return; - } - for (auto& network_config_onc : network_configs_onc) { DCHECK(network_config_onc.is_dict()); base::Value::Dict& network_config_onc_dict = network_config_onc.GetDict();
diff --git a/chrome/browser/profiles/profile_attributes_storage.cc b/chrome/browser/profiles/profile_attributes_storage.cc index 51b9338..ac28402 100644 --- a/chrome/browser/profiles/profile_attributes_storage.cc +++ b/chrome/browser/profiles/profile_attributes_storage.cc
@@ -343,6 +343,21 @@ #endif // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH) } +// static +base::flat_set<std::string> ProfileAttributesStorage::GetAllProfilesKeys( + PrefService* local_prefs) { + base::flat_set<std::string> profile_keys; + + const base::Value::Dict& attribute_storage = + local_prefs->GetDict(prefs::kProfileAttributes); + for (std::pair<const std::string&, const base::Value&> attribute_entry : + attribute_storage) { + profile_keys.insert(attribute_entry.first); + } + + return profile_keys; +} + void ProfileAttributesStorage::AddProfile(ProfileAttributesInitParams params) { std::string key = StorageKeyFromProfilePath(params.profile_path); ScopedDictPrefUpdate update(prefs_, prefs::kProfileAttributes);
diff --git a/chrome/browser/profiles/profile_attributes_storage.h b/chrome/browser/profiles/profile_attributes_storage.h index 18e58de..b54db01b 100644 --- a/chrome/browser/profiles/profile_attributes_storage.h +++ b/chrome/browser/profiles/profile_attributes_storage.h
@@ -12,6 +12,7 @@ #include <unordered_map> #include <vector> +#include "base/containers/flat_set.h" #include "base/files/file_path.h" #include "base/functional/callback_forward.h" #include "base/gtest_prod_util.h" @@ -56,6 +57,11 @@ // Register cache related preferences in Local State. static void RegisterPrefs(PrefRegistrySimple* registry); + // Return the keys for all the profiles; exposed as a static method so that + // it can be called very early in Chrome initialization. + static base::flat_set<std::string> GetAllProfilesKeys( + PrefService* local_prefs); + // Adds a new profile with `params` to the attributes storage. // `params.profile_path` must be a valid path within the user data directory // that hasn't been registered with this `ProfileAttributesStorage` before.
diff --git a/chrome/browser/profiles/profile_attributes_storage_unittest.cc b/chrome/browser/profiles/profile_attributes_storage_unittest.cc index 137bb0c..9e4fce2 100644 --- a/chrome/browser/profiles/profile_attributes_storage_unittest.cc +++ b/chrome/browser/profiles/profile_attributes_storage_unittest.cc
@@ -36,6 +36,7 @@ #include "components/sync_preferences/pref_service_syncable.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/test_utils.h" +#include "profile_attributes_storage.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/skia/include/core/SkBitmap.h" @@ -1799,6 +1800,20 @@ EXPECT_TRUE(gfx::test::AreImagesEqual(profile_image, entry->GetAvatarIcon())); } +TEST_F(ProfileAttributesStorageTest, GetAllProfilesKeys) { + PrefService* local_state = g_browser_process->local_state(); + + // Check there are initially no profiles. + EXPECT_EQ(ProfileAttributesStorage::GetAllProfilesKeys(local_state), + base::flat_set<std::string>()); + + // Add a profile, and check that it is returned. + AddTestingProfile(); + EXPECT_EQ(ProfileAttributesStorage::GetAllProfilesKeys(local_state), + base::flat_set<std::string>({base::StringPrintf( + "testing_profile_path%" PRIuS, (size_t)0U)})); +} + #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH) TEST_F(ProfileAttributesStorageTest, GetGaiaImageForAvatarMenu) { storage()->set_disable_avatar_download_for_testing(false);
diff --git a/chrome/browser/resources/chromeos/login/oobe.css b/chrome/browser/resources/chromeos/login/oobe.css index 67383926..d917f1d0 100644 --- a/chrome/browser/resources/chromeos/login/oobe.css +++ b/chrome/browser/resources/chromeos/login/oobe.css
@@ -12,6 +12,9 @@ --oobe-oobe-dialog-width-base: 461px; --oobe-bg-color: var(--cros-bg-color); } +:root.jelly-enabled { + --oobe-bg-color: var(--cros-sys-app_base_shaded); +} html, body { @@ -219,4 +222,4 @@ justify-content: flex-end; min-height: 0; width: 100%; -} \ No newline at end of file +}
diff --git a/chrome/browser/resources/chromeos/login/oobe.html b/chrome/browser/resources/chromeos/login/oobe.html index bed7697..dc11fd88 100644 --- a/chrome/browser/resources/chromeos/login/oobe.html +++ b/chrome/browser/resources/chromeos/login/oobe.html
@@ -1,5 +1,5 @@ <!doctype html> -<html build="$i18n{buildType}" cros> +<html build="$i18n{buildType}" cros class="$i18n{oobeClasses}"> <head> <meta charset="utf-8"> <meta name="google" value="notranslate"> @@ -9,7 +9,11 @@ <!-- Keeps track of when OOBE started. --> <script src="./oobe_trace_start.js"></script> + <!-- TODO(b/268463435) Remove after jelly token migration --> <link rel="stylesheet" href="//resources/chromeos/colors/cros_styles.css"> + <!-- URL protocol prefix necessary, otherwise "new URL(href)" + in colors_css_updater.ts will crash --> + <link rel="stylesheet" href="chrome://theme/colors.css?sets=sys"> <link rel="stylesheet" href="oobe.css"> <link rel="stylesheet" href="oobe_popup_overlay.css"> <link rel="stylesheet" href="oobe_screen.css">
diff --git a/chrome/browser/resources/chromeos/login/oobe.js b/chrome/browser/resources/chromeos/login/oobe.js index 8a6ba3e7..270b3b2 100644 --- a/chrome/browser/resources/chromeos/login/oobe.js +++ b/chrome/browser/resources/chromeos/login/oobe.js
@@ -94,13 +94,6 @@ const isOobeJellyEnabled = loadTimeData.getBoolean('isOobeJellyEnabled'); if (isOobeJellyEnabled) { - const link = document.createElement('link'); - link.rel = 'stylesheet'; - // URL protocol prefix necessary, otherwise "new URL(href)" - // in colors_css_updater.ts will crash - link.href = 'chrome://theme/colors.css?sets=legacy,sys'; - document.head.appendChild(link); - document.body.classList.add('jelly-enabled'); startColorChangeUpdater(); }
diff --git a/chrome/browser/top_level_storage_access_api/request_storage_access_for_browsertest.cc b/chrome/browser/top_level_storage_access_api/request_storage_access_for_browsertest.cc new file mode 100644 index 0000000..9d68c983 --- /dev/null +++ b/chrome/browser/top_level_storage_access_api/request_storage_access_for_browsertest.cc
@@ -0,0 +1,942 @@ +// 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 "base/functional/bind.h" +#include "base/functional/callback_helpers.h" +#include "base/path_service.h" +#include "base/strings/strcat.h" +#include "base/strings/stringprintf.h" +#include "base/test/metrics/histogram_tester.h" +#include "base/test/scoped_feature_list.h" +#include "chrome/browser/content_settings/cookie_settings_factory.h" +#include "chrome/browser/content_settings/host_content_settings_map_factory.h" +#include "chrome/browser/net/storage_test_utils.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/common/pref_names.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/base/ui_test_utils.h" +#include "components/content_settings/core/browser/cookie_settings.h" +#include "components/content_settings/core/browser/host_content_settings_map.h" +#include "components/content_settings/core/common/content_settings.h" +#include "components/content_settings/core/common/features.h" +#include "components/content_settings/core/common/pref_names.h" +#include "components/metrics/content/subprocess_metrics_provider.h" +#include "components/prefs/pref_service.h" +#include "content/public/browser/browser_context.h" +#include "content/public/browser/storage_partition.h" +#include "content/public/common/content_features.h" +#include "content/public/common/content_paths.h" +#include "content/public/test/browser_task_environment.h" +#include "content/public/test/browser_test.h" +#include "content/public/test/browser_test_utils.h" +#include "content/public/test/test_navigation_observer.h" +#include "net/base/features.h" +#include "net/cookies/cookie_constants.h" +#include "net/cookies/cookie_partition_key_collection.h" +#include "net/dns/mock_host_resolver.h" +#include "net/test/embedded_test_server/embedded_test_server.h" +#include "services/network/public/cpp/network_switches.h" +#include "services/network/public/mojom/cookie_manager.mojom.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/blink/public/common/features.h" +#include "third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom-forward.h" +#include "ui/base/window_open_disposition.h" + +using content::BrowserThread; +using testing::Gt; + +namespace { + +constexpr char kHostA[] = "a.test"; +constexpr char kHostASubdomain[] = "subdomain.a.test"; +constexpr char kHostB[] = "b.test"; +constexpr char kHostC[] = "c.test"; +constexpr char kHostD[] = "d.test"; + +constexpr char kRequestOutcomeHistogram[] = + "API.TopLevelStorageAccess.RequestOutcome"; + +// Path for URL of custom response +const char* kFetchWithCredentialsPath = "/respondwithcookies"; + +constexpr char kQueryTopLevelStorageAccessPermission[] = + "navigator.permissions.query({name: 'top-level-storage-access', " + "requestedOrigin: '%s'}).then(" + " (permission) => permission.state);"; +constexpr char kVerifyHasStorageAccessPermission[] = + "navigator.permissions.query({name: 'storage-access'}).then(" + " (permission) => permission.name === 'storage-access' && " + "permission.state === 'granted');"; +constexpr char kRequestStorageAccess[] = + "document.requestStorageAccess()" + ".then(() => true)" + ".catch(() => false);"; + +std::unique_ptr<net::test_server::HttpResponse> HandleRequest( + const net::test_server::HttpRequest& request) { + if (request.relative_url != kFetchWithCredentialsPath) { + return nullptr; + } + auto http_response = std::make_unique<net::test_server::BasicHttpResponse>(); + http_response->set_code(net::HTTP_OK); + http_response->set_content_type("text/plain"); + // Set the cors enabled headers. + if (auto it = request.headers.find(net::HttpRequestHeaders::kOrigin); + it != request.headers.end()) { + http_response->AddCustomHeader("Access-Control-Allow-Origin", it->second); + http_response->AddCustomHeader("Vary", "origin"); + http_response->AddCustomHeader("Access-Control-Allow-Credentials", "true"); + } + // Get the 'Cookie' header that was sent in the request. + if (auto it = request.headers.find(net::HttpRequestHeaders::kCookie); + it != request.headers.end()) { + http_response->set_content(it->second); + } + + return http_response; +} + +class RequestStorageAccessForBaseBrowserTest : public InProcessBrowserTest { + protected: + RequestStorageAccessForBaseBrowserTest() + : https_server_(net::EmbeddedTestServer::TYPE_HTTPS) {} + + void SetUp() override { + features_.InitWithFeaturesAndParameters(GetEnabledFeatures(), + GetDisabledFeatures()); + InProcessBrowserTest::SetUp(); + } + + virtual std::vector<base::test::FeatureRefAndParams> GetEnabledFeatures() { + std::vector<base::test::FeatureRefAndParams> enabled( + {{blink::features::kStorageAccessAPI, {}}}); + return enabled; + } + + virtual std::vector<base::test::FeatureRef> GetDisabledFeatures() { + return {}; + } + + void SetUpOnMainThread() override { + host_resolver()->AddRule("*", "127.0.0.1"); + base::FilePath path; + base::PathService::Get(content::DIR_TEST_DATA, &path); + https_server_.SetSSLConfig(net::EmbeddedTestServer::CERT_TEST_NAMES); + https_server_.ServeFilesFromDirectory(path); + https_server_.AddDefaultHandlers(GetChromeTestDataDir()); + https_server_.RegisterRequestHandler(base::BindRepeating(&HandleRequest)); + ASSERT_TRUE(https_server_.Start()); + } + + void SetCrossSiteCookieOnHost(const std::string& host) { + GURL host_url = GetURL(host); + std::string cookie = base::StrCat({"cross-site=", host}); + content::SetCookie(browser()->profile(), host_url, + base::StrCat({cookie, ";SameSite=None;Secure"})); + ASSERT_THAT(content::GetCookies(browser()->profile(), host_url), + testing::HasSubstr(cookie)); + } + + void SetPartitionedCookieInContext(const std::string& top_level_host, + const std::string& embedded_host) { + GURL host_url = GetURL(embedded_host); + std::string cookie = + base::StrCat({"cross-site=", embedded_host, "(partitioned)"}); + net::CookiePartitionKey partition_key = + net::CookiePartitionKey::FromURLForTesting(GetURL(top_level_host)); + content::SetPartitionedCookie( + browser()->profile(), host_url, + base::StrCat({cookie, ";SameSite=None;Secure;Partitioned"}), + partition_key); + ASSERT_THAT(content::GetCookies( + browser()->profile(), host_url, + net::CookieOptions::SameSiteCookieContext::MakeInclusive(), + net::CookiePartitionKeyCollection(partition_key)), + testing::HasSubstr(cookie)); + } + + GURL GetURL(const std::string& host) { + return https_server_.GetURL(host, "/"); + } + + void SetBlockThirdPartyCookies(bool value) { + browser()->profile()->GetPrefs()->SetInteger( + prefs::kCookieControlsMode, + static_cast<int>( + value ? content_settings::CookieControlsMode::kBlockThirdParty + : content_settings::CookieControlsMode::kOff)); + } + + void NavigateToPageWithFrame(const std::string& host) { + GURL main_url(https_server_.GetURL(host, "/iframe.html")); + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), main_url)); + } + + void NavigateToNewTabWithFrame(const std::string& host) { + GURL main_url(https_server_.GetURL(host, "/iframe.html")); + ui_test_utils::NavigateToURLWithDisposition( + browser(), main_url, WindowOpenDisposition::NEW_FOREGROUND_TAB, + ui_test_utils::BROWSER_TEST_WAIT_FOR_LOAD_STOP); + } + + void NavigateFrameTo(const std::string& host, const std::string& path) { + GURL page = https_server_.GetURL(host, path); + content::WebContents* web_contents = + browser()->tab_strip_model()->GetActiveWebContents(); + EXPECT_TRUE(NavigateIframeToURL(web_contents, "test", page)); + } + + std::string GetFrameContent() { + return storage::test::GetFrameContent(GetFrame()); + } + + void NavigateNestedFrameTo(const std::string& host, const std::string& path) { + GURL url(https_server_.GetURL(host, path)); + content::WebContents* web_contents = + browser()->tab_strip_model()->GetActiveWebContents(); + content::TestNavigationObserver load_observer(web_contents); + ASSERT_TRUE(ExecuteScript( + GetFrame(), + base::StringPrintf("document.body.querySelector('iframe').src = '%s';", + url.spec().c_str()))); + load_observer.Wait(); + } + + std::string GetNestedFrameContent() { + return storage::test::GetFrameContent(GetNestedFrame()); + } + + std::string ReadCookiesViaJS(content::RenderFrameHost* render_frame_host) { + return content::EvalJs(render_frame_host, "document.cookie") + .ExtractString(); + } + + std::string QueryPermission(content::RenderFrameHost* render_frame_host, + const std::string& requested_origin) { + return content::EvalJs( + render_frame_host, + base::StringPrintf(kQueryTopLevelStorageAccessPermission, + GetURL(requested_origin).spec().c_str())) + .ExtractString(); + } + + content::RenderFrameHost* GetPrimaryMainFrame() { + content::WebContents* web_contents = + browser()->tab_strip_model()->GetActiveWebContents(); + return web_contents->GetPrimaryMainFrame(); + } + + content::RenderFrameHost* GetFrame() { + return ChildFrameAt(GetPrimaryMainFrame(), 0); + } + + content::RenderFrameHost* GetNestedFrame() { + return ChildFrameAt(GetFrame(), 0); + } + + std::string CookiesFromFetchWithCredentials(content::RenderFrameHost* frame, + const std::string& host, + const bool cors_enabled) { + return storage::test::FetchWithCredentials( + frame, https_server_.GetURL(host, kFetchWithCredentialsPath), + cors_enabled); + } + + net::test_server::EmbeddedTestServer& https_server() { return https_server_; } + + private: + net::test_server::EmbeddedTestServer https_server_; + base::test::ScopedFeatureList features_; +}; + +class RequestStorageAccessForBrowserTest + : public RequestStorageAccessForBaseBrowserTest {}; + +// Validates that expiry data is transferred over IPC to the Network Service. +IN_PROC_BROWSER_TEST_F(RequestStorageAccessForBrowserTest, + ThirdPartyGrantsExpireOverIPC) { + SetBlockThirdPartyCookies(true); + + // Set a cookie on `kHostB` and `kHostC`. + SetCrossSiteCookieOnHost(kHostB); + ASSERT_EQ(content::GetCookies(browser()->profile(), GetURL(kHostB)), + "cross-site=b.test"); + SetCrossSiteCookieOnHost(kHostC); + ASSERT_EQ(content::GetCookies(browser()->profile(), GetURL(kHostC)), + "cross-site=c.test"); + + NavigateToPageWithFrame(kHostA); + NavigateFrameTo(kHostB, "/iframe.html"); + NavigateNestedFrameTo(kHostC, "/echoheader?cookie"); + + // Manually create a pre-expired grant and ensure it doesn't grant access. + base::Time expiration_time = base::Time::Now() - base::Minutes(5); + HostContentSettingsMap* settings_map = + HostContentSettingsMapFactory::GetForProfile(browser()->profile()); + settings_map->SetContentSettingDefaultScope( + GetURL(kHostB), GetURL(kHostA), + ContentSettingsType::TOP_LEVEL_STORAGE_ACCESS, CONTENT_SETTING_ALLOW, + {expiration_time, content_settings::SessionModel::UserSession}); + settings_map->SetContentSettingDefaultScope( + GetURL(kHostC), GetURL(kHostA), + ContentSettingsType::TOP_LEVEL_STORAGE_ACCESS, CONTENT_SETTING_ALLOW, + {expiration_time, content_settings::SessionModel::UserSession}); + + // Manually send our expired setting. This needs to be done manually because + // normally this expired value would be filtered out before sending and time + // cannot be properly mocked in a browser test. + ContentSettingsForOneType settings; + settings.push_back(ContentSettingPatternSource( + ContentSettingsPattern::FromURLNoWildcard(GetURL(kHostB)), + ContentSettingsPattern::FromURLNoWildcard(GetURL(kHostA)), + base::Value(CONTENT_SETTING_ALLOW), "preference", + /*incognito=*/false, {.expiration = expiration_time})); + settings.emplace_back( + ContentSettingsPattern::FromURLNoWildcard(GetURL(kHostC)), + ContentSettingsPattern::FromURLNoWildcard(GetURL(kHostA)), + base::Value(CONTENT_SETTING_ALLOW), "preference", + /*incognito=*/false); + + browser() + ->profile() + ->GetDefaultStoragePartition() + ->GetCookieManagerForBrowserProcess() + ->SetAllStorageAccessSettings(settings, settings, base::DoNothing()); + + NavigateFrameTo(kHostB, "/iframe.html"); + NavigateNestedFrameTo(kHostC, "/echoheader?cookie"); + EXPECT_EQ(GetNestedFrameContent(), "None"); + EXPECT_EQ(ReadCookiesViaJS(GetNestedFrame()), ""); + + EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, + /*cors_enabled=*/true), + ""); + EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostC, + /*cors_enabled=*/true), + "cross-site=c.test"); + + EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, + /*cors_enabled=*/true), + ""); + EXPECT_EQ(CookiesFromFetchWithCredentials(GetNestedFrame(), kHostC, + /*cors_enabled=*/true), + ""); +} + +IN_PROC_BROWSER_TEST_F(RequestStorageAccessForBrowserTest, + RsaForOriginDisabledByDefault) { + NavigateToPageWithFrame(kHostA); + // Ensure that the proposed extension is not available unless explicitly + // enabled. + EXPECT_TRUE(EvalJs(GetPrimaryMainFrame(), + "\"requestStorageAccessFor\" in document === false") + .ExtractBool()); +} + +class RequestStorageAccessForEnabledBrowserTest + : public RequestStorageAccessForBaseBrowserTest, + public testing::WithParamInterface<std::tuple<bool, bool>> { + public: + protected: + std::vector<base::test::FeatureRefAndParams> GetEnabledFeatures() override { + std::vector<base::test::FeatureRefAndParams> enabled = + RequestStorageAccessForBaseBrowserTest::GetEnabledFeatures(); + enabled.push_back( + {blink::features::kStorageAccessAPIForOriginExtension, {}}); + return enabled; + } +}; + +IN_PROC_BROWSER_TEST_F(RequestStorageAccessForEnabledBrowserTest, + SameOriginGrantedByDefault) { + SetBlockThirdPartyCookies(true); + base::HistogramTester histogram_tester; + + NavigateToPageWithFrame(kHostA); + + EXPECT_FALSE(storage::test::RequestStorageAccessForOrigin( + GetFrame(), "https://asdf.example")); + EXPECT_FALSE( + storage::test::RequestStorageAccessForOrigin(GetFrame(), "mattwashere")); + EXPECT_TRUE(storage::test::RequestStorageAccessForOrigin( + GetPrimaryMainFrame(), GetURL(kHostA).spec())); + EXPECT_FALSE(storage::test::RequestStorageAccessForOrigin( + GetFrame(), GetURL(kHostA).spec())); +} + +IN_PROC_BROWSER_TEST_F(RequestStorageAccessForEnabledBrowserTest, + TopLevelOpaqueOriginRejected) { + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), + GURL("data:,Hello%2C%20World%21"))); + + EXPECT_FALSE(storage::test::RequestStorageAccessForOrigin( + GetPrimaryMainFrame(), GetURL(kHostA).spec())); +} + +IN_PROC_BROWSER_TEST_F(RequestStorageAccessForEnabledBrowserTest, + RequestStorageAccessForEmbeddedOriginScoping) { + SetBlockThirdPartyCookies(true); + + // Set cross-site cookies on all hosts. + SetCrossSiteCookieOnHost(kHostA); + SetCrossSiteCookieOnHost(kHostB); + + // Verify that the top-level scoping does not leak to the embedded URL, whose + // origin must be used. + NavigateToPageWithFrame(kHostB); + + EXPECT_TRUE(storage::test::RequestStorageAccessForOrigin( + GetPrimaryMainFrame(), GetURL(kHostB).spec())); + + // Regardless of the top-level site or origin scoping, the embedded origin + // should be used. + NavigateFrameTo(kHostASubdomain, "/echoheader?cookie"); + EXPECT_EQ(GetFrameContent(), "None"); + EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); + EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostASubdomain, + /*cors_enabled=*/true), + ""); +} + +// Tests to validate First-Party Set use with `requestStorageAccessFor`. +class RequestStorageAccessForWithFirstPartySetsBrowserTest + : public RequestStorageAccessForBaseBrowserTest { + public: + void SetUpCommandLine(base::CommandLine* command_line) override { + RequestStorageAccessForBaseBrowserTest::SetUpCommandLine(command_line); + command_line->AppendSwitchASCII( + network::switches::kUseFirstPartySet, + base::StrCat({R"({"primary": "https://)", kHostA, + R"(", "associatedSites": ["https://)", kHostC, R"("])", + R"(, "serviceSites": ["https://)", kHostB, R"("]})"})); + } + + protected: + std::vector<base::test::FeatureRefAndParams> GetEnabledFeatures() override { + return {{blink::features::kStorageAccessAPIForOriginExtension, {}}, + {blink::features::kStorageAccessAPI, {}}}; + } +}; + +IN_PROC_BROWSER_TEST_F(RequestStorageAccessForWithFirstPartySetsBrowserTest, + PermissionQueryDefault) { + NavigateToPageWithFrame(kHostA); + EXPECT_EQ(QueryPermission(GetPrimaryMainFrame(), kHostB), "prompt"); +} + +IN_PROC_BROWSER_TEST_F(RequestStorageAccessForWithFirstPartySetsBrowserTest, + PermissionQueryDoesNotShowDenied) { + NavigateToPageWithFrame(kHostA); + + // First, get a rejection for `kHostD`, because it is not in the same + // First-Party Set. + EXPECT_FALSE(storage::test::RequestStorageAccessForOrigin( + GetPrimaryMainFrame(), GetURL(kHostD).spec())); + + // Then, validate that the rejection is not exposed via query, matching the + // spec. + EXPECT_EQ(QueryPermission(GetPrimaryMainFrame(), kHostD), "prompt"); +} + +IN_PROC_BROWSER_TEST_F(RequestStorageAccessForWithFirstPartySetsBrowserTest, + PermissionQueryCrossSiteFrame) { + NavigateToPageWithFrame(kHostA); + + // First, grant `kHostB` access. + EXPECT_TRUE(storage::test::RequestStorageAccessForOrigin( + GetPrimaryMainFrame(), GetURL(kHostB).spec())); + // TODO(crbug.com/1414468): this should be `granted`, but the override + // mechanism isn't currently implemented for queries. Switch this expectation + // once it is. + EXPECT_EQ(QueryPermission(GetPrimaryMainFrame(), kHostB), "prompt"); + + NavigateFrameTo(kHostD, "/"); + + // The cross-site frame on `kHostD` should not be able to get the state of + // `kHostB` on `kHostA`. + EXPECT_EQ(QueryPermission(GetFrame(), kHostB), "prompt"); +} + +// Validate that if a top-level document requests access that cookies become +// unblocked for just that top-level/third-party combination. +IN_PROC_BROWSER_TEST_F( + RequestStorageAccessForWithFirstPartySetsBrowserTest, + // TODO(crbug.com/1370096): Re-enable usage metric assertions. + Permission_AutograntedWithinFirstPartySet) { + SetBlockThirdPartyCookies(true); + base::HistogramTester histogram_tester; + + // Set cross-site cookies on all hosts. + SetCrossSiteCookieOnHost(kHostA); + SetCrossSiteCookieOnHost(kHostB); + SetCrossSiteCookieOnHost(kHostC); + + NavigateToPageWithFrame(kHostA); + + NavigateFrameTo(kHostB, "/echoheader?cookie"); + EXPECT_EQ(GetFrameContent(), "None"); + EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); + // The request comes from `kHostA`, which is in a First-Party Set with + // `khostB`. Note that `kHostB` would not be auto-granted access if it were + // the requestor, because it is a service domain. + EXPECT_TRUE(storage::test::RequestStorageAccessForOrigin( + GetPrimaryMainFrame(), GetURL(kHostB).spec())); + EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, + /*cors_enabled=*/true), + "cross-site=b.test"); + // Subresource request from iframe does not have cookie access. + EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, + /*cors_enabled=*/true), + ""); + // Repeated calls should also return true. + EXPECT_TRUE(storage::test::RequestStorageAccessForOrigin( + GetPrimaryMainFrame(), GetURL(kHostB).spec())); + + // Navigate iframe to a cross-site, cookie-reading endpoint, and verify that + // the cookie is sent for the cors-enabled subresource request. + NavigateFrameTo(kHostB, "/echoheader?cookie"); + EXPECT_EQ(GetFrameContent(), "None"); + EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); + EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, + /*cors_enabled=*/true), + "cross-site=b.test"); + // Subresource request from iframe does not have cookie access. + EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, + /*cors_enabled=*/true), + ""); + // Subresource request with cors disabled does not have cookie access. + EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, + /*cors_enabled=*/false), + ""); + + // Navigate iframe to a same-site, cookie-reading endpoint, and verify that + // the cookie is not sent for a cross-site subresource request from iframe. + NavigateFrameTo(kHostA, "/echoheader?cookie"); + EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, + /*cors_enabled=*/true), + ""); + + // Also validate that an additional site C was not granted access. + NavigateFrameTo(kHostC, "/echoheader?cookie"); + EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostC, + /*cors_enabled=*/true), + ""); + + EXPECT_THAT(histogram_tester.GetBucketCount( + kRequestOutcomeHistogram, + 0 /*RequestOutcome::kGrantedByFirstPartySet*/), + Gt(0)); +} + +// Validate that the permission for rSAFor allows autogranting of rSA, including +// without a user gesture. +IN_PROC_BROWSER_TEST_F(RequestStorageAccessForWithFirstPartySetsBrowserTest, + Permission_AllowsRequestStorageAccessResolution) { + SetBlockThirdPartyCookies(true); + + SetCrossSiteCookieOnHost(kHostB); + + NavigateToPageWithFrame(kHostA); + NavigateFrameTo(kHostB, "/"); + // First, verify that executing `requestStorageAccess` without a user gesture + // results in a rejection. + EXPECT_FALSE(content::EvalJs(GetFrame(), kRequestStorageAccess, + content::EXECUTE_SCRIPT_NO_USER_GESTURE) + .ExtractBool()); + // Then invoke `requestStorageAccessFor` at the top level on behalf of + // the frame. + EXPECT_TRUE(storage::test::RequestStorageAccessForOrigin( + GetPrimaryMainFrame(), GetURL(kHostB).spec())); + // With the permission set, executing `requestStorageAccess` should now + // resolve, even without a user gesture. + EXPECT_TRUE(content::EvalJs(GetFrame(), kRequestStorageAccess, + content::EXECUTE_SCRIPT_NO_USER_GESTURE) + .ExtractBool()); + EXPECT_TRUE(storage::test::HasStorageAccessForFrame(GetFrame())); + EXPECT_EQ(ReadCookiesViaJS(GetFrame()), "cross-site=b.test"); + + EXPECT_TRUE(content::EvalJs(GetFrame(), kVerifyHasStorageAccessPermission) + .ExtractBool()); + + NavigateFrameTo(kHostC, "/"); + // Verify that there was not a side effect on `kHostC`: invoking + // `requestStorageAccess` without a user gesture should lead to rejection. + EXPECT_FALSE(content::EvalJs(GetFrame(), kRequestStorageAccess, + content::EXECUTE_SCRIPT_NO_USER_GESTURE) + .ExtractBool()); +} + +IN_PROC_BROWSER_TEST_F(RequestStorageAccessForWithFirstPartySetsBrowserTest, + Permission_AutodeniedForServiceDomain) { + SetBlockThirdPartyCookies(true); + base::HistogramTester histogram_tester; + + // Set cross-site cookies on all hosts. + SetCrossSiteCookieOnHost(kHostA); + SetCrossSiteCookieOnHost(kHostB); + + NavigateToPageWithFrame(kHostB); + + NavigateFrameTo(kHostA, "/echoheader?cookie"); + EXPECT_EQ(GetFrameContent(), "None"); + EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); + EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostA, + /*cors_enabled=*/true), + ""); + // The promise should be rejected; `khostB` is a service domain. + EXPECT_FALSE(storage::test::RequestStorageAccessForOrigin( + GetPrimaryMainFrame(), GetURL(kHostA).spec())); + + // Re-navigate iframe to a cross-site, cookie-reading endpoint, and verify + // that the cookie is not sent. + NavigateFrameTo(kHostA, "/echoheader?cookie"); + EXPECT_EQ(GetFrameContent(), "None"); + EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); + EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostA, + /*cors_enabled=*/true), + ""); + + EXPECT_THAT(histogram_tester.GetBucketCount( + kRequestOutcomeHistogram, + 5 /*RequestOutcome::kDeniedByPrerequisites*/), + Gt(0)); +} + +IN_PROC_BROWSER_TEST_F(RequestStorageAccessForWithFirstPartySetsBrowserTest, + Permission_AutodeniedForServiceDomainInIframe) { + SetBlockThirdPartyCookies(true); + base::HistogramTester histogram_tester; + + // Set cross-site cookies on all hosts. + SetCrossSiteCookieOnHost(kHostA); + SetCrossSiteCookieOnHost(kHostB); + + NavigateToPageWithFrame(kHostA); + + NavigateFrameTo(kHostB, "/echoheader?cookie"); + EXPECT_EQ(GetFrameContent(), "None"); + EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); + EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, + /*cors_enabled=*/true), + ""); + // `kHostB` cannot be granted access via `RequestStorageAccessFor`, + // because the call is not from the top-level page and because `kHostB` is a + // service domain. + EXPECT_FALSE(storage::test::RequestStorageAccessForOrigin( + GetFrame(), GetURL(kHostA).spec())); + EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, + /*cors_enabled=*/true), + ""); + + // Navigate iframe to a cross-site, cookie-reading endpoint, and verify that + // the cookie is not sent. + NavigateFrameTo(kHostB, "/echoheader?cookie"); + EXPECT_EQ(GetFrameContent(), "None"); + EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); + EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, + /*cors_enabled=*/true), + ""); +} + +IN_PROC_BROWSER_TEST_F(RequestStorageAccessForWithFirstPartySetsBrowserTest, + Permission_AutodeniedOutsideFirstPartySet) { + SetBlockThirdPartyCookies(true); + base::HistogramTester histogram_tester; + + // Set cross-site cookies on all hosts. + SetCrossSiteCookieOnHost(kHostA); + SetCrossSiteCookieOnHost(kHostD); + + NavigateToPageWithFrame(kHostA); + + NavigateFrameTo(kHostD, "/echoheader?cookie"); + EXPECT_EQ(GetFrameContent(), "None"); + EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); + // `kHostD` cannot be granted access via `RequestStorageAccessFor` in + // this configuration, because the requesting site (`kHostA`) is not in the + // same First-Party Set as the requested site (`kHostD`). + EXPECT_FALSE(storage::test::RequestStorageAccessForOrigin( + GetPrimaryMainFrame(), GetURL(kHostD).spec())); + EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostD, + /*cors_enabled=*/true), + ""); + + // Navigate iframe to a cross-site, cookie-reading endpoint, and verify that + // the cookie is not sent. + NavigateFrameTo(kHostD, "/echoheader?cookie"); + EXPECT_EQ(GetFrameContent(), "None"); + EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); + EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostD, + /*cors_enabled=*/true), + ""); + + EXPECT_THAT(histogram_tester.GetBucketCount( + kRequestOutcomeHistogram, + 3 /*RequestOutcome::kDeniedByFirstPartySet*/), + Gt(0)); +} + +IN_PROC_BROWSER_TEST_F(RequestStorageAccessForWithFirstPartySetsBrowserTest, + RequestStorageAccessForTopLevelScoping) { + SetBlockThirdPartyCookies(true); + + // Set cross-site cookies on all hosts. + SetCrossSiteCookieOnHost(kHostA); + SetCrossSiteCookieOnHost(kHostB); + + NavigateToPageWithFrame(kHostA); + + // Allow all requests for kHostB to have cookie access from a.test. + NavigateFrameTo(kHostB, "/echoheader?cookie"); + EXPECT_EQ(GetFrameContent(), "None"); + EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); + EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, + /*cors_enabled=*/true), + ""); + EXPECT_TRUE(storage::test::RequestStorageAccessForOrigin( + GetPrimaryMainFrame(), GetURL(kHostB).spec())); + + // Navigate iframe to a cross-site, cookie-reading endpoint, and verify that + // the cookie is sent for the cors-enabled subresource request. + NavigateFrameTo(kHostB, "/echoheader?cookie"); + EXPECT_EQ(GetFrameContent(), "None"); + EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); + EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, + /*cors_enabled=*/true), + "cross-site=b.test"); + // Subresource request from iframe does not have cookie access. + EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, + /*cors_enabled=*/true), + ""); + // Subresource request with cors disabled does not have cookie access. + EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, + /*cors_enabled=*/false), + ""); + + NavigateToPageWithFrame(kHostASubdomain); + NavigateFrameTo(kHostB, "/echoheader?cookie"); + // Storage access grants are scoped to the embedded origin on the top-level + // site. Accordingly, the access is be granted for subresource request. + EXPECT_EQ(GetFrameContent(), "None"); + EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); + EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, + /*cors_enabled=*/true), + "cross-site=b.test"); + EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, + /*cors_enabled=*/true), + ""); +} + +IN_PROC_BROWSER_TEST_F( + RequestStorageAccessForWithFirstPartySetsBrowserTest, + RequestStorageAccessForTopLevelScopingWhenRequestedFromSubdomain) { + SetBlockThirdPartyCookies(true); + + // Set cross-site cookies on all hosts. + SetCrossSiteCookieOnHost(kHostA); + SetCrossSiteCookieOnHost(kHostB); + + NavigateToPageWithFrame(kHostASubdomain); + + // Allow all requests for kHostB to have cookie access from a.test. + NavigateFrameTo(kHostB, "/echoheader?cookie"); + EXPECT_EQ(GetFrameContent(), "None"); + EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); + EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, + /*cors_enabled=*/true), + ""); + EXPECT_TRUE(storage::test::RequestStorageAccessForOrigin( + GetPrimaryMainFrame(), GetURL(kHostB).spec())); + + // Navigate iframe to a cross-site, cookie-reading endpoint, and verify that + // the cookie is sent for the cors-enabled subresource request. + NavigateFrameTo(kHostB, "/echoheader?cookie"); + EXPECT_EQ(GetFrameContent(), "None"); + EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); + EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, + /*cors_enabled=*/true), + "cross-site=b.test"); + // Subresource request from iframe does not have cookie access. + EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, + /*cors_enabled=*/true), + ""); + // Subresource request with cors disabled does not have cookie access. + EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, + /*cors_enabled=*/false), + ""); + + NavigateToPageWithFrame(kHostA); + NavigateFrameTo(kHostB, "/echoheader?cookie"); + // When top-level site scoping is enabled, the subdomain's grant counts for + // the less-specific domain; otherwise, it does not. + EXPECT_EQ(GetFrameContent(), "None"); + EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); + EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, + /*cors_enabled=*/true), + "cross-site=b.test"); + // Subresource request from iframe does not have cookie access. + EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, + /*cors_enabled=*/true), + ""); +} + +// Tests to validate `requestStorageAccessFor` behavior with FPS disabled. +// For now, that entails auto-denial of requests. +class RequestStorageAccessForWithFirstPartySetsDisabledBrowserTest + : public RequestStorageAccessForBaseBrowserTest { + public: + protected: + std::vector<base::test::FeatureRefAndParams> GetEnabledFeatures() override { + return {{blink::features::kStorageAccessAPIForOriginExtension, {}}, + {blink::features::kStorageAccessAPI, {}}}; + } + std::vector<base::test::FeatureRef> GetDisabledFeatures() override { + return {features::kFirstPartySets}; + } +}; + +IN_PROC_BROWSER_TEST_F( + RequestStorageAccessForWithFirstPartySetsDisabledBrowserTest, + PermissionAutodenied) { + SetBlockThirdPartyCookies(true); + base::HistogramTester histogram_tester; + + // Set cross-site cookies on all hosts. + SetCrossSiteCookieOnHost(kHostA); + SetCrossSiteCookieOnHost(kHostD); + + NavigateToPageWithFrame(kHostA); + + NavigateFrameTo(kHostD, "/echoheader?cookie"); + EXPECT_EQ(GetFrameContent(), "None"); + EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); + // `kHostD` cannot be granted access via `RequestStorageAccessFor` in + // this configuration, because the requesting site (`kHostA`) is not in the + // same First-Party Set as the requested site (`kHostD`). + EXPECT_FALSE(storage::test::RequestStorageAccessForOrigin( + GetPrimaryMainFrame(), GetURL(kHostD).spec())); + + // Navigate iframe to a cross-site, cookie-reading endpoint, and verify that + // the cookie is not sent. + NavigateFrameTo(kHostD, "/echoheader?cookie"); + EXPECT_EQ(GetFrameContent(), "None"); + EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); + + EXPECT_THAT(histogram_tester.GetBucketCount( + kRequestOutcomeHistogram, + 5 /*RequestOutcome::kDeniedByPrerequisites*/), + Gt(0)); +} + +// Tests to validate that, when the `requestStorageAccessFor` extension is +// explicitly disabled, or if the larger Storage Access API is disabled, it does +// not leak onto the document object. +class RequestStorageAccessForExplicitlyDisabledBrowserTest + : public RequestStorageAccessForBaseBrowserTest, + public testing::WithParamInterface<bool> { + public: + RequestStorageAccessForExplicitlyDisabledBrowserTest() + : enable_standard_storage_access_api_(GetParam()) {} + + protected: + std::vector<base::test::FeatureRef> GetDisabledFeatures() override { + // The test should validate that either flag alone disables the API. + // Note that enabling the extension and not the standard API means both are + // disabled. + if (enable_standard_storage_access_api_) { + return {blink::features::kStorageAccessAPIForOriginExtension}; + } + return {blink::features::kStorageAccessAPI}; + } + std::vector<base::test::FeatureRefAndParams> GetEnabledFeatures() override { + // When the standard API is enabled, return the parent class's enabled + // feature list. Otherwise, enable only the extension; this should not take + // effect. + if (enable_standard_storage_access_api_) { + return RequestStorageAccessForBaseBrowserTest::GetEnabledFeatures(); + } + return {{blink::features::kStorageAccessAPIForOriginExtension, {}}}; + } + + private: + bool enable_standard_storage_access_api_; +}; + +IN_PROC_BROWSER_TEST_P(RequestStorageAccessForExplicitlyDisabledBrowserTest, + RsaForOriginNotPresentOnDocumentWhenExplicitlyDisabled) { + NavigateToPageWithFrame(kHostA); + // Ensure that the proposed extension is not available unless explicitly + // enabled. + EXPECT_TRUE(EvalJs(GetPrimaryMainFrame(), + "\"requestStorageAccessFor\" in document === false") + .ExtractBool()); +} + +INSTANTIATE_TEST_SUITE_P( + /* no prefix */, + RequestStorageAccessForExplicitlyDisabledBrowserTest, + testing::Bool()); + +class RequestStorageAccessForWithCHIPSBrowserTest + : public RequestStorageAccessForBaseBrowserTest { + public: + void SetUpCommandLine(base::CommandLine* command_line) override { + RequestStorageAccessForBaseBrowserTest::SetUpCommandLine(command_line); + command_line->AppendSwitchASCII( + network::switches::kUseFirstPartySet, + base::StrCat({R"({"primary": "https://)", kHostA, + R"(", "associatedSites": ["https://)", kHostC, R"("])", + R"(, "serviceSites": ["https://)", kHostB, R"("]})"})); + } + std::vector<base::test::FeatureRefAndParams> GetEnabledFeatures() override { + std::vector<base::test::FeatureRefAndParams> enabled = + RequestStorageAccessForBaseBrowserTest::GetEnabledFeatures(); + enabled.push_back({net::features::kPartitionedCookies, {}}); + enabled.push_back( + {blink::features::kStorageAccessAPIForOriginExtension, {}}); + return enabled; + } +}; + +IN_PROC_BROWSER_TEST_F(RequestStorageAccessForWithCHIPSBrowserTest, + RequestStorageAccessFor_CoexistsWithCHIPS) { + SetBlockThirdPartyCookies(true); + + SetCrossSiteCookieOnHost(kHostB); + SetPartitionedCookieInContext(/*top_level_host=*/kHostA, + /*embedded_host=*/kHostB); + + NavigateToPageWithFrame(kHostA); + + // kHostB starts without unpartitioned cookies: + NavigateFrameTo(kHostB, "/echoheader?cookie"); + EXPECT_EQ(GetFrameContent(), "cross-site=b.test(partitioned)"); + EXPECT_EQ(ReadCookiesViaJS(GetFrame()), "cross-site=b.test(partitioned)"); + EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, + /*cors_enabled=*/true), + "cross-site=b.test(partitioned)"); + EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, + /*cors_enabled=*/true), + "cross-site=b.test(partitioned)"); + + // kHostA can request storage access on behalf of kHostB, and it is granted + // (by an implicit grant): + EXPECT_TRUE(storage::test::RequestStorageAccessForOrigin( + GetPrimaryMainFrame(), GetURL(kHostB).spec())); + NavigateFrameTo(kHostB, "/echoheader?cookie"); + // When the top-level frame makes a subresource request to an endpoint on + // kHostB, kHostB's unpartitioned and partitioned cookies are sent. + EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, + /*cors_enabled=*/true), + "cross-site=b.test; cross-site=b.test(partitioned)"); + // When the frame makes a subresource request to an endpoint on kHostB, + // only kHostB's partitioned cookies are sent. + EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, + /*cors_enabled=*/true), + "cross-site=b.test(partitioned)"); +} + +} // namespace
diff --git a/chrome/browser/top_level_storage_access_api/request_storage_access_for_origin_browsertest.cc b/chrome/browser/top_level_storage_access_api/request_storage_access_for_origin_browsertest.cc deleted file mode 100644 index 4a0545b5..0000000 --- a/chrome/browser/top_level_storage_access_api/request_storage_access_for_origin_browsertest.cc +++ /dev/null
@@ -1,954 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "base/functional/bind.h" -#include "base/functional/callback_helpers.h" -#include "base/path_service.h" -#include "base/strings/strcat.h" -#include "base/strings/stringprintf.h" -#include "base/test/metrics/histogram_tester.h" -#include "base/test/scoped_feature_list.h" -#include "chrome/browser/content_settings/cookie_settings_factory.h" -#include "chrome/browser/content_settings/host_content_settings_map_factory.h" -#include "chrome/browser/net/storage_test_utils.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/browser.h" -#include "chrome/browser/ui/tabs/tab_strip_model.h" -#include "chrome/common/pref_names.h" -#include "chrome/test/base/in_process_browser_test.h" -#include "chrome/test/base/ui_test_utils.h" -#include "components/content_settings/core/browser/cookie_settings.h" -#include "components/content_settings/core/browser/host_content_settings_map.h" -#include "components/content_settings/core/common/content_settings.h" -#include "components/content_settings/core/common/features.h" -#include "components/content_settings/core/common/pref_names.h" -#include "components/metrics/content/subprocess_metrics_provider.h" -#include "components/prefs/pref_service.h" -#include "content/public/browser/browser_context.h" -#include "content/public/browser/storage_partition.h" -#include "content/public/common/content_features.h" -#include "content/public/common/content_paths.h" -#include "content/public/test/browser_task_environment.h" -#include "content/public/test/browser_test.h" -#include "content/public/test/browser_test_utils.h" -#include "content/public/test/test_navigation_observer.h" -#include "net/base/features.h" -#include "net/cookies/cookie_constants.h" -#include "net/cookies/cookie_partition_key_collection.h" -#include "net/dns/mock_host_resolver.h" -#include "net/test/embedded_test_server/embedded_test_server.h" -#include "services/network/public/cpp/network_switches.h" -#include "services/network/public/mojom/cookie_manager.mojom.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "third_party/blink/public/common/features.h" -#include "third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom-forward.h" -#include "ui/base/window_open_disposition.h" - -using content::BrowserThread; -using testing::Gt; - -namespace { - -constexpr char kHostA[] = "a.test"; -constexpr char kHostASubdomain[] = "subdomain.a.test"; -constexpr char kHostB[] = "b.test"; -constexpr char kHostC[] = "c.test"; -constexpr char kHostD[] = "d.test"; - -constexpr char kRequestOutcomeHistogram[] = - "API.TopLevelStorageAccess.RequestOutcome"; - -// Path for URL of custom response -const char* kFetchWithCredentialsPath = "/respondwithcookies"; - -constexpr char kQueryTopLevelStorageAccessPermission[] = - "navigator.permissions.query({name: 'top-level-storage-access', " - "requestedOrigin: '%s'}).then(" - " (permission) => permission.state);"; -constexpr char kVerifyHasStorageAccessPermission[] = - "navigator.permissions.query({name: 'storage-access'}).then(" - " (permission) => permission.name === 'storage-access' && " - "permission.state === 'granted');"; -constexpr char kRequestStorageAccess[] = - "document.requestStorageAccess()" - ".then(() => true)" - ".catch(() => false);"; - -std::unique_ptr<net::test_server::HttpResponse> HandleRequest( - const net::test_server::HttpRequest& request) { - if (request.relative_url != kFetchWithCredentialsPath) { - return nullptr; - } - auto http_response = std::make_unique<net::test_server::BasicHttpResponse>(); - http_response->set_code(net::HTTP_OK); - http_response->set_content_type("text/plain"); - // Set the cors enabled headers. - if (auto it = request.headers.find(net::HttpRequestHeaders::kOrigin); - it != request.headers.end()) { - http_response->AddCustomHeader("Access-Control-Allow-Origin", it->second); - http_response->AddCustomHeader("Vary", "origin"); - http_response->AddCustomHeader("Access-Control-Allow-Credentials", "true"); - } - // Get the 'Cookie' header that was sent in the request. - if (auto it = request.headers.find(net::HttpRequestHeaders::kCookie); - it != request.headers.end()) { - http_response->set_content(it->second); - } - - return http_response; -} - -class RequestStorageAccessForOriginBaseBrowserTest - : public InProcessBrowserTest { - protected: - RequestStorageAccessForOriginBaseBrowserTest() - : https_server_(net::EmbeddedTestServer::TYPE_HTTPS) {} - - void SetUp() override { - features_.InitWithFeaturesAndParameters(GetEnabledFeatures(), - GetDisabledFeatures()); - InProcessBrowserTest::SetUp(); - } - - virtual std::vector<base::test::FeatureRefAndParams> GetEnabledFeatures() { - std::vector<base::test::FeatureRefAndParams> enabled( - {{blink::features::kStorageAccessAPI, {}}}); - return enabled; - } - - virtual std::vector<base::test::FeatureRef> GetDisabledFeatures() { - return {}; - } - - void SetUpOnMainThread() override { - host_resolver()->AddRule("*", "127.0.0.1"); - base::FilePath path; - base::PathService::Get(content::DIR_TEST_DATA, &path); - https_server_.SetSSLConfig(net::EmbeddedTestServer::CERT_TEST_NAMES); - https_server_.ServeFilesFromDirectory(path); - https_server_.AddDefaultHandlers(GetChromeTestDataDir()); - https_server_.RegisterRequestHandler(base::BindRepeating(&HandleRequest)); - ASSERT_TRUE(https_server_.Start()); - } - - void SetCrossSiteCookieOnHost(const std::string& host) { - GURL host_url = GetURL(host); - std::string cookie = base::StrCat({"cross-site=", host}); - content::SetCookie(browser()->profile(), host_url, - base::StrCat({cookie, ";SameSite=None;Secure"})); - ASSERT_THAT(content::GetCookies(browser()->profile(), host_url), - testing::HasSubstr(cookie)); - } - - void SetPartitionedCookieInContext(const std::string& top_level_host, - const std::string& embedded_host) { - GURL host_url = GetURL(embedded_host); - std::string cookie = - base::StrCat({"cross-site=", embedded_host, "(partitioned)"}); - net::CookiePartitionKey partition_key = - net::CookiePartitionKey::FromURLForTesting(GetURL(top_level_host)); - content::SetPartitionedCookie( - browser()->profile(), host_url, - base::StrCat({cookie, ";SameSite=None;Secure;Partitioned"}), - partition_key); - ASSERT_THAT(content::GetCookies( - browser()->profile(), host_url, - net::CookieOptions::SameSiteCookieContext::MakeInclusive(), - net::CookiePartitionKeyCollection(partition_key)), - testing::HasSubstr(cookie)); - } - - GURL GetURL(const std::string& host) { - return https_server_.GetURL(host, "/"); - } - - void SetBlockThirdPartyCookies(bool value) { - browser()->profile()->GetPrefs()->SetInteger( - prefs::kCookieControlsMode, - static_cast<int>( - value ? content_settings::CookieControlsMode::kBlockThirdParty - : content_settings::CookieControlsMode::kOff)); - } - - void NavigateToPageWithFrame(const std::string& host) { - GURL main_url(https_server_.GetURL(host, "/iframe.html")); - ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), main_url)); - } - - void NavigateToNewTabWithFrame(const std::string& host) { - GURL main_url(https_server_.GetURL(host, "/iframe.html")); - ui_test_utils::NavigateToURLWithDisposition( - browser(), main_url, WindowOpenDisposition::NEW_FOREGROUND_TAB, - ui_test_utils::BROWSER_TEST_WAIT_FOR_LOAD_STOP); - } - - void NavigateFrameTo(const std::string& host, const std::string& path) { - GURL page = https_server_.GetURL(host, path); - content::WebContents* web_contents = - browser()->tab_strip_model()->GetActiveWebContents(); - EXPECT_TRUE(NavigateIframeToURL(web_contents, "test", page)); - } - - std::string GetFrameContent() { - return storage::test::GetFrameContent(GetFrame()); - } - - void NavigateNestedFrameTo(const std::string& host, const std::string& path) { - GURL url(https_server_.GetURL(host, path)); - content::WebContents* web_contents = - browser()->tab_strip_model()->GetActiveWebContents(); - content::TestNavigationObserver load_observer(web_contents); - ASSERT_TRUE(ExecuteScript( - GetFrame(), - base::StringPrintf("document.body.querySelector('iframe').src = '%s';", - url.spec().c_str()))); - load_observer.Wait(); - } - - std::string GetNestedFrameContent() { - return storage::test::GetFrameContent(GetNestedFrame()); - } - - std::string ReadCookiesViaJS(content::RenderFrameHost* render_frame_host) { - return content::EvalJs(render_frame_host, "document.cookie") - .ExtractString(); - } - - std::string QueryPermission(content::RenderFrameHost* render_frame_host, - const std::string& requested_origin) { - return content::EvalJs( - render_frame_host, - base::StringPrintf(kQueryTopLevelStorageAccessPermission, - GetURL(requested_origin).spec().c_str())) - .ExtractString(); - } - - content::RenderFrameHost* GetPrimaryMainFrame() { - content::WebContents* web_contents = - browser()->tab_strip_model()->GetActiveWebContents(); - return web_contents->GetPrimaryMainFrame(); - } - - content::RenderFrameHost* GetFrame() { - return ChildFrameAt(GetPrimaryMainFrame(), 0); - } - - content::RenderFrameHost* GetNestedFrame() { - return ChildFrameAt(GetFrame(), 0); - } - - std::string CookiesFromFetchWithCredentials(content::RenderFrameHost* frame, - const std::string& host, - const bool cors_enabled) { - return storage::test::FetchWithCredentials( - frame, https_server_.GetURL(host, kFetchWithCredentialsPath), - cors_enabled); - } - - net::test_server::EmbeddedTestServer& https_server() { return https_server_; } - - private: - net::test_server::EmbeddedTestServer https_server_; - base::test::ScopedFeatureList features_; -}; - -class RequestStorageAccessForOriginBrowserTest - : public RequestStorageAccessForOriginBaseBrowserTest {}; - -// Validates that expiry data is transferred over IPC to the Network Service. -IN_PROC_BROWSER_TEST_F(RequestStorageAccessForOriginBrowserTest, - ThirdPartyGrantsExpireOverIPC) { - SetBlockThirdPartyCookies(true); - - // Set a cookie on `kHostB` and `kHostC`. - SetCrossSiteCookieOnHost(kHostB); - ASSERT_EQ(content::GetCookies(browser()->profile(), GetURL(kHostB)), - "cross-site=b.test"); - SetCrossSiteCookieOnHost(kHostC); - ASSERT_EQ(content::GetCookies(browser()->profile(), GetURL(kHostC)), - "cross-site=c.test"); - - NavigateToPageWithFrame(kHostA); - NavigateFrameTo(kHostB, "/iframe.html"); - NavigateNestedFrameTo(kHostC, "/echoheader?cookie"); - - // Manually create a pre-expired grant and ensure it doesn't grant access. - base::Time expiration_time = base::Time::Now() - base::Minutes(5); - HostContentSettingsMap* settings_map = - HostContentSettingsMapFactory::GetForProfile(browser()->profile()); - settings_map->SetContentSettingDefaultScope( - GetURL(kHostB), GetURL(kHostA), - ContentSettingsType::TOP_LEVEL_STORAGE_ACCESS, CONTENT_SETTING_ALLOW, - {expiration_time, content_settings::SessionModel::UserSession}); - settings_map->SetContentSettingDefaultScope( - GetURL(kHostC), GetURL(kHostA), - ContentSettingsType::TOP_LEVEL_STORAGE_ACCESS, CONTENT_SETTING_ALLOW, - {expiration_time, content_settings::SessionModel::UserSession}); - - // Manually send our expired setting. This needs to be done manually because - // normally this expired value would be filtered out before sending and time - // cannot be properly mocked in a browser test. - ContentSettingsForOneType settings; - settings.push_back(ContentSettingPatternSource( - ContentSettingsPattern::FromURLNoWildcard(GetURL(kHostB)), - ContentSettingsPattern::FromURLNoWildcard(GetURL(kHostA)), - base::Value(CONTENT_SETTING_ALLOW), "preference", - /*incognito=*/false, {.expiration = expiration_time})); - settings.emplace_back( - ContentSettingsPattern::FromURLNoWildcard(GetURL(kHostC)), - ContentSettingsPattern::FromURLNoWildcard(GetURL(kHostA)), - base::Value(CONTENT_SETTING_ALLOW), "preference", - /*incognito=*/false); - - browser() - ->profile() - ->GetDefaultStoragePartition() - ->GetCookieManagerForBrowserProcess() - ->SetAllStorageAccessSettings(settings, settings, base::DoNothing()); - - NavigateFrameTo(kHostB, "/iframe.html"); - NavigateNestedFrameTo(kHostC, "/echoheader?cookie"); - EXPECT_EQ(GetNestedFrameContent(), "None"); - EXPECT_EQ(ReadCookiesViaJS(GetNestedFrame()), ""); - - EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, - /*cors_enabled=*/true), - ""); - EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostC, - /*cors_enabled=*/true), - "cross-site=c.test"); - - EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, - /*cors_enabled=*/true), - ""); - EXPECT_EQ(CookiesFromFetchWithCredentials(GetNestedFrame(), kHostC, - /*cors_enabled=*/true), - ""); -} - -IN_PROC_BROWSER_TEST_F(RequestStorageAccessForOriginBrowserTest, - RsaForOriginDisabledByDefault) { - NavigateToPageWithFrame(kHostA); - // Ensure that the proposed extension is not available unless explicitly - // enabled. - EXPECT_TRUE(EvalJs(GetPrimaryMainFrame(), - "\"requestStorageAccessForOrigin\" in document === false") - .ExtractBool()); -} - -class RequestStorageAccessForOriginEnabledBrowserTest - : public RequestStorageAccessForOriginBaseBrowserTest, - public testing::WithParamInterface<std::tuple<bool, bool>> { - public: - protected: - std::vector<base::test::FeatureRefAndParams> GetEnabledFeatures() override { - std::vector<base::test::FeatureRefAndParams> enabled = - RequestStorageAccessForOriginBaseBrowserTest::GetEnabledFeatures(); - enabled.push_back( - {blink::features::kStorageAccessAPIForOriginExtension, {}}); - return enabled; - } -}; - -IN_PROC_BROWSER_TEST_F(RequestStorageAccessForOriginEnabledBrowserTest, - SameOriginGrantedByDefault) { - SetBlockThirdPartyCookies(true); - base::HistogramTester histogram_tester; - - NavigateToPageWithFrame(kHostA); - - EXPECT_FALSE(storage::test::RequestStorageAccessForOrigin( - GetFrame(), "https://asdf.example")); - EXPECT_FALSE( - storage::test::RequestStorageAccessForOrigin(GetFrame(), "mattwashere")); - EXPECT_TRUE(storage::test::RequestStorageAccessForOrigin( - GetPrimaryMainFrame(), GetURL(kHostA).spec())); - EXPECT_FALSE(storage::test::RequestStorageAccessForOrigin( - GetFrame(), GetURL(kHostA).spec())); -} - -IN_PROC_BROWSER_TEST_F(RequestStorageAccessForOriginEnabledBrowserTest, - TopLevelOpaqueOriginRejected) { - ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), - GURL("data:,Hello%2C%20World%21"))); - - EXPECT_FALSE(storage::test::RequestStorageAccessForOrigin( - GetPrimaryMainFrame(), GetURL(kHostA).spec())); -} - -IN_PROC_BROWSER_TEST_F(RequestStorageAccessForOriginEnabledBrowserTest, - RequestStorageAccessForOriginEmbeddedOriginScoping) { - SetBlockThirdPartyCookies(true); - - // Set cross-site cookies on all hosts. - SetCrossSiteCookieOnHost(kHostA); - SetCrossSiteCookieOnHost(kHostB); - - // Verify that the top-level scoping does not leak to the embedded URL, whose - // origin must be used. - NavigateToPageWithFrame(kHostB); - - EXPECT_TRUE(storage::test::RequestStorageAccessForOrigin( - GetPrimaryMainFrame(), GetURL(kHostB).spec())); - - // Regardless of the top-level site or origin scoping, the embedded origin - // should be used. - NavigateFrameTo(kHostASubdomain, "/echoheader?cookie"); - EXPECT_EQ(GetFrameContent(), "None"); - EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); - EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostASubdomain, - /*cors_enabled=*/true), - ""); -} - -// Tests to validate First-Party Set use with `requestStorageAccessForOrigin`. -class RequestStorageAccessForOriginWithFirstPartySetsBrowserTest - : public RequestStorageAccessForOriginBaseBrowserTest { - public: - void SetUpCommandLine(base::CommandLine* command_line) override { - RequestStorageAccessForOriginBaseBrowserTest::SetUpCommandLine( - command_line); - command_line->AppendSwitchASCII( - network::switches::kUseFirstPartySet, - base::StrCat({R"({"primary": "https://)", kHostA, - R"(", "associatedSites": ["https://)", kHostC, R"("])", - R"(, "serviceSites": ["https://)", kHostB, R"("]})"})); - } - - protected: - std::vector<base::test::FeatureRefAndParams> GetEnabledFeatures() override { - return {{blink::features::kStorageAccessAPIForOriginExtension, {}}, - {blink::features::kStorageAccessAPI, {}}}; - } -}; - -IN_PROC_BROWSER_TEST_F( - RequestStorageAccessForOriginWithFirstPartySetsBrowserTest, - PermissionQueryDefault) { - NavigateToPageWithFrame(kHostA); - EXPECT_EQ(QueryPermission(GetPrimaryMainFrame(), kHostB), "prompt"); -} - -IN_PROC_BROWSER_TEST_F( - RequestStorageAccessForOriginWithFirstPartySetsBrowserTest, - PermissionQueryDoesNotShowDenied) { - NavigateToPageWithFrame(kHostA); - - // First, get a rejection for `kHostD`, because it is not in the same - // First-Party Set. - EXPECT_FALSE(storage::test::RequestStorageAccessForOrigin( - GetPrimaryMainFrame(), GetURL(kHostD).spec())); - - // Then, validate that the rejection is not exposed via query, matching the - // spec. - EXPECT_EQ(QueryPermission(GetPrimaryMainFrame(), kHostD), "prompt"); -} - -IN_PROC_BROWSER_TEST_F( - RequestStorageAccessForOriginWithFirstPartySetsBrowserTest, - PermissionQueryCrossSiteFrame) { - NavigateToPageWithFrame(kHostA); - - // First, grant `kHostB` access. - EXPECT_TRUE(storage::test::RequestStorageAccessForOrigin( - GetPrimaryMainFrame(), GetURL(kHostB).spec())); - // TODO(crbug.com/1414468): this should be `granted`, but the override - // mechanism isn't currently implemented for queries. Switch this expectation - // once it is. - EXPECT_EQ(QueryPermission(GetPrimaryMainFrame(), kHostB), "prompt"); - - NavigateFrameTo(kHostD, "/"); - - // The cross-site frame on `kHostD` should not be able to get the state of - // `kHostB` on `kHostA`. - EXPECT_EQ(QueryPermission(GetFrame(), kHostB), "prompt"); -} - -// Validate that if a top-level document requests access that cookies become -// unblocked for just that top-level/third-party combination. -IN_PROC_BROWSER_TEST_F( - RequestStorageAccessForOriginWithFirstPartySetsBrowserTest, - // TODO(crbug.com/1370096): Re-enable usage metric assertions. - Permission_AutograntedWithinFirstPartySet) { - SetBlockThirdPartyCookies(true); - base::HistogramTester histogram_tester; - - // Set cross-site cookies on all hosts. - SetCrossSiteCookieOnHost(kHostA); - SetCrossSiteCookieOnHost(kHostB); - SetCrossSiteCookieOnHost(kHostC); - - NavigateToPageWithFrame(kHostA); - - NavigateFrameTo(kHostB, "/echoheader?cookie"); - EXPECT_EQ(GetFrameContent(), "None"); - EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); - // The request comes from `kHostA`, which is in a First-Party Set with - // `khostB`. Note that `kHostB` would not be auto-granted access if it were - // the requestor, because it is a service domain. - EXPECT_TRUE(storage::test::RequestStorageAccessForOrigin( - GetPrimaryMainFrame(), GetURL(kHostB).spec())); - EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, - /*cors_enabled=*/true), - "cross-site=b.test"); - // Subresource request from iframe does not have cookie access. - EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, - /*cors_enabled=*/true), - ""); - // Repeated calls should also return true. - EXPECT_TRUE(storage::test::RequestStorageAccessForOrigin( - GetPrimaryMainFrame(), GetURL(kHostB).spec())); - - // Navigate iframe to a cross-site, cookie-reading endpoint, and verify that - // the cookie is sent for the cors-enabled subresource request. - NavigateFrameTo(kHostB, "/echoheader?cookie"); - EXPECT_EQ(GetFrameContent(), "None"); - EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); - EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, - /*cors_enabled=*/true), - "cross-site=b.test"); - // Subresource request from iframe does not have cookie access. - EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, - /*cors_enabled=*/true), - ""); - // Subresource request with cors disabled does not have cookie access. - EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, - /*cors_enabled=*/false), - ""); - - // Navigate iframe to a same-site, cookie-reading endpoint, and verify that - // the cookie is not sent for a cross-site subresource request from iframe. - NavigateFrameTo(kHostA, "/echoheader?cookie"); - EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, - /*cors_enabled=*/true), - ""); - - // Also validate that an additional site C was not granted access. - NavigateFrameTo(kHostC, "/echoheader?cookie"); - EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostC, - /*cors_enabled=*/true), - ""); - - EXPECT_THAT(histogram_tester.GetBucketCount( - kRequestOutcomeHistogram, - 0 /*RequestOutcome::kGrantedByFirstPartySet*/), - Gt(0)); -} - -// Validate that the permission for rSAFor allows autogranting of rSA, including -// without a user gesture. -IN_PROC_BROWSER_TEST_F( - RequestStorageAccessForOriginWithFirstPartySetsBrowserTest, - Permission_AllowsRequestStorageAccessResolution) { - SetBlockThirdPartyCookies(true); - - SetCrossSiteCookieOnHost(kHostB); - - NavigateToPageWithFrame(kHostA); - NavigateFrameTo(kHostB, "/"); - // First, verify that executing `requestStorageAccess` without a user gesture - // results in a rejection. - EXPECT_FALSE(content::EvalJs(GetFrame(), kRequestStorageAccess, - content::EXECUTE_SCRIPT_NO_USER_GESTURE) - .ExtractBool()); - // Then invoke `requestStorageAccessForOrigin` at the top level on behalf of - // the frame. - EXPECT_TRUE(storage::test::RequestStorageAccessForOrigin( - GetPrimaryMainFrame(), GetURL(kHostB).spec())); - // With the permission set, executing `requestStorageAccess` should now - // resolve, even without a user gesture. - EXPECT_TRUE(content::EvalJs(GetFrame(), kRequestStorageAccess, - content::EXECUTE_SCRIPT_NO_USER_GESTURE) - .ExtractBool()); - EXPECT_TRUE(storage::test::HasStorageAccessForFrame(GetFrame())); - EXPECT_EQ(ReadCookiesViaJS(GetFrame()), "cross-site=b.test"); - - EXPECT_TRUE(content::EvalJs(GetFrame(), kVerifyHasStorageAccessPermission) - .ExtractBool()); - - NavigateFrameTo(kHostC, "/"); - // Verify that there was not a side effect on `kHostC`: invoking - // `requestStorageAccess` without a user gesture should lead to rejection. - EXPECT_FALSE(content::EvalJs(GetFrame(), kRequestStorageAccess, - content::EXECUTE_SCRIPT_NO_USER_GESTURE) - .ExtractBool()); -} - -IN_PROC_BROWSER_TEST_F( - RequestStorageAccessForOriginWithFirstPartySetsBrowserTest, - Permission_AutodeniedForServiceDomain) { - SetBlockThirdPartyCookies(true); - base::HistogramTester histogram_tester; - - // Set cross-site cookies on all hosts. - SetCrossSiteCookieOnHost(kHostA); - SetCrossSiteCookieOnHost(kHostB); - - NavigateToPageWithFrame(kHostB); - - NavigateFrameTo(kHostA, "/echoheader?cookie"); - EXPECT_EQ(GetFrameContent(), "None"); - EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); - EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostA, - /*cors_enabled=*/true), - ""); - // The promise should be rejected; `khostB` is a service domain. - EXPECT_FALSE(storage::test::RequestStorageAccessForOrigin( - GetPrimaryMainFrame(), GetURL(kHostA).spec())); - - // Re-navigate iframe to a cross-site, cookie-reading endpoint, and verify - // that the cookie is not sent. - NavigateFrameTo(kHostA, "/echoheader?cookie"); - EXPECT_EQ(GetFrameContent(), "None"); - EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); - EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostA, - /*cors_enabled=*/true), - ""); - - EXPECT_THAT(histogram_tester.GetBucketCount( - kRequestOutcomeHistogram, - 5 /*RequestOutcome::kDeniedByPrerequisites*/), - Gt(0)); -} - -IN_PROC_BROWSER_TEST_F( - RequestStorageAccessForOriginWithFirstPartySetsBrowserTest, - Permission_AutodeniedForServiceDomainInIframe) { - SetBlockThirdPartyCookies(true); - base::HistogramTester histogram_tester; - - // Set cross-site cookies on all hosts. - SetCrossSiteCookieOnHost(kHostA); - SetCrossSiteCookieOnHost(kHostB); - - NavigateToPageWithFrame(kHostA); - - NavigateFrameTo(kHostB, "/echoheader?cookie"); - EXPECT_EQ(GetFrameContent(), "None"); - EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); - EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, - /*cors_enabled=*/true), - ""); - // `kHostB` cannot be granted access via `RequestStorageAccessForOrigin`, - // because the call is not from the top-level page and because `kHostB` is a - // service domain. - EXPECT_FALSE(storage::test::RequestStorageAccessForOrigin( - GetFrame(), GetURL(kHostA).spec())); - EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, - /*cors_enabled=*/true), - ""); - - // Navigate iframe to a cross-site, cookie-reading endpoint, and verify that - // the cookie is not sent. - NavigateFrameTo(kHostB, "/echoheader?cookie"); - EXPECT_EQ(GetFrameContent(), "None"); - EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); - EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, - /*cors_enabled=*/true), - ""); -} - -IN_PROC_BROWSER_TEST_F( - RequestStorageAccessForOriginWithFirstPartySetsBrowserTest, - Permission_AutodeniedOutsideFirstPartySet) { - SetBlockThirdPartyCookies(true); - base::HistogramTester histogram_tester; - - // Set cross-site cookies on all hosts. - SetCrossSiteCookieOnHost(kHostA); - SetCrossSiteCookieOnHost(kHostD); - - NavigateToPageWithFrame(kHostA); - - NavigateFrameTo(kHostD, "/echoheader?cookie"); - EXPECT_EQ(GetFrameContent(), "None"); - EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); - // `kHostD` cannot be granted access via `RequestStorageAccessForOrigin` in - // this configuration, because the requesting site (`kHostA`) is not in the - // same First-Party Set as the requested site (`kHostD`). - EXPECT_FALSE(storage::test::RequestStorageAccessForOrigin( - GetPrimaryMainFrame(), GetURL(kHostD).spec())); - EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostD, - /*cors_enabled=*/true), - ""); - - // Navigate iframe to a cross-site, cookie-reading endpoint, and verify that - // the cookie is not sent. - NavigateFrameTo(kHostD, "/echoheader?cookie"); - EXPECT_EQ(GetFrameContent(), "None"); - EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); - EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostD, - /*cors_enabled=*/true), - ""); - - EXPECT_THAT(histogram_tester.GetBucketCount( - kRequestOutcomeHistogram, - 3 /*RequestOutcome::kDeniedByFirstPartySet*/), - Gt(0)); -} - -IN_PROC_BROWSER_TEST_F( - RequestStorageAccessForOriginWithFirstPartySetsBrowserTest, - RequestStorageAccessForOriginTopLevelScoping) { - SetBlockThirdPartyCookies(true); - - // Set cross-site cookies on all hosts. - SetCrossSiteCookieOnHost(kHostA); - SetCrossSiteCookieOnHost(kHostB); - - NavigateToPageWithFrame(kHostA); - - // Allow all requests for kHostB to have cookie access from a.test. - NavigateFrameTo(kHostB, "/echoheader?cookie"); - EXPECT_EQ(GetFrameContent(), "None"); - EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); - EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, - /*cors_enabled=*/true), - ""); - EXPECT_TRUE(storage::test::RequestStorageAccessForOrigin( - GetPrimaryMainFrame(), GetURL(kHostB).spec())); - - // Navigate iframe to a cross-site, cookie-reading endpoint, and verify that - // the cookie is sent for the cors-enabled subresource request. - NavigateFrameTo(kHostB, "/echoheader?cookie"); - EXPECT_EQ(GetFrameContent(), "None"); - EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); - EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, - /*cors_enabled=*/true), - "cross-site=b.test"); - // Subresource request from iframe does not have cookie access. - EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, - /*cors_enabled=*/true), - ""); - // Subresource request with cors disabled does not have cookie access. - EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, - /*cors_enabled=*/false), - ""); - - NavigateToPageWithFrame(kHostASubdomain); - NavigateFrameTo(kHostB, "/echoheader?cookie"); - // Storage access grants are scoped to the embedded origin on the top-level - // site. Accordingly, the access is be granted for subresource request. - EXPECT_EQ(GetFrameContent(), "None"); - EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); - EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, - /*cors_enabled=*/true), - "cross-site=b.test"); - EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, - /*cors_enabled=*/true), - ""); -} - -IN_PROC_BROWSER_TEST_F( - RequestStorageAccessForOriginWithFirstPartySetsBrowserTest, - RequestStorageAccessForOriginTopLevelScopingWhenRequestedFromSubdomain) { - SetBlockThirdPartyCookies(true); - - // Set cross-site cookies on all hosts. - SetCrossSiteCookieOnHost(kHostA); - SetCrossSiteCookieOnHost(kHostB); - - NavigateToPageWithFrame(kHostASubdomain); - - // Allow all requests for kHostB to have cookie access from a.test. - NavigateFrameTo(kHostB, "/echoheader?cookie"); - EXPECT_EQ(GetFrameContent(), "None"); - EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); - EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, - /*cors_enabled=*/true), - ""); - EXPECT_TRUE(storage::test::RequestStorageAccessForOrigin( - GetPrimaryMainFrame(), GetURL(kHostB).spec())); - - // Navigate iframe to a cross-site, cookie-reading endpoint, and verify that - // the cookie is sent for the cors-enabled subresource request. - NavigateFrameTo(kHostB, "/echoheader?cookie"); - EXPECT_EQ(GetFrameContent(), "None"); - EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); - EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, - /*cors_enabled=*/true), - "cross-site=b.test"); - // Subresource request from iframe does not have cookie access. - EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, - /*cors_enabled=*/true), - ""); - // Subresource request with cors disabled does not have cookie access. - EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, - /*cors_enabled=*/false), - ""); - - NavigateToPageWithFrame(kHostA); - NavigateFrameTo(kHostB, "/echoheader?cookie"); - // When top-level site scoping is enabled, the subdomain's grant counts for - // the less-specific domain; otherwise, it does not. - EXPECT_EQ(GetFrameContent(), "None"); - EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); - EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, - /*cors_enabled=*/true), - "cross-site=b.test"); - // Subresource request from iframe does not have cookie access. - EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, - /*cors_enabled=*/true), - ""); -} - -// Tests to validate `requestStorageAccessForOrigin` behavior with FPS disabled. -// For now, that entails auto-denial of requests. -class RequestStorageAccessForOriginWithFirstPartySetsDisabledBrowserTest - : public RequestStorageAccessForOriginBaseBrowserTest { - public: - protected: - std::vector<base::test::FeatureRefAndParams> GetEnabledFeatures() override { - return {{blink::features::kStorageAccessAPIForOriginExtension, {}}, - {blink::features::kStorageAccessAPI, {}}}; - } - std::vector<base::test::FeatureRef> GetDisabledFeatures() override { - return {features::kFirstPartySets}; - } -}; - -IN_PROC_BROWSER_TEST_F( - RequestStorageAccessForOriginWithFirstPartySetsDisabledBrowserTest, - PermissionAutodenied) { - SetBlockThirdPartyCookies(true); - base::HistogramTester histogram_tester; - - // Set cross-site cookies on all hosts. - SetCrossSiteCookieOnHost(kHostA); - SetCrossSiteCookieOnHost(kHostD); - - NavigateToPageWithFrame(kHostA); - - NavigateFrameTo(kHostD, "/echoheader?cookie"); - EXPECT_EQ(GetFrameContent(), "None"); - EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); - // `kHostD` cannot be granted access via `RequestStorageAccessForOrigin` in - // this configuration, because the requesting site (`kHostA`) is not in the - // same First-Party Set as the requested site (`kHostD`). - EXPECT_FALSE(storage::test::RequestStorageAccessForOrigin( - GetPrimaryMainFrame(), GetURL(kHostD).spec())); - - // Navigate iframe to a cross-site, cookie-reading endpoint, and verify that - // the cookie is not sent. - NavigateFrameTo(kHostD, "/echoheader?cookie"); - EXPECT_EQ(GetFrameContent(), "None"); - EXPECT_EQ(ReadCookiesViaJS(GetFrame()), ""); - - EXPECT_THAT(histogram_tester.GetBucketCount( - kRequestOutcomeHistogram, - 5 /*RequestOutcome::kDeniedByPrerequisites*/), - Gt(0)); -} - -// Tests to validate that, when the `requestStorageAccessForOrigin` extension is -// explicitly disabled, or if the larger Storage Access API is disabled, it does -// not leak onto the document object. -class RequestStorageAccessForOriginExplicitlyDisabledBrowserTest - : public RequestStorageAccessForOriginBaseBrowserTest, - public testing::WithParamInterface<bool> { - public: - RequestStorageAccessForOriginExplicitlyDisabledBrowserTest() - : enable_standard_storage_access_api_(GetParam()) {} - - protected: - std::vector<base::test::FeatureRef> GetDisabledFeatures() override { - // The test should validate that either flag alone disables the API. - // Note that enabling the extension and not the standard API means both are - // disabled. - if (enable_standard_storage_access_api_) { - return {blink::features::kStorageAccessAPIForOriginExtension}; - } - return {blink::features::kStorageAccessAPI}; - } - std::vector<base::test::FeatureRefAndParams> GetEnabledFeatures() override { - // When the standard API is enabled, return the parent class's enabled - // feature list. Otherwise, enable only the extension; this should not take - // effect. - if (enable_standard_storage_access_api_) { - return RequestStorageAccessForOriginBaseBrowserTest::GetEnabledFeatures(); - } - return {{blink::features::kStorageAccessAPIForOriginExtension, {}}}; - } - - private: - bool enable_standard_storage_access_api_; -}; - -IN_PROC_BROWSER_TEST_P( - RequestStorageAccessForOriginExplicitlyDisabledBrowserTest, - RsaForOriginNotPresentOnDocumentWhenExplicitlyDisabled) { - NavigateToPageWithFrame(kHostA); - // Ensure that the proposed extension is not available unless explicitly - // enabled. - EXPECT_TRUE(EvalJs(GetPrimaryMainFrame(), - "\"requestStorageAccessForOrigin\" in document === false") - .ExtractBool()); -} - -INSTANTIATE_TEST_SUITE_P( - /* no prefix */, - RequestStorageAccessForOriginExplicitlyDisabledBrowserTest, - testing::Bool()); - -class RequestStorageAccessForOriginWithCHIPSBrowserTest - : public RequestStorageAccessForOriginBaseBrowserTest { - public: - void SetUpCommandLine(base::CommandLine* command_line) override { - RequestStorageAccessForOriginBaseBrowserTest::SetUpCommandLine( - command_line); - command_line->AppendSwitchASCII( - network::switches::kUseFirstPartySet, - base::StrCat({R"({"primary": "https://)", kHostA, - R"(", "associatedSites": ["https://)", kHostC, R"("])", - R"(, "serviceSites": ["https://)", kHostB, R"("]})"})); - } - std::vector<base::test::FeatureRefAndParams> GetEnabledFeatures() override { - std::vector<base::test::FeatureRefAndParams> enabled = - RequestStorageAccessForOriginBaseBrowserTest::GetEnabledFeatures(); - enabled.push_back({net::features::kPartitionedCookies, {}}); - enabled.push_back( - {blink::features::kStorageAccessAPIForOriginExtension, {}}); - return enabled; - } -}; - -IN_PROC_BROWSER_TEST_F(RequestStorageAccessForOriginWithCHIPSBrowserTest, - RequestStorageAccessForOrigin_CoexistsWithCHIPS) { - SetBlockThirdPartyCookies(true); - - SetCrossSiteCookieOnHost(kHostB); - SetPartitionedCookieInContext(/*top_level_host=*/kHostA, - /*embedded_host=*/kHostB); - - NavigateToPageWithFrame(kHostA); - - // kHostB starts without unpartitioned cookies: - NavigateFrameTo(kHostB, "/echoheader?cookie"); - EXPECT_EQ(GetFrameContent(), "cross-site=b.test(partitioned)"); - EXPECT_EQ(ReadCookiesViaJS(GetFrame()), "cross-site=b.test(partitioned)"); - EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, - /*cors_enabled=*/true), - "cross-site=b.test(partitioned)"); - EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, - /*cors_enabled=*/true), - "cross-site=b.test(partitioned)"); - - // kHostA can request storage access on behalf of kHostB, and it is granted - // (by an implicit grant): - EXPECT_TRUE(storage::test::RequestStorageAccessForOrigin( - GetPrimaryMainFrame(), GetURL(kHostB).spec())); - NavigateFrameTo(kHostB, "/echoheader?cookie"); - // When the top-level frame makes a subresource request to an endpoint on - // kHostB, kHostB's unpartitioned and partitioned cookies are sent. - EXPECT_EQ(CookiesFromFetchWithCredentials(GetPrimaryMainFrame(), kHostB, - /*cors_enabled=*/true), - "cross-site=b.test; cross-site=b.test(partitioned)"); - // When the frame makes a subresource request to an endpoint on kHostB, - // only kHostB's partitioned cookies are sent. - EXPECT_EQ(CookiesFromFetchWithCredentials(GetFrame(), kHostB, - /*cors_enabled=*/true), - "cross-site=b.test(partitioned)"); -} - -} // namespace
diff --git a/chrome/browser/ui/toolbar/recent_tabs_builder_test_helper.cc b/chrome/browser/ui/toolbar/recent_tabs_builder_test_helper.cc index 7b213aa..8147bdf 100644 --- a/chrome/browser/ui/toolbar/recent_tabs_builder_test_helper.cc +++ b/chrome/browser/ui/toolbar/recent_tabs_builder_test_helper.cc
@@ -202,7 +202,8 @@ } sync_pb::ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); processor->OnUpdateReceived(model_type_state, std::move(updates), /*gc_directive=*/absl::nullopt); // ClientTagBasedModelTypeProcessor uses ModelTypeProcessorProxy during
diff --git a/chrome/browser/ui/views/autofill/payments/offer_notification_bubble_views_browsertest.cc b/chrome/browser/ui/views/autofill/payments/offer_notification_bubble_views_browsertest.cc index 58e8821a..24deed34 100644 --- a/chrome/browser/ui/views/autofill/payments/offer_notification_bubble_views_browsertest.cc +++ b/chrome/browser/ui/views/autofill/payments/offer_notification_bubble_views_browsertest.cc
@@ -40,7 +40,7 @@ personal_data()->NotifyPersonalDataObserver(); // Neither icon nor bubble should be visible. - NavigateToAndWaitForForm("https://www.example.com/first/"); + NavigateTo("https://www.example.com/first/"); EXPECT_FALSE(IsIconVisible()); EXPECT_FALSE(GetOfferNotificationBubbleViews()); } @@ -86,7 +86,7 @@ UpdateFreeListingCouponDisplayTime( CreateFreeListingCouponDataWithDomains({orgin})); - NavigateToAndWaitForForm("https://www.example.com/first/"); + NavigateTo("https://www.example.com/first/"); EXPECT_TRUE(IsIconVisible()); EXPECT_FALSE(GetOfferNotificationBubbleViews());
diff --git a/chrome/browser/ui/views/payments/payment_request_item_list.cc b/chrome/browser/ui/views/payments/payment_request_item_list.cc index 07dece98..4edf82c 100644 --- a/chrome/browser/ui/views/payments/payment_request_item_list.cc +++ b/chrome/browser/ui/views/payments/payment_request_item_list.cc
@@ -100,12 +100,7 @@ views::Button::STATE_NORMAL, ui::ImageModel::FromVectorIcon(vector_icons::kEditIcon, ui::kColorIcon, kEditIconSize)); - views::InkDrop::Get(edit_button.get()) - ->SetBaseColorCallback(base::BindRepeating( - [](views::View* host) { - return host->GetColorProvider()->GetColor(ui::kColorIcon); - }, - edit_button.get())); + views::InkDrop::Get(edit_button.get())->SetBaseColorId(ui::kColorIcon); edit_button->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); edit_button->SetID(static_cast<int>(DialogViewID::EDIT_ITEM_BUTTON)); edit_button->SetAccessibleName(
diff --git a/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_menu_button.cc b/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_menu_button.cc index 823dd3f..571cf4f0 100644 --- a/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_menu_button.cc +++ b/chrome/browser/ui/views/web_apps/frame_toolbar/web_app_menu_button.cc
@@ -36,8 +36,6 @@ views::SetHitTestComponent(this, static_cast<int>(HTCLIENT)); views::InkDrop::Get(this)->SetMode(views::InkDropHost::InkDropMode::ON); - views::InkDrop::Get(this)->SetBaseColorCallback(base::BindRepeating( - [](WebAppMenuButton* host) { return host->GetColor(); }, this)); SetFocusBehavior(FocusBehavior::ALWAYS); @@ -67,6 +65,7 @@ color_ = color; SetImageModel(views::Button::STATE_NORMAL, ui::ImageModel::FromVectorIcon(*icon_, color)); + views::InkDrop::Get(this)->SetBaseColor(color_); OnPropertyChanged(&color_, views::kPropertyEffectsNone); }
diff --git a/chrome/browser/ui/webui/ash/login/oobe_ui.cc b/chrome/browser/ui/webui/ash/login/oobe_ui.cc index e4fe281..e45f9704 100644 --- a/chrome/browser/ui/webui/ash/login/oobe_ui.cc +++ b/chrome/browser/ui/webui/ash/login/oobe_ui.cc
@@ -651,6 +651,13 @@ localized_strings.Set("buildType", "chromium"); #endif + std::string oobeClasses = ""; + // TODO (b/268463435) Cleanup OobeJelly + if (features::IsOobeJellyEnabled()) { + oobeClasses += "jelly-enabled "; + } + localized_strings.Set("oobeClasses", oobeClasses); + bool keyboard_driven_oobe = ash::system::InputDeviceSettings::Get() ->ForceKeyboardDrivenUINavigation(); localized_strings.Set("highlightStrength",
diff --git a/chrome/browser/ui/webui/settings/ash/os_settings_recovery_browsertest.cc b/chrome/browser/ui/webui/settings/ash/os_settings_recovery_browsertest.cc index 50f97447..25dc0833 100644 --- a/chrome/browser/ui/webui/settings/ash/os_settings_recovery_browsertest.cc +++ b/chrome/browser/ui/webui/settings/ash/os_settings_recovery_browsertest.cc
@@ -12,16 +12,7 @@ class OSSettingsRecoveryTest : public OSSettingsLockScreenBrowserTestBase {}; -class OSSettingsRecoveryTestWithFeature : public OSSettingsRecoveryTest { - public: - OSSettingsRecoveryTestWithFeature() { - feature_list_.InitAndEnableFeature(ash::features::kCryptohomeRecovery); - } - - private: - base::test::ScopedFeatureList feature_list_; -}; - +// A test fixture that runs tests with recovery feature disabled. class OSSettingsRecoveryTestWithoutFeature : public OSSettingsRecoveryTest { public: OSSettingsRecoveryTestWithoutFeature() { @@ -32,8 +23,36 @@ base::test::ScopedFeatureList feature_list_; }; -IN_PROC_BROWSER_TEST_F(OSSettingsRecoveryTestWithoutFeature, - ControlNotVisible) { +// A test fixture that runs tests with recovery feature enabled and with +// (faked) hardware support. +class OSSettingsRecoveryTestWithFeature : public OSSettingsRecoveryTest { + public: + OSSettingsRecoveryTestWithFeature() { + feature_list_.InitAndEnableFeature(ash::features::kCryptohomeRecovery); + } + + private: + base::test::ScopedFeatureList feature_list_; +}; + +// A test fixture that runs tests with recovery feature enabled but without +// hardware support. +class OSSettingsRecoveryTestWithFeatureWithoutHardwareSupport + : public OSSettingsRecoveryTestWithFeature { + public: + OSSettingsRecoveryTestWithFeatureWithoutHardwareSupport() { + cryptohome_.set_supports_low_entropy_credentials(false); + } +}; + +IN_PROC_BROWSER_TEST_F(OSSettingsRecoveryTestWithoutFeature, ControlInvisible) { + mojom::LockScreenSettingsAsyncWaiter lock_screen_settings = + OpenLockScreenSettingsAndAuthenticate(); + lock_screen_settings.AssertRecoveryControlVisibility(false); +} + +IN_PROC_BROWSER_TEST_F(OSSettingsRecoveryTestWithFeatureWithoutHardwareSupport, + ControlInvisible) { mojom::LockScreenSettingsAsyncWaiter lock_screen_settings = OpenLockScreenSettingsAndAuthenticate(); lock_screen_settings.AssertRecoveryControlVisibility(false);
diff --git a/chrome/browser/ui/webui/signin/profile_picker_handler.cc b/chrome/browser/ui/webui/signin/profile_picker_handler.cc index e9a49593..554d8b2 100644 --- a/chrome/browser/ui/webui/signin/profile_picker_handler.cc +++ b/chrome/browser/ui/webui/signin/profile_picker_handler.cc
@@ -69,6 +69,8 @@ #include "chrome/browser/lacros/identity_manager_lacros.h" #include "chrome/browser/lacros/lacros_url_handling.h" #include "chrome/browser/ui/webui/settings/chromeos/constants/routes.mojom.h" +#include "chromeos/crosapi/mojom/login.mojom.h" +#include "chromeos/lacros/lacros_service.h" #include "components/account_manager_core/account.h" #include "components/account_manager_core/chromeos/account_manager_facade_factory.h" #endif @@ -1240,8 +1242,25 @@ void ProfilePickerHandler::HandleOpenDeviceGuestLinkLacros( const base::Value::List& args) { - // TODO(https://crbug.com/1411310): Handle the user action. - NOTIMPLEMENTED(); + chromeos::LacrosService* lacros_service = chromeos::LacrosService::Get(); + if (!lacros_service || + !lacros_service->IsAvailable<crosapi::mojom::Login>()) { + return; + } + + if (lacros_service->GetInterfaceVersion<crosapi::mojom::Login>() < + int(crosapi::mojom::Login:: + kShowGuestSessionConfirmationDialogMinVersion)) { + return; + } + + crosapi::mojom::Login* login_api = + lacros_service->GetRemote<crosapi::mojom::Login>().get(); + if (!login_api) { + return; + } + + login_api->ShowGuestSessionConfirmationDialog(); } void ProfilePickerHandler::HandleGetAvailableAccounts(
diff --git a/chrome/browser/ui/webui/signin/profile_picker_handler.h b/chrome/browser/ui/webui/signin/profile_picker_handler.h index 845e6eba..95ed1b11 100644 --- a/chrome/browser/ui/webui/signin/profile_picker_handler.h +++ b/chrome/browser/ui/webui/signin/profile_picker_handler.h
@@ -162,7 +162,8 @@ void HandleOpenAshAccountSettingsPage(const base::Value::List& args); // Called when the user clicks the "use device guest" link in the account - // selection dialog. + // selection dialog. Opens a dialog in Ash (through mojo), offering a switch + // to device guest mode. void HandleOpenDeviceGuestLinkLacros(const base::Value::List& args); // List of available accounts used by the profile choice and the account
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index bc2cd83..e87e718 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-main-1678924700-155014da985bd22caff77d7657c7745a093029b1.profdata +chrome-linux-main-1678946330-917a8187d0290a24d4c75806787cdd3a966eef6e.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt index 2b1dcec..1769cc0 100644 --- a/chrome/build/mac-arm.pgo.txt +++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@ -chrome-mac-arm-main-1678931822-1982e2d80aff987fd391b4c0280f7a9fdf5eac12.profdata +chrome-mac-arm-main-1678960326-653d40ffed2f5708b89b21e075d562b97febf8ff.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index e6685ac..4660068 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-main-1678902982-8c62537f4ead8a651b0e372fba2ace4779cd5e2e.profdata +chrome-mac-main-1678946330-74a9454ebe6d0ec3ddc0f86c47987f059820d5da.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index 52413c8..a44edaa 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1678902982-d0cd59052cfa11320dbafd37c243a8ca3ec7a176.profdata +chrome-win32-main-1678946330-1daaf9d8c5f324495f66cf0686d7d820ebdb7c6f.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index 2fe66586..c922e30 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1678924700-4edd7ce27630e17b2c9021d1177b06012faddace.profdata +chrome-win64-main-1678946330-59051ee6ff92e798d368fd97afa7be6a5bbc28be.profdata
diff --git a/chrome/common/apps/platform_apps/api/media_galleries.idl b/chrome/common/apps/platform_apps/api/media_galleries.idl index 1c0fca6e..7836ad5 100644 --- a/chrome/common/apps/platform_apps/api/media_galleries.idl +++ b/chrome/common/apps/platform_apps/api/media_galleries.idl
@@ -5,6 +5,7 @@ // Use the <code>chrome.mediaGalleries</code> API to access media files (audio, // images, video) from the user's local disks (with the user's consent). +[modernised_enums] namespace mediaGalleries { [inline_doc] enum GalleryChangeType {
diff --git a/chrome/common/chromeos/extensions/api/telemetry.idl b/chrome/common/chromeos/extensions/api/telemetry.idl index 2aae0df2..9bc0078 100644 --- a/chrome/common/chromeos/extensions/api/telemetry.idl +++ b/chrome/common/chromeos/extensions/api/telemetry.idl
@@ -3,7 +3,7 @@ // found in the LICENSE file. // Use the <code>chrome.os.telemetry</code> API to get telemetry data. -[implemented_in = "chrome/browser/chromeos/extensions/telemetry/api/telemetry/telemetry_api.h"] +[implemented_in = "chrome/browser/chromeos/extensions/telemetry/api/telemetry/telemetry_api.h", modernised_enums] namespace os.telemetry { dictionary AudioInputNodeInfo { double? id;
diff --git a/chrome/common/extensions/api/_permission_features.json b/chrome/common/extensions/api/_permission_features.json index 68e88013..568e5bf 100644 --- a/chrome/common/extensions/api/_permission_features.json +++ b/chrome/common/extensions/api/_permission_features.json
@@ -36,10 +36,6 @@ "2FCBCE08B34CCA1728A85F1EFBD9A34DD2558B2E" ] }, - "activeTab": { - "channel": "stable", - "extension_types": ["extension", "legacy_packaged_app"] - }, "activityLogPrivate": { "channel": "stable", "extension_types": ["extension", "platform_app"],
diff --git a/chrome/common/extensions/api/activity_log_private.json b/chrome/common/extensions/api/activity_log_private.json index 0c88bbf..d5f880e9 100644 --- a/chrome/common/extensions/api/activity_log_private.json +++ b/chrome/common/extensions/api/activity_log_private.json
@@ -6,6 +6,9 @@ { "namespace": "activityLogPrivate", "description": "none", + "compiler_options": { + "modernised_enums": true + }, "types": [ { "id": "ExtensionActivityType",
diff --git a/chrome/common/extensions/api/bookmarks.json b/chrome/common/extensions/api/bookmarks.json index aed2573..b44e5121 100644 --- a/chrome/common/extensions/api/bookmarks.json +++ b/chrome/common/extensions/api/bookmarks.json
@@ -6,6 +6,9 @@ { "namespace": "bookmarks", "description": "Use the <code>chrome.bookmarks</code> API to create, organize, and otherwise manipulate bookmarks. Also see <a href='override'>Override Pages</a>, which you can use to create a custom Bookmark Manager page.", + "compiler_options": { + "modernised_enums": true + }, "properties": { "MAX_WRITE_OPERATIONS_PER_HOUR": { "value": 1000000,
diff --git a/chrome/common/extensions/api/enterprise_reporting_private.idl b/chrome/common/extensions/api/enterprise_reporting_private.idl index b7b5ea67..9691ba0 100644 --- a/chrome/common/extensions/api/enterprise_reporting_private.idl +++ b/chrome/common/extensions/api/enterprise_reporting_private.idl
@@ -79,7 +79,6 @@ boolean siteIsolationEnabled; boolean builtInDnsClientEnabled; PasswordProtectionTrigger passwordProtectionWarningTrigger; - boolean? chromeCleanupEnabled; boolean chromeRemoteDesktopAppBlocked; boolean? thirdPartyBlockingEnabled; SettingValue osFirewall;
diff --git a/chrome/common/extensions/permissions/chrome_api_permissions.cc b/chrome/common/extensions/permissions/chrome_api_permissions.cc index fff26f3..6adcd2e 100644 --- a/chrome/common/extensions/permissions/chrome_api_permissions.cc +++ b/chrome/common/extensions/permissions/chrome_api_permissions.cc
@@ -61,7 +61,6 @@ {APIPermissionID::kAccessibilityFeaturesRead, "accessibilityFeatures.read"}, {APIPermissionID::kAccessibilityPrivate, "accessibilityPrivate", APIPermissionInfo::kFlagCannotBeOptional}, - {APIPermissionID::kActiveTab, "activeTab"}, {APIPermissionID::kBookmark, "bookmarks"}, {APIPermissionID::kBrailleDisplayPrivate, "brailleDisplayPrivate", APIPermissionInfo::kFlagCannotBeOptional},
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 30c22198..c1e8f17 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -2218,7 +2218,7 @@ "../browser/task_manager/task_manager_tester.cc", "../browser/task_manager/task_manager_tester.h", "../browser/themes/theme_service_browsertest.cc", - "../browser/top_level_storage_access_api/request_storage_access_for_origin_browsertest.cc", + "../browser/top_level_storage_access_api/request_storage_access_for_browsertest.cc", "../browser/tracing/chrome_tracing_delegate_browsertest.cc", "../browser/translate/language_detection_service_browsertest.cc", "../browser/translate/translate_frame_binder_browsertest.cc", @@ -5540,6 +5540,7 @@ "../browser/metrics/oom/out_of_memory_reporter_unittest.cc", "../browser/metrics/process_memory_metrics_emitter_unittest.cc", "../browser/metrics/tab_footprint_aggregator_unittest.cc", + "../browser/metrics/variations/chrome_variations_service_client_unittest.cc", "../browser/navigation_predictor/navigation_predictor_unittest.cc", "../browser/net/chrome_network_delegate_unittest.cc", "../browser/net/chrome_report_sender_unittest.cc", @@ -6228,6 +6229,7 @@ "//components/user_education/test", "//components/user_manager", "//components/variations:test_support", + "//components/variations/service:service", "//components/vector_icons", "//components/version_info:generate_version_info", "//components/webrtc",
diff --git a/chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.cc b/chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.cc index fc3353d..cab8033 100644 --- a/chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.cc +++ b/chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.cc
@@ -906,9 +906,9 @@ reply.add_supported_auth_factors(user_data_auth::AUTH_FACTOR_TYPE_PASSWORD); if (supports_low_entropy_credentials_) { reply.add_supported_auth_factors(user_data_auth::AUTH_FACTOR_TYPE_PIN); + reply.add_supported_auth_factors( + user_data_auth::AUTH_FACTOR_TYPE_CRYPTOHOME_RECOVERY); } - reply.add_supported_auth_factors( - user_data_auth::AUTH_FACTOR_TYPE_CRYPTOHOME_RECOVERY); } }
diff --git a/chromeos/ash/components/drivefs/drivefs_pin_manager.cc b/chromeos/ash/components/drivefs/drivefs_pin_manager.cc index e2109358..51a909db 100644 --- a/chromeos/ash/components/drivefs/drivefs_pin_manager.cc +++ b/chromeos/ash/components/drivefs/drivefs_pin_manager.cc
@@ -642,8 +642,7 @@ progress_.stage = Stage::kListingFiles; NotifyProgress(); - drivefs_->StartSearchQuery(search_query_.BindNewPipeAndPassReceiver(), - CreateMyDriveQuery()); + StartSearchQuery(); GetNextPage(); } @@ -677,6 +676,12 @@ space_check_interval_); } +void PinManager::StartSearchQuery() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + drivefs_->StartSearchQuery(search_query_.BindNewPipeAndPassReceiver(), + CreateMyDriveQuery()); +} + void PinManager::GetNextPage() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_EQ(progress_.stage, Stage::kListingFiles);
diff --git a/chromeos/ash/components/drivefs/drivefs_pin_manager.h b/chromeos/ash/components/drivefs/drivefs_pin_manager.h index 9264f7cd..b002595 100644 --- a/chromeos/ash/components/drivefs/drivefs_pin_manager.h +++ b/chromeos/ash/components/drivefs/drivefs_pin_manager.h
@@ -305,6 +305,9 @@ // Invoked on retrieval of free space during the periodic check. void OnFreeSpaceRetrieved2(int64_t free_space); + // Creates the Search Query. + void StartSearchQuery(); + // Gets the next batch of items when listing files. void GetNextPage(); @@ -420,6 +423,8 @@ FRIEND_TEST_ALL_PREFIXES(DriveFsPinManagerTest, NotEnoughSpace2); FRIEND_TEST_ALL_PREFIXES(DriveFsPinManagerTest, OnFreeSpaceRetrieved2); FRIEND_TEST_ALL_PREFIXES(DriveFsPinManagerTest, PeriodicSpaceCheck); + FRIEND_TEST_ALL_PREFIXES(DriveFsPinManagerTest, SetOnline); + FRIEND_TEST_ALL_PREFIXES(DriveFsPinManagerTest, OnTransientError); }; COMPONENT_EXPORT(CHROMEOS_ASH_COMPONENTS_DRIVEFS)
diff --git a/chromeos/ash/components/drivefs/drivefs_pin_manager_unittest.cc b/chromeos/ash/components/drivefs/drivefs_pin_manager_unittest.cc index ca5efab..27647d33 100644 --- a/chromeos/ash/components/drivefs/drivefs_pin_manager_unittest.cc +++ b/chromeos/ash/components/drivefs/drivefs_pin_manager_unittest.cc
@@ -4,14 +4,18 @@ #include "chromeos/ash/components/drivefs/drivefs_pin_manager.h" +#include <iomanip> #include <memory> +#include <sstream> #include <string> +#include <unordered_set> #include <utility> #include <vector> #include "base/files/file_path.h" #include "base/files/scoped_temp_dir.h" #include "base/functional/bind.h" +#include "base/logging.h" #include "base/notreached.h" #include "base/run_loop.h" #include "base/test/gmock_callback_support.h" @@ -31,9 +35,11 @@ using base::BindOnce; using base::OnceCallback; using base::RunLoop; +using base::Seconds; using base::SequencedTaskRunner; using base::test::RunClosure; using base::test::RunOnceCallback; +using base::test::TaskEnvironment; using drive::FileError; using mojom::FileMetadata; using mojom::FileMetadataPtr; @@ -61,6 +67,13 @@ const FileError kFileOk = FileError::FILE_ERROR_OK; +template <typename T> +std::string ToString(const T& x) { + std::ostringstream oss; + oss << x; + return std::move(oss).str(); +} + // Shorthand way to represent drive files with the information that is relevant // for the pinning manager. struct DriveItem { @@ -139,7 +152,7 @@ void StartSearchQuery(mojo::PendingReceiver<SearchQuery> receiver, mojom::QueryParametersPtr query_params) override { - search_receiver_.reset(); + EXPECT_FALSE(search_receiver_.is_bound()); OnStartSearchQuery(*query_params); search_receiver_.Bind(std::move(receiver)); } @@ -150,7 +163,7 @@ void GetNextPage(GetNextPageCallback callback) override { absl::optional<vector<QueryItemPtr>> items; - auto error = OnGetNextPage(&items); + const FileError error = OnGetNextPage(&items); SequencedTaskRunner::GetCurrentDefault()->PostTask( FROM_HERE, BindOnce(std::move(callback), error, std::move(items))); } @@ -194,9 +207,9 @@ class DriveFsPinManagerTest : public testing::Test { protected: - void SetUp() override { - ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); - + DriveFsPinManagerTest() { + logging::SetMinLogLevel(-3); + CHECK(temp_dir_.CreateUniqueTempDir()); gcache_dir_ = temp_dir_.GetPath().Append("GCache"); } @@ -235,14 +248,36 @@ base::Unretained(&space_getter_)); } - base::test::TaskEnvironment task_environment_{ - base::test::TaskEnvironment::TimeSource::MOCK_TIME}; + TaskEnvironment task_environment_{TaskEnvironment::TimeSource::MOCK_TIME}; base::ScopedTempDir temp_dir_; Path gcache_dir_; MockSpaceGetter space_getter_; MockDriveFs drivefs_; }; +// Tests the output operator for the Stage enum. +TEST_F(DriveFsPinManagerTest, Stage) { + std::unordered_set<std::string> labels; + for (const Stage stage : { + Stage::kStopped, + Stage::kPaused, + Stage::kGettingFreeSpace, + Stage::kListingFiles, + Stage::kSyncing, + Stage::kSuccess, + Stage::kCannotGetFreeSpace, + Stage::kCannotListFiles, + Stage::kNotEnoughSpace, + Stage(-1), + Stage(-2), + }) { + const std::string label = ToString(stage); + EXPECT_NE(label, ""); + EXPECT_TRUE(labels.insert(label).second) + << "Not unique: " << std::quoted(label); + } +} + // Tests PinManager::CanPin(). TEST_F(DriveFsPinManagerTest, CanPin) { using Type = FileMetadata::Type; @@ -1425,8 +1460,7 @@ EXPECT_CALL(drivefs_, OnStartSearchQuery(_)).Times(1); EXPECT_CALL(drivefs_, OnGetNextPage(_)) - .WillOnce( - DoAll(PopulateNoSearchItems(), Return(FileError::FILE_ERROR_FAILED))); + .WillOnce(Return(FileError::FILE_ERROR_FAILED)); EXPECT_CALL(completion_callback, Run(Stage::kCannotListFiles)) .WillOnce(RunClosure(run_loop.QuitClosure())); EXPECT_CALL(space_getter_, GetFreeSpace(gcache_dir_, _)) @@ -1624,6 +1658,85 @@ EXPECT_EQ(progress.pinned_files, 0); } +// Tests PinManager::SetOnline(). +TEST_F(DriveFsPinManagerTest, SetOnline) { + PinManager manager(temp_dir_.GetPath(), &drivefs_); + manager.SetSpaceGetter(GetSpaceGetter()); + + DCHECK_CALLED_ON_VALID_SEQUENCE(manager.sequence_checker_); + EXPECT_EQ(manager.progress_.stage, Stage::kStopped); + EXPECT_TRUE(manager.is_online_); + + manager.SetOnline(false); + EXPECT_EQ(manager.progress_.stage, Stage::kStopped); + EXPECT_FALSE(manager.is_online_); + + manager.SetOnline(true); + EXPECT_EQ(manager.progress_.stage, Stage::kStopped); + EXPECT_TRUE(manager.is_online_); + + manager.SetOnline(false); + EXPECT_EQ(manager.progress_.stage, Stage::kStopped); + EXPECT_FALSE(manager.is_online_); + + manager.Start(); + EXPECT_EQ(manager.progress_.stage, Stage::kPaused); + EXPECT_FALSE(manager.is_online_); + + EXPECT_CALL(space_getter_, GetFreeSpace(gcache_dir_, _)).Times(1); + manager.SetOnline(true); + EXPECT_EQ(manager.progress_.stage, Stage::kGettingFreeSpace); + EXPECT_TRUE(manager.is_online_); + + manager.SetOnline(false); + EXPECT_EQ(manager.progress_.stage, Stage::kPaused); + EXPECT_FALSE(manager.is_online_); + + EXPECT_CALL(space_getter_, GetFreeSpace(gcache_dir_, _)).Times(1); + manager.SetOnline(true); + EXPECT_EQ(manager.progress_.stage, Stage::kGettingFreeSpace); + EXPECT_TRUE(manager.is_online_); + + manager.SetOnline(false); + EXPECT_EQ(manager.progress_.stage, Stage::kPaused); + EXPECT_FALSE(manager.is_online_); + + manager.Stop(); + EXPECT_EQ(manager.progress_.stage, Stage::kStopped); + EXPECT_FALSE(manager.is_online_); +} + +// Tests PinManager::OnSearchResult() with transient errors. +TEST_F(DriveFsPinManagerTest, OnTransientError) { + PinManager manager(temp_dir_.GetPath(), &drivefs_); + + DCHECK_CALLED_ON_VALID_SEQUENCE(manager.sequence_checker_); + manager.progress_.stage = Stage::kListingFiles; + + EXPECT_CALL(drivefs_, OnStartSearchQuery(_)).Times(1); + manager.StartSearchQuery(); + + EXPECT_CALL(drivefs_, OnGetNextPage(_)) + .WillOnce(Return(FileError::FILE_ERROR_NO_CONNECTION)); + manager.GetNextPage(); + EXPECT_EQ(manager.progress_.stage, Stage::kListingFiles); + + task_environment_.FastForwardBy(Seconds(4)); + EXPECT_EQ(manager.progress_.stage, Stage::kListingFiles); + EXPECT_CALL(drivefs_, OnGetNextPage(_)) + .WillOnce(Return(FileError::FILE_ERROR_SERVICE_UNAVAILABLE)); + task_environment_.FastForwardBy(Seconds(1)); + EXPECT_EQ(manager.progress_.stage, Stage::kListingFiles); + + task_environment_.FastForwardBy(Seconds(4)); + EXPECT_EQ(manager.progress_.stage, Stage::kListingFiles); + EXPECT_CALL(drivefs_, OnGetNextPage(_)) + .WillOnce(Return(FileError::FILE_ERROR_NO_MEMORY)); + task_environment_.FastForwardBy(Seconds(1)); + + EXPECT_EQ(manager.progress_.stage, Stage::kCannotListFiles); +} + TEST_F(DriveFsPinManagerTest, DISABLED_FailingToPinOneItemShouldNotFailCompletely) { CompletionCallback completion_callback;
diff --git a/chromeos/ash/services/auth_factor_config/auth_factor_config.cc b/chromeos/ash/services/auth_factor_config/auth_factor_config.cc index aab64fd9..d4a9f32f 100644 --- a/chromeos/ash/services/auth_factor_config/auth_factor_config.cc +++ b/chromeos/ash/services/auth_factor_config/auth_factor_config.cc
@@ -41,8 +41,23 @@ void AuthFactorConfig::IsSupported(const std::string& auth_token, mojom::AuthFactor factor, base::OnceCallback<void(bool)> callback) { - VLOG(1) << "AuthFactorConfig::IsSupported is a fake"; - std::move(callback).Run(features::IsCryptohomeRecoveryEnabled()); + if (!features::IsCryptohomeRecoveryEnabled()) { + std::move(callback).Run(false); + return; + } + + const auto* user = ::user_manager::UserManager::Get()->GetPrimaryUser(); + auto* user_context = quick_unlock_storage_->GetUserContext(user, auth_token); + if (!user_context) { + LOG(ERROR) << "Invalid auth token"; + std::move(callback).Run(false); + return; + } + + const bool is_supported_by_cryptohome = + user_context->GetAuthFactorsConfiguration().get_supported_factors().Has( + cryptohome::AuthFactorType::kRecovery); + std::move(callback).Run(is_supported_by_cryptohome); } void AuthFactorConfig::IsConfigured(const std::string& auth_token,
diff --git a/chromeos/ash/services/cros_healthd/public/mojom/cros_healthd_events.mojom b/chromeos/ash/services/cros_healthd/public/mojom/cros_healthd_events.mojom index babc1859b..77cf7e34 100644 --- a/chromeos/ash/services/cros_healthd/public/mojom/cros_healthd_events.mojom +++ b/chromeos/ash/services/cros_healthd/public/mojom/cros_healthd_events.mojom
@@ -434,6 +434,56 @@ State state@0; }; +// Stylus touch point info. +// +// NextMinVersion: 1, NextIndex: 3 +[Stable] +struct StylusTouchPointInfo { + // The x position. + uint32 x@0; + // The y position. + uint32 y@1; + // The pressure applied to the touch contact. + NullableUint32? pressure@2; +}; + +// Emitted when new touch point is updated. +// +// NextMinVersion: 1, NextIndex: 1 +[Stable] +struct StylusTouchEvent { + // The info of the stylus touch point. A null touch point means the stylus + // leaves the contact. + StylusTouchPointInfo? touch_point@0; +}; + +// Emitted once the observer get connected to the stylus events. This will be +// the first event from the stylus. +// +// NextMinVersion: 1, NextIndex: 3 +[Stable] +struct StylusConnectedEvent { + // The maximum possible x position of touch points. + uint32 max_x@0; + // The maximum possible y position of touch points. + uint32 max_y@1; + // The maximum possible pressure of touch points, or 0 if pressure is not + // supported. + uint32 max_pressure@2; +}; + +// Union of stylus events. +// +// NextMinVersion: 1, NextIndex: 3 +[Stable, Extensible] +union StylusEventInfo { + // The default value for forward compatibility. All the unknown type will be + // mapped to this. + [Default] uint8 default_type@0; + StylusTouchEvent touch_event@1; + StylusConnectedEvent connected_event@2; +}; + // Implemented by clients who desire events. // // NextMinVersion: 1, NextIndex: 1 @@ -445,7 +495,7 @@ // Union of event info. // -// NextMinVersion: 8, NextIndex: 14 +// NextMinVersion: 9, NextIndex: 15 [Stable, Extensible] union EventInfo { // The default value for forward compatibility. All the unknown type will be @@ -479,11 +529,13 @@ [MinVersion=6] TouchscreenEventInfo touchscreen_event_info@12; // Stylus garagge event info. [MinVersion=7] StylusGarageEventInfo stylus_garage_event_info@13; + // Stylus event info. + [MinVersion=8] StylusEventInfo stylus_event_info@14; }; // An enumeration of event categories. // -// NextMinVersion: 9, NextIndex: 15 +// NextMinVersion: 10, NextIndex: 16 [Stable, Extensible] enum EventCategoryEnum { // This is required for backwards compatibility, should not be used. @@ -502,4 +554,5 @@ [MinVersion=6] kHdmi = 12, [MinVersion=7] kTouchscreen = 13, [MinVersion=8] kStylusGarage = 14, + [MinVersion=9] kStylus = 15, };
diff --git a/chromeos/crosapi/mojom/login.mojom b/chromeos/crosapi/mojom/login.mojom index 19ac1a5..8fa9bb8eb 100644 --- a/chromeos/crosapi/mojom/login.mojom +++ b/chromeos/crosapi/mojom/login.mojom
@@ -35,7 +35,7 @@ // This API allows Lacros to call the chrome.login extension API. // -// Next MinVersion: 4 +// Next MinVersion: 5 [Stable, Uuid="639e9f04-981f-46d1-91da-583c2958265b"] interface Login { // Exits the current session. If |data_for_next_login_attempt| is provided, @@ -83,6 +83,13 @@ [MinVersion=3] NotifyOnExternalLogoutDone@16(); + // Shows the Guest session confirmation dialog. The dialog explains how to + // open a guest session from the login screen. If the user confirms, they + // will be logged out of their session, and sent back to the login screen + // where they can start a new guest session. + [MinVersion=4] + ShowGuestSessionConfirmationDialog@17(); + // Removed methods. REMOVED_0@0(string? password) => (string? error); REMOVED_4@4(string password) => (string? error);
diff --git a/components/autofill/content/renderer/autofill_agent.cc b/components/autofill/content/renderer/autofill_agent.cc index a910283..088d8f8 100644 --- a/components/autofill/content/renderer/autofill_agent.cc +++ b/components/autofill/content/renderer/autofill_agent.cc
@@ -964,9 +964,7 @@ FormCache::UpdateFormCacheResult cache = form_cache_.UpdateFormCache(field_data_manager_.get()); - // Always communicate to browser process for the outermost main frame. - if (!cache.updated_forms.empty() || !cache.removed_forms.empty() || - render_frame()->GetWebFrame()->IsOutermostMainFrame()) { + if (!cache.updated_forms.empty() || !cache.removed_forms.empty()) { GetAutofillDriver().FormsSeen(cache.updated_forms, std::move(cache.removed_forms).extract()); }
diff --git a/components/autofill/content/renderer/autofill_agent_browsertest.cc b/components/autofill/content/renderer/autofill_agent_browsertest.cc index c862fc1..0b6a63a2 100644 --- a/components/autofill/content/renderer/autofill_agent_browsertest.cc +++ b/components/autofill/content/renderer/autofill_agent_browsertest.cc
@@ -210,12 +210,12 @@ }; TEST_F(AutofillAgentTestWithFeatures, FormsSeen_Empty) { - EXPECT_CALL(autofill_driver_, FormsSeen(SizeIs(0), SizeIs(0))); + EXPECT_CALL(autofill_driver_, FormsSeen).Times(0); LoadHTML(R"(<body> </body>)"); } TEST_F(AutofillAgentTestWithFeatures, FormsSeen_NoEmpty) { - EXPECT_CALL(autofill_driver_, FormsSeen(SizeIs(0), SizeIs(0))); + EXPECT_CALL(autofill_driver_, FormsSeen).Times(0); LoadHTML(R"(<body> <form></form> </body>)"); } @@ -281,11 +281,9 @@ TEST_F(AutofillAgentTestWithFeatures, TriggerReparseWithResponse) { base::MockOnceCallback<void(bool)> mock_callback; - EXPECT_CALL(autofill_driver_, FormsSeen).Times(0); EXPECT_CALL(mock_callback, Run).Times(0); autofill_agent_->TriggerReparseWithResponse(mock_callback.Get()); task_environment_.FastForwardBy(base::Milliseconds(50)); - EXPECT_CALL(autofill_driver_, FormsSeen); EXPECT_CALL(mock_callback, Run(true)); task_environment_.FastForwardBy(base::Milliseconds(50)); }
diff --git a/components/autofill/core/browser/webdata/autocomplete_sync_bridge_unittest.cc b/components/autofill/core/browser/webdata/autocomplete_sync_bridge_unittest.cc index 073a614..f76d88e 100644 --- a/components/autofill/core/browser/webdata/autocomplete_sync_bridge_unittest.cc +++ b/components/autofill/core/browser/webdata/autocomplete_sync_bridge_unittest.cc
@@ -181,9 +181,10 @@ })); loop.Run(); - // Initialize the processor with initial_sync_done. + // Initialize the processor with the initial sync already done. sync_pb::ModelTypeState state; - state.set_initial_sync_done(true); + state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); syncer::UpdateResponseDataList initial_updates; for (const AutofillSpecifics& specifics : remote_data) { initial_updates.push_back(SpecificsToUpdateResponse(specifics)); @@ -665,7 +666,8 @@ TEST_F(AutocompleteSyncBridgeTest, LoadMetadataCalled) { ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); EXPECT_TRUE( table()->UpdateModelTypeState(syncer::AUTOFILL, model_type_state)); EXPECT_TRUE(
diff --git a/components/autofill/core/browser/webdata/autofill_profile_sync_bridge_unittest.cc b/components/autofill/core/browser/webdata/autofill_profile_sync_bridge_unittest.cc index 204ca1f..1885e3d 100644 --- a/components/autofill/core/browser/webdata/autofill_profile_sync_bridge_unittest.cc +++ b/components/autofill/core/browser/webdata/autofill_profile_sync_bridge_unittest.cc
@@ -306,9 +306,10 @@ })); loop.Run(); - // Initialize the processor with initial_sync_done. + // Initialize the processor with the initial sync already done. sync_pb::ModelTypeState state; - state.set_initial_sync_done(true); + state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); syncer::UpdateResponseDataList initial_updates; for (const AutofillProfileSpecifics& specifics : remote_data) { initial_updates.push_back(SpecificsToUpdateResponse(specifics));
diff --git a/components/autofill/core/browser/webdata/autofill_table_unittest.cc b/components/autofill/core/browser/webdata/autofill_table_unittest.cc index 68cf8080..fe4bc4c43 100644 --- a/components/autofill/core/browser/webdata/autofill_table_unittest.cc +++ b/components/autofill/core/browser/webdata/autofill_table_unittest.cc
@@ -2855,7 +2855,8 @@ EXPECT_TRUE(table_->UpdateEntityMetadata(model_type, storage_key, metadata)); ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); EXPECT_TRUE(table_->UpdateModelTypeState(model_type, model_type_state)); @@ -2865,7 +2866,8 @@ MetadataBatch metadata_batch; EXPECT_TRUE(table_->GetAllSyncMetadata(model_type, &metadata_batch)); - EXPECT_TRUE(metadata_batch.GetModelTypeState().initial_sync_done()); + EXPECT_EQ(metadata_batch.GetModelTypeState().initial_sync_state(), + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); EntityMetadataMap metadata_records = metadata_batch.TakeAllMetadata(); @@ -2874,11 +2876,14 @@ EXPECT_EQ(metadata_records[storage_key2]->sequence_number(), 2); // Now check that a model type state update replaces the old value - model_type_state.set_initial_sync_done(false); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_STATE_UNSPECIFIED); EXPECT_TRUE(table_->UpdateModelTypeState(model_type, model_type_state)); EXPECT_TRUE(table_->GetAllSyncMetadata(model_type, &metadata_batch)); - EXPECT_FALSE(metadata_batch.GetModelTypeState().initial_sync_done()); + EXPECT_EQ( + metadata_batch.GetModelTypeState().initial_sync_state(), + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_STATE_UNSPECIFIED); } TEST_P(AutofillTableTestPerModelType, AutofillWriteThenDeleteSyncMetadata) { @@ -2888,7 +2893,8 @@ std::string storage_key = "storage_key"; ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); metadata.set_client_tag_hash("client_hash");
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_metadata_sync_bridge_unittest.cc b/components/autofill/core/browser/webdata/autofill_wallet_metadata_sync_bridge_unittest.cc index 60472f1..6050a10 100644 --- a/components/autofill/core/browser/webdata/autofill_wallet_metadata_sync_bridge_unittest.cc +++ b/components/autofill/core/browser/webdata/autofill_wallet_metadata_sync_bridge_unittest.cc
@@ -315,7 +315,11 @@ void ResetBridge(bool initial_sync_done = true) { sync_pb::ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(initial_sync_done); + model_type_state.set_initial_sync_state( + initial_sync_done + ? sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE + : sync_pb:: + ModelTypeState_InitialSyncState_INITIAL_SYNC_STATE_UNSPECIFIED); model_type_state.mutable_progress_marker()->set_data_type_id( GetSpecificsFieldNumberFromModelType(syncer::AUTOFILL_WALLET_METADATA)); model_type_state.set_cache_guid(kDefaultCacheGuid); @@ -354,7 +358,8 @@ ++response_version; // After this update initial sync is for sure done. sync_pb::ModelTypeState state; - state.set_initial_sync_done(true); + state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); syncer::UpdateResponseDataList updates; for (const WalletMetadataSpecifics& specifics : remote_data) { @@ -371,7 +376,8 @@ ++response_version; // After this update initial sync is for sure done. sync_pb::ModelTypeState state; - state.set_initial_sync_done(true); + state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); syncer::UpdateResponseDataList updates; for (const WalletMetadataSpecifics& specifics : remote_tombstones) {
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_offer_sync_bridge_unittest.cc b/components/autofill/core/browser/webdata/autofill_wallet_offer_sync_bridge_unittest.cc index 43d00d1fa..f0e97a9c 100644 --- a/components/autofill/core/browser/webdata/autofill_wallet_offer_sync_bridge_unittest.cc +++ b/components/autofill/core/browser/webdata/autofill_wallet_offer_sync_bridge_unittest.cc
@@ -153,7 +153,11 @@ void ResetBridge(bool initial_sync_done) { ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(initial_sync_done); + model_type_state.set_initial_sync_state( + initial_sync_done + ? sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE + : sync_pb:: + ModelTypeState_InitialSyncState_INITIAL_SYNC_STATE_UNSPECIFIED); model_type_state.mutable_progress_marker()->set_data_type_id( GetSpecificsFieldNumberFromModelType(syncer::AUTOFILL_WALLET_OFFER)); model_type_state.set_cache_guid(kDefaultCacheGuid); @@ -177,9 +181,10 @@ })); loop.Run(); - // Initialize the processor with initial_sync_done. + // Initialize the processor with the initial sync already done. sync_pb::ModelTypeState state; - state.set_initial_sync_done(true); + state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); sync_pb::GarbageCollectionDirective gc_directive; gc_directive.set_version_watermark(1);
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge_unittest.cc b/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge_unittest.cc index 6ff5e344..d996e147 100644 --- a/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge_unittest.cc +++ b/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge_unittest.cc
@@ -242,7 +242,11 @@ void ResetBridge(bool initial_sync_done) { ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(initial_sync_done); + model_type_state.set_initial_sync_state( + initial_sync_done + ? sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE + : sync_pb:: + ModelTypeState_InitialSyncState_INITIAL_SYNC_STATE_UNSPECIFIED); model_type_state.mutable_progress_marker()->set_data_type_id( GetSpecificsFieldNumberFromModelType(syncer::AUTOFILL_WALLET_DATA)); model_type_state.set_cache_guid(kDefaultCacheGuid); @@ -266,9 +270,10 @@ })); loop.Run(); - // Initialize the processor with initial_sync_done. + // Initialize the processor with the initial sync already done. sync_pb::ModelTypeState state; - state.set_initial_sync_done(true); + state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); sync_pb::GarbageCollectionDirective gc_directive; gc_directive.set_version_watermark(1);
diff --git a/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/ImageDecoder.java b/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/ImageDecoder.java index ff175f6..65a159d 100644 --- a/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/ImageDecoder.java +++ b/components/browser_ui/photo_picker/android/java/src/org/chromium/components/browser_ui/photo_picker/ImageDecoder.java
@@ -40,8 +40,7 @@ private boolean mSandboxInitialized; /** - * Initializes the seccomp-bpf sandbox when it's supported by the device. Records the - * sandbox status to the Android.SeccompStatus.PhotoPickerSandbox histogram. + * Initializes the seccomp-bpf sandbox when it's supported by the device. */ public void initializeSandbox() { ImageDecoderJni.get().initializePhotoPickerSandbox();
diff --git a/components/browser_ui/photo_picker/android/photo_picker_sandbox_bridge.cc b/components/browser_ui/photo_picker/android/photo_picker_sandbox_bridge.cc index c6c25be..ecd7f85 100644 --- a/components/browser_ui/photo_picker/android/photo_picker_sandbox_bridge.cc +++ b/components/browser_ui/photo_picker/android/photo_picker_sandbox_bridge.cc
@@ -24,8 +24,4 @@ starter.GetDefaultBaselineOptions())); #endif starter.StartSandbox(); - - UMA_HISTOGRAM_ENUMERATION("Android.SeccompStatus.PhotoPickerSandbox", - starter.status(), - sandbox::SeccompSandboxStatus::STATUS_MAX); }
diff --git a/components/device_signals/core/common/signals_constants.cc b/components/device_signals/core/common/signals_constants.cc index 0102e22..4a890f79 100644 --- a/components/device_signals/core/common/signals_constants.cc +++ b/components/device_signals/core/common/signals_constants.cc
@@ -23,10 +23,6 @@ // dns is enabled on the device. const char kBuiltInDnsClientEnabled[] = "builtInDnsClientEnabled"; -// Name of the signal for getting information about whether chrome cleanup -// is enabled on the device. -const char kChromeCleanupEnabled[] = "chromeCleanupEnabled"; - // Name of the signal for getting information about whether users can // access other computers from Chrome using Chrome Remote Desktop. const char kChromeRemoteDesktopAppBlocked[] = "chromeRemoteDesktopAppBlocked";
diff --git a/components/device_signals/core/common/signals_constants.h b/components/device_signals/core/common/signals_constants.h index a20bc3a..4b699c1 100644 --- a/components/device_signals/core/common/signals_constants.h +++ b/components/device_signals/core/common/signals_constants.h
@@ -18,7 +18,6 @@ extern const char kAllowScreenLock[]; extern const char kBrowserVersion[]; extern const char kBuiltInDnsClientEnabled[]; -extern const char kChromeCleanupEnabled[]; extern const char kChromeRemoteDesktopAppBlocked[]; extern const char kCrowdStrike[]; extern const char kCustomerId[];
diff --git a/components/device_signals/test/signals_contract.cc b/components/device_signals/test/signals_contract.cc index 4222c93..cd41814 100644 --- a/components/device_signals/test/signals_contract.cc +++ b/components/device_signals/test/signals_contract.cc
@@ -145,8 +145,6 @@ base::BindRepeating(VerifyIsSettingInteger, names::kScreenLockSecured); #if BUILDFLAG(IS_WIN) - contract[names::kChromeCleanupEnabled] = - base::BindRepeating(VerifyIsBoolean, names::kChromeCleanupEnabled); contract[names::kWindowsMachineDomain] = base::BindRepeating(VerifyOptionalString, names::kWindowsMachineDomain); contract[names::kWindowsUserDomain] = @@ -178,8 +176,6 @@ #else // Windows-only signals that shouldn't be set on other platforms. - contract[names::kChromeCleanupEnabled] = - base::BindRepeating(VerifyUnset, names::kChromeCleanupEnabled); contract[names::kWindowsMachineDomain] = base::BindRepeating(VerifyUnset, names::kWindowsMachineDomain); contract[names::kWindowsUserDomain] =
diff --git a/components/domain_reliability/beacon.cc b/components/domain_reliability/beacon.cc index 883b786..3895941 100644 --- a/components/domain_reliability/beacon.cc +++ b/components/domain_reliability/beacon.cc
@@ -26,40 +26,43 @@ } } -base::Value DomainReliabilityBeacon::ToValue( +base::Value::Dict DomainReliabilityBeacon::ToValue( base::TimeTicks upload_time, base::TimeTicks last_network_change_time, const GURL& collector_url, const std::vector<std::unique_ptr<std::string>>& path_prefixes) const { - base::Value beacon_value(base::Value::Type::DICT); + base::Value::Dict beacon_value; DCHECK(url.is_valid()); GURL sanitized_url = SanitizeURLForReport(url, collector_url, path_prefixes); - beacon_value.SetStringKey("url", sanitized_url.spec()); - beacon_value.SetStringKey("status", status); - if (!quic_error.empty()) - beacon_value.SetStringKey("quic_error", quic_error); - if (chrome_error != net::OK) { - base::Value failure_value(base::Value::Type::DICT); - failure_value.SetStringKey("custom_error", - net::ErrorToString(chrome_error)); - beacon_value.SetKey("failure_data", std::move(failure_value)); + beacon_value.Set("url", sanitized_url.spec()); + beacon_value.Set("status", status); + if (!quic_error.empty()) { + beacon_value.Set("quic_error", quic_error); } - beacon_value.SetStringKey("server_ip", server_ip); - beacon_value.SetBoolKey("was_proxied", was_proxied); - beacon_value.SetStringKey("protocol", protocol); - if (details.quic_broken) - beacon_value.SetBoolKey("quic_broken", details.quic_broken); - if (details.quic_port_migration_detected) - beacon_value.SetBoolKey("quic_port_migration_detected", - details.quic_port_migration_detected); - if (http_response_code >= 0) - beacon_value.SetIntKey("http_response_code", http_response_code); - beacon_value.SetIntKey("request_elapsed_ms", elapsed.InMilliseconds()); + if (chrome_error != net::OK) { + base::Value::Dict failure_value; + failure_value.Set("custom_error", net::ErrorToString(chrome_error)); + beacon_value.Set("failure_data", std::move(failure_value)); + } + beacon_value.Set("server_ip", server_ip); + beacon_value.Set("was_proxied", was_proxied); + beacon_value.Set("protocol", protocol); + if (details.quic_broken) { + beacon_value.Set("quic_broken", details.quic_broken); + } + if (details.quic_port_migration_detected) { + beacon_value.Set("quic_port_migration_detected", + details.quic_port_migration_detected); + } + if (http_response_code >= 0) { + beacon_value.Set("http_response_code", http_response_code); + } + beacon_value.Set("request_elapsed_ms", static_cast<int>(elapsed.InMilliseconds())); base::TimeDelta request_age = upload_time - start_time; - beacon_value.SetIntKey("request_age_ms", request_age.InMilliseconds()); + beacon_value.Set("request_age_ms", static_cast<int>(request_age.InMilliseconds())); bool network_changed = last_network_change_time > start_time; - beacon_value.SetBoolKey("network_changed", network_changed); - beacon_value.SetDoubleKey("sample_rate", sample_rate); + beacon_value.Set("network_changed", network_changed); + beacon_value.Set("sample_rate", sample_rate); return beacon_value; }
diff --git a/components/domain_reliability/beacon.h b/components/domain_reliability/beacon.h index 209299c..ea3249a 100644 --- a/components/domain_reliability/beacon.h +++ b/components/domain_reliability/beacon.h
@@ -56,7 +56,7 @@ // are being uploaded to a same-origin collector. // |path_prefixes| are used to include only a known-safe (not PII) prefix of // URLs when uploading to a non-same-origin collector. - base::Value ToValue( + base::Value::Dict ToValue( base::TimeTicks upload_time, base::TimeTicks last_network_change_time, const GURL& collector_url,
diff --git a/components/history/core/browser/sync/history_sync_bridge_unittest.cc b/components/history/core/browser/sync/history_sync_bridge_unittest.cc index a810d15..c41bba5f 100644 --- a/components/history/core/browser/sync/history_sync_bridge_unittest.cc +++ b/components/history/core/browser/sync/history_sync_bridge_unittest.cc
@@ -333,7 +333,8 @@ std::unique_ptr<syncer::MetadataChangeList> metadata_changes = bridge()->CreateMetadataChangeList(); sync_pb::ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); metadata_changes->UpdateModelTypeState(model_type_state); for (const sync_pb::HistorySpecifics& specifics : specifics_vector) { syncer::EntityData data = SpecificsToEntityData(specifics);
diff --git a/components/history/core/browser/sync/history_sync_metadata_database_unittest.cc b/components/history/core/browser/sync/history_sync_metadata_database_unittest.cc index 4fe3e38..010c5150 100644 --- a/components/history/core/browser/sync/history_sync_metadata_database_unittest.cc +++ b/components/history/core/browser/sync/history_sync_metadata_database_unittest.cc
@@ -110,7 +110,8 @@ metadata1)); ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); ASSERT_TRUE( metadata_db()->UpdateModelTypeState(syncer::HISTORY, model_type_state)); @@ -124,7 +125,8 @@ MetadataBatch metadata_batch; EXPECT_TRUE(metadata_db()->GetAllSyncMetadata(&metadata_batch)); - EXPECT_TRUE(metadata_batch.GetModelTypeState().initial_sync_done()); + EXPECT_EQ(metadata_batch.GetModelTypeState().initial_sync_state(), + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); EntityMetadataMap metadata_records = metadata_batch.TakeAllMetadata(); EXPECT_EQ(metadata_records.size(), 2u); @@ -138,13 +140,16 @@ metadata1.set_sequence_number(2); ASSERT_TRUE(metadata_db()->UpdateEntityMetadata(syncer::HISTORY, storage_key1, metadata1)); - model_type_state.set_initial_sync_done(false); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_STATE_UNSPECIFIED); ASSERT_TRUE( metadata_db()->UpdateModelTypeState(syncer::HISTORY, model_type_state)); MetadataBatch metadata_batch2; ASSERT_TRUE(metadata_db()->GetAllSyncMetadata(&metadata_batch2)); - EXPECT_FALSE(metadata_batch2.GetModelTypeState().initial_sync_done()); + EXPECT_EQ( + metadata_batch2.GetModelTypeState().initial_sync_state(), + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_STATE_UNSPECIFIED); EntityMetadataMap metadata_records2 = metadata_batch2.TakeAllMetadata(); EXPECT_EQ(metadata_records2.size(), 2u); @@ -157,7 +162,8 @@ // Write some data into the store. ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); ASSERT_TRUE( metadata_db()->UpdateModelTypeState(syncer::HISTORY, model_type_state));
diff --git a/components/history/core/browser/sync/typed_url_sync_metadata_database_unittest.cc b/components/history/core/browser/sync/typed_url_sync_metadata_database_unittest.cc index cfa9d33a..c4344ab 100644 --- a/components/history/core/browser/sync/typed_url_sync_metadata_database_unittest.cc +++ b/components/history/core/browser/sync/typed_url_sync_metadata_database_unittest.cc
@@ -83,7 +83,8 @@ storage_key, metadata)); ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); EXPECT_TRUE(sync_metadata_db_.UpdateModelTypeState(syncer::TYPED_URLS, model_type_state)); @@ -95,7 +96,8 @@ MetadataBatch metadata_batch; EXPECT_TRUE(sync_metadata_db_.GetAllSyncMetadata(&metadata_batch)); - EXPECT_TRUE(metadata_batch.GetModelTypeState().initial_sync_done()); + EXPECT_EQ(metadata_batch.GetModelTypeState().initial_sync_state(), + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); EntityMetadataMap metadata_records = metadata_batch.TakeAllMetadata(); @@ -104,12 +106,15 @@ EXPECT_EQ(metadata_records[storage_key2]->sequence_number(), 2); // Now check that a model type state update replaces the old value - model_type_state.set_initial_sync_done(false); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_STATE_UNSPECIFIED); EXPECT_TRUE(sync_metadata_db_.UpdateModelTypeState(syncer::TYPED_URLS, model_type_state)); EXPECT_TRUE(sync_metadata_db_.GetAllSyncMetadata(&metadata_batch)); - EXPECT_FALSE(metadata_batch.GetModelTypeState().initial_sync_done()); + EXPECT_EQ( + metadata_batch.GetModelTypeState().initial_sync_state(), + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_STATE_UNSPECIFIED); } TEST_F(TypedURLSyncMetadataDatabaseTest, TypedURLWriteThenDeleteSyncMetadata) { @@ -118,7 +123,8 @@ std::string storage_key = IntToStorageKey(1); ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); metadata.set_client_tag_hash("client_hash");
diff --git a/components/media_message_center/media_notification_view_modern_impl.cc b/components/media_message_center/media_notification_view_modern_impl.cc index 8862a210..5978ab67 100644 --- a/components/media_message_center/media_notification_view_modern_impl.cc +++ b/components/media_message_center/media_notification_view_modern_impl.cc
@@ -95,8 +95,6 @@ views::InstallRoundRectHighlightPathGenerator(this, gfx::Insets(), button_size.height() / 2); views::InkDrop::Get(this)->SetMode(views::InkDropHost::InkDropMode::ON); - views::InkDrop::Get(this)->SetBaseColorCallback(base::BindRepeating( - &MediaButton::GetForegroundColor, base::Unretained(this))); SetImageHorizontalAlignment(ImageButton::ALIGN_CENTER); SetImageVerticalAlignment(ImageButton::ALIGN_MIDDLE); SetFocusBehavior(views::View::FocusBehavior::ALWAYS); @@ -112,6 +110,7 @@ views::SetImageFromVectorIconWithColor( this, *GetVectorIconForMediaAction(GetActionFromButtonTag(*this)), icon_size_, foreground_color_, foreground_disabled_color_); + views::InkDrop::Get(this)->SetBaseColor(foreground_color_); SchedulePaint(); } @@ -129,8 +128,6 @@ } private: - SkColor GetForegroundColor() { return foreground_color_; } - SkColor foreground_color_ = gfx::kPlaceholderColor; SkColor foreground_disabled_color_ = gfx::kPlaceholderColor; int icon_size_;
diff --git a/components/omnibox/browser/autocomplete_result.cc b/components/omnibox/browser/autocomplete_result.cc index a1d7b28..fa4035b 100644 --- a/components/omnibox/browser/autocomplete_result.cc +++ b/components/omnibox/browser/autocomplete_result.cc
@@ -253,10 +253,12 @@ void AutocompleteResult::AppendMatches(const ACMatches& matches) { for (const auto& match : matches) { - DCHECK_EQ(AutocompleteMatch::SanitizeString(match.contents), - match.contents); + DCHECK_EQ(AutocompleteMatch::SanitizeString(match.contents), match.contents) + << "description: " << match.description + << ", match type: " << match.type; DCHECK_EQ(AutocompleteMatch::SanitizeString(match.description), - match.description); + match.description) + << "contents: " << match.contents << ", match type: " << match.type; matches_.push_back(match); if (!match.description.empty() && !AutocompleteMatch::IsSearchType(match.type) &&
diff --git a/components/omnibox/browser/search_suggestion_parser.cc b/components/omnibox/browser/search_suggestion_parser.cc index 83e333667..5a0471fb 100644 --- a/components/omnibox/browser/search_suggestion_parser.cc +++ b/components/omnibox/browser/search_suggestion_parser.cc
@@ -257,6 +257,13 @@ match_contents_ = !entity_info_.name().empty() ? base::UTF8ToUTF16(entity_info_.name()) : match_contents; + match_contents_ = base::CollapseWhitespace(match_contents_, false); + // TODO(manukh|crbug.com/1421485) Remove this DCHECK 9/14/23. It's already + // checked in `AutocompleteResult::AppendMatches()`, but duplicated here to + // make it easier to debug if it triggers. + DCHECK_EQ(AutocompleteMatch::SanitizeString(match_contents_), match_contents_) + << "match type: " << type_ << ", from entity info: << " + << !entity_info_.name().empty(); DCHECK(!match_contents_.empty()); ClassifyMatchContents(true, input_text); } @@ -798,8 +805,7 @@ bool should_prefetch = int_index == prefetch_index; bool should_prerender = int_index == prerender_index; results->suggest_results.push_back(SuggestResult( - suggestion, match_type, subtypes[index], - base::CollapseWhitespace(match_contents, false), + suggestion, match_type, subtypes[index], match_contents, match_contents_prefix, annotation, std::move(entity_info), deletion_url, is_keyword_result, relevance, relevances != nullptr, should_prefetch, should_prerender, trimmed_input));
diff --git a/components/page_info/core/about_this_site_service_unittest.cc b/components/page_info/core/about_this_site_service_unittest.cc index 98332e0..536dd17c 100644 --- a/components/page_info/core/about_this_site_service_unittest.cc +++ b/components/page_info/core/about_this_site_service_unittest.cc
@@ -140,12 +140,25 @@ // Tests the language specific feature check. TEST_P(AboutThisSiteServiceTest, FeatureCheck) { - EXPECT_TRUE(page_info::IsAboutThisSiteFeatureEnabled("en-US")); - EXPECT_TRUE(page_info::IsAboutThisSiteFeatureEnabled("en-GB")); - EXPECT_TRUE(page_info::IsAboutThisSiteFeatureEnabled("en")); + const char* enabled[]{"en-US", "en-UK", "en"}; + const char* disabled[]{"da", "id", "zh-TW", "ja"}; + const char* enabled_on_android[]{"pt", "pt-BR", "pt-PT", "fr", "fr-CA", "it", + "nl", "de", "de-DE", "es", "es-419"}; - EXPECT_FALSE(page_info::IsAboutThisSiteFeatureEnabled("de-DE")); - EXPECT_FALSE(page_info::IsAboutThisSiteFeatureEnabled("de")); + for (const char* lang : enabled) { + EXPECT_TRUE(page_info::IsAboutThisSiteFeatureEnabled(lang)); + } + for (const char* lang : disabled) { + EXPECT_FALSE(page_info::IsAboutThisSiteFeatureEnabled(lang)); + } + + for (const char* lang : enabled_on_android) { +#if BUILDFLAG(IS_ANDROID) + EXPECT_TRUE(page_info::IsAboutThisSiteFeatureEnabled(lang)); +#else + EXPECT_FALSE(page_info::IsAboutThisSiteFeatureEnabled(lang)); +#endif + } } // Tests that incorrect proto messages are discarded.
diff --git a/components/page_info/core/features.cc b/components/page_info/core/features.cc index 7438ddf..c107a39 100644 --- a/components/page_info/core/features.cc +++ b/components/page_info/core/features.cc
@@ -4,6 +4,7 @@ #include "components/page_info/core/features.h" +#include "base/containers/contains.h" #include "base/feature_list.h" #include "base/metrics/field_trial_params.h" #include "build/build_config.h" @@ -20,10 +21,18 @@ base::FEATURE_DISABLED_BY_DEFAULT); #endif +const char* pfings[]{"pt", "fr", "it", "nl", "de", "es"}; + extern bool IsAboutThisSiteFeatureEnabled(const std::string& locale) { - if (l10n_util::GetLanguage(locale) == "en") { + std::string lang = l10n_util::GetLanguage(locale); + if (lang == "en") { return base::FeatureList::IsEnabled(kPageInfoAboutThisSiteEn); } else { +#if BUILDFLAG(IS_ANDROID) + if (base::Contains(pfings, lang)) { + return base::FeatureList::IsEnabled(kPageInfoAboutThisSiteEn); + } +#endif return base::FeatureList::IsEnabled(kPageInfoAboutThisSiteNonEn); } }
diff --git a/components/page_info/core/features.h b/components/page_info/core/features.h index cd044e5..c04ebfe 100644 --- a/components/page_info/core/features.h +++ b/components/page_info/core/features.h
@@ -26,7 +26,11 @@ // Enables the "About this site" section in Page Info. extern bool IsAboutThisSiteFeatureEnabled(const std::string& locale); + +// Controls the feature for English and other languages that are enabled by +// default. Use IsAboutThisSiteFeatureEnabled() to check a specific language. BASE_DECLARE_FEATURE(kPageInfoAboutThisSiteEn); +// Controls the feature for languages that are not enabled by default yet. BASE_DECLARE_FEATURE(kPageInfoAboutThisSiteNonEn); // Enables the "About this site" section for non-MSBB users.
diff --git a/components/password_manager/core/browser/login_database_unittest.cc b/components/password_manager/core/browser/login_database_unittest.cc index 6b15360..ac598772 100644 --- a/components/password_manager/core/browser/login_database_unittest.cc +++ b/components/password_manager/core/browser/login_database_unittest.cc
@@ -1617,7 +1617,8 @@ db().UpdateEntityMetadata(syncer::PASSWORDS, kStorageKey1, metadata)); sync_pb::ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); EXPECT_TRUE(db().UpdateModelTypeState(syncer::PASSWORDS, model_type_state)); @@ -1629,7 +1630,8 @@ db().GetAllSyncMetadata(); ASSERT_THAT(metadata_batch, testing::NotNull()); - EXPECT_TRUE(metadata_batch->GetModelTypeState().initial_sync_done()); + EXPECT_EQ(metadata_batch->GetModelTypeState().initial_sync_state(), + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); syncer::EntityMetadataMap metadata_records = metadata_batch->TakeAllMetadata(); @@ -1639,12 +1641,15 @@ EXPECT_EQ(metadata_records[kStorageKey2]->sequence_number(), 2); // Now check that a model type state update replaces the old value - model_type_state.set_initial_sync_done(false); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_STATE_UNSPECIFIED); EXPECT_TRUE(db().UpdateModelTypeState(syncer::PASSWORDS, model_type_state)); metadata_batch = db().GetAllSyncMetadata(); ASSERT_THAT(metadata_batch, testing::NotNull()); - EXPECT_FALSE(metadata_batch->GetModelTypeState().initial_sync_done()); + EXPECT_EQ( + metadata_batch->GetModelTypeState().initial_sync_state(), + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_STATE_UNSPECIFIED); } TEST_F(LoginDatabaseTest, DeleteAllSyncMetadata) { @@ -1658,7 +1663,8 @@ db().UpdateEntityMetadata(syncer::PASSWORDS, kStorageKey1, metadata)); sync_pb::ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); EXPECT_TRUE(db().UpdateModelTypeState(syncer::PASSWORDS, model_type_state)); @@ -1684,7 +1690,8 @@ const std::string kStorageKey = "1"; sync_pb::ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); metadata.set_client_tag_hash("client_hash");
diff --git a/components/password_manager/core/browser/sync/password_sync_bridge.cc b/components/password_manager/core/browser/sync/password_sync_bridge.cc index ba6de96e..76ab690d 100644 --- a/components/password_manager/core/browser/sync/password_sync_bridge.cc +++ b/components/password_manager/core/browser/sync/password_sync_bridge.cc
@@ -33,6 +33,7 @@ #include "components/sync/model/model_type_change_processor.h" #include "components/sync/model/mutable_data_batch.h" #include "components/sync/model/sync_metadata_store_change_list.h" +#include "components/sync/protocol/model_type_state_helper.h" #include "third_party/abseil-cpp/absl/types/optional.h" #include "url/gurl.h" @@ -294,7 +295,8 @@ batch = std::make_unique<syncer::MetadataBatch>(); sync_metadata_read_error = SyncMetadataReadError:: kNewlySupportedFieldDetectedInUnsupportedFieldsCache; - } else if (batch->GetModelTypeState().initial_sync_done() && + } else if (syncer::IsInitialSyncDone( + batch->GetModelTypeState().initial_sync_state()) && !batch->GetModelTypeState() .notes_enabled_before_initial_sync_for_passwords() && base::FeatureList::IsEnabled(syncer::kPasswordNotesWithBackup)) { @@ -307,7 +309,8 @@ batch = std::make_unique<syncer::MetadataBatch>(); sync_metadata_read_error = SyncMetadataReadError:: kPasswordsRequireRedownloadForPotentialNotesOnTheServer; - } else if (batch->GetModelTypeState().initial_sync_done() && + } else if (syncer::IsInitialSyncDone( + batch->GetModelTypeState().initial_sync_state()) && batch->GetModelTypeState() .notes_enabled_before_initial_sync_for_passwords() && !base::FeatureList::IsEnabled(
diff --git a/components/password_manager/core/browser/sync/password_sync_bridge_unittest.cc b/components/password_manager/core/browser/sync/password_sync_bridge_unittest.cc index 459fa67c..1d2215f36 100644 --- a/components/password_manager/core/browser/sync/password_sync_bridge_unittest.cc +++ b/components/password_manager/core/browser/sync/password_sync_bridge_unittest.cc
@@ -999,7 +999,8 @@ // redownloaded for notes already. auto metadata_batch = std::make_unique<syncer::MetadataBatch>(); sync_pb::ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); metadata_batch->SetModelTypeState(model_type_state); return metadata_batch; }); @@ -1030,7 +1031,8 @@ // for notes already. auto metadata_batch = std::make_unique<syncer::MetadataBatch>(); sync_pb::ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); model_type_state.set_notes_enabled_before_initial_sync_for_passwords( true); metadata_batch->SetModelTypeState(model_type_state); @@ -1059,7 +1061,8 @@ .WillByDefault([&]() { auto metadata_batch = std::make_unique<syncer::MetadataBatch>(); sync_pb::ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); metadata_batch->SetModelTypeState(model_type_state); return metadata_batch; }); @@ -1085,23 +1088,26 @@ .WillByDefault([&]() { auto metadata_batch = std::make_unique<syncer::MetadataBatch>(); sync_pb::ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); model_type_state.set_notes_enabled_before_initial_sync_for_passwords( true); metadata_batch->SetModelTypeState(model_type_state); return metadata_batch; }); - EXPECT_CALL(mock_processor(), - ModelReadyToSync(syncer::MetadataBatchContains( - testing::AllOf( - testing::Property( - &sync_pb::ModelTypeState::initial_sync_done, true), - testing::Property( - &sync_pb::ModelTypeState:: - notes_enabled_before_initial_sync_for_passwords, - false)), - /*entities=*/testing::SizeIs(0)))); + EXPECT_CALL( + mock_processor(), + ModelReadyToSync(syncer::MetadataBatchContains( + testing::AllOf( + testing::Property( + &sync_pb::ModelTypeState::initial_sync_state, + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE), + testing::Property( + &sync_pb::ModelTypeState:: + notes_enabled_before_initial_sync_for_passwords, + false)), + /*entities=*/testing::SizeIs(0)))); EXPECT_CALL(*mock_sync_metadata_store_sync(), DeleteAllSyncMetadata()) .Times(0); @@ -1185,7 +1191,8 @@ .WillByDefault(testing::Return(false)); sync_pb::ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); std::unique_ptr<syncer::MetadataChangeList> metadata_changes = bridge()->CreateMetadataChangeList(); @@ -1248,7 +1255,8 @@ ON_CALL(*mock_sync_metadata_store_sync(), GetAllSyncMetadata()) .WillByDefault([&]() { sync_pb::ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); model_type_state.set_notes_enabled_before_initial_sync_for_passwords( base::FeatureList::IsEnabled(syncer::kPasswordNotesWithBackup)); auto metadata_batch = std::make_unique<syncer::MetadataBatch>();
diff --git a/components/password_manager/core/browser/ui/saved_passwords_presenter.cc b/components/password_manager/core/browser/ui/saved_passwords_presenter.cc index 7f63106..6bc0b5a 100644 --- a/components/password_manager/core/browser/ui/saved_passwords_presenter.cc +++ b/components/password_manager/core/browser/ui/saved_passwords_presenter.cc
@@ -248,14 +248,31 @@ return GenerateFormFromCredential(credential, type); }); - for (const PasswordForm& form : password_forms) { - CHECK(form.in_store == password_forms[0].in_store); - } + CHECK(base::ranges::all_of(password_forms, [&](const PasswordForm& form) { + return password_forms[0].in_store == form.in_store; + })); GetStoreFor(password_forms[0]) .AddLogins(password_forms, std::move(completion)); } +void SavedPasswordsPresenter::UpdatePasswordForms( + const std::vector<PasswordForm>& password_forms, + base::OnceClosure completion) { + if (password_forms.empty()) { + base::SequencedTaskRunner::GetCurrentDefault()->PostTask( + FROM_HERE, std::move(completion)); + return; + } + + CHECK(base::ranges::all_of(password_forms, [&](const PasswordForm& form) { + return password_forms[0].in_store == form.in_store; + })); + + GetStoreFor(password_forms[0]) + .UpdateLogins(password_forms, std::move(completion)); +} + SavedPasswordsPresenter::EditResult SavedPasswordsPresenter::EditSavedCredentials( const CredentialUIEntry& original_credential,
diff --git a/components/password_manager/core/browser/ui/saved_passwords_presenter.h b/components/password_manager/core/browser/ui/saved_passwords_presenter.h index 2c73967..108c0dc 100644 --- a/components/password_manager/core/browser/ui/saved_passwords_presenter.h +++ b/components/password_manager/core/browser/ui/saved_passwords_presenter.h
@@ -136,6 +136,14 @@ password_manager::PasswordForm::Type type, AddCredentialsCallback completion); + // Updates all matching password forms in |password_forms|. + // |completion| will be run after the forms are updated. + // + // NOTE: Updates to different password stores is not supported and hence all + // forms in |password_forms| must belong to the same store. + void UpdatePasswordForms(const std::vector<PasswordForm>& password_forms, + base::OnceClosure completion = base::DoNothing()); + // Modifies all the saved credentials matching |original_credential| to // |updated_credential|. Only username, password, notes and password issues // are modifiable.
diff --git a/components/password_manager/core/browser/ui/saved_passwords_presenter_unittest.cc b/components/password_manager/core/browser/ui/saved_passwords_presenter_unittest.cc index 1a699c5..9d73c8bc 100644 --- a/components/password_manager/core/browser/ui/saved_passwords_presenter_unittest.cc +++ b/components/password_manager/core/browser/ui/saved_passwords_presenter_unittest.cc
@@ -1058,6 +1058,35 @@ presenter().RemoveObserver(&observer); } +TEST_F(SavedPasswordsPresenterWithTwoStoresTest, UpdatePasswordForms) { + PasswordForm account_store_form_1 = + CreateTestPasswordForm(PasswordForm::Store::kAccountStore, /*index=*/0); + PasswordForm account_store_form_2 = + CreateTestPasswordForm(PasswordForm::Store::kAccountStore, /*index=*/1); + + std::vector<CredentialUIEntry> credentials_to_add = { + CredentialUIEntry(account_store_form_1), + CredentialUIEntry(account_store_form_2)}; + + presenter().AddCredentials(credentials_to_add, + password_manager::PasswordForm::Type::kImported, + base::DoNothing()); + + RunUntilIdle(); + EXPECT_THAT(presenter().GetSavedCredentials(), + testing::UnorderedElementsAreArray(credentials_to_add)); + + account_store_form_1.password_value = u"new_password_1"; + account_store_form_2.password_value = u"new_password_2"; + + presenter().UpdatePasswordForms({account_store_form_1, account_store_form_2}); + RunUntilIdle(); + + ASSERT_THAT(presenter().GetSavedCredentials(), + UnorderedElementsAre(CredentialUIEntry(account_store_form_1), + CredentialUIEntry(account_store_form_2))); +} + TEST_F(SavedPasswordsPresenterWithTwoStoresTest, AddPasswordUnblocklistsOriginInDifferentStore) { PasswordForm form_to_add =
diff --git a/components/password_manager/core/common/password_manager_features.cc b/components/password_manager/core/common/password_manager_features.cc index 8459233..0483f60 100644 --- a/components/password_manager/core/common/password_manager_features.cc +++ b/components/password_manager/core/common/password_manager_features.cc
@@ -226,7 +226,7 @@ BASE_FEATURE(kPasswordEditDialogWithDetails, "PasswordEditDialogWithDetails", - base::FEATURE_DISABLED_BY_DEFAULT); + base::FEATURE_ENABLED_BY_DEFAULT); // Enables the Password generation bottom sheet. BASE_FEATURE(kPasswordGenerationBottomSheet,
diff --git a/components/reading_list/core/dual_reading_list_model_unittest.cc b/components/reading_list/core/dual_reading_list_model_unittest.cc index f5fcdeb..f50bd80 100644 --- a/components/reading_list/core/dual_reading_list_model_unittest.cc +++ b/components/reading_list/core/dual_reading_list_model_unittest.cc
@@ -187,7 +187,8 @@ auto metadata_batch = std::make_unique<syncer::MetadataBatch>(); sync_pb::ModelTypeState state; - state.set_initial_sync_done(true); + state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); state.set_authenticated_account_id(kTestAccountId); metadata_batch->SetModelTypeState(state); @@ -213,7 +214,8 @@ auto metadata_batch = std::make_unique<syncer::MetadataBatch>(); sync_pb::ModelTypeState state; - state.set_initial_sync_done(true); + state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); state.set_authenticated_account_id(kTestAccountId); metadata_batch->SetModelTypeState(state);
diff --git a/components/reading_list/core/reading_list_model_unittest.cc b/components/reading_list/core/reading_list_model_unittest.cc index 82e20bf7..0313939 100644 --- a/components/reading_list/core/reading_list_model_unittest.cc +++ b/components/reading_list/core/reading_list_model_unittest.cc
@@ -98,7 +98,8 @@ auto metadata_batch = std::make_unique<syncer::MetadataBatch>(); sync_pb::ModelTypeState state; - state.set_initial_sync_done(true); + state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); state.set_authenticated_account_id(kTestAccountId); metadata_batch->SetModelTypeState(state);
diff --git a/components/sync/driver/data_type_manager_impl.cc b/components/sync/driver/data_type_manager_impl.cc index 53354e3..751bbd12 100644 --- a/components/sync/driver/data_type_manager_impl.cc +++ b/components/sync/driver/data_type_manager_impl.cc
@@ -20,6 +20,7 @@ #include "components/sync/driver/data_type_manager_observer.h" #include "components/sync/driver/data_type_status_table.h" #include "components/sync/engine/data_type_activation_response.h" +#include "components/sync/protocol/model_type_state_helper.h" namespace syncer { @@ -258,7 +259,10 @@ continue; } - if (activation_response->model_type_state.initial_sync_done()) { + // TODO(crbug.com/1365938): Think through whether types in the + // initial-sync-partially-done state should be considered "downloaded" here. + if (IsInitialSyncAtLeastPartiallyDone( + activation_response->model_type_state.initial_sync_state())) { downloaded_types_.Put(type); } else { downloaded_types_.Remove(type);
diff --git a/components/sync/driver/data_type_manager_impl.h b/components/sync/driver/data_type_manager_impl.h index d6d8409..aa5eded 100644 --- a/components/sync/driver/data_type_manager_impl.h +++ b/components/sync/driver/data_type_manager_impl.h
@@ -142,6 +142,7 @@ // be maintained as part of |downloaded_types_|, however, since in some edge // cases (notably PurgeForMigration()), this class might have to trigger a // re-download of NIGORI data. + // TODO(crbug.com/1422901): Consider removing this; see bug for details. ModelTypeSet downloaded_types_ = ControlTypes(); // Types that requested in current configuration cycle.
diff --git a/components/sync/driver/data_type_manager_impl_unittest.cc b/components/sync/driver/data_type_manager_impl_unittest.cc index ff2cfdc6..60c3a882 100644 --- a/components/sync/driver/data_type_manager_impl_unittest.cc +++ b/components/sync/driver/data_type_manager_impl_unittest.cc
@@ -1269,7 +1269,8 @@ // Mark both types as already downloaded. sync_pb::ModelTypeState already_downloaded; - already_downloaded.set_initial_sync_done(true); + already_downloaded.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); GetController(PRIORITY_PREFERENCES) ->model() ->SetModelTypeStateForActivationResponse(already_downloaded); @@ -1626,7 +1627,8 @@ // Mark BOOKMARKS as already downloaded. sync_pb::ModelTypeState bookmarks_state; - bookmarks_state.set_initial_sync_done(true); + bookmarks_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); GetController(BOOKMARKS)->model()->SetModelTypeStateForActivationResponse( bookmarks_state);
diff --git a/components/sync/driver/model_type_controller_unittest.cc b/components/sync/driver/model_type_controller_unittest.cc index 07d67b0c..1defcbda 100644 --- a/components/sync/driver/model_type_controller_unittest.cc +++ b/components/sync/driver/model_type_controller_unittest.cc
@@ -116,8 +116,11 @@ // Prepare an activation response, which is the outcome of OnSyncStarting(). auto activation_response = std::make_unique<DataTypeActivationResponse>(); - activation_response->model_type_state.set_initial_sync_done( - initial_sync_done); + activation_response->model_type_state.set_initial_sync_state( + initial_sync_done + ? sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE + : sync_pb:: + ModelTypeState_InitialSyncState_INITIAL_SYNC_STATE_UNSPECIFIED); activation_response->type_processor = std::make_unique<FakeModelTypeProcessor>(); @@ -170,7 +173,9 @@ ASSERT_THAT(activation_response, NotNull()); EXPECT_THAT(activation_response->type_processor, NotNull()); - EXPECT_FALSE(activation_response->model_type_state.initial_sync_done()); + EXPECT_EQ( + activation_response->model_type_state.initial_sync_state(), + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_STATE_UNSPECIFIED); histogram_tester.ExpectTotalCount(kStartFailuresHistogram, 0); } @@ -186,7 +191,8 @@ ASSERT_THAT(activation_response, NotNull()); EXPECT_THAT(activation_response->type_processor, NotNull()); - EXPECT_TRUE(activation_response->model_type_state.initial_sync_done()); + EXPECT_EQ(activation_response->model_type_state.initial_sync_state(), + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); histogram_tester.ExpectTotalCount(kStartFailuresHistogram, 0); }
diff --git a/components/sync/engine/model_type_registry_unittest.cc b/components/sync/engine/model_type_registry_unittest.cc index a8f6f54..4a3250f 100644 --- a/components/sync/engine/model_type_registry_unittest.cc +++ b/components/sync/engine/model_type_registry_unittest.cc
@@ -81,7 +81,8 @@ TEST_F(ModelTypeRegistryTest, GetInitialSyncEndedTypes) { // Themes has finished initial sync. sync_pb::ModelTypeState model_type_state = MakeInitialModelTypeState(THEMES); - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); registry()->ConnectDataType(THEMES, MakeDataTypeActivationResponse(model_type_state));
diff --git a/components/sync/engine/model_type_worker.cc b/components/sync/engine/model_type_worker.cc index 4bf31e80..13c6765 100644 --- a/components/sync/engine/model_type_worker.cc +++ b/components/sync/engine/model_type_worker.cc
@@ -40,6 +40,7 @@ #include "components/sync/engine/model_type_processor.h" #include "components/sync/protocol/data_type_progress_marker.pb.h" #include "components/sync/protocol/entity_specifics.pb.h" +#include "components/sync/protocol/model_type_state_helper.h" #include "components/sync/protocol/proto_memory_estimations.h" #include "components/sync/protocol/sync_entity.pb.h" @@ -325,7 +326,7 @@ model_type_processor_->ConnectSync( std::make_unique<CommitQueueProxy>(weak_ptr_factory_.GetWeakPtr())); - if (!model_type_state_.initial_sync_done()) { + if (!IsInitialSyncDone(model_type_state_.initial_sync_state())) { nudge_handler_->NudgeForInitialDownload(type_); } @@ -337,7 +338,8 @@ // isn't done, the now-updated key will be pushed on the first ApplyUpdates() // call anyway. bool had_outdated_key_name = UpdateTypeEncryptionKeyName(); - if (had_outdated_key_name && model_type_state_.initial_sync_done()) { + if (had_outdated_key_name && + IsInitialSyncDone(model_type_state_.initial_sync_state())) { SendPendingUpdatesToProcessorIfReady(); } } @@ -386,7 +388,7 @@ bool ModelTypeWorker::IsInitialSyncEnded() const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return model_type_state_.initial_sync_done(); + return IsInitialSyncDone(model_type_state_.initial_sync_state()); } const sync_pb::DataTypeProgressMarker& ModelTypeWorker::GetDownloadProgress() @@ -407,7 +409,8 @@ StatusController* status) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - const bool is_initial_sync = !model_type_state_.initial_sync_done(); + const bool is_initial_sync = + !IsInitialSyncDone(model_type_state_.initial_sync_state()); // TODO(rlarocque): Handle data type context conflicts. *model_type_state_.mutable_type_context() = mutated_context; @@ -594,7 +597,7 @@ // other types wait for the cycle to complete before applying any updates. // Note that the initial sync technically isn't started/done yet but by the // time this value is persisted to disk on the model thread it will be. - model_type_state_.set_initial_sync_done(true); + model_type_state_.set_initial_sync_done_deprecated(true); if (cycle_done) { model_type_state_.set_initial_sync_state( sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); @@ -646,7 +649,7 @@ void ModelTypeWorker::SendPendingUpdatesToProcessorIfReady() { DCHECK(model_type_processor_); - if (!model_type_state_.initial_sync_done()) { + if (!IsInitialSyncDone(model_type_state_.initial_sync_state())) { return; } @@ -699,7 +702,7 @@ std::unique_ptr<CommitContribution> ModelTypeWorker::GetContribution( size_t max_entries) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - DCHECK(model_type_state_.initial_sync_done()); + DCHECK(IsInitialSyncDone(model_type_state_.initial_sync_state())); DCHECK(model_type_processor_); // Early return if type is not ready to commit (initial sync isn't done or @@ -794,7 +797,7 @@ } bool ModelTypeWorker::IsTypeInitialized() const { - return model_type_state_.initial_sync_done(); + return IsInitialSyncDone(model_type_state_.initial_sync_state()); } bool ModelTypeWorker::CanCommitItems() const {
diff --git a/components/sync/engine/model_type_worker_unittest.cc b/components/sync/engine/model_type_worker_unittest.cc index 609c663..61d4ecf3 100644 --- a/components/sync/engine/model_type_worker_unittest.cc +++ b/components/sync/engine/model_type_worker_unittest.cc
@@ -170,7 +170,8 @@ initial_state.mutable_progress_marker()->set_token( "some_saved_progress_token"); - initial_state.set_initial_sync_done(true); + initial_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); InitializeWithState(model_type_, initial_state); @@ -190,7 +191,8 @@ loaded_invalidation->set_hint("loaded_hint_1"); loaded_invalidation->set_version(1); - initial_state.set_initial_sync_done(true); + initial_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); InitializeWithState(model_type_, initial_state); @@ -202,7 +204,8 @@ // Don't set progress marker, commit only types don't use them. ModelTypeState initial_state; - initial_state.set_initial_sync_done(true); + initial_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); InitializeWithState(USER_EVENTS, initial_state); } @@ -669,7 +672,8 @@ const ModelTypeState& state = processor()->GetNthUpdateState(0); EXPECT_FALSE(state.progress_marker().token().empty()); - EXPECT_TRUE(state.initial_sync_done()); + EXPECT_EQ(state.initial_sync_state(), + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); EXPECT_TRUE(worker()->IsInitialSyncEnded()); }
diff --git a/components/sync/engine/syncer_unittest.cc b/components/sync/engine/syncer_unittest.cc index f2cdef9b..b3469b9 100644 --- a/components/sync/engine/syncer_unittest.cc +++ b/components/sync/engine/syncer_unittest.cc
@@ -210,7 +210,8 @@ std::unique_ptr<DataTypeActivationResponse> MakeFakeActivationResponse( ModelType model_type) { auto response = std::make_unique<DataTypeActivationResponse>(); - response->model_type_state.set_initial_sync_done(true); + response->model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); response->model_type_state.mutable_progress_marker()->set_data_type_id( GetSpecificsFieldNumberFromModelType(model_type)); response->type_processor = std::make_unique<ForwardingModelTypeProcessor>(
diff --git a/components/sync/model/client_tag_based_model_type_processor.cc b/components/sync/model/client_tag_based_model_type_processor.cc index d4073dd..c3b8a459 100644 --- a/components/sync/model/client_tag_based_model_type_processor.cc +++ b/components/sync/model/client_tag_based_model_type_processor.cc
@@ -110,7 +110,7 @@ } if (CheckForInvalidPersistedMetadata(*batch)) { - if (batch->GetModelTypeState().initial_sync_done()) { + if (IsInitialSyncDone(model_type_state.initial_sync_state())) { entity_tracker_ = std::make_unique<ProcessorEntityTracker>( model_type_state, batch->TakeAllMetadata()); } else { @@ -171,7 +171,7 @@ if (CommitOnlyTypes().Has(type_)) { // For commit-only types, no updates are expected. - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_done_deprecated(true); model_type_state.set_initial_sync_state( sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_UNNECESSARY); OnFullUpdateReceived(model_type_state, UpdateResponseDataList(), @@ -882,7 +882,7 @@ // Check that the worker correctly marked initial sync as done for this // update. - DCHECK(model_type_state.initial_sync_done()); + DCHECK(IsInitialSyncDone(model_type_state.initial_sync_state())); // Ensure that this is the initial sync, and it was not already marked done. DCHECK(HasClearAllDirective(gc_directive) || !entity_tracker_); @@ -997,7 +997,7 @@ const sync_pb::ModelTypeState& model_type_state, UpdateResponseDataList updates) { DCHECK(model_ready_to_sync_); - DCHECK(model_type_state.initial_sync_done()); + DCHECK(IsInitialSyncDone(model_type_state.initial_sync_state())); DCHECK(entity_tracker_); ClientTagBasedRemoteUpdateHandler updates_handler(type_, bridge_, @@ -1241,8 +1241,10 @@ const EntityMetadataMap& metadata_map = metadata.GetAllMetadata(); - // Check that there's no entity metadata unless the initial sync is done. - if (!metadata.GetModelTypeState().initial_sync_done() && + // Check that there's no entity metadata unless the initial sync is at least + // started. + if (!IsInitialSyncAtLeastPartiallyDone( + metadata.GetModelTypeState().initial_sync_state()) && !metadata_map.empty()) { base::UmaHistogramEnumeration( "Sync.ModelTypeEntityMetadataWithoutInitialSync",
diff --git a/components/sync/model/client_tag_based_model_type_processor_unittest.cc b/components/sync/model/client_tag_based_model_type_processor_unittest.cc index 4701f4dc..d87d6d7 100644 --- a/components/sync/model/client_tag_based_model_type_processor_unittest.cc +++ b/components/sync/model/client_tag_based_model_type_processor_unittest.cc
@@ -197,7 +197,11 @@ void SetInitialSyncDone(bool is_done) { ModelTypeState model_type_state(db().model_type_state()); - model_type_state.set_initial_sync_done(is_done); + model_type_state.set_initial_sync_state( + is_done + ? sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE + : sync_pb:: + ModelTypeState_InitialSyncState_INITIAL_SYNC_STATE_UNSPECIFIED); model_type_state.set_cache_guid(kCacheGuid); model_type_state.mutable_progress_marker()->set_data_type_id( GetSpecificsFieldNumberFromModelType(type())); @@ -561,7 +565,8 @@ ShouldExposePreviouslyTrackedAccountId) { std::unique_ptr<MetadataBatch> metadata_batch = db()->CreateMetadataBatch(); sync_pb::ModelTypeState model_type_state(metadata_batch->GetModelTypeState()); - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); model_type_state.set_cache_guid(kCacheGuid); model_type_state.set_authenticated_account_id("PersistedAccountId"); model_type_state.mutable_progress_marker()->set_data_type_id( @@ -581,7 +586,8 @@ ShouldExposeNewlyTrackedAccountIdIfChanged) { std::unique_ptr<MetadataBatch> metadata_batch = db()->CreateMetadataBatch(); sync_pb::ModelTypeState model_type_state(metadata_batch->GetModelTypeState()); - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); model_type_state.set_cache_guid(kCacheGuid); model_type_state.set_authenticated_account_id("PersistedAccountId"); model_type_state.mutable_progress_marker()->set_data_type_id( @@ -630,7 +636,8 @@ ShouldExposePreviouslyTrackedCacheGuid) { std::unique_ptr<MetadataBatch> metadata_batch = db()->CreateMetadataBatch(); sync_pb::ModelTypeState model_type_state(metadata_batch->GetModelTypeState()); - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); model_type_state.set_cache_guid("PersistedCacheGuid"); model_type_state.set_authenticated_account_id(kDefaultAuthenticatedAccountId); model_type_state.mutable_progress_marker()->set_data_type_id( @@ -2805,7 +2812,9 @@ ShouldExposePreviouslyTrackedAccountId) { std::unique_ptr<MetadataBatch> metadata_batch = db()->CreateMetadataBatch(); sync_pb::ModelTypeState model_type_state(metadata_batch->GetModelTypeState()); - model_type_state.set_initial_sync_done(true); + + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); model_type_state.set_cache_guid(kCacheGuid); model_type_state.set_authenticated_account_id("PersistedAccountId"); model_type_state.mutable_progress_marker()->set_data_type_id( @@ -2834,7 +2843,8 @@ ShouldNotCallMergeAfterRestart) { std::unique_ptr<MetadataBatch> metadata_batch = db()->CreateMetadataBatch(); sync_pb::ModelTypeState model_type_state(metadata_batch->GetModelTypeState()); - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); model_type_state.set_cache_guid(kCacheGuid); model_type_state.set_authenticated_account_id("PersistedAccountId"); model_type_state.mutable_progress_marker()->set_data_type_id( @@ -2854,7 +2864,8 @@ TEST_F(CommitOnlyClientTagBasedModelTypeProcessorTest, DISABLED_ShouldCommitAndDeleteWhenAcked) { InitializeToReadyState(); - EXPECT_TRUE(db()->model_type_state().initial_sync_done()); + EXPECT_EQ(db()->model_type_state().initial_sync_state(), + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); const uint64_t key1 = 1234; const std::string key1s = base::NumberToString(key1);
diff --git a/components/sync/model/client_tag_based_remote_update_handler_unittest.cc b/components/sync/model/client_tag_based_remote_update_handler_unittest.cc index 53010f3..9b17ee2 100644 --- a/components/sync/model/client_tag_based_remote_update_handler_unittest.cc +++ b/components/sync/model/client_tag_based_remote_update_handler_unittest.cc
@@ -30,7 +30,8 @@ sync_pb::ModelTypeState GenerateModelTypeState() { sync_pb::ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); return model_type_state; }
diff --git a/components/sync/model/processor_entity_tracker.cc b/components/sync/model/processor_entity_tracker.cc index 849dfac..6bbcb12 100644 --- a/components/sync/model/processor_entity_tracker.cc +++ b/components/sync/model/processor_entity_tracker.cc
@@ -9,6 +9,7 @@ #include "base/trace_event/memory_usage_estimator.h" #include "components/sync/model/processor_entity.h" #include "components/sync/protocol/entity_metadata.pb.h" +#include "components/sync/protocol/model_type_state_helper.h" #include "components/sync/protocol/proto_memory_estimations.h" namespace syncer { @@ -18,7 +19,8 @@ std::map<std::string, std::unique_ptr<sync_pb::EntityMetadata>> metadata_map) : model_type_state_(model_type_state) { - DCHECK(model_type_state.initial_sync_done()); + DCHECK( + IsInitialSyncAtLeastPartiallyDone(model_type_state.initial_sync_state())); for (auto& [storage_key, metadata] : metadata_map) { std::unique_ptr<ProcessorEntity> entity = ProcessorEntity::CreateFromMetadata(storage_key, std::move(*metadata)); @@ -98,7 +100,8 @@ void ProcessorEntityTracker::RemoveEntityForClientTagHash( const ClientTagHash& client_tag_hash) { - DCHECK(model_type_state_.initial_sync_done()); + DCHECK(IsInitialSyncAtLeastPartiallyDone( + model_type_state_.initial_sync_state())); DCHECK(!client_tag_hash.value().empty()); const ProcessorEntity* entity = GetEntityForTagHash(client_tag_hash); if (entity == nullptr || entity->storage_key().empty()) { @@ -112,7 +115,8 @@ void ProcessorEntityTracker::RemoveEntityForStorageKey( const std::string& storage_key) { - DCHECK(model_type_state_.initial_sync_done()); + DCHECK(IsInitialSyncAtLeastPartiallyDone( + model_type_state_.initial_sync_state())); // Look-up the client tag hash. auto iter = storage_key_to_tag_hash_.find(storage_key); if (iter == storage_key_to_tag_hash_.end()) {
diff --git a/components/sync/model/processor_entity_tracker_unittest.cc b/components/sync/model/processor_entity_tracker_unittest.cc index f18edfa..f59b6e1 100644 --- a/components/sync/model/processor_entity_tracker_unittest.cc +++ b/components/sync/model/processor_entity_tracker_unittest.cc
@@ -29,7 +29,8 @@ sync_pb::ModelTypeState GenerateModelTypeState() { sync_pb::ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); return model_type_state; } @@ -105,7 +106,9 @@ // Check some getters for the entity tracker. EXPECT_EQ(2u, entity_tracker.size()); EXPECT_EQ(1u, entity_tracker.CountNonTombstoneEntries()); - EXPECT_TRUE(entity_tracker.model_type_state().initial_sync_done()); + EXPECT_EQ(entity_tracker.model_type_state().initial_sync_state(), + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); + EXPECT_TRUE(entity_tracker.AllStorageKeysPopulated()); EXPECT_FALSE(entity_tracker.HasLocalChanges());
diff --git a/components/sync/model/syncable_service_based_bridge.cc b/components/sync/model/syncable_service_based_bridge.cc index d627df5..e1faa66 100644 --- a/components/sync/model/syncable_service_based_bridge.cc +++ b/components/sync/model/syncable_service_based_bridge.cc
@@ -20,6 +20,7 @@ #include "components/sync/model/sync_change.h" #include "components/sync/model/syncable_service.h" #include "components/sync/protocol/entity_specifics.pb.h" +#include "components/sync/protocol/model_type_state_helper.h" #include "components/sync/protocol/persisted_entity_data.pb.h" #include "components/sync/protocol/proto_memory_estimations.h" @@ -438,7 +439,8 @@ // Guard against inconsistent state, and recover from it by starting from // scratch, which will cause the eventual refetching of all entities from the // server. - if (!metadata_batch->GetModelTypeState().initial_sync_done() && + if (!IsInitialSyncDone( + metadata_batch->GetModelTypeState().initial_sync_state()) && !in_memory_store_.empty()) { in_memory_store_.clear(); store_->DeleteAllDataAndMetadata(base::DoNothing());
diff --git a/components/sync/nigori/nigori_model_type_processor.cc b/components/sync/nigori/nigori_model_type_processor.cc index 21d1f49..292b56e 100644 --- a/components/sync/nigori/nigori_model_type_processor.cc +++ b/components/sync/nigori/nigori_model_type_processor.cc
@@ -134,7 +134,8 @@ // must be empty for Nigori. absl::optional<ModelError> error; - const bool is_initial_sync = !model_type_state_.initial_sync_done(); + const bool is_initial_sync = + !IsInitialSyncDone(model_type_state_.initial_sync_state()); LogUpdatesReceivedByProcessorHistogram(NIGORI, is_initial_sync, updates.size()); @@ -316,7 +317,8 @@ MigrateLegacyInitialSyncDone(nigori_metadata.model_type_state, NIGORI); - if (nigori_metadata.model_type_state.initial_sync_done() && + if (IsInitialSyncDone( + nigori_metadata.model_type_state.initial_sync_state()) && nigori_metadata.entity_metadata) { model_type_state_ = std::move(nigori_metadata.model_type_state); sync_pb::EntityMetadata metadata = @@ -341,7 +343,7 @@ DCHECK_EQ(NIGORI, GetModelTypeFromSpecifics(entity_data->specifics)); DCHECK(entity_); - if (!model_type_state_.initial_sync_done()) { + if (!IsInitialSyncDone(model_type_state_.initial_sync_state())) { // Ignore changes before the initial sync is done. return; } @@ -413,7 +415,7 @@ } bool NigoriModelTypeProcessor::IsTrackingMetadata() { - return model_type_state_.initial_sync_done(); + return IsInitialSyncDone(model_type_state_.initial_sync_state()); } bool NigoriModelTypeProcessor::IsConnected() const { @@ -434,7 +436,7 @@ return; } - if (model_type_state_.initial_sync_done() && + if (IsInitialSyncDone(model_type_state_.initial_sync_state()) && model_type_state_.cache_guid() != activation_request_.cache_guid) { ClearMetadataAndReset(); DCHECK(model_ready_to_sync_); @@ -460,7 +462,7 @@ } // Don't send anything if the type is not ready to handle commits. - if (!model_type_state_.initial_sync_done()) { + if (!IsInitialSyncDone(model_type_state_.initial_sync_state())) { return; }
diff --git a/components/sync/nigori/nigori_model_type_processor_unittest.cc b/components/sync/nigori/nigori_model_type_processor_unittest.cc index 21e31877..1c507d5 100644 --- a/components/sync/nigori/nigori_model_type_processor_unittest.cc +++ b/components/sync/nigori/nigori_model_type_processor_unittest.cc
@@ -51,7 +51,8 @@ sync_pb::ModelTypeState CreateDummyModelTypeState() { sync_pb::ModelTypeState model_type_state; model_type_state.set_cache_guid(kCacheGuid); - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); return model_type_state; } @@ -120,8 +121,11 @@ void SimulateModelReadyToSync(bool initial_sync_done, int server_version) { NigoriMetadataBatch nigori_metadata_batch; - nigori_metadata_batch.model_type_state.set_initial_sync_done( - initial_sync_done); + nigori_metadata_batch.model_type_state.set_initial_sync_state( + initial_sync_done + ? sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE + : sync_pb:: + ModelTypeState_InitialSyncState_INITIAL_SYNC_STATE_UNSPECIFIED); nigori_metadata_batch.model_type_state.set_cache_guid(kCacheGuid); nigori_metadata_batch.entity_metadata = sync_pb::EntityMetadata(); nigori_metadata_batch.entity_metadata->set_creation_time( @@ -179,7 +183,8 @@ // Build a model type state with a specific cache guid. const std::string kOtherCacheGuid = "cache_guid"; sync_pb::ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); model_type_state.set_cache_guid(kOtherCacheGuid); // Build entity metadata with a specific sequence number.
diff --git a/components/sync/nigori/nigori_storage_impl_unittest.cc b/components/sync/nigori/nigori_storage_impl_unittest.cc index 82dfa4b0..0ae56a6 100644 --- a/components/sync/nigori/nigori_storage_impl_unittest.cc +++ b/components/sync/nigori/nigori_storage_impl_unittest.cc
@@ -15,7 +15,8 @@ sync_pb::NigoriLocalData MakeSomeNigoriLocalData() { sync_pb::NigoriLocalData result; - result.mutable_model_type_state()->set_initial_sync_done(true); + result.mutable_model_type_state()->set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); result.mutable_entity_metadata()->set_sequence_number(1); result.mutable_nigori_model()->set_encrypt_everything(true); return result;
diff --git a/components/sync/protocol/model_type_state.proto b/components/sync/protocol/model_type_state.proto index 9188057d..8ca4b85b 100644 --- a/components/sync/protocol/model_type_state.proto +++ b/components/sync/protocol/model_type_state.proto
@@ -55,7 +55,10 @@ // This flag is set to true when the first download cycle is complete. The // ModelTypeProcessor should not attempt to commit any items until this // flag is set. - optional bool initial_sync_done = 4; + // Deprecated in M113 and replaced by `initial_sync_state`. + // TODO(crbug.com/1423338): Fully remove this field after a grace period, once + // we're confident `initial_sync_state` won't get reverted. + optional bool initial_sync_done_deprecated = 4 [deprecated = true]; // Indicates the status of "initial sync", i.e. whether the first download // cycle and initial merge are complete.
diff --git a/components/sync/protocol/model_type_state_helper.cc b/components/sync/protocol/model_type_state_helper.cc index 53f2ba2..f565ad8 100644 --- a/components/sync/protocol/model_type_state_helper.cc +++ b/components/sync/protocol/model_type_state_helper.cc
@@ -6,6 +6,31 @@ namespace syncer { +bool IsInitialSyncDone(sync_pb::ModelTypeState::InitialSyncState state) { + switch (state) { + case sync_pb:: + ModelTypeState_InitialSyncState_INITIAL_SYNC_STATE_UNSPECIFIED: + case sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_PARTIALLY_DONE: + return false; + case sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE: + case sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_UNNECESSARY: + return true; + } +} + +bool IsInitialSyncAtLeastPartiallyDone( + sync_pb::ModelTypeState::InitialSyncState state) { + switch (state) { + case sync_pb:: + ModelTypeState_InitialSyncState_INITIAL_SYNC_STATE_UNSPECIFIED: + return false; + case sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_PARTIALLY_DONE: + case sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE: + case sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_UNNECESSARY: + return true; + } +} + bool MigrateLegacyInitialSyncDone(sync_pb::ModelTypeState& model_type_state, ModelType type) { if (model_type_state.has_initial_sync_state()) { @@ -14,7 +39,7 @@ } // Migrate from the deprecated `initial_sync_done` flag to the // `initial_sync_state` enum. - if (model_type_state.initial_sync_done()) { + if (model_type_state.initial_sync_done_deprecated()) { model_type_state.set_initial_sync_state( CommitOnlyTypes().Has(type) ? sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_UNNECESSARY
diff --git a/components/sync/protocol/model_type_state_helper.h b/components/sync/protocol/model_type_state_helper.h index 8416689..c3906d79 100644 --- a/components/sync/protocol/model_type_state_helper.h +++ b/components/sync/protocol/model_type_state_helper.h
@@ -10,6 +10,11 @@ namespace syncer { +bool IsInitialSyncDone(sync_pb::ModelTypeState::InitialSyncState state); + +bool IsInitialSyncAtLeastPartiallyDone( + sync_pb::ModelTypeState::InitialSyncState state); + // Migrates `model_type_state` in-place from the deprecated `initial_sync_done` // flag to the new `initial_sync_state` enum. Returns whether a migration // actually happened and `model_type_state` was modified.
diff --git a/components/sync/protocol/model_type_state_helper_unittest.cc b/components/sync/protocol/model_type_state_helper_unittest.cc index 4c6eea2..5ca1aa2 100644 --- a/components/sync/protocol/model_type_state_helper_unittest.cc +++ b/components/sync/protocol/model_type_state_helper_unittest.cc
@@ -30,13 +30,13 @@ TEST(ModelTypeStateHelperTest, MigratesRegularModelType) { sync_pb::ModelTypeState state; - state.set_initial_sync_done(true); + state.set_initial_sync_done_deprecated(true); EXPECT_TRUE(MigrateLegacyInitialSyncDone(state, kRegularType)); EXPECT_EQ(state.initial_sync_state(), sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); // The legacy field should also still be there. - EXPECT_TRUE(state.initial_sync_done()); + EXPECT_TRUE(state.initial_sync_done_deprecated()); // The migration should be idempotent. EXPECT_FALSE(MigrateLegacyInitialSyncDone(state, kRegularType)); @@ -44,13 +44,13 @@ TEST(ModelTypeStateHelperTest, MigratesCommitOnlyModelType) { sync_pb::ModelTypeState state; - state.set_initial_sync_done(true); + state.set_initial_sync_done_deprecated(true); EXPECT_TRUE(MigrateLegacyInitialSyncDone(state, kCommitOnlyType)); EXPECT_EQ(state.initial_sync_state(), sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_UNNECESSARY); // The legacy field should also still be there. - EXPECT_TRUE(state.initial_sync_done()); + EXPECT_TRUE(state.initial_sync_done_deprecated()); // The migration should be idempotent. EXPECT_FALSE(MigrateLegacyInitialSyncDone(state, kCommitOnlyType)); @@ -58,17 +58,17 @@ TEST(ModelTypeStateHelperTest, MigratesApplyImmediatelyModelType) { sync_pb::ModelTypeState state; - state.set_initial_sync_done(true); + state.set_initial_sync_done_deprecated(true); EXPECT_TRUE( MigrateLegacyInitialSyncDone(state, kApplyUpdatesImmediatelyType)); - // Note: For ApplyUpdatesImmediatelyTypes(), `initial_sync_done` could map to - // either `INITIAL_SYNC_DONE` or `INITIAL_SYNC_PARTIALLY_DONE`. To preserve - // the previous behavior, it gets migrated to `INITIAL_SYNC_DONE`. + // Note: For ApplyUpdatesImmediatelyTypes(), `initial_sync_done_deprecated` + // could map to either `INITIAL_SYNC_DONE` or `INITIAL_SYNC_PARTIALLY_DONE`. + // To preserve the previous behavior, it gets migrated to `INITIAL_SYNC_DONE`. EXPECT_EQ(state.initial_sync_state(), sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); // The legacy field should also still be there. - EXPECT_TRUE(state.initial_sync_done()); + EXPECT_TRUE(state.initial_sync_done_deprecated()); // The migration should be idempotent. EXPECT_FALSE(
diff --git a/components/sync/protocol/proto_visitors.h b/components/sync/protocol/proto_visitors.h index 2da8385..bb60b7b 100644 --- a/components/sync/protocol/proto_visitors.h +++ b/components/sync/protocol/proto_visitors.h
@@ -682,7 +682,7 @@ VISIT(progress_marker); VISIT(type_context); VISIT(encryption_key_name); - VISIT(initial_sync_done); + VISIT(initial_sync_done_deprecated); VISIT_ENUM(initial_sync_state); VISIT(cache_guid); VISIT(authenticated_account_id);
diff --git a/components/sync/test/mock_model_type_worker.cc b/components/sync/test/mock_model_type_worker.cc index 98931a1..5b306e6 100644 --- a/components/sync/test/mock_model_type_worker.cc +++ b/components/sync/test/mock_model_type_worker.cc
@@ -22,7 +22,8 @@ const sync_pb::ModelTypeState& model_type_state, ModelTypeProcessor* processor) : model_type_state_(model_type_state), processor_(processor) { - model_type_state_.set_initial_sync_done(true); + model_type_state_.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); } MockModelTypeWorker::~MockModelTypeWorker() = default;
diff --git a/components/sync/test/test_matchers.h b/components/sync/test/test_matchers.h index 746b452..8dc9e3ede 100644 --- a/components/sync/test/test_matchers.h +++ b/components/sync/test/test_matchers.h
@@ -70,12 +70,15 @@ // Matcher for sync_pb::ModelTypeState: verifies that initial sync is done. MATCHER(HasInitialSyncDone, "") { - return arg.initial_sync_done(); + return arg.initial_sync_state() == + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE; } // Matcher for sync_pb::ModelTypeState: verifies that initial sync is not done. MATCHER(HasNotInitialSyncDone, "") { - return !arg.initial_sync_done(); + return arg.initial_sync_state() == + sync_pb:: + ModelTypeState_InitialSyncState_INITIAL_SYNC_STATE_UNSPECIFIED; } } // namespace syncer
diff --git a/components/sync_bookmarks/bookmark_model_type_processor.cc b/components/sync_bookmarks/bookmark_model_type_processor.cc index 64326fe1..4cbbd2c 100644 --- a/components/sync_bookmarks/bookmark_model_type_processor.cc +++ b/components/sync_bookmarks/bookmark_model_type_processor.cc
@@ -217,7 +217,7 @@ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(!model_type_state.cache_guid().empty()); DCHECK_EQ(model_type_state.cache_guid(), cache_guid_); - DCHECK(model_type_state.initial_sync_done()); + DCHECK(syncer::IsInitialSyncDone(model_type_state.initial_sync_state())); DCHECK(start_callback_.is_null()); // Processor should never connect if // |last_initial_merge_remote_updates_exceeded_limit_| is set.
diff --git a/components/sync_bookmarks/bookmark_model_type_processor_unittest.cc b/components/sync_bookmarks/bookmark_model_type_processor_unittest.cc index 8b793d02..b4bad9c 100644 --- a/components/sync_bookmarks/bookmark_model_type_processor_unittest.cc +++ b/components/sync_bookmarks/bookmark_model_type_processor_unittest.cc
@@ -123,7 +123,8 @@ sync_pb::ModelTypeState CreateDummyModelTypeState() { sync_pb::ModelTypeState model_type_state; model_type_state.set_cache_guid(kCacheGuid); - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); return model_type_state; } @@ -258,7 +259,8 @@ void SimulateModelReadyToSyncWithInitialSyncDone() { sync_pb::BookmarkModelMetadata model_metadata = CreateMetadataForPermanentNodes(bookmark_model_.get()); - DCHECK(model_metadata.model_type_state().initial_sync_done()); + DCHECK_EQ(model_metadata.model_type_state().initial_sync_state(), + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); // By default, set that bookmarks are reuploaded to avoid reupload logic. model_metadata.set_bookmarks_hierarchy_fields_reuploaded(true); @@ -573,7 +575,8 @@ TEST_F(BookmarkModelTypeProcessorTest, ShouldIgnoreNonEmptyMetadataWhileSyncNotDone) { sync_pb::BookmarkModelMetadata model_metadata; - model_metadata.mutable_model_type_state()->set_initial_sync_done(false); + model_metadata.mutable_model_type_state()->set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_STATE_UNSPECIFIED); // Add entries to the metadata. sync_pb::BookmarkMetadata* bookmark_metadata = model_metadata.add_bookmarks_metadata(); @@ -599,7 +602,8 @@ TEST_F(BookmarkModelTypeProcessorTest, ShouldIgnoreMetadataNotMatchingTheModel) { sync_pb::BookmarkModelMetadata model_metadata; - model_metadata.mutable_model_type_state()->set_initial_sync_done(true); + model_metadata.mutable_model_type_state()->set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); // Add entries for only the bookmark bar. However, the TestBookmarkClient will // create all the 3 permanent nodes. *model_metadata.add_bookmarks_metadata() =
diff --git a/components/sync_bookmarks/bookmark_remote_updates_handler_unittest.cc b/components/sync_bookmarks/bookmark_remote_updates_handler_unittest.cc index 823f443..3344917 100644 --- a/components/sync_bookmarks/bookmark_remote_updates_handler_unittest.cc +++ b/components/sync_bookmarks/bookmark_remote_updates_handler_unittest.cc
@@ -134,7 +134,8 @@ sync_pb::BookmarkModelMetadata CreateMetadataForPermanentNodes( const bookmarks::BookmarkModel* bookmark_model) { sync_pb::BookmarkModelMetadata model_metadata; - model_metadata.mutable_model_type_state()->set_initial_sync_done(true); + model_metadata.mutable_model_type_state()->set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); model_metadata.set_bookmarks_hierarchy_fields_reuploaded(true); *model_metadata.add_bookmarks_metadata() = @@ -1111,7 +1112,8 @@ const base::Time kModificationTime(base::Time::Now() - base::Seconds(1)); sync_pb::ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); sync_pb::EntitySpecifics specifics; sync_pb::BookmarkSpecifics* bookmark_specifics = specifics.mutable_bookmark(); @@ -1184,7 +1186,8 @@ GURL()); sync_pb::ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); sync_pb::EntitySpecifics specifics; sync_pb::BookmarkSpecifics* bookmark_specifics = specifics.mutable_bookmark();
diff --git a/components/sync_bookmarks/synced_bookmark_tracker.cc b/components/sync_bookmarks/synced_bookmark_tracker.cc index b2362b0..c7f97f4 100644 --- a/components/sync_bookmarks/synced_bookmark_tracker.cc +++ b/components/sync_bookmarks/synced_bookmark_tracker.cc
@@ -22,8 +22,8 @@ #include "components/bookmarks/browser/bookmark_node.h" #include "components/sync/base/time.h" #include "components/sync/protocol/bookmark_model_metadata.pb.h" -#include "components/sync/protocol/entity_data.h" #include "components/sync/protocol/entity_specifics.pb.h" +#include "components/sync/protocol/model_type_state_helper.h" #include "components/sync/protocol/proto_memory_estimations.h" #include "components/sync/protocol/unique_position.pb.h" #include "components/sync_bookmarks/switches.h" @@ -86,7 +86,8 @@ sync_pb::BookmarkModelMetadata model_metadata) { DCHECK(model); - if (!model_metadata.model_type_state().initial_sync_done()) { + if (!syncer::IsInitialSyncDone( + model_metadata.model_type_state().initial_sync_state())) { return nullptr; } @@ -404,7 +405,7 @@ SyncedBookmarkTracker::InitEntitiesFromModelAndMetadata( const bookmarks::BookmarkModel* model, sync_pb::BookmarkModelMetadata model_metadata) { - DCHECK(model_type_state_.initial_sync_done()); + DCHECK(syncer::IsInitialSyncDone(model_type_state_.initial_sync_state())); // Build a temporary map to look up bookmark nodes efficiently by node ID. std::unordered_map<int64_t, const bookmarks::BookmarkNode*>
diff --git a/components/sync_bookmarks/synced_bookmark_tracker_unittest.cc b/components/sync_bookmarks/synced_bookmark_tracker_unittest.cc index 5d9b7bc5..45d752f 100644 --- a/components/sync_bookmarks/synced_bookmark_tracker_unittest.cc +++ b/components/sync_bookmarks/synced_bookmark_tracker_unittest.cc
@@ -105,7 +105,8 @@ sync_pb::BookmarkModelMetadata CreateMetadataForPermanentNodes( const bookmarks::BookmarkModel* bookmark_model) { sync_pb::BookmarkModelMetadata model_metadata; - model_metadata.mutable_model_type_state()->set_initial_sync_done(true); + model_metadata.mutable_model_type_state()->set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); *model_metadata.add_bookmarks_metadata() = CreateNodeMetadata(bookmark_model->bookmark_bar_node(), @@ -671,7 +672,8 @@ bookmarks::TestBookmarkClient::CreateModel(); sync_pb::BookmarkModelMetadata model_metadata; - model_metadata.mutable_model_type_state()->set_initial_sync_done(true); + model_metadata.mutable_model_type_state()->set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); // Add entries for all the permanent nodes except for the Mobile bookmarks // folder. @@ -1061,7 +1063,8 @@ const GURL kUrl("http://www.foo.com"); sync_pb::ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); std::unique_ptr<SyncedBookmarkTracker> tracker = SyncedBookmarkTracker::CreateEmpty(model_type_state); tracker->SetBookmarksReuploaded(); @@ -1133,7 +1136,8 @@ bookmarks::TestBookmarkClient::CreateModel(); sync_pb::ModelTypeState model_type_state; - model_type_state.set_initial_sync_done(true); + model_type_state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); sync_pb::BookmarkModelMetadata initial_model_metadata = CreateMetadataForPermanentNodes(bookmark_model.get()); initial_model_metadata.set_bookmarks_hierarchy_fields_reuploaded(true);
diff --git a/components/sync_device_info/device_info_sync_bridge.cc b/components/sync_device_info/device_info_sync_bridge.cc index fef10df71..f816e77 100644 --- a/components/sync_device_info/device_info_sync_bridge.cc +++ b/components/sync_device_info/device_info_sync_bridge.cc
@@ -28,6 +28,7 @@ #include "components/sync/model/mutable_data_batch.h" #include "components/sync/protocol/device_info_specifics.pb.h" #include "components/sync/protocol/model_type_state.pb.h" +#include "components/sync/protocol/model_type_state_helper.h" #include "components/sync/protocol/sync_enums.pb.h" #include "components/sync_device_info/device_info_prefs.h" #include "components/sync_device_info/device_info_proto_enum_util.h" @@ -723,7 +724,8 @@ // In the regular case for sync being disabled, wait for MergeSyncData() // before initializing the LocalDeviceInfoProvider. - if (!metadata_batch->GetModelTypeState().initial_sync_done() && + if (!syncer::IsInitialSyncDone( + metadata_batch->GetModelTypeState().initial_sync_state()) && metadata_batch->GetAllMetadata().empty() && all_data_.empty()) { change_processor()->ModelReadyToSync(std::move(metadata_batch)); return; @@ -733,7 +735,8 @@ metadata_batch->GetModelTypeState().cache_guid(); // Protect against corrupt local data. - if (!metadata_batch->GetModelTypeState().initial_sync_done() || + if (!syncer::IsInitialSyncDone( + metadata_batch->GetModelTypeState().initial_sync_state()) || local_cache_guid_in_metadata.empty() || all_data_.count(local_cache_guid_in_metadata) == 0) { // Data or metadata is off. Just throw everything away and start clean.
diff --git a/components/sync_device_info/device_info_sync_bridge_unittest.cc b/components/sync_device_info/device_info_sync_bridge_unittest.cc index 3528b611..7e9701f 100644 --- a/components/sync_device_info/device_info_sync_bridge_unittest.cc +++ b/components/sync_device_info/device_info_sync_bridge_unittest.cc
@@ -316,7 +316,8 @@ ModelTypeState StateWithEncryption(const std::string& encryption_key_name) { ModelTypeState state; - state.set_initial_sync_done(true); + state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); state.set_cache_guid(CacheGuidForSuffix(kLocalSuffix)); state.set_encryption_key_name(encryption_key_name); return state; @@ -477,8 +478,9 @@ ON_CALL(mock_processor_, ModelReadyToSync) .WillByDefault([this](std::unique_ptr<MetadataBatch> batch) { ON_CALL(mock_processor_, IsTrackingMetadata()) - .WillByDefault( - Return(batch->GetModelTypeState().initial_sync_done())); + .WillByDefault(Return( + batch->GetModelTypeState().initial_sync_state() == + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE)); }); }
diff --git a/components/sync_preferences/pref_model_associator.cc b/components/sync_preferences/pref_model_associator.cc index 473ede9..fc64d909 100644 --- a/components/sync_preferences/pref_model_associator.cc +++ b/components/sync_preferences/pref_model_associator.cc
@@ -540,7 +540,7 @@ base::UmaHistogramSparse("Sync.SyncablePrefValueChanged", client_->GetSyncablePrefsDatabase() .GetSyncablePrefMetadata(name) - ->syncable_pref_id_); + ->syncable_pref_id()); } sync_processor_->ProcessSyncChanges(FROM_HERE, changes);
diff --git a/components/sync_preferences/syncable_prefs_database.cc b/components/sync_preferences/syncable_prefs_database.cc index 531fd34e..ca0905c 100644 --- a/components/sync_preferences/syncable_prefs_database.cc +++ b/components/sync_preferences/syncable_prefs_database.cc
@@ -6,6 +6,10 @@ namespace sync_preferences { +SyncablePrefMetadata::SyncablePrefMetadata(int syncable_pref_id, + syncer::ModelType model_type) + : syncable_pref_id_(syncable_pref_id), model_type_(model_type) {} + bool SyncablePrefsDatabase::IsPreferenceSyncable( const std::string& pref_name) const { return GetSyncablePrefMetadata(pref_name).has_value();
diff --git a/components/sync_preferences/syncable_prefs_database.h b/components/sync_preferences/syncable_prefs_database.h index 59bd81a5..35c035c 100644 --- a/components/sync_preferences/syncable_prefs_database.h +++ b/components/sync_preferences/syncable_prefs_database.h
@@ -7,13 +7,28 @@ #include <string> +#include "components/sync/base/model_type.h" #include "third_party/abseil-cpp/absl/types/optional.h" namespace sync_preferences { -struct SyncablePrefMetadata { - // A unique ID corresponding to each syncable preference. +// This class represents the metadata corresponding to a syncable preference. +class SyncablePrefMetadata { + public: + // TODO(crbug.com/1424774): Remove the default for `model_type` once the + // database has been populated. + // Note: Not marking explicit to allow construction from initializer-list. + SyncablePrefMetadata(int syncable_pref_id, + syncer::ModelType model_type = syncer::UNSPECIFIED); + // Returns the unique ID corresponding to the syncable preference. + int syncable_pref_id() const { return syncable_pref_id_; } + // Returns the model type of the pref, i.e. PREFERENCES, PRIORITY_PREFERENCES, + // OS_PREFERENCES or OS_PRIORITY_PREFERENCES. + syncer::ModelType model_type() const { return model_type_; } + + private: int syncable_pref_id_; + syncer::ModelType model_type_; }; // This class provides an interface to define the list of syncable
diff --git a/components/sync_sessions/session_sync_bridge_unittest.cc b/components/sync_sessions/session_sync_bridge_unittest.cc index 9e538ea..0e0b911 100644 --- a/components/sync_sessions/session_sync_bridge_unittest.cc +++ b/components/sync_sessions/session_sync_bridge_unittest.cc
@@ -211,7 +211,8 @@ loop.Run(); sync_pb::ModelTypeState state; - state.set_initial_sync_done(true); + state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); state.set_cache_guid(request.cache_guid); state.mutable_progress_marker()->set_data_type_id( GetSpecificsFieldNumberFromModelType(syncer::SESSIONS)); @@ -902,7 +903,8 @@ // Mimic a commit completing for the initial sync. ASSERT_TRUE(real_processor()->HasLocalChangesForTest()); sync_pb::ModelTypeState state; - state.set_initial_sync_done(true); + state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); real_processor()->OnCommitCompleted( state, {CreateSuccessResponse(kLocalCacheGuid), @@ -1235,7 +1237,8 @@ StartSyncing({foreign_header, foreign_tab}); sync_pb::ModelTypeState state; - state.set_initial_sync_done(true); + state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); // Mimic receiving a commit ack for the local header entity, to later be able // to verify HasLocalChangesForTest() without interferences from the local @@ -1359,7 +1362,8 @@ // Mimic receiving a commit ack for both the tab and the header entity, // because otherwise it will be treated as conflict, and then local wins. sync_pb::ModelTypeState state; - state.set_initial_sync_done(true); + state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); real_processor()->OnCommitCompleted( state, {CreateSuccessResponse(tab_client_tag1), @@ -1532,7 +1536,8 @@ // Mimic receiving an empty list of remote updates. sync_pb::ModelTypeState state; - state.set_initial_sync_done(true); + state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); real_processor()->OnUpdateReceived(state, {}, /*gc_directive=*/absl::nullopt); } @@ -1552,7 +1557,8 @@ // Construct a remote update. sync_pb::ModelTypeState state; - state.set_initial_sync_done(true); + state.set_initial_sync_state( + sync_pb::ModelTypeState_InitialSyncState_INITIAL_SYNC_DONE); syncer::UpdateResponseDataList updates; // Two entities belong to a recent session. updates.push_back(SpecificsToUpdateResponse(
diff --git a/components/variations/field_trial_config/field_trial_util_unittest.cc b/components/variations/field_trial_config/field_trial_util_unittest.cc index ca39dec..9bcf0a16 100644 --- a/components/variations/field_trial_config/field_trial_util_unittest.cc +++ b/components/variations/field_trial_config/field_trial_util_unittest.cc
@@ -77,6 +77,8 @@ return false; } bool IsEnterprise() override { return false; } + void RemoveGoogleGroupsFromPrefsForDeletedProfiles( + PrefService* local_state) override {} private: // VariationsServiceClient:
diff --git a/components/variations/service/variations_field_trial_creator.cc b/components/variations/service/variations_field_trial_creator.cc index 355fdde..022d86a 100644 --- a/components/variations/service/variations_field_trial_creator.cc +++ b/components/variations/service/variations_field_trial_creator.cc
@@ -587,6 +587,15 @@ base::flat_set<uint64_t> VariationsFieldTrialCreator::GetGoogleGroupsFromPrefs() { + // Before using Google groups information, ensure that there any information + // for already-deleted profiles has been removed. + // + // TODO(b/264838828): move this call to be done in SetUpFieldTrials(). The + // reason it is currently done here is simply to allow a safer gradual + // rollout of the initial feature, as this code is only run if there is at + // least one study that filters by Google group membership. + client_->RemoveGoogleGroupsFromPrefsForDeletedProfiles(local_state()); + base::flat_set<uint64_t> groups = base::flat_set<uint64_t>(); const base::Value::Dict& profiles_dict = @@ -620,8 +629,9 @@ base::TimeTicks start_time = base::TimeTicks::Now(); const base::Version& current_version = version_info::GetVersion(); - if (!current_version.IsValid()) + if (!current_version.IsValid()) { return false; + } std::unique_ptr<ClientFilterableState> client_filterable_state = GetClientFilterableStateForVersion(current_version);
diff --git a/components/variations/service/variations_field_trial_creator_unittest.cc b/components/variations/service/variations_field_trial_creator_unittest.cc index 17abcb6a..99176f4 100644 --- a/components/variations/service/variations_field_trial_creator_unittest.cc +++ b/components/variations/service/variations_field_trial_creator_unittest.cc
@@ -200,6 +200,8 @@ return true; } bool IsEnterprise() override { return false; } + void RemoveGoogleGroupsFromPrefsForDeletedProfiles( + PrefService* local_state) override {} private: // VariationsServiceClient: @@ -212,7 +214,10 @@ class MockVariationsServiceClient : public TestVariationsServiceClient { public: - MOCK_METHOD(version_info::Channel, GetChannel, (), (override)); + MOCK_METHOD(void, + RemoveGoogleGroupsFromPrefsForDeletedProfiles, + (PrefService*), + (override)); }; class TestVariationsSeedStore : public VariationsSeedStore { @@ -1387,4 +1392,15 @@ base::flat_set<uint64_t>()); } +TEST_F(FieldTrialCreatorTest, GetGoogleGroupsFromPrefsClearsDeletedProfiles) { + NiceMock<MockVariationsServiceClient> variations_service_client; + NiceMock<MockSafeSeedManager> safe_seed_manager(local_state()); + TestVariationsFieldTrialCreator field_trial_creator( + local_state(), &variations_service_client, &safe_seed_manager); + + EXPECT_CALL(variations_service_client, + RemoveGoogleGroupsFromPrefsForDeletedProfiles(local_state())); + field_trial_creator.GetGoogleGroupsFromPrefs(); +} + } // namespace variations
diff --git a/components/variations/service/variations_service_client.h b/components/variations/service/variations_service_client.h index 48dae36..624a528 100644 --- a/components/variations/service/variations_service_client.h +++ b/components/variations/service/variations_service_client.h
@@ -22,6 +22,8 @@ class NetworkTimeTracker; } +class PrefService; + namespace variations { // An abstraction of operations that depend on the embedder's (e.g. Chrome) @@ -72,6 +74,13 @@ // non finch-filtered study to analyze the finch-filtered launch potential. virtual bool IsEnterprise() = 0; + // Removes stored Google Groups variations information for deleted profiles. + // Must be called at startup, prior to the variations Google Groups being + // read. + // This is a no-op on platforms that do not support multiple profiles. + virtual void RemoveGoogleGroupsFromPrefsForDeletedProfiles( + PrefService* local_state) = 0; + private: // Gets the channel of the embedder. But all variations callers should use // |GetChannelForVariations()| instead.
diff --git a/components/variations/service/variations_service_unittest.cc b/components/variations/service/variations_service_unittest.cc index 15d430b8..be8601aa8 100644 --- a/components/variations/service/variations_service_unittest.cc +++ b/components/variations/service/variations_service_unittest.cc
@@ -98,6 +98,8 @@ return true; } bool IsEnterprise() override { return false; } + void RemoveGoogleGroupsFromPrefsForDeletedProfiles( + PrefService* local_state) override {} void set_restrict_parameter(const std::string& value) { restrict_parameter_ = value;
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn index e517f51..b9067fa 100644 --- a/content/browser/BUILD.gn +++ b/content/browser/BUILD.gn
@@ -1185,6 +1185,10 @@ "loader/download_utils_impl.h", "loader/file_url_loader_factory.cc", "loader/file_url_loader_factory.h", + "loader/keep_alive_url_loader.cc", + "loader/keep_alive_url_loader.h", + "loader/keep_alive_url_loader_service.cc", + "loader/keep_alive_url_loader_service.h", "loader/merkle_integrity_source_stream.cc", "loader/merkle_integrity_source_stream.h", "loader/navigation_early_hints_manager.cc",
diff --git a/content/browser/loader/keep_alive_url_loader.cc b/content/browser/loader/keep_alive_url_loader.cc new file mode 100644 index 0000000..ca316e2 --- /dev/null +++ b/content/browser/loader/keep_alive_url_loader.cc
@@ -0,0 +1,251 @@ +// 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 "content/browser/loader/keep_alive_url_loader.h" + +#include "base/functional/bind.h" +#include "base/trace_event/trace_event.h" +#include "content/public/browser/browser_thread.h" +#include "net/base/load_flags.h" +#include "net/http/http_request_headers.h" +#include "services/network/public/cpp/shared_url_loader_factory.h" +#include "services/network/public/mojom/early_hints.mojom.h" +#include "services/network/public/mojom/fetch_api.mojom-shared.h" +#include "third_party/blink/public/common/features.h" + +namespace content { + +KeepAliveURLLoader::KeepAliveURLLoader( + int32_t request_id, + uint32_t options, + const network::ResourceRequest& resource_request, + mojo::PendingRemote<network::mojom::URLLoaderClient> forwarding_client, + const net::MutableNetworkTrafficAnnotationTag& traffic_annotation, + scoped_refptr<network::SharedURLLoaderFactory> network_loader_factory, + base::PassKey<KeepAliveURLLoaderService>) + : request_id_(request_id), + forwarding_client_(std::move(forwarding_client)) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + DCHECK(network_loader_factory); + DCHECK(!resource_request.trusted_params); + TRACE_EVENT2("loading", "KeepAliveURLLoader::KeepAliveURLLoader", + "request_id", request_id_, "url", resource_request.url); + TRACE_EVENT_NESTABLE_ASYNC_BEGIN1("loading", "KeepAliveURLLoader", + request_id_, "url", resource_request.url); + + // Asks the network service to create a URL loader with passed in params. + network_loader_factory->CreateLoaderAndStart( + loader_.BindNewPipeAndPassReceiver(), request_id, options, + resource_request, loader_receiver_.BindNewPipeAndPassRemote(), + traffic_annotation); + loader_receiver_.set_disconnect_handler(base::BindOnce( + &KeepAliveURLLoader::OnNetworkConnectionError, base::Unretained(this))); + forwarding_client_.set_disconnect_handler(base::BindOnce( + &KeepAliveURLLoader::OnRendererConnectionError, base::Unretained(this))); +} + +KeepAliveURLLoader::~KeepAliveURLLoader() { + TRACE_EVENT1("loading", "KeepAliveURLLoader::~KeepAliveURLLoader", + "request_id", request_id_); + TRACE_EVENT_NESTABLE_ASYNC_END0("loading", "KeepAliveURLLoader", request_id_); +} + +void KeepAliveURLLoader::set_on_delete_callback( + OnDeleteCallback on_delete_callback) { + on_delete_callback_ = std::move(on_delete_callback); +} + +void KeepAliveURLLoader::FollowRedirect( + const std::vector<std::string>& removed_headers, + const net::HttpRequestHeaders& modified_headers, + const net::HttpRequestHeaders& modified_cors_exempt_headers, + const absl::optional<GURL>& new_url) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + DCHECK(loader_); + TRACE_EVENT2("loading", "KeepAliveURLLoader::FollowRedirect", "request_id", + request_id_, "url", new_url); + + // Forwards the action to `loader_` in the network service. + loader_->FollowRedirect(removed_headers, modified_headers, + modified_cors_exempt_headers, new_url); +} + +void KeepAliveURLLoader::SetPriority(net::RequestPriority priority, + int intra_priority_value) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + DCHECK(loader_); + TRACE_EVENT1("loading", "KeepAliveURLLoader::SetPriority", "request_id", + request_id_); + + // Forwards the action to `loader_` in the network service. + loader_->SetPriority(priority, intra_priority_value); +} + +void KeepAliveURLLoader::PauseReadingBodyFromNet() { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + DCHECK(loader_); + TRACE_EVENT1("loading", "KeepAliveURLLoader::FollowRedirect", "request_id", + request_id_); + + // Forwards the action to `loader_` in the network service. + loader_->PauseReadingBodyFromNet(); +} + +void KeepAliveURLLoader::ResumeReadingBodyFromNet() { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + DCHECK(loader_); + TRACE_EVENT1("loading", "KeepAliveURLLoader::ResumeReadingBodyFromNet", + "request_id", request_id_); + + // Forwards the action to `loader_` in the network service. + loader_->ResumeReadingBodyFromNet(); +} + +void KeepAliveURLLoader::OnReceiveEarlyHints( + network::mojom::EarlyHintsPtr early_hints) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + TRACE_EVENT1("loading", "KeepAliveURLLoader::OnReceiveEarlyHints", + "request_id", request_id_); + + if (forwarding_client_.is_bound() && forwarding_client_.is_connected()) { + // The renderer is alive, forwards the action. + forwarding_client_->OnReceiveEarlyHints(std::move(early_hints)); + return; + } + + // TODO(crbug.com/1356128): Handle in browser process. +} + +void KeepAliveURLLoader::OnReceiveResponse( + network::mojom::URLResponseHeadPtr response, + mojo::ScopedDataPipeConsumerHandle body, + absl::optional<mojo_base::BigBuffer> cached_metadata) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + TRACE_EVENT1("loading", "KeepAliveURLLoader::OnReceiveResponse", "request_id", + request_id_); + + has_received_response_ = true; + // TODO(crbug.com/1424731): The renderer might exit before `OnReceiveRedirect` + // or `OnReceiveResponse` is called, or during their execution. In such case, + // `forwarding_client_` can't finish response handling. Figure out a way to + // negotiate shutdown timing via RenderFrameHostImpl::OnUnloadAck() and + // invalidate `forwarding_client_`. + if (forwarding_client_.is_bound() && forwarding_client_.is_connected()) { + // The renderer is alive, forwards the action. + // The receiver may fail to finish reading `response`, so response caching + // is not guaranteed. + forwarding_client_->OnReceiveResponse(std::move(response), std::move(body), + std::move(cached_metadata)); + // TODO(crbug.com/1422645): Ensure that attributionsrc response handling is + // migrated to browser process. + return; + } + + // No need to wait for `OnComplete()`. + // This loader should be deleted immediately to avoid hanged requests taking + // up resources. + std::move(on_delete_callback_).Run(); +} + +void KeepAliveURLLoader::OnReceiveRedirect( + const net::RedirectInfo& redirect_info, + network::mojom::URLResponseHeadPtr head) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + TRACE_EVENT1("loading", "KeepAliveURLLoader::OnReceiveRedirect", "request_id", + request_id_); + + // TODO(crbug.com/1424731): The renderer might exit before `OnReceiveRedirect` + // or `OnReceiveResponse` is called, or during their execution. In such case, + // `forwarding_client_` can't finish response handling. Figure out a way to + // negotiate shutdown timing via RenderFrameHostImpl::OnUnloadAck() and + // invalidate `forwarding_client_`. + if (forwarding_client_.is_bound() && forwarding_client_.is_connected()) { + // The renderer is alive, forwards the action. + // Redirects must be handled by the renderer so that it know what URL the + // response come from when parsing responses. + forwarding_client_->OnReceiveRedirect(redirect_info, std::move(head)); + return; + } + + // TODO(crbug.com/1356128): Replicates all existing behaviors from all of + // `blink::URLLoaderThrottles`. + // TODO(crbug.com/1356128): Run security checks, including CSP, mixed-content, + // and SafeBrowsing. + // TODO(crbug.com/1356128): Ask the network service to follow the redirect. +} + +void KeepAliveURLLoader::OnUploadProgress(int64_t current_position, + int64_t total_size, + base::OnceCallback<void()> callback) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + TRACE_EVENT1("loading", "KeepAliveURLLoader::OnUploadProgress", "request_id", + request_id_); + + if (forwarding_client_.is_bound() && forwarding_client_.is_connected()) { + // The renderer is alive, forwards the action. + forwarding_client_->OnUploadProgress(current_position, total_size, + std::move(callback)); + return; + } + + // TODO(crbug.com/1356128): Handle in the browser process. +} + +void KeepAliveURLLoader::OnTransferSizeUpdated(int32_t transfer_size_diff) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + TRACE_EVENT1("loading", "KeepAliveURLLoader::OnTransferSizeUpdated", + "request_id", request_id_); + + if (forwarding_client_.is_bound() && forwarding_client_.is_connected()) { + // The renderer is alive, forwards the action. + forwarding_client_->OnTransferSizeUpdated(transfer_size_diff); + return; + } + + // TODO(crbug.com/1356128): Handle in the browser process. +} + +void KeepAliveURLLoader::OnComplete( + const network::URLLoaderCompletionStatus& completion_status) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + TRACE_EVENT1("loading", "KeepAliveURLLoader::OnComplete", "request_id", + request_id_); + + if (forwarding_client_.is_bound() && forwarding_client_.is_connected()) { + // The renderer is alive, forwards the action. + forwarding_client_->OnComplete(completion_status); + return; + } + + // TODO(crbug.com/1356128): Handle in the browser process. +} + +void KeepAliveURLLoader::OnNetworkConnectionError() { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + TRACE_EVENT1("loading", "KeepAliveURLLoader::OnNetworkConnectionError", + "request_id", request_id_); + + // The network loader has an error; we should let the client know it's + // closed by dropping this, which will in turn make this loader destroyed. + forwarding_client_.reset(); +} + +void KeepAliveURLLoader::OnRendererConnectionError() { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + TRACE_EVENT1("loading", "KeepAliveURLLoader::OnRendererConnectionError", + "request_id", request_id_); + + if (has_received_response_) { + // No need to wait for `OnComplete()`. + std::move(on_delete_callback_).Run(); + return; + } + // Otherwise, let this loader continue to handle responses. + forwarding_client_.reset(); + // TODO(crbug.com/1424731): When we reach here while the renderer is + // processing a redirect, we should take over the redirect handling in the + // browser process. See TODOs in `OnReceiveRedirect()`. +} + +} // namespace content
diff --git a/content/browser/loader/keep_alive_url_loader.h b/content/browser/loader/keep_alive_url_loader.h new file mode 100644 index 0000000..03f39a748 --- /dev/null +++ b/content/browser/loader/keep_alive_url_loader.h
@@ -0,0 +1,149 @@ +// 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 CONTENT_BROWSER_LOADER_KEEP_ALIVE_URL_LOADER_H_ +#define CONTENT_BROWSER_LOADER_KEEP_ALIVE_URL_LOADER_H_ + +#include <stdint.h> + +#include "base/functional/callback.h" +#include "base/types/pass_key.h" +#include "content/common/content_export.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/receiver_set.h" +#include "mojo/public/cpp/bindings/remote.h" +#include "net/traffic_annotation/network_traffic_annotation.h" +#include "services/network/public/cpp/resource_request.h" +#include "services/network/public/mojom/url_loader.mojom.h" +#include "services/network/public/mojom/url_response_head.mojom.h" +#include "url/gurl.h" + +namespace network { +class SharedURLLoaderFactory; +} + +namespace content { + +class KeepAliveURLLoaderService; + +// A URLLoader for loading a fetch keepalive request via the browser process, +// including both `fetch(..., {keepalive: true})` and `navigator.sendBeacon()` +// requests. +// +// To load a keepalive request initiated by a renderer, this loader performs the +// following logic: +// 1. Forwards all request loading actions received from a remote of +// `mojom::URLLoader` in a renderer to a receiver of `mojom::URLLoader` in +// the network service connected by `loader_`. +// 2. Receives request loading results from the network service, i.e. the remote +// of `loader_receiver_`. The URLLoaderClient overrides will be triggered to +// process results: +// A. For redirect, perform security checks and ask the network service to +// follow all subsequent redirects. +// B. For non-redirect, +// a. If the renderer is still alive, i.e. `forwarding_client_` is +// connected, ask it to process the results instead. +// b. If the renderer is dead, drop the results. +// +// Instances of this class must only be constructed and run within the browser +// process, such that the lifetime of the corresponding requests can be +// maintained by the browser instead of by a renderer. +// +// Design Doc: +// https://docs.google.com/document/d/1ZzxMMBvpqn8VZBZKnb7Go8TWjnrGcXuLS_USwVVRUvY/edit# +class CONTENT_EXPORT KeepAliveURLLoader + : public network::mojom::URLLoader, + public network::mojom::URLLoaderClient { + public: + // Deletes this loader immediately. + using OnDeleteCallback = base::OnceCallback<void(void)>; + + // Must only be constructed by a `KeepAliveURLLoaderService`. + // `resource_request` must be a keepalive request from a renderer. + // `forwarding_client` should handle request loading results from the network + // service if it is still connected. + // `delete_callback` is a callback to delete this object. + KeepAliveURLLoader( + int32_t request_id, + uint32_t options, + const network::ResourceRequest& resource_request, + mojo::PendingRemote<network::mojom::URLLoaderClient> forwarding_client, + const net::MutableNetworkTrafficAnnotationTag& traffic_annotation, + scoped_refptr<network::SharedURLLoaderFactory> network_loader_factory, + base::PassKey<KeepAliveURLLoaderService>); + ~KeepAliveURLLoader() override; + + // Not copyable. + KeepAliveURLLoader(const KeepAliveURLLoader&) = delete; + KeepAliveURLLoader& operator=(const KeepAliveURLLoader&) = delete; + + // Sets the callback to be invoked on errors which require closing the pipe. + // Callback will also immediately delete `this`. + // Not an argument to constructor because the Mojo ReceiverId needs to be + // bound to the callback, but can only get that after creating the worklet. + // Must be called immediately after creating a KeepAliveLoader. + void set_on_delete_callback(OnDeleteCallback on_delete_callback); + + private: + // Receives actions from renderer. + // `network::mojom::URLLoader` overrides: + void FollowRedirect( + const std::vector<std::string>& removed_headers, + const net::HttpRequestHeaders& modified_headers, + const net::HttpRequestHeaders& modified_cors_exempt_headers, + const absl::optional<GURL>& new_url) override; + void SetPriority(net::RequestPriority priority, + int intra_priority_value) override; + void PauseReadingBodyFromNet() override; + void ResumeReadingBodyFromNet() override; + + // Receives actions from network service. + // `network::mojom::URLLoaderClient` overrides: + void OnReceiveEarlyHints(network::mojom::EarlyHintsPtr early_hints) override; + void OnReceiveResponse( + network::mojom::URLResponseHeadPtr head, + mojo::ScopedDataPipeConsumerHandle body, + absl::optional<mojo_base::BigBuffer> cached_metadata) override; + void OnReceiveRedirect(const net::RedirectInfo& redirect_info, + network::mojom::URLResponseHeadPtr head) override; + void OnUploadProgress(int64_t current_position, + int64_t total_size, + base::OnceCallback<void()> callback) override; + void OnTransferSizeUpdated(int32_t transfer_size_diff) override; + void OnComplete( + const network::URLLoaderCompletionStatus& completion_status) override; + + void OnNetworkConnectionError(); + void OnRendererConnectionError(); + + // The ID to identify the request being loaded by this loader. + int32_t request_id_; + + // Connection with the network service: + // Connects to the receiver network::URLLoader implemented in the network + // service that performs actual request loading. + mojo::Remote<network::mojom::URLLoader> loader_; + // Connection with the network service: + // Receives the result of the request loaded by `loader_` from the network + // service. + mojo::Receiver<network::mojom::URLLoaderClient> loader_receiver_{this}; + + // Connection with a renderer: + // Connects to the receiver URLLoaderClient implemented in the renderer. + // It is the client to forward the URLLoader response from the network + // service to. + // It may be disconnected if the renderer is dead. + mojo::Remote<network::mojom::URLLoaderClient> forwarding_client_; + + // A callback to delete this loader object and clean up resource. + OnDeleteCallback on_delete_callback_; + + // Whether `OnReceiveResponse()` has been called. + bool has_received_response_ = false; +}; + +} // namespace content + +#endif // CONTENT_BROWSER_LOADER_KEEP_ALIVE_URL_LOADER_H_
diff --git a/content/browser/loader/keep_alive_url_loader_service.cc b/content/browser/loader/keep_alive_url_loader_service.cc new file mode 100644 index 0000000..ad722b6 --- /dev/null +++ b/content/browser/loader/keep_alive_url_loader_service.cc
@@ -0,0 +1,202 @@ +// 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 "content/browser/loader/keep_alive_url_loader_service.h" + +#include "base/functional/bind.h" +#include "base/memory/raw_ptr.h" +#include "base/memory/ref_counted.h" +#include "base/trace_event/trace_event.h" +#include "content/browser/loader/keep_alive_url_loader.h" +#include "content/browser/url_loader_factory_getter.h" +#include "content/public/browser/browser_thread.h" +#include "mojo/public/cpp/bindings/message.h" +#include "mojo/public/cpp/bindings/remote.h" +#include "mojo/public/cpp/bindings/self_owned_receiver.h" +#include "services/network/public/cpp/shared_url_loader_factory.h" +#include "third_party/blink/public/common/features.h" + +namespace content { +namespace { + +// A Context for the receiver of a KeepAliveURLLoaderFactory connection between +// a renderer and the browser. +// +// See `mojo::ReceiverSetBase` for more details. +struct BindContext { + explicit BindContext(scoped_refptr<network::SharedURLLoaderFactory> factory) + : factory(factory) {} + + explicit BindContext(const std::unique_ptr<BindContext>& other) + : factory(other->factory) {} + + ~BindContext() = default; + + // A refptr to the factory to use for the requests initiated from this + // context. + scoped_refptr<network::SharedURLLoaderFactory> factory; + // This must be the last member. + base::WeakPtrFactory<BindContext> weak_ptr_factory{this}; +}; +} // namespace + +// A URLLoaderFactory to handle fetch keepalive requests. +// +// This factory can handle requests from multiple remotes of URLLoaderFactory. +// Users should call `BindFactory()` first to register a pending receiver with +// this factory. +// +// On requested by a remote, i.e. calling +// `network::mojom::URLLoaderFactory::CreateLoaderAndStart()`, this factory will +// create a KeepAliveURLLoader to load a keepalive request. The loader is held +// by the `KeepAliveURLLoaderService` owning this factory. +// +// This factory must be run in the browser process. +// +// See the "Implementation Details" section of the design doc +// https://docs.google.com/document/d/1ZzxMMBvpqn8VZBZKnb7Go8TWjnrGcXuLS_USwVVRUvY/edit# +class KeepAliveURLLoaderService::KeepAliveURLLoaderFactory final + : public network::mojom::URLLoaderFactory { + public: + explicit KeepAliveURLLoaderFactory(KeepAliveURLLoaderService* service) + : service_(service) { + DCHECK(service_); + } + ~KeepAliveURLLoaderFactory() override = default; + + // Not copyable. + KeepAliveURLLoaderFactory(const KeepAliveURLLoaderFactory&) = delete; + KeepAliveURLLoaderFactory& operator=(const KeepAliveURLLoaderFactory&) = + delete; + + // Creates a `BindContext` to hold a refptr to + // network::SharedURLLoaderFactory, which is constructed with + // `pending_factory`, and then bound with `receiver`. + void BindFactory( + mojo::PendingReceiver<network::mojom::URLLoaderFactory> receiver, + std::unique_ptr<network::PendingSharedURLLoaderFactory> pending_factory); + + // `network::mojom::URLLoaderFactory` overrides: + void CreateLoaderAndStart( + mojo::PendingReceiver<network::mojom::URLLoader> receiver, + int32_t request_id, + uint32_t options, + const network::ResourceRequest& resource_request_in, + mojo::PendingRemote<network::mojom::URLLoaderClient> client, + const net::MutableNetworkTrafficAnnotationTag& traffic_annotation) + override; + void Clone(mojo::PendingReceiver<network::mojom::URLLoaderFactory> receiver) + override; + + private: + // Guaranteed to exist, as `service_` owns this object. + raw_ptr<KeepAliveURLLoaderService> service_; + + // Receives `network::mojom::URLLoaderFactory` requests from renderers. + mojo::ReceiverSet<network::mojom::URLLoaderFactory, + std::unique_ptr<BindContext>> + loader_factory_receivers_; +}; + +void KeepAliveURLLoaderService::KeepAliveURLLoaderFactory::BindFactory( + mojo::PendingReceiver<network::mojom::URLLoaderFactory> receiver, + std::unique_ptr<network::PendingSharedURLLoaderFactory> pending_factory) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + TRACE_EVENT0("loading", "KeepAliveURLLoaderFactory::BindFactory"); + + auto factory_bundle = + network::SharedURLLoaderFactory::Create(std::move(pending_factory)); + loader_factory_receivers_.Add(this, std::move(receiver), + std::make_unique<BindContext>(factory_bundle)); +} + +void KeepAliveURLLoaderService::KeepAliveURLLoaderFactory::CreateLoaderAndStart( + mojo::PendingReceiver<network::mojom::URLLoader> receiver, + int32_t request_id, + uint32_t options, + const network::ResourceRequest& resource_request, + mojo::PendingRemote<network::mojom::URLLoaderClient> client, + const net::MutableNetworkTrafficAnnotationTag& traffic_annotation) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + TRACE_EVENT1("loading", "KeepAliveURLLoaderFactory::CreateLoaderAndStart", + "request_id", request_id); + + if (!resource_request.keepalive) { + loader_factory_receivers_.ReportBadMessage( + "Unexpected `resource_request` in " + "KeepAliveURLLoaderService::CreateLoaderAndStart(): " + "resource_request.keepalive must be true"); + return; + } + if (resource_request.trusted_params) { + // Must use untrusted URLLoaderFactory. If not, the requesting renderer + // should be aborted. + loader_factory_receivers_.ReportBadMessage( + "Unexpected `resource_request` in " + "KeepAliveURLLoaderService::CreateLoaderAndStart(): " + "resource_request.trusted_params must not be set"); + return; + } + + // Creates a new KeepAliveURLLoader from the current context. + const std::unique_ptr<BindContext>& current_context = + loader_factory_receivers_.current_context(); + // Passes in the pending remote of `client` from a renderer so that `loader` + // can forward response back to the renderer. + auto loader = std::make_unique<KeepAliveURLLoader>( + request_id, options, resource_request, std::move(client), + traffic_annotation, current_context->factory, + base::PassKey<KeepAliveURLLoaderService>()); + // Binds `loader` with the pending `receiver` from a renderer to handle URL + // requests. + auto* raw_loader = loader.get(); + auto receiver_id = service_->loader_receivers_.Add( + raw_loader, std::move(receiver), std::move(loader)); + raw_loader->set_on_delete_callback( + base::BindOnce(&KeepAliveURLLoaderService::RemoveLoader, + base::Unretained(service_), receiver_id)); +} + +void KeepAliveURLLoaderService::KeepAliveURLLoaderFactory::Clone( + mojo::PendingReceiver<network::mojom::URLLoaderFactory> receiver) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + + loader_factory_receivers_.Add( + this, std::move(receiver), + std::make_unique<BindContext>( + loader_factory_receivers_.current_context())); +} + +KeepAliveURLLoaderService::KeepAliveURLLoaderService() { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + + factory_ = + std::make_unique<KeepAliveURLLoaderService::KeepAliveURLLoaderFactory>( + this); +} + +KeepAliveURLLoaderService::~KeepAliveURLLoaderService() = default; + +void KeepAliveURLLoaderService::BindFactory( + mojo::PendingReceiver<network::mojom::URLLoaderFactory> receiver, + std::unique_ptr<network::PendingSharedURLLoaderFactory> pending_factory) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + + factory_->BindFactory(std::move(receiver), std::move(pending_factory)); +} + +void KeepAliveURLLoaderService::RemoveLoader( + mojo::ReceiverId loader_receiver_id) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + TRACE_EVENT1("loading", "KeepAliveURLLoaderService::RemoveLoader", + "loader_id", loader_receiver_id); + + loader_receivers_.Remove(loader_receiver_id); +} + +size_t KeepAliveURLLoaderService::NumLoadersForTesting() const { + return loader_receivers_.size(); +} + +} // namespace content
diff --git a/content/browser/loader/keep_alive_url_loader_service.h b/content/browser/loader/keep_alive_url_loader_service.h new file mode 100644 index 0000000..efb71cd --- /dev/null +++ b/content/browser/loader/keep_alive_url_loader_service.h
@@ -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. + +#ifndef CONTENT_BROWSER_LOADER_KEEP_ALIVE_URL_LOADER_SERVICE_H_ +#define CONTENT_BROWSER_LOADER_KEEP_ALIVE_URL_LOADER_SERVICE_H_ + +#include <memory> + +#include "content/common/content_export.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver_set.h" +#include "services/network/public/mojom/url_loader_factory.mojom.h" +#include "third_party/blink/public/common/loader/url_loader_factory_bundle.h" + +namespace content { + +// A service that stores bound SharedURLLoaderFactory mojo pipes. Every remote +// of the pipes can be used to create a URLLoader that loads fetch keepalive +// requests. The service is responsible for keeping the loaders in +// `loader_receivers_`. +// +// A renderer can ask this service to handle `fetch(..., {keepalive: true})` or +// `navigator.sendBeacon()` requests by using a remote of URLLoaderFactory bound +// to this service by `BindFactory()`, +// +// Handling keepalive requests in this service allows a request to continue even +// if a renderer unloads before completion, i.e. the request is "keepalive". +// +// Design Doc: +// https://docs.google.com/document/d/1ZzxMMBvpqn8VZBZKnb7Go8TWjnrGcXuLS_USwVVRUvY/edit# +class CONTENT_EXPORT KeepAliveURLLoaderService { + public: + explicit KeepAliveURLLoaderService(); + ~KeepAliveURLLoaderService(); + + // Not Copyable. + KeepAliveURLLoaderService(const KeepAliveURLLoaderService&) = delete; + KeepAliveURLLoaderService& operator=(const KeepAliveURLLoaderService&) = + delete; + + // Binds the pending `receiver` with this service, using `pending_factory`. + // + // The remote of `receiver` can be passed to another process, i.e. renderer, + // to handle fetch keepalive requests. + void BindFactory( + mojo::PendingReceiver<network::mojom::URLLoaderFactory> receiver, + std::unique_ptr<network::PendingSharedURLLoaderFactory> pending_factory); + + // For testing only: + size_t NumLoadersForTesting() const; + + private: + class KeepAliveURLLoaderFactory; + + // Removes the loader receiver held by `loader_receivers_`. + void RemoveLoader(mojo::ReceiverId loader_receiver_id); + + // Many-to-one mojo receiver of URLLoaderFactory. + std::unique_ptr<KeepAliveURLLoaderFactory> factory_; + + // Holds all the KeepAliveURLLoader connected with remotes in renderers. + // Each of them corresponds to the handling of one pending keepalive request. + mojo::ReceiverSet<network::mojom::URLLoader, + std::unique_ptr<network::mojom::URLLoader>> + loader_receivers_; +}; + +} // namespace content + +#endif // CONTENT_BROWSER_LOADER_KEEP_ALIVE_URL_LOADER_SERVICE_H_
diff --git a/content/browser/loader/keep_alive_url_loader_service_unittest.cc b/content/browser/loader/keep_alive_url_loader_service_unittest.cc new file mode 100644 index 0000000..7eff454 --- /dev/null +++ b/content/browser/loader/keep_alive_url_loader_service_unittest.cc
@@ -0,0 +1,577 @@ +// 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 "content/browser/loader/keep_alive_url_loader_service.h" + +#include <utility> +#include <vector> + +#include "base/strings/stringprintf.h" +#include "base/test/bind.h" +#include "content/public/browser/navigation_entry.h" +#include "content/public/test/test_utils.h" +#include "content/test/test_render_view_host.h" +#include "mojo/public/cpp/system/functions.h" +#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" +#include "services/network/public/cpp/parsed_headers.h" +#include "services/network/public/cpp/resource_request.h" +#include "services/network/public/cpp/wrapper_shared_url_loader_factory.h" +#include "services/network/public/mojom/early_hints.mojom.h" +#include "services/network/public/mojom/ip_address_space.mojom.h" +#include "services/network/public/mojom/referrer_policy.mojom.h" +#include "services/network/public/mojom/url_response_head.mojom.h" +#include "services/network/test/test_url_loader_factory.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace content { +namespace { + +using testing::_; +using testing::Eq; +using testing::WithArg; + +constexpr char kTestRequestUrl[] = "https://example.test"; +constexpr char kTestResponseHeaderName[] = "My-Test-Header"; +constexpr char kTestResponseHeaderValue[] = "my-test-value"; + +// Mock a receiver URLLoaderClient that may exist in renderer. +class MockReceiverURLLoaderClient : public network::mojom::URLLoaderClient { + public: + MockReceiverURLLoaderClient() = default; + MockReceiverURLLoaderClient(const MockReceiverURLLoaderClient&) = delete; + MockReceiverURLLoaderClient& operator=(const MockReceiverURLLoaderClient&) = + delete; + ~MockReceiverURLLoaderClient() override { + if (receiver_.is_bound()) { + // Flush the pipe to make sure there aren't any lingering events. + receiver_.FlushForTesting(); + } + } + + mojo::PendingRemote<network::mojom::URLLoaderClient> + BindNewPipeAndPassRemote() { + return receiver_.BindNewPipeAndPassRemote(); + } + + // Note that this also unbinds the receiver. + void ResetReceiver() { receiver_.reset(); } + + // `network::mojom::URLLoaderClient` overrides: + MOCK_METHOD1(OnReceiveEarlyHints, void(network::mojom::EarlyHintsPtr)); + MOCK_METHOD3(OnReceiveResponse, + void(network::mojom::URLResponseHeadPtr, + mojo::ScopedDataPipeConsumerHandle, + absl::optional<mojo_base::BigBuffer>)); + MOCK_METHOD2(OnReceiveRedirect, + void(const net::RedirectInfo&, + network::mojom::URLResponseHeadPtr)); + MOCK_METHOD3(OnUploadProgress, + void(int64_t, int64_t, base::OnceCallback<void()>)); + MOCK_METHOD1(OnTransferSizeUpdated, void(int32_t)); + MOCK_METHOD1(OnComplete, void(const network::URLLoaderCompletionStatus&)); + + private: + mojo::Receiver<network::mojom::URLLoaderClient> receiver_{this}; +}; + +// Fakes a URLLoaderFactory that may exist in renderer, which only delegates to +// `remote_url_loader_factory`. +class FakeRemoteURLLoaderFactory { + public: + FakeRemoteURLLoaderFactory() = default; + FakeRemoteURLLoaderFactory(const FakeRemoteURLLoaderFactory&) = delete; + FakeRemoteURLLoaderFactory& operator=(const FakeRemoteURLLoaderFactory&) = + delete; + ~FakeRemoteURLLoaderFactory() = default; + + mojo::PendingReceiver<network::mojom::URLLoaderFactory> + BindNewPipeAndPassReceiver() { + return remote_url_loader_factory.BindNewPipeAndPassReceiver(); + } + + // Binds `remote_url_loader` to a new URLLoader. + void CreateLoaderAndStart( + const network::ResourceRequest& request, + mojo::PendingRemote<network::mojom::URLLoaderClient> client) { + remote_url_loader_factory->CreateLoaderAndStart( + remote_url_loader.BindNewPipeAndPassReceiver(), + /*request_id=*/1, /*options=*/0, request, std::move(client), + net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS)); + remote_url_loader_factory.FlushForTesting(); + ASSERT_TRUE(remote_url_loader.is_connected()); + } + + bool is_remote_url_loader_connected() { + return remote_url_loader.is_connected(); + } + + private: + mojo::Remote<network::mojom::URLLoaderFactory> remote_url_loader_factory; + mojo::Remote<network::mojom::URLLoader> remote_url_loader; +}; + +// Returns true if `arg` has a header of the given `name` and `value`. +// `arg` is an `network::mojom::URLResponseHeadPtr`. +MATCHER_P2(ResponseHasHeader, + name, + value, + base::StringPrintf("Response has %sheader[%s=%s]", + negation ? "no " : "", + name, + value)) { + return arg->headers->HasHeaderValue(name, value); +} + +} // namespace + +class KeepAliveURLLoaderServiceTest : public RenderViewHostTestHarness { + protected: + void SetUp() override { + network_url_loader_factory_ = + std::make_unique<network::TestURLLoaderFactory>(); + // Intercepts Mojo bad-message error. + mojo::SetDefaultProcessErrorHandler( + base::BindLambdaForTesting([&](const std::string& error) { + ASSERT_FALSE(mojo_bad_message_.has_value()); + mojo_bad_message_ = error; + })); + RenderViewHostTestHarness::SetUp(); + } + + void TearDown() override { + network_url_loader_factory_ = nullptr; + loader_service_ = nullptr; + mojo::SetDefaultProcessErrorHandler(base::NullCallback()); + mojo_bad_message_ = absl::nullopt; + RenderViewHostTestHarness::TearDown(); + } + + void ExpectMojoBadMessage(const std::string& message) { + EXPECT_EQ(mojo_bad_message_, message); + } + void ExpectNumPendingRequests(int num_requests) { + EXPECT_EQ(network_url_loader_factory_->NumPending(), num_requests); + } + void ExpectNumKeepAliveURLLoaders(size_t num_loaders) { + EXPECT_EQ(loader_service_->NumLoadersForTesting(), num_loaders); + } + + // Asks KeepAliveURLLoaderService to bind a KeepAliveURLLoaderFactory to the + // given `remote_url_loader_factory`. + // More than one factory can be bound to the same service. + void BindKeepAliveURLLoaderFactory( + FakeRemoteURLLoaderFactory& remote_url_loader_factory) { + if (!loader_service_) { + loader_service_ = std::make_unique<KeepAliveURLLoaderService>(); + } + + mojo::Remote<network::mojom::URLLoaderFactory> factory; + network_url_loader_factory_->Clone(factory.BindNewPipeAndPassReceiver()); + auto pending_factory = + std::make_unique<network::WrapperPendingSharedURLLoaderFactory>( + factory.Unbind()); + + // Remote: `remote_url_loader_factory` + // Receiver: Held in `loader_service_`. + loader_service_->BindFactory( + remote_url_loader_factory.BindNewPipeAndPassReceiver(), + std::move(pending_factory)); + } + + network::ResourceRequest CreateResourceRequest(const GURL& url, + bool keepalive = true, + bool is_trusted = false) { + network::ResourceRequest request; + request.url = url; + request.keepalive = keepalive; + if (is_trusted) { + request.trusted_params = network::ResourceRequest::TrustedParams(); + } + return request; + } + + network::mojom::URLResponseHeadPtr CreateResponseHead( + const std::vector<std::pair<std::string, std::string>>& extra_headers = + {}) { + auto response = network::mojom::URLResponseHead::New(); + response->headers = + base::MakeRefCounted<net::HttpResponseHeaders>("HTTP/1.1 200 OK\n"); + for (const auto& header : extra_headers) { + response->headers->SetHeader(header.first, header.second); + } + return response; + } + + net::RedirectInfo CreateRedirectInfo() { + net::RedirectInfo redirect_info; + redirect_info.new_method = "GET"; + redirect_info.new_url = GURL("https://redirect.test/"); + redirect_info.status_code = 301; + return redirect_info; + } + + network::mojom::EarlyHintsPtr CreateEarlyHints( + const GURL& url, + const std::vector<std::pair<std::string, std::string>>& extra_headers = + {}) { + auto response_headers = + base::MakeRefCounted<net::HttpResponseHeaders>("HTTP/1.1 200 OK\n"); + for (const auto& header : extra_headers) { + response_headers->SetHeader(header.first, header.second); + } + return network::mojom::EarlyHints::New( + network::PopulateParsedHeaders(response_headers.get(), url), + network::mojom::ReferrerPolicy::kDefault, + network::mojom::IPAddressSpace::kPublic); + } + + network::TestURLLoaderFactory::PendingRequest* GetLastPendingRequest() { + return &network_url_loader_factory_->pending_requests()->back(); + } + + private: + // Intercepts network facotry requests instead of using production factory. + std::unique_ptr<network::TestURLLoaderFactory> network_url_loader_factory_ = + nullptr; + // The test target. + std::unique_ptr<KeepAliveURLLoaderService> loader_service_ = nullptr; + absl::optional<std::string> mojo_bad_message_; +}; + +TEST_F(KeepAliveURLLoaderServiceTest, LoadNonKeepaliveRequestAndTerminate) { + FakeRemoteURLLoaderFactory renderer_loader_factory; + MockReceiverURLLoaderClient renderer_loader_client; + BindKeepAliveURLLoaderFactory(renderer_loader_factory); + + // Loads non-keepalive request: + renderer_loader_factory.CreateLoaderAndStart( + CreateResourceRequest(GURL(kTestRequestUrl), /*keepalive=*/false), + renderer_loader_client.BindNewPipeAndPassRemote()); + + ExpectNumPendingRequests(0); + ExpectNumKeepAliveURLLoaders(0); + EXPECT_FALSE(renderer_loader_factory.is_remote_url_loader_connected()); + ExpectMojoBadMessage( + "Unexpected `resource_request` in " + "KeepAliveURLLoaderService::CreateLoaderAndStart(): " + "resource_request.keepalive must be true"); +} + +TEST_F(KeepAliveURLLoaderServiceTest, LoadTrustedRequestAndTerminate) { + FakeRemoteURLLoaderFactory renderer_loader_factory; + MockReceiverURLLoaderClient renderer_loader_client; + BindKeepAliveURLLoaderFactory(renderer_loader_factory); + + // Loads trusted keepalive request: + renderer_loader_factory.CreateLoaderAndStart( + CreateResourceRequest(GURL(kTestRequestUrl), /*keepalive=*/true, + /*is_trusted=*/true), + renderer_loader_client.BindNewPipeAndPassRemote()); + + ExpectNumPendingRequests(0); + ExpectNumKeepAliveURLLoaders(0); + EXPECT_FALSE(renderer_loader_factory.is_remote_url_loader_connected()); + ExpectMojoBadMessage( + "Unexpected `resource_request` in " + "KeepAliveURLLoaderService::CreateLoaderAndStart(): " + "resource_request.trusted_params must not be set"); +} + +TEST_F(KeepAliveURLLoaderServiceTest, ForwardOnReceiveResponse) { + FakeRemoteURLLoaderFactory renderer_loader_factory; + MockReceiverURLLoaderClient renderer_loader_client; + BindKeepAliveURLLoaderFactory(renderer_loader_factory); + + // Loads keepalive request: + renderer_loader_factory.CreateLoaderAndStart( + CreateResourceRequest(GURL(kTestRequestUrl)), + renderer_loader_client.BindNewPipeAndPassRemote()); + ExpectNumPendingRequests(1); + ExpectNumKeepAliveURLLoaders(1); + + // OnReceiveResponse: + // Expects underlying KeepAliveURLLoader forwards to `renderer_loader_client`. + EXPECT_CALL(renderer_loader_client, + OnReceiveResponse(ResponseHasHeader(kTestResponseHeaderName, + kTestResponseHeaderValue), + _, Eq(absl::nullopt))) + .Times(1); + // Simluates receiving response in the network service. + GetLastPendingRequest()->client->OnReceiveResponse( + CreateResponseHead({{kTestResponseHeaderName, kTestResponseHeaderValue}}), + /*body=*/{}, absl::nullopt); + base::RunLoop().RunUntilIdle(); + ExpectNumKeepAliveURLLoaders(1); +} + +TEST_F(KeepAliveURLLoaderServiceTest, + OnReceiveResponseWhenRendererIsDisconnected) { + FakeRemoteURLLoaderFactory renderer_loader_factory; + MockReceiverURLLoaderClient renderer_loader_client; + BindKeepAliveURLLoaderFactory(renderer_loader_factory); + + // Loads keepalive request: + renderer_loader_factory.CreateLoaderAndStart( + CreateResourceRequest(GURL(kTestRequestUrl)), + renderer_loader_client.BindNewPipeAndPassRemote()); + ExpectNumPendingRequests(1); + ExpectNumKeepAliveURLLoaders(1); + + // OnReceiveResponse: + // Disconnects and unbinds the receiver client from KeepAliveURLLoader. + renderer_loader_client.ResetReceiver(); + // Expects no forwarding. + EXPECT_CALL(renderer_loader_client, OnReceiveResponse(_, _, _)).Times(0); + // Simluates receiving response in the network service. + GetLastPendingRequest()->client->OnReceiveResponse( + CreateResponseHead({{kTestResponseHeaderName, kTestResponseHeaderValue}}), + /*body=*/{}, absl::nullopt); + base::RunLoop().RunUntilIdle(); + // The loader should have been deleted by the service. + ExpectNumKeepAliveURLLoaders(0); +} + +TEST_F(KeepAliveURLLoaderServiceTest, ForwardOnReceiveRedirect) { + FakeRemoteURLLoaderFactory renderer_loader_factory; + MockReceiverURLLoaderClient renderer_loader_client; + BindKeepAliveURLLoaderFactory(renderer_loader_factory); + + // Loads keepalive request: + renderer_loader_factory.CreateLoaderAndStart( + CreateResourceRequest(GURL(kTestRequestUrl)), + renderer_loader_client.BindNewPipeAndPassRemote()); + ExpectNumPendingRequests(1); + ExpectNumKeepAliveURLLoaders(1); + + // OnReceiveRedirect: + // Expects underlying KeepAliveURLLoader forwards to `renderer_loader_client`. + EXPECT_CALL(renderer_loader_client, + OnReceiveRedirect(_, ResponseHasHeader(kTestResponseHeaderName, + kTestResponseHeaderValue))) + .Times(1); + // Simluates receiving redirect in the network service. + GetLastPendingRequest()->client->OnReceiveRedirect( + CreateRedirectInfo(), CreateResponseHead({{kTestResponseHeaderName, + kTestResponseHeaderValue}})); + base::RunLoop().RunUntilIdle(); +} + +TEST_F(KeepAliveURLLoaderServiceTest, + OnReceiveRedirectWhenRendererIsDisconnected) { + FakeRemoteURLLoaderFactory renderer_loader_factory; + MockReceiverURLLoaderClient renderer_loader_client; + BindKeepAliveURLLoaderFactory(renderer_loader_factory); + + // Loads keepalive request: + renderer_loader_factory.CreateLoaderAndStart( + CreateResourceRequest(GURL(kTestRequestUrl)), + renderer_loader_client.BindNewPipeAndPassRemote()); + ExpectNumPendingRequests(1); + ExpectNumKeepAliveURLLoaders(1); + + // OnReceiveRedirect: + // Disconnects the receiver client from KeepAliveURLLoader. + renderer_loader_client.ResetReceiver(); + // Expects no forwarding. + EXPECT_CALL(renderer_loader_client, OnReceiveRedirect(_, _)).Times(0); + // Simluates receiving redirect in the network service. + GetLastPendingRequest()->client->OnReceiveRedirect( + CreateRedirectInfo(), CreateResponseHead({{kTestResponseHeaderName, + kTestResponseHeaderValue}})); + base::RunLoop().RunUntilIdle(); +} + +TEST_F(KeepAliveURLLoaderServiceTest, ForwardOnReceiveEarlyHints) { + FakeRemoteURLLoaderFactory renderer_loader_factory; + MockReceiverURLLoaderClient renderer_loader_client; + BindKeepAliveURLLoaderFactory(renderer_loader_factory); + + // Loads keepalive request: + renderer_loader_factory.CreateLoaderAndStart( + CreateResourceRequest(GURL(kTestRequestUrl)), + renderer_loader_client.BindNewPipeAndPassRemote()); + ExpectNumPendingRequests(1); + ExpectNumKeepAliveURLLoaders(1); + + // OnReceiveEarlyHints: + // Expects underlying KeepAliveURLLoader forwards to `renderer_loader_client`. + EXPECT_CALL(renderer_loader_client, OnReceiveEarlyHints(_)).Times(1); + // Simluates receiving early hints in the network service. + GetLastPendingRequest()->client->OnReceiveEarlyHints( + CreateEarlyHints(GURL(kTestRequestUrl))); + base::RunLoop().RunUntilIdle(); +} + +TEST_F(KeepAliveURLLoaderServiceTest, + OnReceiveEarlyHintsWhenRendererIsDisconnected) { + FakeRemoteURLLoaderFactory renderer_loader_factory; + MockReceiverURLLoaderClient renderer_loader_client; + BindKeepAliveURLLoaderFactory(renderer_loader_factory); + + // Loads keepalive request: + renderer_loader_factory.CreateLoaderAndStart( + CreateResourceRequest(GURL(kTestRequestUrl)), + renderer_loader_client.BindNewPipeAndPassRemote()); + ExpectNumPendingRequests(1); + ExpectNumKeepAliveURLLoaders(1); + + // OnReceiveEarlyHints: + // Disconnects the receiver client from KeepAliveURLLoader. + renderer_loader_client.ResetReceiver(); + // Expects no forwarding. + EXPECT_CALL(renderer_loader_client, OnReceiveEarlyHints(_)).Times(0); + // Simluates receiving early hints in the network service. + GetLastPendingRequest()->client->OnReceiveEarlyHints( + CreateEarlyHints(GURL(kTestRequestUrl))); + base::RunLoop().RunUntilIdle(); +} + +TEST_F(KeepAliveURLLoaderServiceTest, ForwardOnUploadProgress) { + FakeRemoteURLLoaderFactory renderer_loader_factory; + MockReceiverURLLoaderClient renderer_loader_client; + BindKeepAliveURLLoaderFactory(renderer_loader_factory); + + // Loads keepalive request: + renderer_loader_factory.CreateLoaderAndStart( + CreateResourceRequest(GURL(kTestRequestUrl)), + renderer_loader_client.BindNewPipeAndPassRemote()); + ExpectNumPendingRequests(1); + ExpectNumKeepAliveURLLoaders(1); + + // OnUploadProgress: + const int64_t current_position = 5; + const int64_t total_size = 100; + base::OnceCallback<void()> callback; + // Expects underlying KeepAliveURLLoader forwards to `renderer_loader_client`. + EXPECT_CALL(renderer_loader_client, + OnUploadProgress(Eq(current_position), Eq(total_size), _)) + .Times(1) + .WillOnce(WithArg<2>([](base::OnceCallback<void()> callback) { + // must be consumed. + std::move(callback).Run(); + })); + // Simluates receiving upload progress in the network service. + GetLastPendingRequest()->client->OnUploadProgress( + current_position, total_size, std::move(callback)); + base::RunLoop().RunUntilIdle(); +} + +TEST_F(KeepAliveURLLoaderServiceTest, ForwardOnTransferSizeUpdated) { + FakeRemoteURLLoaderFactory renderer_loader_factory; + MockReceiverURLLoaderClient renderer_loader_client; + BindKeepAliveURLLoaderFactory(renderer_loader_factory); + + // Loads keepalive request: + renderer_loader_factory.CreateLoaderAndStart( + CreateResourceRequest(GURL(kTestRequestUrl)), + renderer_loader_client.BindNewPipeAndPassRemote()); + ExpectNumPendingRequests(1); + ExpectNumKeepAliveURLLoaders(1); + + // OnTransferSizeUpdated: + const int32_t size_diff = 5; + // Expects underlying KeepAliveURLLoader forwards to `renderer_loader_client`. + EXPECT_CALL(renderer_loader_client, OnTransferSizeUpdated(Eq(size_diff))) + .Times(1); + // Simluates receiving transfer size update in the network service. + GetLastPendingRequest()->client->OnTransferSizeUpdated(size_diff); + base::RunLoop().RunUntilIdle(); +} + +TEST_F(KeepAliveURLLoaderServiceTest, + OnTransferSizeUpdatedWhenRendererIsDisconnected) { + FakeRemoteURLLoaderFactory renderer_loader_factory; + MockReceiverURLLoaderClient renderer_loader_client; + BindKeepAliveURLLoaderFactory(renderer_loader_factory); + + // Loads keepalive request: + renderer_loader_factory.CreateLoaderAndStart( + CreateResourceRequest(GURL(kTestRequestUrl)), + renderer_loader_client.BindNewPipeAndPassRemote()); + ExpectNumPendingRequests(1); + ExpectNumKeepAliveURLLoaders(1); + + // OnTransferSizeUpdated: + // Disconnects the receiver client from KeepAliveURLLoader. + renderer_loader_client.ResetReceiver(); + const int32_t size_diff = 5; + // Expects no forwarding. + EXPECT_CALL(renderer_loader_client, OnTransferSizeUpdated(_)).Times(0); + // Simluates receiving transfer size update in the network service. + GetLastPendingRequest()->client->OnTransferSizeUpdated(size_diff); + base::RunLoop().RunUntilIdle(); +} + +TEST_F(KeepAliveURLLoaderServiceTest, ForwardOnComplete) { + FakeRemoteURLLoaderFactory renderer_loader_factory; + MockReceiverURLLoaderClient renderer_loader_client; + BindKeepAliveURLLoaderFactory(renderer_loader_factory); + + // Loads keepalive request: + renderer_loader_factory.CreateLoaderAndStart( + CreateResourceRequest(GURL(kTestRequestUrl)), + renderer_loader_client.BindNewPipeAndPassRemote()); + ExpectNumPendingRequests(1); + ExpectNumKeepAliveURLLoaders(1); + + // OnComplete: + const network::URLLoaderCompletionStatus status{net::OK}; + // Expects underlying KeepAliveURLLoader forwards to `renderer_loader_client`. + EXPECT_CALL(renderer_loader_client, OnComplete(Eq(status))).Times(1); + // Simluates receiving completion status in the network service. + GetLastPendingRequest()->client->OnComplete(status); + base::RunLoop().RunUntilIdle(); +} + +TEST_F(KeepAliveURLLoaderServiceTest, OnCompleteWhenRendererIsDisconnected) { + FakeRemoteURLLoaderFactory renderer_loader_factory; + MockReceiverURLLoaderClient renderer_loader_client; + BindKeepAliveURLLoaderFactory(renderer_loader_factory); + + // Loads keepalive request: + renderer_loader_factory.CreateLoaderAndStart( + CreateResourceRequest(GURL(kTestRequestUrl)), + renderer_loader_client.BindNewPipeAndPassRemote()); + ExpectNumPendingRequests(1); + ExpectNumKeepAliveURLLoaders(1); + + // OnComplete: + // Disconnects the receiver client from KeepAliveURLLoader. + renderer_loader_client.ResetReceiver(); + const network::URLLoaderCompletionStatus status{net::OK}; + // Expects no forwarding. + EXPECT_CALL(renderer_loader_client, OnComplete(_)).Times(0); + // Simluates receiving completion status in the network service. + GetLastPendingRequest()->client->OnComplete(status); + base::RunLoop().RunUntilIdle(); +} + +TEST_F(KeepAliveURLLoaderServiceTest, RendererDisconnectedBeforeOnComplete) { + FakeRemoteURLLoaderFactory renderer_loader_factory; + MockReceiverURLLoaderClient renderer_loader_client; + BindKeepAliveURLLoaderFactory(renderer_loader_factory); + + // Loads keepalive request: + renderer_loader_factory.CreateLoaderAndStart( + CreateResourceRequest(GURL(kTestRequestUrl)), + renderer_loader_client.BindNewPipeAndPassRemote()); + ExpectNumPendingRequests(1); + ExpectNumKeepAliveURLLoaders(1); + + // OnReceiveResponse + // Simluates receiving response in the network service. + GetLastPendingRequest()->client->OnReceiveResponse( + CreateResponseHead({{kTestResponseHeaderName, kTestResponseHeaderValue}}), + /*body=*/{}, absl::nullopt); + + // Disconnects the receiver client from KeepAliveURLLoader. + renderer_loader_client.ResetReceiver(); + base::RunLoop().RunUntilIdle(); + + // The loader should have been deleted. + ExpectNumKeepAliveURLLoaders(0); +} + +} // namespace content
diff --git a/content/browser/loader/navigation_url_loader_impl.cc b/content/browser/loader/navigation_url_loader_impl.cc index 3cda19c..c6656e6a 100644 --- a/content/browser/loader/navigation_url_loader_impl.cc +++ b/content/browser/loader/navigation_url_loader_impl.cc
@@ -769,23 +769,6 @@ } } else { default_loader_used_ = true; - - // NOTE: We only support embedders proxying network-service-bound requests - // not handled by NavigationLoaderInterceptors above (e.g. Service Worker) - // Hence this code is only reachable when one of the above - // interceptors isn't used and the URL is either a data URL or has a - // scheme which is handled by the network service. - if (proxied_factory_receiver_.is_valid()) { - DCHECK(proxied_factory_remote_.is_valid()); - // We don't worry about reconnection since it's a single navigation. - network_loader_factory_->Clone(std::move(proxied_factory_receiver_)); - // Replace the network factory with the proxied version since this may - // need to be used in redirects, and we've already consumed - // `proxied_factory_receiver_`. - network_loader_factory_ = - base::MakeRefCounted<network::WrapperSharedURLLoaderFactory>( - std::move(proxied_factory_remote_)); - } factory = network_loader_factory_; } url_chain_.push_back(resource_request_->url); @@ -1368,39 +1351,13 @@ direct_factory_for_webui->Clone(std::move(factory_receiver)); } - mojo::PendingRemote<network::mojom::TrustedURLLoaderHeaderClient> - header_client; + network_loader_factory_ = CreateNetworkLoaderFactory( + browser_context_, storage_partition_, frame_tree_node, ukm_id, + &bypass_redirect_checks_); - // Initialize proxied factory remote/receiver if necessary. - // This also populates `bypass_redirect_checks_`. GetContentClient()->browser()->RegisterNonNetworkNavigationURLLoaderFactories( frame_tree_node_id_, ukm_id, &non_network_url_loader_factories_); - // The embedder may want to proxy all network-bound URLLoaderFactory - // receivers that it can. If it elects to do so, those proxies will be - // connected when loader is created if the request type supports proxying. - mojo::PendingRemote<network::mojom::URLLoaderFactory> pending_factory; - auto factory_receiver = pending_factory.InitWithNewPipeAndPassReceiver(); - // Here we give nullptr for `factory_override`, because CORS is no-op for - // navigations. - bool use_proxy = GetContentClient()->browser()->WillCreateURLLoaderFactory( - browser_context_, frame_tree_node->current_frame_host(), - frame_tree_node->current_frame_host()->GetProcess()->GetID(), - ContentBrowserClient::URLLoaderFactoryType::kNavigation, url::Origin(), - frame_tree_node->navigation_request()->GetNavigationId(), ukm_id, - &factory_receiver, &header_client, &bypass_redirect_checks_, - /*disable_secure_dns=*/nullptr, /*factory_override=*/nullptr); - if (devtools_instrumentation::WillCreateURLLoaderFactory( - frame_tree_node->current_frame_host(), /*is_navigation=*/true, - /*is_download=*/false, &factory_receiver, - /*factory_override=*/nullptr)) { - use_proxy = true; - } - if (use_proxy) { - proxied_factory_receiver_ = std::move(factory_receiver); - proxied_factory_remote_ = std::move(pending_factory); - } - bool is_nav_allowed = base::FeatureList::IsEnabled( blink::features::kFileSystemUrlNavigationForChromeAppsOnly) && @@ -1454,25 +1411,66 @@ for (auto& iter : non_network_url_loader_factories_) known_schemes_.insert(iter.first); - if (header_client) { - mojo::PendingRemote<network::mojom::URLLoaderFactory> factory_remote; - CreateURLLoaderFactoryWithHeaderClient( - std::move(header_client), - factory_remote.InitWithNewPipeAndPassReceiver(), storage_partition_); - network_loader_factory_ = - base::MakeRefCounted<network::WrapperSharedURLLoaderFactory>( - std::move(factory_remote)); - } else { - network_loader_factory_ = - storage_partition_->GetURLLoaderFactoryForBrowserProcess(); - } - start_closure_ = base::BindOnce( &NavigationURLLoaderImpl::StartImpl, base::Unretained(this), std::move(prefetched_signed_exchange_cache), std::move(factory_for_webui), std::move(accept_langs)); } +scoped_refptr<network::SharedURLLoaderFactory> +NavigationURLLoaderImpl::CreateNetworkLoaderFactory( + BrowserContext* browser_context, + StoragePartitionImpl* storage_partition, + FrameTreeNode* frame_tree_node, + const ukm::SourceIdObj& ukm_id, + bool* bypass_redirect_checks) { + mojo::PendingRemote<network::mojom::TrustedURLLoaderHeaderClient> + header_client; + + // The embedder may want to proxy all network-bound URLLoaderFactory + // receivers that it can. If it elects to do so, those proxies will be + // connected when loader is created if the request type supports proxying. + mojo::PendingRemote<network::mojom::URLLoaderFactory> pending_factory; + auto factory_receiver = pending_factory.InitWithNewPipeAndPassReceiver(); + // Here we give nullptr for `factory_override`, because CORS is no-op for + // navigations. + bool use_proxy = GetContentClient()->browser()->WillCreateURLLoaderFactory( + browser_context, frame_tree_node->current_frame_host(), + frame_tree_node->current_frame_host()->GetProcess()->GetID(), + ContentBrowserClient::URLLoaderFactoryType::kNavigation, url::Origin(), + frame_tree_node->navigation_request()->GetNavigationId(), ukm_id, + &factory_receiver, &header_client, bypass_redirect_checks, + /*disable_secure_dns=*/nullptr, /*factory_override=*/nullptr); + if (devtools_instrumentation::WillCreateURLLoaderFactory( + frame_tree_node->current_frame_host(), /*is_navigation=*/true, + /*is_download=*/false, &factory_receiver, + /*factory_override=*/nullptr)) { + use_proxy = true; + } + + scoped_refptr<network::SharedURLLoaderFactory> network_loader_factory; + if (header_client) { + mojo::PendingRemote<network::mojom::URLLoaderFactory> factory_remote; + CreateURLLoaderFactoryWithHeaderClient( + std::move(header_client), + factory_remote.InitWithNewPipeAndPassReceiver(), storage_partition); + network_loader_factory = + base::MakeRefCounted<network::WrapperSharedURLLoaderFactory>( + std::move(factory_remote)); + } else { + network_loader_factory = + storage_partition->GetURLLoaderFactoryForBrowserProcess(); + } + DCHECK(network_loader_factory); + if (!use_proxy) { + return network_loader_factory; + } + + network_loader_factory->Clone(std::move(factory_receiver)); + return base::MakeRefCounted<network::WrapperSharedURLLoaderFactory>( + std::move(pending_factory)); +} + void NavigationURLLoaderImpl::Start() { std::move(start_closure_).Run(); }
diff --git a/content/browser/loader/navigation_url_loader_impl.h b/content/browser/loader/navigation_url_loader_impl.h index 48510ead..d4cc5ac 100644 --- a/content/browser/loader/navigation_url_loader_impl.h +++ b/content/browser/loader/navigation_url_loader_impl.h
@@ -36,6 +36,7 @@ namespace content { class BrowserContext; +class FrameTreeNode; class NavigationEarlyHintsManager; class NavigationLoaderInterceptor; class PrefetchedSignedExchangeCache; @@ -95,6 +96,15 @@ private: FRIEND_TEST_ALL_PREFIXES(NavigationURLLoaderImplTest, OnAcceptCHFrameReceivedUKM); + + // Creates a SharedURLLoaderFactory for network-service-bound requests. + static scoped_refptr<network::SharedURLLoaderFactory> + CreateNetworkLoaderFactory(BrowserContext* browser_context, + StoragePartitionImpl* storage_partition, + FrameTreeNode* frame_tree_node, + const ukm::SourceIdObj& ukm_id, + bool* bypass_redirect_checks); + // Starts the loader by finalizing loader factories initialization and // calling Restart(). // This is called only once (while Restart can be called multiple times). @@ -276,19 +286,6 @@ // response body to download code. absl::optional<network::URLLoaderCompletionStatus> status_; - // Before creating this URLLoaderRequestController on UI thread, the - // embedder may have elected to proxy the URLLoaderFactory receiver, in - // which case these fields will contain input (remote) and output (receiver) - // endpoints for the proxy. If this controller is handling a receiver for - // which proxying is supported, receivers will be plumbed through these - // endpoints. - // - // Note that these are only used for receivers that go to the Network - // Service. - mojo::PendingReceiver<network::mojom::URLLoaderFactory> - proxied_factory_receiver_; - mojo::PendingRemote<network::mojom::URLLoaderFactory> proxied_factory_remote_; - // The schemes that this loader can use. For anything else we'll try // external protocol handlers. std::set<std::string> known_schemes_;
diff --git a/content/browser/navigation_browsertest.cc b/content/browser/navigation_browsertest.cc index 891cd62..c6c63d9 100644 --- a/content/browser/navigation_browsertest.cc +++ b/content/browser/navigation_browsertest.cc
@@ -31,7 +31,8 @@ #include "content/browser/renderer_host/navigation_request.h" #include "content/browser/web_contents/web_contents_impl.h" #include "content/common/content_navigation_policy.h" -#include "content/common/frame_messages.mojom-forward.h" +#include "content/common/features.h" +#include "content/common/frame_messages.mojom.h" #include "content/common/navigation_client.mojom-forward.h" #include "content/common/navigation_client.mojom.h" #include "content/public/browser/browser_context.h" @@ -89,6 +90,7 @@ #include "services/network/public/cpp/features.h" #include "services/network/public/cpp/web_sandbox_flags.h" #include "services/network/public/mojom/url_loader.mojom.h" +#include "third_party/abseil-cpp/absl/types/optional.h" #include "third_party/blink/public/common/loader/url_loader_throttle.h" #include "ui/base/page_transition_types.h" #include "url/gurl.h" @@ -5452,6 +5454,49 @@ VerifyImageSubresourceLoads(main_frame); } +// Helper for BeginNavigationInCommitCallbackInterceptor. Declared separately +// to make it easier to friend. +// +// Defers an attempt to commit a navigation A in a speculative RenderFrameHost. +// This observer should be owned by a base::Closure that is used for a +// subsequent navigation B's `resume_commit_closure_` field. +// +// Navigation B will eventually be queued when it reaches ready to commit; since +// navigation A is still stuck in the pending commit state, navigation B will +// not be able to successfully select a RenderFrameHost. +// +// Navigation B will then assign an actual navigation continuation closure to +// its `resume_commit_closure_` field, which will destroy `this`. The destructor +// then resumes committing navigation A. +class ResumeCommitClosureSetObserver { + public: + explicit ResumeCommitClosureSetObserver( + base::SafeRef<NavigationHandle> original_navigation, + mojom::DidCommitProvisionalLoadParamsPtr original_params, + mojom::DidCommitProvisionalLoadInterfaceParamsPtr + original_interface_params) + : original_navigation_(std::move(original_navigation)), + original_params_(std::move(original_params)), + original_interface_params_(std::move(original_interface_params)) {} + + ~ResumeCommitClosureSetObserver() { + NavigationRequest* original_request = + NavigationRequest::From(&*original_navigation_); + // Post a task just to avoid any potential weirdness with reentrancy. + base::SequencedTaskRunner::GetCurrentDefault()->PostNonNestableTask( + FROM_HERE, + base::BindOnce(&RenderFrameHostImpl::DidCommitNavigation, + base::Unretained(original_request->GetRenderFrameHost()), + original_request, std::move(original_params_), + std::move(original_interface_params_))); + } + + private: + base::SafeRef<NavigationHandle> original_navigation_; + mojom::DidCommitProvisionalLoadParamsPtr original_params_; + mojom::DidCommitProvisionalLoadInterfaceParamsPtr original_interface_params_; +}; + // Helper that ignores a request from the renderer to commit a navigation and // instead, begins another navigation to the specified `url` in // `frame_tree_node`. @@ -5469,9 +5514,33 @@ override { request->GetRenderFrameHost()->SetCommitCallbackInterceptorForTesting( nullptr); + + absl::optional<ObserverInstaller> observer_installer; + if (ShouldQueueNavigationsWhenPendingCommitRFHExists()) { + // If navigation queueing is enabled, the navigation to `url_` will not + // commit until the commit suspended by this interceptor completes: + // instead, it will be queued/suspended and the navigation code will + // internally set a closure to resume committing the navigation when + // the suspended `request` completes. + // + // `BeginNavigateToURLFromRenderer()` waits for the new navigation from + // the renderer to start, so arm a hook to install an (indirect) observer + // that: + // - waits for the navigation code to install a resume commit closure + // - resumes the suspended `request` to test that the queued navigation + // eventually completes. + observer_installer.emplace( + WebContents::FromRenderFrameHost(request->GetRenderFrameHost()), + request->GetSafeRef(), std::move(*params), + std::move(*interface_params)); + } + // At this point, the renderer has already committed the RenderFrame, but // on the browser side, the RenderFrameHost is still speculative. Begin - // another navigation, which should cause `this` to be discarded. + // another navigation. + // + // If navigation queueing is disabled, this should result in the speculative + // RFH being discarded with a pending commit in flight. EXPECT_TRUE(BeginNavigateToURLFromRenderer(frame_tree_node_.get(), url_)); // Ignore the commit message. @@ -5479,31 +5548,114 @@ } private: + // Installs an observer that waits for `resume_commit_closure_` to be set on + // the next `NavigationRequest` seen by `DidStartNavigation()`. + class ObserverInstaller : public WebContentsObserver { + public: + explicit ObserverInstaller( + WebContents* web_contents, + base::SafeRef<NavigationHandle> original_navigation, + mojom::DidCommitProvisionalLoadParamsPtr original_params, + mojom::DidCommitProvisionalLoadInterfaceParamsPtr + original_interface_params) + : WebContentsObserver(web_contents), + original_navigation_(std::move(original_navigation)), + original_params_(std::move(original_params)), + original_interface_params_(std::move(original_interface_params)) {} + + // WebContentsObserver overrides: + void DidStartNavigation(NavigationHandle* handle) override { + NavigationRequest::From(handle)->set_resume_commit_closure_for_test( + base::BindLambdaForTesting( + [observer = std::make_unique<ResumeCommitClosureSetObserver>( + std::move(original_navigation_), std::move(original_params_), + std::move(original_interface_params_) + + )] {})); + } + + base::SafeRef<NavigationHandle> original_navigation_; + mojom::DidCommitProvisionalLoadParamsPtr original_params_; + mojom::DidCommitProvisionalLoadInterfaceParamsPtr + original_interface_params_; + }; + const raw_ptr<FrameTreeNode> frame_tree_node_; const GURL url_; }; -class NavigationBrowserTestWithPerformanceManager - : public NavigationBrowserTest { +namespace { + +struct Result { + GURL url; + bool committed; +}; + +class NavigationLogger : public WebContentsObserver { public: + explicit NavigationLogger(WebContents* contents) + : WebContentsObserver(contents) {} + + // WebContentsObserver overrides: + void DidFinishNavigation(NavigationHandle* handle) override { + results_.push_back( + {.url = handle->GetURL(), .committed = handle->HasCommitted()}); + } + + const std::vector<Result>& results() const { return results_; } + + private: + std::vector<Result> results_; +}; + +} // namespace + +class CommitNavigationRaceBrowserTest + : public NavigationBrowserTest, + public ::testing::WithParamInterface<bool> { + public: + CommitNavigationRaceBrowserTest() { + std::map<std::string, std::string> parameters = { + {"level", GetParam() ? "full" : "none"}, + }; + feature_list_.InitAndEnableFeatureWithParameters( + kQueueNavigationsWhileWaitingForCommit, parameters); + } + + void SetUpOnMainThread() override { + // These navigation tests require full site isolation since they test races + // with committing a navigation in a speculative RenderFrameHost.. + if (!AreAllSitesIsolatedForTesting()) { + GTEST_SKIP(); + } + + NavigationBrowserTest::SetUpOnMainThread(); + } + void SetUpCommandLine(base::CommandLine* command_line) override { NavigationBrowserTest::SetUpCommandLine(command_line); - // The PerformanceManager maintains its own parallel frame tree. Make sure - // it doesn't get confused. By default, PerformanceManager uses the dummy - // implementation. + // PerformanceManager maintains its own parallel frame tree and has + // sometimes been confused by things like `UndoCommitNavigation()`. + // Force-enable it for test coverage; otherwise, by default, + // PerformanceManager uses the dummy implementation. // // TODO(https://crbug.com/1222647): Enable this by default in content_shell. command_line->AppendSwitchASCII(switches::kEnableBlinkFeatures, "PerformanceManagerInstrumentation"); } + + static std::string DescribeParams( + const testing::TestParamInfo<ParamType>& info) { + return info.param ? "UndoCommitNavigation" : "NavigationQueueing"; + } + + private: + base::test::ScopedFeatureList feature_list_; }; -IN_PROC_BROWSER_TEST_F(NavigationBrowserTestWithPerformanceManager, +IN_PROC_BROWSER_TEST_P(CommitNavigationRaceBrowserTest, BeginNewNavigationAfterCommitNavigationInMainFrame) { - if (!AreAllSitesIsolatedForTesting()) - return; - ASSERT_TRUE(NavigateToURL( shell(), embedded_test_server()->GetURL("a.com", "/title1.html"))); @@ -5520,11 +5672,13 @@ RenderProcessHost* const b_com_render_process_host = new_web_contents->GetPrimaryMainFrame()->GetProcess(); + NavigationLogger logger(shell()->web_contents()); + // Start a navigation that will create a speculative RFH in the existing // render process for b.com. - ASSERT_TRUE(BeginNavigateToURLFromRenderer( - shell(), embedded_test_server()->GetURL( - "b.com", "/infinitely_loading_image.html"))); + const GURL infinitely_loading_url = + embedded_test_server()->GetURL("b.com", "/infinitely_loading_image.html"); + ASSERT_TRUE(BeginNavigateToURLFromRenderer(shell(), infinitely_loading_url)); // Ensure the speculative RFH is in the expected process (i.e. the b.com // process that was created for the navigation in the new window earlier). @@ -5539,10 +5693,9 @@ EXPECT_EQ(b_com_render_process_host, speculative_render_frame_host->GetProcess()); - // Simulates a race where another navigation begins after the browser sends - // `CommitNavigation() to the b.com renderer, but a different navigation to - // c.com begins before `DidCommitNavigation()` has been received from the - // b.com renderer. + // Simulates a race where a new navigation to c.com begins after the browser + // sends `CommitNavigation() to the b.com renderer, but before + // `DidCommitNavigation()` has been received from the b.com renderer. const GURL final_url = embedded_test_server()->GetURL("c.com", "/title1.html"); BeginNavigationInCommitCallbackInterceptor interceptor( @@ -5552,13 +5705,25 @@ EXPECT_TRUE(WaitForLoadStop(web_contents)); EXPECT_EQ(final_url, web_contents->GetLastCommittedURL()); + + auto results = logger.results(); + ASSERT_EQ(2u, results.size()); + EXPECT_EQ(infinitely_loading_url, results[0].url); + // If navigation queueing is enabled, the first navigation will complete the + // commit as the new navigation gets queued until the first navigation's + // commit finished. If navigation queueing is disabled, the pending commit + // navigation will be cancelled. + if (ShouldQueueNavigationsWhenPendingCommitRFHExists()) { + EXPECT_TRUE(results[0].committed); + } else { + EXPECT_FALSE(results[0].committed); + } + EXPECT_TRUE(results[1].committed); + EXPECT_EQ(final_url, results[1].url); } -IN_PROC_BROWSER_TEST_F(NavigationBrowserTestWithPerformanceManager, +IN_PROC_BROWSER_TEST_P(CommitNavigationRaceBrowserTest, BeginNewNavigationAfterCommitNavigationInSubFrame) { - if (!AreAllSitesIsolatedForTesting()) - return; - // This test's process layout is structured a bit differently from the main // frame case. PerformanceManager reports when a remote frame is attached to // a local parent, and it was previously getting confused by the fact that @@ -5581,11 +5746,14 @@ ->current_frame_host() ->GetProcess(); + NavigationLogger logger(web_contents); + // Start a navigation that will create a speculative RFH in the existing // render process for a.com. - ASSERT_TRUE(BeginNavigateToURLFromRenderer( - first_subframe_node, embedded_test_server()->GetURL( - "a.com", "/infinitely_loading_image.html"))); + const GURL infinitely_loading_url = + embedded_test_server()->GetURL("a.com", "/infinitely_loading_image.html"); + ASSERT_TRUE(BeginNavigateToURLFromRenderer(first_subframe_node, + infinitely_loading_url)); // Ensure the speculative RFH is in the expected process. RenderFrameHostImpl* speculative_render_frame_host = @@ -5604,10 +5772,9 @@ EXPECT_TRUE(ExecJs(web_contents, "document.querySelector('iframe').id = 'new-name';")); - // Simulates a race where another navigation begins after the browser sends - // `CommitNavigation() to the a.com renderer, but a different navigation to - // c.com begins before `DidCommitNavigation()` has been received from the - // a.com renderer. + // Simulates a race where a new navigation to c.com begins after the browser + // sends `CommitNavigation() to the a.com renderer, but before + // `DidCommitNavigation()` has been received from the a.com renderer. const GURL final_url = embedded_test_server()->GetURL("c.com", "/title1.html"); BeginNavigationInCommitCallbackInterceptor interceptor(first_subframe_node, @@ -5619,6 +5786,21 @@ EXPECT_EQ(final_url, first_subframe_node->render_manager() ->current_frame_host() ->GetLastCommittedURL()); + + auto results = logger.results(); + ASSERT_EQ(2u, results.size()); + // If navigation queueing is enabled, the first navigation will complete the + // commit as the new navigation gets queued until the first navigation's + // commit finished. If navigation queueing is disabled, the pending commit + // navigation will be cancelled. + if (ShouldQueueNavigationsWhenPendingCommitRFHExists()) { + EXPECT_TRUE(results[0].committed); + } else { + EXPECT_FALSE(results[0].committed); + } + EXPECT_EQ(infinitely_loading_url, results[0].url); + EXPECT_TRUE(results[1].committed); + EXPECT_EQ(final_url, results[1].url); } // Helper that ignores a request from the renderer to commit a navigation and @@ -5670,10 +5852,13 @@ // was in the middle of committing a navigation to a provisional frame in render // process B while render process A simultaneously detaches that child frame, // the detach message would never be received by render process B. -IN_PROC_BROWSER_TEST_F(NavigationBrowserTestWithPerformanceManager, +IN_PROC_BROWSER_TEST_P(CommitNavigationRaceBrowserTest, DetachAfterCommitNavigationInSubFrame) { - if (!AreAllSitesIsolatedForTesting()) - return; + // This test checks an edge case that is only relevant when using + // `UndoCommitNavigation()`. + if (ShouldQueueNavigationsWhenPendingCommitRFHExists()) { + GTEST_SKIP(); + } ASSERT_TRUE(NavigateToURL( shell(), embedded_test_server()->GetURL( @@ -5721,6 +5906,11 @@ EXPECT_EQ(1, EvalJs(first_subframe_node, "top.length")); } +INSTANTIATE_TEST_SUITE_P(, + CommitNavigationRaceBrowserTest, + ::testing::Bool(), + &CommitNavigationRaceBrowserTest::DescribeParams); + // The following test checks what happens if a WebContentsDelegate navigates // away in response to the NavigationStateChanged event. Previously // (https://crbug.com/1210234), this was triggering a crash when creating the
diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc index 099f4e2..f4f2e0f9 100644 --- a/content/browser/renderer_host/navigation_request.cc +++ b/content/browser/renderer_host/navigation_request.cc
@@ -2218,7 +2218,7 @@ // Post a task to run the conditions in case BeginNavigation() is not expected // to run synchronously. OnPrerenderingActivationChecksComplete() will be // called after all the deferring conditions finish. - base::SequencedTaskRunner::GetCurrentDefault()->PostTask( + base::SequencedTaskRunner::GetCurrentDefault()->PostNonNestableTask( FROM_HERE, base::BindOnce(&NavigationRequest::RunCommitDeferringConditions, weak_factory_.GetWeakPtr())); @@ -2869,11 +2869,7 @@ // Instantiate a new NavigationClient interface. commit_navigation_client_ = GetRenderFrameHost()->GetNavigationClientFromInterfaceProvider(); - HandleInterfaceDisconnection( - &commit_navigation_client_, - base::BindOnce( - &NavigationRequest::OnRendererRequestedNavigationCancellation, - base::Unretained(this))); + HandleInterfaceDisconnection(commit_navigation_client_); return commit_navigation_client_.get(); } @@ -3888,6 +3884,11 @@ // The navigation may have encountered a header that requests isolation for // the url's origin. Before we pick the renderer, make sure we update the // origin-isolation opt-ins appropriately. + // + // TODO(https://crbug.com/1220337): With navigation queueing, the RFH may be + // asynchronously chosen later. Does the global OAC walk make any assumptions + // about nothing creating other BrowsingInstances and/or committing this + // origin elsewhere in between this point and picking the final RFH? CheckForIsolationOptIn(GetURL()); // Check if the response should be sent to a renderer. @@ -4031,6 +4032,15 @@ // OnRequestFailedInternal has destroyed the NavigationRequest. } + SelectFrameHostForOnResponseStarted(std::move(url_loader_client_endpoints), + is_download, + std::move(subresource_loader_params)); +} + +void NavigationRequest::SelectFrameHostForOnResponseStarted( + network::mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints, + bool is_download, + absl::optional<SubresourceLoaderParams> subresource_loader_params) { // Select an appropriate renderer to commit the navigation. if (IsServedFromBackForwardCache()) { // If the current navigation is being restarted, it should not try to make @@ -4070,13 +4080,20 @@ // future. break; case GetFrameHostForNavigationFailed::kBlockedByPendingCommit: - // TODO(https://crbug.com/1220337): Split OnResponseStarted() into - // two halves: the second half should start above this block of - // conditionals that picks a suitable RenderFrameHost. - break; + // This closure is posted to the event loop, so it must use WeakPtr. + resume_commit_closure_ = base::BindOnce( + &NavigationRequest::SelectFrameHostForOnResponseStarted, + weak_factory_.GetWeakPtr(), + std::move(url_loader_client_endpoints), is_download, + std::move(subresource_loader_params)); + return; } } + // GetFrameHostForNavigation() should update associated_rfh_type_, so it + // should never be NONE here. + DCHECK_NE(AssociatedRenderFrameHostType::NONE, associated_rfh_type_); + if (!Navigator::CheckWebUIRendererDoesNotDisplayNormalURL( GetRenderFrameHost(), GetUrlInfo(), /* is_renderer_initiated_check */ false)) { @@ -6166,10 +6183,21 @@ } void NavigationRequest::RendererRequestedNavigationCancellationForTesting() { - OnRendererRequestedNavigationCancellation(); + OnNavigationClientDisconnected(0, ""); } -void NavigationRequest::OnRendererRequestedNavigationCancellation() { +void NavigationRequest::OnNavigationClientDisconnected( + uint32_t reason, + const std::string& description) { + if (reason == mojom::NavigationClient::kResetForSwap) { + // If the RenderFrame that initiated this navigation request is swapped out + // (disconnecting its NavigationClient for this request), do not treat it as + // a cancellation. Otherwise, if a previous navigation before `this` is slow + // to commit, it would unexpectedly cancel `this` subsequent attempt to + // navigate elsewhere. + return; + } + // Renderer-initiated navigation cancellations can only happen before the // navigation gets into the READY_TO_COMMIT state, because // RendererCancellationThrottle will prevent renderer-initiated navigations @@ -6205,9 +6233,12 @@ } void NavigationRequest::HandleInterfaceDisconnection( - mojo::AssociatedRemote<mojom::NavigationClient>* navigation_client, - base::OnceClosure error_handler) { - navigation_client->set_disconnect_handler(std::move(error_handler)); + mojo::AssociatedRemote<mojom::NavigationClient>& navigation_client) { + // `Unretained()` is safe because the `mojo::AssociatedRemote` reference only + // refers to fields owned by `this`. + navigation_client.set_disconnect_with_reason_handler( + base::BindOnce(&NavigationRequest::OnNavigationClientDisconnected, + base::Unretained(this))); } void NavigationRequest::IgnoreInterfaceDisconnection() { @@ -6808,11 +6839,7 @@ request_navigation_client_.Bind(std::move(navigation_client)); // Binds the OnAbort callback - HandleInterfaceDisconnection( - &request_navigation_client_, - base::BindOnce( - &NavigationRequest::OnRendererRequestedNavigationCancellation, - base::Unretained(this))); + HandleInterfaceDisconnection(request_navigation_client_); } bool NavigationRequest::NeedsUrlLoader() { @@ -6889,7 +6916,7 @@ // navigations do not, so we must look explicitly. We should not proceed and // claim "ReadyToCommitNavigation" to the delegate if the renderer is gone. if (!GetRenderFrameHost()->IsRenderFrameLive()) { - OnRendererRequestedNavigationCancellation(); + OnNavigationClientDisconnected(0, ""); // DO NOT ADD CODE AFTER THIS, as the NavigationHandle has been deleted // by the previous call. return; @@ -8986,6 +9013,7 @@ DCHECK(ShouldQueueNavigationsWhenPendingCommitRFHExists()); // TODO(crbug.com/1220337): Add some metrics for how often: // - this is run + // - how long navigations remain queued // - how often it ends up having to simply re-queue itself if (resume_commit_closure_) { base::SequencedTaskRunner::GetCurrentDefault()->PostNonNestableTask(
diff --git a/content/browser/renderer_host/navigation_request.h b/content/browser/renderer_host/navigation_request.h index 86bf3cb6..65cea6e 100644 --- a/content/browser/renderer_host/navigation_request.h +++ b/content/browser/renderer_host/navigation_request.h
@@ -7,6 +7,7 @@ #include <memory> #include <string> +#include <utility> #include <vector> #include "base/debug/crash_logging.h" @@ -1135,6 +1136,10 @@ // request and is instead pulled from the committed context on the main frame. bool GetIsThirdPartyCookiesUserBypassEnabled(); + void set_resume_commit_closure_for_test(base::OnceClosure closure) { + resume_commit_closure_ = std::move(closure); + } + private: friend class NavigationRequestTest; @@ -1254,6 +1259,20 @@ CreateNavigationEarlyHintsManagerParams( const network::mojom::EarlyHints& early_hints) override; + // Selecting a `RenderFrameHost` to commit a navigation may occasionally fail. + // When this happens, the navigation will bind a closure to continue the + // navigation and assign it to `resume_commit_closure_`. This closure may run + // even when it is still not possible to proceed; see the comment on the + // `resume_commit_closure_` field for the full details. + + // Corresponds to navigations committing from `OnResponseStarted()`: + void SelectFrameHostForOnResponseStarted( + network::mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints, + bool is_download, + absl::optional<SubresourceLoaderParams> subresource_loader_params); + // TODO(https://crbug.com/1220337): Implement this logic for + // OnRequestFailedInternal() and BeginNavigationImpl() as well. + // To be called whenever a navigation request fails. If |skip_throttles| is // true, the registered NavigationThrottle(s) won't get a chance to intercept // NavigationThrottle::WillFailRequest. It should be used when a request @@ -1422,15 +1441,17 @@ // renderer process. void UpdateCommitNavigationParamsHistory(); - // Called when the renderer requesting a navigation cancellation, or because - // the renderer crashed. - void OnRendererRequestedNavigationCancellation(); + // The disconnect handler for the NavigationClient Mojo interface; used as a + // signal to potentially cancel navigations, e.g. when the renderer replaces + // an existing NavigationClient connection with a new one or when the renderer + // process crashes. + void OnNavigationClientDisconnected(uint32_t reason, + const std::string& description); // Binds the given error_handler to be called when an interface disconnection // happens on the renderer side. void HandleInterfaceDisconnection( - mojo::AssociatedRemote<mojom::NavigationClient>*, - base::OnceClosure error_handler); + mojo::AssociatedRemote<mojom::NavigationClient>&); // When called, this NavigationRequest will no longer interpret the interface // disconnection on the renderer side as an AbortNavigation.
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc index eaa54bf6..b947e76a 100644 --- a/content/browser/renderer_host/render_frame_host_impl.cc +++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -1781,7 +1781,8 @@ if (was_created && render_view_host_->GetMainRenderFrameHost() != this) { CHECK(IsPendingDeletion() || IsInBackForwardCache() || lifecycle_state() == LifecycleStateImpl::kPrerendering || - lifecycle_state() == LifecycleStateImpl::kSpeculative); + lifecycle_state() == LifecycleStateImpl::kSpeculative) + << lifecycle_state(); } // Null out the unload timer; in crash dumps this member will be null only if @@ -4739,13 +4740,13 @@ void RenderFrameHostImpl::ResetOwnedNavigationRequests( NavigationDiscardReason reason) { - if (ShouldQueueNavigationsWhenPendingCommitRFHExists()) { + if (ShouldQueueNavigationsWhenPendingCommitRFHExists() && + lifecycle_state_ == LifecycleStateImpl::kPendingCommit) { // With navigation queueing, pending commit navigations shouldn't get - // canceled, unless the FrameTreeNode, RenderFrameHost, or renderer process + // canceled, unless the FrameTreeNode or renderer process // is gone/will be gone soon. CHECK(reason == NavigationDiscardReason::kRenderProcessGone || - reason == NavigationDiscardReason::kWillRemoveFrame || - reason == NavigationDiscardReason::kRenderFrameHostDestruction); + reason == NavigationDiscardReason::kWillRemoveFrame); } // Move the NavigationRequests to new maps first before deleting them. This // avoids issues if a re-entrant call is made when a NavigationRequest is
diff --git a/content/browser/renderer_host/render_frame_host_impl.h b/content/browser/renderer_host/render_frame_host_impl.h index 0c9248c..9e77db2 100644 --- a/content/browser/renderer_host/render_frame_host_impl.h +++ b/content/browser/renderer_host/render_frame_host_impl.h
@@ -2970,6 +2970,7 @@ bool for_legacy); private: + friend class ResumeCommitClosureSetObserver; friend class RenderFrameHostPermissionsPolicyTest; friend class TestRenderFrameHost; friend class TestRenderViewHost;
diff --git a/content/browser/shared_storage/shared_storage_browsertest.cc b/content/browser/shared_storage/shared_storage_browsertest.cc index 34e2fff..e6602d4 100644 --- a/content/browser/shared_storage/shared_storage_browsertest.cc +++ b/content/browser/shared_storage/shared_storage_browsertest.cc
@@ -2862,61 +2862,6 @@ testing::Bool(), describe_param); -// TODO(yaoxia): when the majority of the blink-style worklet migration is done, -// we should remove this test suite and just parameterize the existing tests. -class BlinkStyleSharedStorageBrowserTest : public SharedStorageBrowserTestBase { - public: - BlinkStyleSharedStorageBrowserTest() { - scoped_feature_list_.InitWithFeaturesAndParameters( - /*enabled_features=*/ - {{blink::features::kSharedStorageAPI, - {{"SharedStorageWorkletImplementationType", "blink_style"}}}}, - /*disabled_features=*/{}); - } - - ~BlinkStyleSharedStorageBrowserTest() override = default; - - private: - base::test::ScopedFeatureList scoped_feature_list_; -}; - -IN_PROC_BROWSER_TEST_F(BlinkStyleSharedStorageBrowserTest, AddModule_Success) { - GURL main_frame_url = https_server()->GetURL("a.test", kSimplePagePath); - EXPECT_TRUE(NavigateToURL(shell(), main_frame_url)); - - base::StringPairs run_function_body_replacement; - run_function_body_replacement.emplace_back("{{SCRIPT_BODY}}", "let a = 1;"); - - GURL module_script_url = https_server()->GetURL( - "a.test", net::test_server::GetFilePathWithReplacements( - "/shared_storage/customizable_script.js", - run_function_body_replacement)); - - EXPECT_TRUE(ExecJs( - shell()->web_contents(), - JsReplace("sharedStorage.worklet.addModule($1)", module_script_url))); -} - -IN_PROC_BROWSER_TEST_F(BlinkStyleSharedStorageBrowserTest, AddModule_Failure) { - GURL main_frame_url = https_server()->GetURL("a.test", kSimplePagePath); - EXPECT_TRUE(NavigateToURL(shell(), main_frame_url)); - - base::StringPairs run_function_body_replacement; - run_function_body_replacement.emplace_back("{{SCRIPT_BODY}}", "a;"); - - GURL module_script_url = https_server()->GetURL( - "a.test", net::test_server::GetFilePathWithReplacements( - "/shared_storage/customizable_script.js", - run_function_body_replacement)); - - EvalJsResult result = EvalJs( - shell()->web_contents(), - JsReplace("sharedStorage.worklet.addModule($1)", module_script_url)); - - EXPECT_THAT(result.error, - testing::HasSubstr("ReferenceError: a is not defined")); -} - class SharedStorageAllowURNsInIframesBrowserTest : public base::test::WithFeatureOverride, public SharedStorageBrowserTestBase {
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc index 579b9224..337624a 100644 --- a/content/child/runtime_features.cc +++ b/content/child/runtime_features.cc
@@ -69,7 +69,7 @@ WebRuntimeFeatures::EnableCompositedSelectionUpdate(true); #endif -#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_CHROMEOS_LACROS) +#if BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_CHROMEOS_LACROS) const bool enable_canvas_2d_image_chromium = command_line.HasSwitch( blink::switches::kEnableGpuMemoryBufferCompositorResources) &&
diff --git a/content/common/features.h b/content/common/features.h index bb21d49..fe79bdbf 100644 --- a/content/common/features.h +++ b/content/common/features.h
@@ -28,6 +28,8 @@ BASE_DECLARE_FEATURE(kOptimizeImmHideCalls); #endif // BUILDFLAG(IS_ANDROID) +CONTENT_EXPORT BASE_DECLARE_FEATURE(kQueueNavigationsWhileWaitingForCommit); + // When enabled, queues navigations instead of cancelling the previous // navigation if the previous navigation is already waiting for commit. // See https://crbug.com/838348 and https://crbug.com/1220337.
diff --git a/content/common/navigation_client.mojom b/content/common/navigation_client.mojom index 58ce94f..03b1251 100644 --- a/content/common/navigation_client.mojom +++ b/content/common/navigation_client.mojom
@@ -208,7 +208,23 @@ pending_remote<blink.mojom.StorageArea>? session_storage_area; }; +// Implemented by the renderer and called by the browser. Used for two purposes: +// +// - When the renderer requests a navigation in a RenderFrame in the same +// process, the renderer binds a NavigationClient interface. Disconnecting +// this interface is used as a signal to potentially cancel the navigation +// (because it was replaced or cancelled). +// - When committing a navigation: the browser asks the targeted RenderFrame to +// bind a NavigationClient and makes exactly one call to `CommitNavigation()` +// or `CommitFailedNavigation()`. Similar to requesting a navigation above, +// disconnecting this interface is used as a signal to cancel the navigation. interface NavigationClient { + // Explicit reset reason when the NavigationClient needs to be reset when + // swapping frames. In this case, it is often desirable to *not* cancel the + // navigation: otherwise, this may interfere with the navigation queueing + // logic (by unexpectedly cancelling the queued navigation). + const uint32 kResetForSwap = 1; + // Tells the renderer that a navigation is ready to commit. // // The renderer should bind the |url_loader_client_endpoints| to an
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc index e183d22..4a069ba 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc
@@ -219,7 +219,7 @@ // enabled. BASE_FEATURE(kCanvas2DImageChromium, "Canvas2DImageChromium", -#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_CHROMEOS_LACROS) +#if BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_CHROMEOS_LACROS) base::FEATURE_ENABLED_BY_DEFAULT #else base::FEATURE_DISABLED_BY_DEFAULT
diff --git a/content/renderer/agent_scheduling_group.cc b/content/renderer/agent_scheduling_group.cc index ecbfc8a9..2c81f98 100644 --- a/content/renderer/agent_scheduling_group.cc +++ b/content/renderer/agent_scheduling_group.cc
@@ -23,13 +23,11 @@ #include "ipc/ipc_channel_mojo.h" #include "ipc/ipc_listener.h" #include "ipc/ipc_sync_channel.h" -#include "third_party/blink/public/common/features.h" #include "third_party/blink/public/mojom/frame/frame.mojom.h" #include "third_party/blink/public/mojom/page/page.mojom.h" #include "third_party/blink/public/mojom/shared_storage/shared_storage_worklet_service.mojom.h" #include "third_party/blink/public/platform/scheduler/web_thread_scheduler.h" #include "third_party/blink/public/web/web_remote_frame.h" -#include "third_party/blink/public/web/web_shared_storage_worklet_thread.h" #include "third_party/blink/public/web/web_view.h" #include "third_party/blink/public/web/web_view_client.h" @@ -99,9 +97,9 @@ // A thread for running shared storage worklet operations. It hosts a worklet // environment belonging to one Document. The object owns itself, cleaning up // when the worklet has shut down. -class LegacySelfOwnedSharedStorageWorkletThread { +class SelfOwnedSharedStorageWorkletThread { public: - LegacySelfOwnedSharedStorageWorkletThread( + SelfOwnedSharedStorageWorkletThread( scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner, mojo::PendingReceiver<blink::mojom::SharedStorageWorkletService> receiver) : main_thread_runner_(std::move(main_thread_runner)) { @@ -109,7 +107,7 @@ auto disconnect_handler = base::BindPostTask( main_thread_runner_, - base::BindOnce(&LegacySelfOwnedSharedStorageWorkletThread:: + base::BindOnce(&SelfOwnedSharedStorageWorkletThread:: OnSharedStorageWorkletServiceDestroyed, weak_factory_.GetWeakPtr())); @@ -136,8 +134,7 @@ base::SequenceBound<shared_storage_worklet::SharedStorageWorkletServiceImpl> worklet_thread_; - base::WeakPtrFactory<LegacySelfOwnedSharedStorageWorkletThread> weak_factory_{ - this}; + base::WeakPtrFactory<SelfOwnedSharedStorageWorkletThread> weak_factory_{this}; }; } // namespace @@ -449,16 +446,8 @@ void AgentSchedulingGroup::CreateSharedStorageWorkletService( mojo::PendingReceiver<blink::mojom::SharedStorageWorkletService> receiver) { - switch (blink::features::kSharedStorageWorkletImplementationType.Get()) { - case blink::features::SharedStorageWorkletImplementationType::kLegacy: - new LegacySelfOwnedSharedStorageWorkletThread( - agent_group_scheduler_->DefaultTaskRunner(), std::move(receiver)); - break; - case blink::features::SharedStorageWorkletImplementationType::kBlinkStyle: - blink::WebSharedStorageWorkletThread::Start( - agent_group_scheduler_->DefaultTaskRunner(), std::move(receiver)); - break; - } + new SelfOwnedSharedStorageWorkletThread( + agent_group_scheduler_->DefaultTaskRunner(), std::move(receiver)); } void AgentSchedulingGroup::BindAssociatedInterfaces(
diff --git a/content/renderer/navigation_client.cc b/content/renderer/navigation_client.cc index c4e3894..808d7bf 100644 --- a/content/renderer/navigation_client.cc +++ b/content/renderer/navigation_client.cc
@@ -118,6 +118,11 @@ weak_ptr_factory_.GetWeakPtr())); } +void NavigationClient::ResetWithoutCancelling() { + navigation_client_receiver_.ResetWithReason( + mojom::NavigationClient::kResetForSwap, ""); +} + void NavigationClient::NotifyNavigationCancellationWindowEnded() { DCHECK(was_initiated_in_this_frame_); renderer_cancellation_listener_remote_->RendererCancellationWindowEnded();
diff --git a/content/renderer/navigation_client.h b/content/renderer/navigation_client.h index a5f4c58..4428b6d 100644 --- a/content/renderer/navigation_client.h +++ b/content/renderer/navigation_client.h
@@ -75,6 +75,8 @@ mojo::PendingRemote<mojom::NavigationRendererCancellationListener> renderer_cancellation_listener_remote); + void ResetWithoutCancelling(); + private: // OnDroppedNavigation is bound from BeginNavigation till CommitNavigation. // During this period, it is called when the interface pipe is closed from the
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index ab6c963..b69ac16 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -3527,6 +3527,13 @@ name.Utf8()); } +void RenderFrameImpl::WillSwap() { + if (navigation_client_impl_ && + ShouldQueueNavigationsWhenPendingCommitRFHExists()) { + navigation_client_impl_->ResetWithoutCancelling(); + } +} + void RenderFrameImpl::WillDetach() { for (auto& observer : observers_) observer.WillDetach();
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h index ff1a05a..f3b4f9b 100644 --- a/content/renderer/render_frame_impl.h +++ b/content/renderer/render_frame_impl.h
@@ -522,6 +522,7 @@ void DidCreateFencedFrame( const blink::RemoteFrameToken& frame_token) override; blink::WebFrame* FindFrame(const blink::WebString& name) override; + void WillSwap() override; void WillDetach() override; void FrameDetached() override; void DidChangeName(const blink::WebString& name) override;
diff --git a/content/shell/browser/shell_content_browser_client.cc b/content/shell/browser/shell_content_browser_client.cc index 283f9084..f56c616 100644 --- a/content/shell/browser/shell_content_browser_client.cc +++ b/content/shell/browser/shell_content_browser_client.cc
@@ -194,6 +194,9 @@ return false; } bool IsEnterprise() override { return false; } + // Profiles aren't supported, so nothing to do here. + void RemoveGoogleGroupsFromPrefsForDeletedProfiles( + PrefService* local_state) override {} }; // Returns the full user agent string for the content shell.
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index 31f131a..56eb128 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn
@@ -2336,6 +2336,7 @@ "../browser/interest_group/test_interest_group_private_aggregation_manager.h", "../browser/loader/cors_origin_pattern_setter_unittest.cc", "../browser/loader/file_url_loader_factory_unittest.cc", + "../browser/loader/keep_alive_url_loader_service_unittest.cc", "../browser/loader/merkle_integrity_source_stream_unittest.cc", "../browser/loader/navigation_early_hints_manager_unittest.cc", "../browser/loader/navigation_url_loader_impl_unittest.cc",
diff --git a/content/test/content_unittests_bundle_data.filelist b/content/test/content_unittests_bundle_data.filelist index 84d2357..d6cbbf8 100644 --- a/content/test/content_unittests_bundle_data.filelist +++ b/content/test/content_unittests_bundle_data.filelist
@@ -1550,7 +1550,6 @@ data/set_cookie.html.mock-http-headers data/set_document_cookie.html data/shared_storage/customizable_module.js -data/shared_storage/customizable_script.js data/shared_storage/erroneous_function_module.js data/shared_storage/erroneous_module.js data/shared_storage/getter_module.js
diff --git a/content/test/data/gpu/vc/webgpu_video.js b/content/test/data/gpu/vc/webgpu_video.js index 611436c9..3769dd30 100644 --- a/content/test/data/gpu/vc/webgpu_video.js +++ b/content/test/data/gpu/vc/webgpu_video.js
@@ -47,7 +47,7 @@ } `, - fragment_external_texture: ` + fragmentExternalTexture: ` @group(0) @binding(0) var mySampler: sampler; @group(0) @binding(1) var myTexture: texture_external; @@ -67,7 +67,7 @@ } `, - vertex_icons: ` + vertexIcons: ` @vertex fn main(@location(0) position : vec2<f32>) -> @builtin(position) vec4<f32> { @@ -75,20 +75,20 @@ } `, - fragment_output_blue: ` + fragmentOutputBlue: ` @fragment fn main() -> @location(0) vec4<f32> { return vec4<f32>(0.11328125, 0.4296875, 0.84375, 1.0); } `, - fragment_output_light_blue: ` + fragmentOutputLightBlue: ` @fragment fn main() -> @location(0) vec4<f32> { return vec4<f32>(0.3515625, 0.50390625, 0.75390625, 1.0); } `, - fragment_output_white: ` + fragmentOutputWhite: ` @fragment fn main() -> @location(0) vec4<f32> { return vec4<f32>(1.0, 1.0, 1.0, 1.0); @@ -161,68 +161,66 @@ useImportTextureApi, capUIFPS, enableBackPressureWorkaround) { initializeFPSPanels(); - const {adapter, device, context, canvas} = gpuSetting; + const {device, context} = gpuSetting; const vertexBufferForVideos = createVertexBufferForVideos(device, videos, videoRows, videoColumns); const swapChainFormat = navigator.gpu.getPreferredCanvasFormat(); - const swapChain = context.configure({ + context.configure({ device, format: swapChainFormat, usage: GPUTextureUsage.RENDER_ATTACHMENT, - alphaMode: "opaque" + alphaMode: 'opaque' }); - let fragmentShaderModule; - if (useImportTextureApi) { - fragmentShaderModule = device.createShaderModule({ - code: wgslShaders.fragment_external_texture, - }); - } else { - fragmentShaderModule = device.createShaderModule({ - code: wgslShaders.fragment, + function getVideoPipeline(fragmentShaderModule) { + return device.createRenderPipeline({ + layout: 'auto', + vertex: { + module: device.createShaderModule({ + code: wgslShaders.vertex, + }), + entryPoint: 'main', + buffers: [{ + arrayStride: 16, + attributes: [ + { + // position + shaderLocation: 0, + offset: 0, + format: 'float32x2', + }, + { + // uv + shaderLocation: 1, + offset: 8, + format: 'float32x2', + } + ], + }], + }, + fragment: { + module: fragmentShaderModule, + entryPoint: 'main', + targets: [{ + format: swapChainFormat, + }] + }, + primitive: { + topology: 'triangle-list', + }, }); } + const pipelineForVideos = getVideoPipeline(device.createShaderModule({ + code: wgslShaders.fragment, + })); - const pipelineForVideos = device.createRenderPipeline({ - layout: "auto", - vertex: { - module: device.createShaderModule({ - code: wgslShaders.vertex, - }), - entryPoint: 'main', - buffers: [{ - arrayStride: 16, - attributes: [ - { - // position - shaderLocation: 0, - offset: 0, - format: 'float32x2', - }, - { - // uv - shaderLocation: 1, - offset: 8, - format: 'float32x2', - } - ], - }], - }, - fragment: { - module: fragmentShaderModule, - entryPoint: 'main', - targets: [{ - format: swapChainFormat, - }] - }, - primitive: { - topology: 'triangle-list', - }, - }); + const externalTexturesPipeline = getVideoPipeline(device.createShaderModule({ + code: wgslShaders.fragmentExternalTexture, + })); const renderPassDescriptorForVideo = { colorAttachments: [ @@ -282,10 +280,10 @@ createVertexBufferForIcons(device, videos, videoRows, videoColumns); const renderPipelineDescriptorForIcon = { - layout: "auto", + layout: 'auto', vertex: { module: device.createShaderModule({ - code: wgslShaders.vertex_icons, + code: wgslShaders.vertexIcons, }), entryPoint: 'main', buffers: [{ @@ -310,7 +308,7 @@ }; renderPipelineDescriptorForIcon.fragment.module = device.createShaderModule({ - code: wgslShaders.fragment_output_blue, + code: wgslShaders.fragmentOutputBlue, }); const pipelineForIcons = device.createRenderPipeline(renderPipelineDescriptorForIcon); @@ -320,58 +318,20 @@ createVertexBufferForAnimation(device, videos, videoRows, videoColumns); renderPipelineDescriptorForIcon.fragment.module = device.createShaderModule({ - code: wgslShaders.fragment_output_white, + code: wgslShaders.fragmentOutputWhite, }); const pipelineForAnimation = device.createRenderPipeline(renderPipelineDescriptorForIcon); // For rendering the borders of the last video renderPipelineDescriptorForIcon.fragment.module = device.createShaderModule({ - code: wgslShaders.fragment_output_light_blue, + code: wgslShaders.fragmentOutputLightBlue, }); renderPipelineDescriptorForIcon.primitive.topology = 'line-list'; const pipelineForVideoBorders = device.createRenderPipeline(renderPipelineDescriptorForIcon); const vertexBufferForFPS = createVertexBufferForFPS(device); - const pipelineForFPS = device.createRenderPipeline({ - layout: "auto", - vertex: { - module: device.createShaderModule({ - code: wgslShaders.vertex, - }), - entryPoint: 'main', - buffers: [{ - arrayStride: 16, - attributes: [ - { - // position - shaderLocation: 0, - offset: 0, - format: 'float32x2', - }, - { - // uv - shaderLocation: 1, - offset: 8, - format: 'float32x2', - } - ], - }], - }, - fragment: { - module: device.createShaderModule({ - code: wgslShaders.fragment, - }), - entryPoint: 'main', - targets: [{ - format: swapChainFormat, - }] - }, - primitive: { - topology: 'triangle-list', - }, - }); const fpsTextures = []; const fpsBindGroups = []; for (let i = 0; i < fpsPanels.length; ++i) { @@ -387,7 +347,8 @@ }); fpsBindGroups[i] = device.createBindGroup({ - layout: pipelineForFPS.getBindGroupLayout(0), + // Re-use the video program to draw FPS panels. + layout: pipelineForVideos.getBindGroupLayout(0), entries: [ { binding: 0, @@ -402,7 +363,7 @@ } // For drawing icons and animated voice bar. Add UI to the command encoder. - let index_voice_bar = 0; + let indexVoiceBar = 0; function addUICommands(passEncoder) { // Icons passEncoder.setPipeline(pipelineForIcons); @@ -410,28 +371,30 @@ passEncoder.draw(videos.length * 6); // Animated voice bar on the last video. - index_voice_bar++; - if (index_voice_bar >= 10) - index_voice_bar = 0; + indexVoiceBar++; + if (indexVoiceBar >= 10) { + indexVoiceBar = 0; + } passEncoder.setPipeline(pipelineForAnimation); passEncoder.setVertexBuffer(0, vertexBufferForAnimation); passEncoder.draw( - /*vertexCount=*/ 6, 1, /*firstVertex=*/ index_voice_bar * 6); + /*vertexCount=*/ 6, 1, /*firstVertex=*/ indexVoiceBar * 6); // Borders of the last video // Is there a way to set the line width? passEncoder.setPipeline(pipelineForVideoBorders); passEncoder.setVertexBuffer(0, vertexBufferForAnimation); // vertexCount = 4 lines * 2 vertices = 8; - // firstVertex = the end of the voice bar vetices = + // firstVertex = the end of the voice bar vertices = // 10 steps * 6 vertices = 60; passEncoder.draw(/*vertexCount=*/ 8, 1, /*firstVertex=*/ 60); } function addFPSCommands(device, passEncoder) { // FPS Panels - passEncoder.setPipeline(pipelineForFPS); + // Re-use the video program to draw FPS panels. + passEncoder.setPipeline(pipelineForVideos); passEncoder.setVertexBuffer(0, vertexBufferForFPS); for (let i = 0; i < fpsPanels.length; ++i) { device.queue.copyExternalImageToTexture( @@ -471,9 +434,11 @@ let lastTimestamp = performance.now(); - const oneFrame = () => { + const oneFrame = async () => { + // Target frame rate: 30 fps when capUIFPS is true. + // Normally rAF runs at the refresh rate of the system/monitor. + const timestamp = performance.now(); if (capUIFPS) { - const timestamp = performance.now(); const elapsed = timestamp - lastTimestamp; if (elapsed < kFrameTime30Fps) { window.requestAnimationFrame(oneFrame); @@ -495,101 +460,29 @@ passEncoder.setPipeline(pipelineForVideos); passEncoder.setVertexBuffer(0, vertexBufferForVideos); - Promise.all(videos.map(video => - (videoIsReady[video.id] ? createImageBitmap(video) : null))). - then((videoFrames) => { - for (let i = 0; i < videos.length; ++i) { - if (videoFrames[i] != undefined) { - device.queue.copyExternalImageToTexture( - {source: videoFrames[i], origin: {x: 0, y: 0}}, - {texture: videoTextures[i]}, - { - width: videos[i].videoWidth, - height: videos[i].videoHeight, - depthOrArrayLayers: 1 - }, - ); - videoIsReady[i] = false; - totalVideoFrames++; - } - } - - for (let i = 0; i < videos.length; ++i) { - const firstVertex = i * 6; - passEncoder.setBindGroup(0, videoBindGroups[i]); - passEncoder.draw(6, 1, firstVertex, 0); - } - - // Add UI on Top of all videos. - if (addUI) { - addUICommands(passEncoder); - } - // Add FPS panels on Top of all videos. - if (addFPS) { - updateFPS(timestamp, videos); - addFPSCommands(device, passEncoder); - } - passEncoder.end(); - device.queue.submit([commandEncoder.finish()]); - - // TODO(crbug.com/1289482): Workaround for backpressure mechanism - // not working properly. - if (enableBackPressureWorkaround) { - device.queue.onSubmittedWorkDone().then(() => { - window.requestAnimationFrame(oneFrame); - }); - } else { - window.requestAnimationFrame(oneFrame); - } - }); - }; - - const oneFrameWithImportTextureApi = () => { - // Target frame rate: 30 fps when capUIFPS is true. rAF might run at 60 fps. - const timestamp = performance.now(); - if (capUIFPS) { - const elapsed = timestamp - lastTimestamp; - if (elapsed < kFrameTime30Fps) { - window.requestAnimationFrame(oneFrameWithImportTextureApi); - return; + const videoFrames = await Promise.all(videos.map(video => { + if (videoIsReady[video.id]) { + return video; } - lastTimestamp = timestamp; - } - - uiFrames++; + })); for (let i = 0; i < videos.length; ++i) { - if (!videoTextures[i] || videoTextures[i].expired) { - videoTextures[i] = - device.importExternalTexture(externalTextureDescriptor[i]); + if (videoFrames[i] != undefined) { + device.queue.copyExternalImageToTexture( + {source: videoFrames[i], origin: {x: 0, y: 0}}, + {texture: videoTextures[i]}, + { + width: videos[i].videoWidth, + height: videos[i].videoHeight, + depthOrArrayLayers: 1 + }, + ); + videoIsReady[i] = false; totalVideoFrames++; } } - const swapChainTexture = context.getCurrentTexture(); - renderPassDescriptorForVideo.colorAttachments[0].view = swapChainTexture - .createView(); - - const commandEncoder = device.createCommandEncoder(); - const passEncoder = - commandEncoder.beginRenderPass(renderPassDescriptorForVideo); - passEncoder.setPipeline(pipelineForVideos); - passEncoder.setVertexBuffer(0, vertexBufferForVideos); - for (let i = 0; i < videos.length; ++i) { - videoBindGroups[i] = device.createBindGroup({ - layout: pipelineForVideos.getBindGroupLayout(0), - entries: [ - { - binding: 0, - resource: sampler, - }, - { - binding: 1, - resource: videoTextures[i], - }, - ], - }); const firstVertex = i * 6; passEncoder.setBindGroup(0, videoBindGroups[i]); passEncoder.draw(6, 1, firstVertex, 0); @@ -610,20 +503,97 @@ const functionDuration = performance.now() - timestamp; const interval30Fps = 1000.0 / 30; // 33.3 ms. if (functionDuration > interval30Fps) { - console.warn( - 'rAF callback oneFrameWithImportTextureApi() takes ', - functionDuration, 'ms, longer than 33.3 ms (1sec/30fps)'); + console.warn(`rAF callback oneFrame() takes ${ + functionDuration}ms, longer than 33.3 ms (1sec/30fps)`); } // TODO(crbug.com/1289482): Workaround for backpressure mechanism // not working properly. if (enableBackPressureWorkaround) { - device.queue.onSubmittedWorkDone().then(() => { - window.requestAnimationFrame(oneFrameWithImportTextureApi); - }); - } else { - window.requestAnimationFrame(oneFrameWithImportTextureApi); + await device.queue.onSubmittedWorkDone(); } + + window.requestAnimationFrame(oneFrame); + }; + + const oneFrameWithImportTextureApi = async () => { + // Target frame rate: 30 fps when capUIFPS is true. + // Normally rAF runs at the refresh rate of the system/monitor. + const timestamp = performance.now(); + if (capUIFPS) { + const elapsed = timestamp - lastTimestamp; + if (elapsed < kFrameTime30Fps) { + window.requestAnimationFrame(oneFrameWithImportTextureApi); + return; + } + lastTimestamp = timestamp; + } + + uiFrames++; + + for (let i = 0; i < videos.length; ++i) { + videoTextures[i] = + device.importExternalTexture(externalTextureDescriptor[i]); + if (videoIsReady[i]) { + totalVideoFrames++; + } + } + + const swapChainTexture = context.getCurrentTexture(); + renderPassDescriptorForVideo.colorAttachments[0].view = swapChainTexture + .createView(); + + const commandEncoder = device.createCommandEncoder(); + const passEncoder = + commandEncoder.beginRenderPass(renderPassDescriptorForVideo); + passEncoder.setPipeline(externalTexturesPipeline); + passEncoder.setVertexBuffer(0, vertexBufferForVideos); + + for (let i = 0; i < videos.length; ++i) { + videoBindGroups[i] = device.createBindGroup({ + layout: externalTexturesPipeline.getBindGroupLayout(0), + entries: [ + { + binding: 0, + resource: sampler, + }, + { + binding: 1, + resource: videoTextures[i], + }, + ], + }); + videoIsReady[i] = false; + const firstVertex = i * 6; + passEncoder.setBindGroup(0, videoBindGroups[i]); + passEncoder.draw(6, 1, firstVertex, 0); + } + + // Add UI on Top of all videos. + if (addUI) { + addUICommands(passEncoder); + } + // Add FPS panels on Top of all videos. + if (addFPS) { + updateFPS(timestamp, videos); + addFPSCommands(device, passEncoder); + } + passEncoder.end(); + device.queue.submit([commandEncoder.finish()]); + + const functionDuration = performance.now() - timestamp; + const interval30Fps = 1000.0 / 30; // 33.3 ms. + if (functionDuration > interval30Fps) { + console.warn(`rAF callback oneFrameWithImportTextureApi() takes ${ + functionDuration}ms, longer than 33.3 ms (1sec/30fps)`); + } + + // TODO(crbug.com/1289482): Workaround for backpressure mechanism + // not working properly. + if (enableBackPressureWorkaround) { + await device.queue.onSubmittedWorkDone(); + } + window.requestAnimationFrame(oneFrameWithImportTextureApi); }; if (useImportTextureApi) {
diff --git a/content/test/data/gpu/vc/webgpu_videos_mxn.html b/content/test/data/gpu/vc/webgpu_videos_mxn.html index fd51110..bf576f4 100644 --- a/content/test/data/gpu/vc/webgpu_videos_mxn.html +++ b/content/test/data/gpu/vc/webgpu_videos_mxn.html
@@ -16,22 +16,22 @@ left: 400px; } </style> - <script type="text/javascript" src="../third_party/stats-js/stats.js"></script> - <script type="text/javascript" src="video_utils.js"></script> - <script type="text/javascript" src="webgpu_video.js"></script> + <script src="../third_party/stats-js/stats.js"></script> + <script src="video_utils.js"></script> + <script src="webgpu_video.js"></script> <script> const _defaultRows = 7; const _defaultColumns = 7; const _totalVideoWidth = 1600; const _totalVideoHeight = 900; - var hasUIOnTop = true; - var hasFPSOnTop = true; - var useImportTextureApi = true; - var capUIFPS = true; - var useLargeSizeVideo = false; - var enableBackPressureWorkaround = true; - var codec = 'vp9'; - var useLocalCamera = false; + let hasUIOnTop = true; + let hasFPSOnTop = true; + let useImportTextureApi = true; + let capUIFPS = true; + let useLargeSizeVideo = false; + let enableBackPressureWorkaround = true; + let codec = 'vp9'; + let useLocalCamera = false; async function startMxNVideos() { const container = document.getElementById('container'); @@ -49,56 +49,66 @@ // Get the UI rendering options from the string. const uiOption = parsedString['ui']; - if (uiOption == 'none') + if (uiOption === 'none') { hasUIOnTop = false; + } const fpsOption = parsedString['fps']; - if (fpsOption == 'none') + if (fpsOption === 'none') { hasFPSOnTop = false; + } const api = parsedString['import_texture_api'] - if (api == '0') + if (api === '0') { useImportTextureApi = false; - else if (api == '1') + } else if (api === '1') { useImportTextureApi = true; + } codecString = parsedString['codec'] - if (codecString == 'vp8') + if (codecString === 'vp8') { codec = 'vp8'; - else if (codecString != 'vp9' && codecString != undefined) + } else if (codecString !== 'vp9' && codecString !== undefined) { console.warn('Unsupported video codec format! Switch to default VP9.'); + } const capFPSOption = parsedString['cap_ui_fps'] - if (capFPSOption == '0') + if (capFPSOption === '0') { capUIFPS = false; - else if (capFPSOption == '1') + } else if (capFPSOption === '1') { capUIFPS = true; + } const useLargeSizeVideoOption = parsedString['use_large_size_video'] - if (useLargeSizeVideoOption == '0') + if (useLargeSizeVideoOption === '0') { useLargeSizeVideo = false; - else if (useLargeSizeVideoOption == '1') + } else if (useLargeSizeVideoOption === '1') { useLargeSizeVideo = true; + } const backPressureWorkaroundOption = parsedString['back_pressure_workaround'] - if (backPressureWorkaroundOption == '0') + if (backPressureWorkaroundOption === '0') { enableBackPressureWorkaround = false; - else if (backPressureWorkaroundOption == '1') + } else if (backPressureWorkaroundOption === '1') { enableBackPressureWorkaround = true; + } - const useLocalCameraOption = parsedString['use_local_camera'] - if (useLocalCameraOption == '0') + const useLocalCameraOption = parsedString['use_local_camera']; + if (useLocalCameraOption === '0') { useLocalCamera = false; - else if (useLocalCameraOption == '1') + } else if (useLocalCameraOption === '1') { useLocalCamera = true; + } // Get the number of video rows and columns from the string. - var videoRows = parsedString['rows']; - var videoColumns = parsedString['columns']; - if (videoRows == undefined) + let videoRows = parsedString['rows']; + let videoColumns = parsedString['columns']; + if (videoRows === undefined) { videoRows = _defaultRows; - if (videoColumns == undefined) + } + if (videoColumns === undefined) { videoColumns = _defaultColumns; + } // Limite the number of videos to 20x20. // The video will not load when the number is too big. @@ -116,7 +126,7 @@ // Create MxN videos and a small video (size = 89x50) at the upper right // corner to similate the one from the local camera. p.innerHTML = "Uploading videos..."; - var videos = []; + const videos = []; const videoCount = videoRows * videoColumns; for (let i = 0; i < videoCount + 1; i++) { const video = document.createElement('video'); @@ -136,7 +146,7 @@ videos[videoRows * videoColumns].height = videoHeight / 3; if (useLocalCamera) { const video = videos[videoRows * videoColumns]; - video.src = null; + video.src = ''; const constraints = { audio: false, video: { width: 640, height: 360 } @@ -167,10 +177,11 @@ </script> </head> -<body onload="startMxNVideos()"> +<body> <div id="container" style="position:absolute; top:0px; left:0px"> <p id="message"></p> </div> + <script>startMxNVideos();</script> </body> </html> \ No newline at end of file
diff --git a/content/test/data/shared_storage/customizable_script.js b/content/test/data/shared_storage/customizable_script.js deleted file mode 100644 index 5633cd5..0000000 --- a/content/test/data/shared_storage/customizable_script.js +++ /dev/null
@@ -1,4 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -{{SCRIPT_BODY}}
diff --git a/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt index 79bb78f1..7111a89 100644 --- a/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt
@@ -369,7 +369,7 @@ # Unexplained timeout crbug.com/1401962 [ android android-sm-a135m ] Pixel_BackgroundImage [ RetryOnFailure ] -crbug.com/1373965 [ fuchsia ] Pixel_VideoStreamFrom2DAlphaCanvas_DisableOOPRaster [ Failure ] +crbug.com/1373965 [ fuchsia oop-c ] Pixel_VideoStreamFrom2DAlphaCanvas_DisableOOPRaster [ Failure ] crbug.com/1376927 [ win10 target-cpu-32 nvidia-0x2184 ] Pixel_MediaFoundationClearDirectComposition [ Failure ]
diff --git a/docs/ios/infra.md b/docs/ios/infra.md index 7396eff..6ff7690 100644 --- a/docs/ios/infra.md +++ b/docs/ios/infra.md
@@ -88,10 +88,10 @@ when the build passes (i.e. when the bot successfully compiles and tests the patch). -`ios-device` compiles for the iOS device architecture (ARM) and runs no tests. +`ios-device` compiles for the iOS device architecture (arm64) and runs no tests. A build is considered successful so long as compilation is successful. -`ios-simulator` compiles for the iOS simulator architecture (x86), and runs +`ios-simulator` compiles for the iOS simulator architecture (x86_64), and runs tests in the iOS [simulator]. A build is considered successful when both compilation and all configured tests succeed. @@ -144,7 +144,8 @@ ], "gn_args": [ "is_debug=true", - "target_cpu=\"x64\"" + "target_cpu=\"x64\"", + "target_environment=\"simulator\"" ], "tests": [ { @@ -163,31 +164,11 @@ The `gn_args` key is a required list of arguments to pass to [GN] to generate the build files. Two GN args are required, `is_debug` and `target_cpu`. Use `is_debug` to define whether to compile for Debug or Release, and `target_cpu` -to define whether to compile for x86, x64, arm, or arm64. The iOS bots typically -perform Debug builds for x86 and x64, and Release builds for arm and arm64. An -x86/x64 build can only be tested on the [iOS simulator], while an arm/arm64 -build can only be tested on a physical device. - -Since Chromium for iOS is shipped as a [universal binary], it's also fairly -common to set `additional_target_cpus`. For simulator builds, we typically set: -```json -"gn_args": [ - "additional_target_cpus=[\"x86\"]", - "is_debug=true", - "target_cpu=\"x64\"" -] -``` -This builds universal binaries which run in 32-bit mode on 32-bit simulators and -64-bit mode on 64-bit simulators. For device builds we typically set: -```json -"gn_args": [ - "additional_target_cpus=[\"arm\"]", - "is_debug=false", - "target_cpu=\"arm64\"" -] -``` -In order to build universal binaries which run in 32-bit mode on 32-bit devices -and 64-bit mode on 64-bit devices. +to define whether to compile for x64 or arm64. `target_environment` is used to +define whether to compile for simulator or device (as it cannot be deduced from +the cpu architecture as there exists both x64 and arm64 macOS devices). The iOS +bots typically perform Debug builds for the same architecture as the machine +running the tests (usually x64), and Release builds for arm64. The `tests` key is an optional list of dictionaries defining tests to run. There are two types of test dictionary, `app` and `include`. An `app` dict defines a @@ -286,7 +267,8 @@ ], "gn_args": [ "is_debug=true", - "target_cpu=\"x64\"" + "target_cpu=\"x64\"", + "target_environment=\"simulator\"" ], "tests": [ { @@ -309,7 +291,8 @@ ], "gn_args": [ "is_debug=true", - "target_cpu=\"x64\"" + "target_cpu=\"x64\"", + "target_environment=\"simulator\"" ], "xcode build version": "9A235", "tests": [ @@ -333,7 +316,8 @@ ], "gn_args": [ "is_debug=true", - "target_cpu=\"x64\"" + "target_cpu=\"x64\"", + "target_environment=\"simulator\"" ], "upload": [ { @@ -386,5 +370,4 @@ [try job access]: https://www.chromium.org/getting-involved/become-a-committer#TOC-Try-job-access [try server]: https://build.chromium.org/p/tryserver.chromium.mac/waterfall [tryserver.chromium.mac]: https://build.chromium.org/p/tryserver.chromium.mac/waterfall -[universal binary]: https://en.wikipedia.org/wiki/Universal_binary [xctest]: https://developer.apple.com/reference/xctest
diff --git a/docs/security/web-mitigation-metrics.md b/docs/security/web-mitigation-metrics.md index 65b76583..29e2db4 100644 --- a/docs/security/web-mitigation-metrics.md +++ b/docs/security/web-mitigation-metrics.md
@@ -192,20 +192,20 @@ [sanitizer]: https://wicg.github.io/sanitizer-api/ -## Private Network Access +## Local Network Access -[Private Network Access][pna] helps to prevent the user agent from +[Local Network Access][lna] helps to prevent the user agent from inadvertently enabling attacks on devices running on a user's local intranet, or services running on the user's machine directly. -* Use of PNA in workers tracked via: +* Use of LNA in workers tracked via: - `kPrivateNetworkAccessFetchesWorkerScript` - `kPrivateNetworkAccessWithWorker` * `kPrivateNetworkAccessNullIpAddress` is an experimental use counter for accesses to the 0.0.0.0 IP address (and the corresponding `[::]` IPv6 address). - These can be used to access localhost on MacOS and Linux and bypass Private + These can be used to access localhost on MacOS and Linux and bypass Local Network Access checks. We intent to block all such requests. See https://crbug.com/1300021 and https://github.com/whatwg/fetch/issues/1117. -[pna]: https://wicg.github.io/private-network-access/ +[lna]: https://wicg.github.io/local-network-access/
diff --git a/extensions/browser/api/media_perception_private/conversion_utils.cc b/extensions/browser/api/media_perception_private/conversion_utils.cc index 07083c6..0c06b541 100644 --- a/extensions/browser/api/media_perception_private/conversion_utils.cc +++ b/extensions/browser/api/media_perception_private/conversion_utils.cc
@@ -24,12 +24,12 @@ HotwordType HotwordTypeProtoToIdl(const mri::HotwordDetection::Type& type) { switch (type) { case mri::HotwordDetection::UNKNOWN_TYPE: - return HOTWORD_TYPE_UNKNOWN_TYPE; + return HotwordType::kUnknownType; case mri::HotwordDetection::OK_GOOGLE: - return HOTWORD_TYPE_OK_GOOGLE; + return HotwordType::kOkGoogle; } NOTREACHED() << "Unknown hotword type: " << type; - return HOTWORD_TYPE_UNKNOWN_TYPE; + return HotwordType::kUnknownType; } Hotword HotwordProtoToIdl(const mri::HotwordDetection::Hotword& hotword) { @@ -145,22 +145,22 @@ const mri::VideoHumanPresenceDetection::LightCondition& condition) { switch (condition) { case mri::VideoHumanPresenceDetection::UNSPECIFIED: - return LIGHT_CONDITION_UNSPECIFIED; + return LightCondition::kUnspecified; case mri::VideoHumanPresenceDetection::NO_CHANGE: - return LIGHT_CONDITION_NO_CHANGE; + return LightCondition::kNoChange; case mri::VideoHumanPresenceDetection::TURNED_ON: - return LIGHT_CONDITION_TURNED_ON; + return LightCondition::kTurnedOn; case mri::VideoHumanPresenceDetection::TURNED_OFF: - return LIGHT_CONDITION_TURNED_OFF; + return LightCondition::kTurnedOff; case mri::VideoHumanPresenceDetection::DIMMER: - return LIGHT_CONDITION_DIMMER; + return LightCondition::kDimmer; case mri::VideoHumanPresenceDetection::BRIGHTER: - return LIGHT_CONDITION_BRIGHTER; + return LightCondition::kBrighter; case mri::VideoHumanPresenceDetection::BLACK_FRAME: - return LIGHT_CONDITION_BLACK_FRAME; + return LightCondition::kBlackFrame; default: NOTREACHED() << "Unknown light condition: " << condition; - return LIGHT_CONDITION_UNSPECIFIED; + return LightCondition::kUnspecified; } } @@ -256,15 +256,15 @@ if (distance.has_units()) { switch (distance.units()) { case mri::Distance::METERS: - return DISTANCE_UNITS_METERS; + return DistanceUnits::kMeters; case mri::Distance::PIXELS: - return DISTANCE_UNITS_PIXELS; + return DistanceUnits::kPixels; case mri::Distance::UNITS_UNSPECIFIED: - return DISTANCE_UNITS_UNSPECIFIED; + return DistanceUnits::kUnspecified; } NOTREACHED() << "Unknown distance units: " << distance.units(); } - return DISTANCE_UNITS_UNSPECIFIED; + return DistanceUnits::kUnspecified; } Distance DistanceProtoToIdl(const mri::Distance& distance) { @@ -280,35 +280,35 @@ FramePerceptionType FramePerceptionTypeProtoToIdl(int type) { switch (type) { case mri::FramePerception::UNKNOWN_TYPE: - return FRAME_PERCEPTION_TYPE_UNKNOWN_TYPE; + return FramePerceptionType::kUnknownType; case mri::FramePerception::FACE_DETECTION: - return FRAME_PERCEPTION_TYPE_FACE_DETECTION; + return FramePerceptionType::kFaceDetection; case mri::FramePerception::PERSON_DETECTION: - return FRAME_PERCEPTION_TYPE_PERSON_DETECTION; + return FramePerceptionType::kPersonDetection; case mri::FramePerception::MOTION_DETECTION: - return FRAME_PERCEPTION_TYPE_MOTION_DETECTION; + return FramePerceptionType::kMotionDetection; } NOTREACHED() << "Unknown frame perception type: " << type; - return FRAME_PERCEPTION_TYPE_UNKNOWN_TYPE; + return FramePerceptionType::kUnknownType; } EntityType EntityTypeProtoToIdl(const mri::Entity& entity) { if (entity.has_type()) { switch (entity.type()) { case mri::Entity::FACE: - return ENTITY_TYPE_FACE; + return EntityType::kFace; case mri::Entity::PERSON: - return ENTITY_TYPE_PERSON; + return EntityType::kPerson; case mri::Entity::MOTION_REGION: - return ENTITY_TYPE_MOTION_REGION; + return EntityType::kMotionRegion; case mri::Entity::LABELED_REGION: - return ENTITY_TYPE_LABELED_REGION; + return EntityType::kLabeledRegion; case mri::Entity::UNSPECIFIED: - return ENTITY_TYPE_UNSPECIFIED; + return EntityType::kUnspecified; } NOTREACHED() << "Unknown entity type: " << entity.type(); } - return ENTITY_TYPE_UNSPECIFIED; + return EntityType::kUnspecified; } Entity EntityProtoToIdl(const mri::Entity& entity) { @@ -395,17 +395,17 @@ if (image_frame.has_format()) { switch (image_frame.format()) { case mri::ImageFrame::RGB: - return IMAGE_FORMAT_RAW; + return ImageFormat::kRaw; case mri::ImageFrame::PNG: - return IMAGE_FORMAT_PNG; + return ImageFormat::kPng; case mri::ImageFrame::JPEG: - return IMAGE_FORMAT_JPEG; + return ImageFormat::kJpeg; case mri::ImageFrame::FORMAT_UNSPECIFIED: - return IMAGE_FORMAT_NONE; + return ImageFormat::kNone; } NOTREACHED() << "Unknown image format: " << image_frame.format(); } - return IMAGE_FORMAT_NONE; + return ImageFormat::kNone; } ImageFrame ImageFrameProtoToIdl(const mri::ImageFrame& image_frame) { @@ -459,40 +459,40 @@ Status StateStatusProtoToIdl(const mri::State& state) { switch (state.status()) { case mri::State::UNINITIALIZED: - return STATUS_UNINITIALIZED; + return Status::kUninitialized; case mri::State::STARTED: - return STATUS_STARTED; + return Status::kStarted; case mri::State::RUNNING: - return STATUS_RUNNING; + return Status::kRunning; case mri::State::SUSPENDED: - return STATUS_SUSPENDED; + return Status::kSuspended; case mri::State::RESTARTING: - return STATUS_RESTARTING; + return Status::kRestarting; case mri::State::STOPPED: - return STATUS_STOPPED; + return Status::kStopped; case mri::State::STATUS_UNSPECIFIED: - return STATUS_NONE; + return Status::kNone; } NOTREACHED() << "Reached status not in switch."; - return STATUS_NONE; + return Status::kNone; } mri::State::Status StateStatusIdlToProto(const State& state) { switch (state.status) { - case STATUS_UNINITIALIZED: + case Status::kUninitialized: return mri::State::UNINITIALIZED; - case STATUS_STARTED: + case Status::kStarted: return mri::State::STARTED; - case STATUS_RUNNING: + case Status::kRunning: return mri::State::RUNNING; - case STATUS_SUSPENDED: + case Status::kSuspended: return mri::State::SUSPENDED; - case STATUS_RESTARTING: + case Status::kRestarting: return mri::State::RESTARTING; - case STATUS_STOPPED: // Process is stopped by MPP. + case Status::kStopped: // Process is stopped by MPP. return mri::State::STOPPED; - case STATUS_SERVICE_ERROR: - case STATUS_NONE: + case Status::kServiceError: + case Status::kNone: return mri::State::STATUS_UNSPECIFIED; } NOTREACHED() << "Reached status not in switch."; @@ -502,35 +502,35 @@ Feature FeatureProtoToIdl(int feature) { switch (feature) { case mri::State::FEATURE_AUTOZOOM: - return FEATURE_AUTOZOOM; + return Feature::kAutozoom; case mri::State::FEATURE_HOTWORD_DETECTION: - return FEATURE_HOTWORD_DETECTION; + return Feature::kHotwordDetection; case mri::State::FEATURE_OCCUPANCY_DETECTION: - return FEATURE_OCCUPANCY_DETECTION; + return Feature::kOccupancyDetection; case mri::State::FEATURE_EDGE_EMBEDDINGS: - return FEATURE_EDGE_EMBEDDINGS; + return Feature::kEdgeEmbeddings; case mri::State::FEATURE_SOFTWARE_CROPPING: - return FEATURE_SOFTWARE_CROPPING; + return Feature::kSoftwareCropping; case mri::State::FEATURE_UNSET: - return FEATURE_NONE; + return Feature::kNone; } NOTREACHED() << "Reached feature not in switch."; - return FEATURE_NONE; + return Feature::kNone; } mri::State::Feature FeatureIdlToProto(const Feature& feature) { switch (feature) { - case FEATURE_AUTOZOOM: + case Feature::kAutozoom: return mri::State::FEATURE_AUTOZOOM; - case FEATURE_HOTWORD_DETECTION: + case Feature::kHotwordDetection: return mri::State::FEATURE_HOTWORD_DETECTION; - case FEATURE_OCCUPANCY_DETECTION: + case Feature::kOccupancyDetection: return mri::State::FEATURE_OCCUPANCY_DETECTION; - case FEATURE_EDGE_EMBEDDINGS: + case Feature::kEdgeEmbeddings: return mri::State::FEATURE_EDGE_EMBEDDINGS; - case FEATURE_SOFTWARE_CROPPING: + case Feature::kSoftwareCropping: return mri::State::FEATURE_SOFTWARE_CROPPING; - case FEATURE_NONE: + case Feature::kNone: return mri::State::FEATURE_UNSET; } NOTREACHED() << "Reached feature not in switch."; @@ -677,8 +677,9 @@ state_result.features.emplace(); for (const auto& feature : state.features()) { const Feature feature_result = FeatureProtoToIdl(feature); - if (feature_result != FEATURE_NONE) + if (feature_result != Feature::kNone) { state_result.features->emplace_back(feature_result); + } } }
diff --git a/extensions/browser/api/media_perception_private/conversion_utils_unittest.cc b/extensions/browser/api/media_perception_private/conversion_utils_unittest.cc index acb1861..8045454 100644 --- a/extensions/browser/api/media_perception_private/conversion_utils_unittest.cc +++ b/extensions/browser/api/media_perception_private/conversion_utils_unittest.cc
@@ -237,12 +237,12 @@ EXPECT_EQ(*entity_result_one.id, 6); ASSERT_TRUE(entity_result_one.confidence); EXPECT_EQ(*entity_result_one.confidence, 7); - EXPECT_EQ(entity_result_one.type, media_perception::ENTITY_TYPE_FACE); + EXPECT_EQ(entity_result_one.type, media_perception::EntityType::kFace); const absl::optional<media_perception::Distance>& distance = entity_result_one.depth; ASSERT_TRUE(distance); - EXPECT_EQ(media_perception::DISTANCE_UNITS_METERS, distance->units); + EXPECT_EQ(media_perception::DistanceUnits::kMeters, distance->units); ASSERT_TRUE(distance->magnitude); EXPECT_EQ(7.5f, *distance->magnitude); @@ -253,7 +253,7 @@ ASSERT_TRUE(entity_result_two.confidence); EXPECT_EQ(*entity_result_two.confidence, 9); EXPECT_EQ(entity_result_two.type, - media_perception::ENTITY_TYPE_MOTION_REGION); + media_perception::EntityType::kMotionRegion); const absl::optional<media_perception::BoundingBox>& bounding_box_result_one = entity_result_one.bounding_box; @@ -284,7 +284,7 @@ ASSERT_TRUE(entity_result_three.entity_label); EXPECT_EQ(*entity_result_three.entity_label, kFakeEntityLabel3); EXPECT_EQ(entity_result_three.type, - media_perception::ENTITY_TYPE_LABELED_REGION); + media_perception::EntityType::kLabeledRegion); // Validate video human presence detection. const absl::optional<media_perception::VideoHumanPresenceDetection>& @@ -294,18 +294,18 @@ ASSERT_TRUE(detection_result->motion_detected_likelihood); EXPECT_EQ(*detection_result->motion_detected_likelihood, 0.2); EXPECT_EQ(detection_result->light_condition, - media_perception::LIGHT_CONDITION_BLACK_FRAME); + media_perception::LightCondition::kBlackFrame); ASSERT_TRUE(detection_result->light_condition_likelihood); EXPECT_EQ(*detection_result->light_condition_likelihood, 0.3); // Validate frame perception types. ASSERT_EQ(3u, frame_perception_result.frame_perception_types->size()); EXPECT_EQ(frame_perception_result.frame_perception_types->at(0), - media_perception::FRAME_PERCEPTION_TYPE_FACE_DETECTION); + media_perception::FramePerceptionType::kFaceDetection); EXPECT_EQ(frame_perception_result.frame_perception_types->at(1), - media_perception::FRAME_PERCEPTION_TYPE_PERSON_DETECTION); + media_perception::FramePerceptionType::kPersonDetection); EXPECT_EQ(frame_perception_result.frame_perception_types->at(2), - media_perception::FRAME_PERCEPTION_TYPE_MOTION_DETECTION); + media_perception::FramePerceptionType::kMotionDetection); } void ValidateAudioPerceptionResult( @@ -352,7 +352,7 @@ const media_perception::Hotword& hotword_one = hotword_detection->hotwords->at(0); - EXPECT_EQ(hotword_one.type, media_perception::HOTWORD_TYPE_OK_GOOGLE); + EXPECT_EQ(hotword_one.type, media_perception::HotwordType::kOkGoogle); ASSERT_TRUE(hotword_one.frame_id); EXPECT_EQ(*hotword_one.frame_id, 987); ASSERT_TRUE(hotword_one.start_timestamp_ms); @@ -366,7 +366,7 @@ const media_perception::Hotword& hotword_two = hotword_detection->hotwords->at(1); - EXPECT_EQ(hotword_two.type, media_perception::HOTWORD_TYPE_UNKNOWN_TYPE); + EXPECT_EQ(hotword_two.type, media_perception::HotwordType::kUnknownType); ASSERT_TRUE(hotword_two.frame_id); EXPECT_EQ(*hotword_two.frame_id, 789); ASSERT_TRUE(hotword_two.start_timestamp_ms); @@ -411,7 +411,7 @@ EXPECT_EQ(*image_frame_result.data_length, 3); ASSERT_TRUE(image_frame_result.frame); EXPECT_EQ((*image_frame_result.frame).size(), 4ul); - EXPECT_EQ(image_frame_result.format, media_perception::IMAGE_FORMAT_JPEG); + EXPECT_EQ(image_frame_result.format, media_perception::ImageFormat::kJpeg); } void ValidatePointIdl(const absl::optional<media_perception::Point>& point, @@ -551,7 +551,7 @@ media_perception::State state_result = media_perception::StateProtoToIdl(state); - EXPECT_EQ(state_result.status, media_perception::STATUS_RUNNING); + EXPECT_EQ(state_result.status, media_perception::Status::kRunning); ASSERT_TRUE(state_result.configuration); EXPECT_EQ(*state_result.configuration, kTestConfiguration); @@ -570,15 +570,15 @@ ASSERT_TRUE(state_result.features); ASSERT_TRUE(state_result.features); ASSERT_EQ(state_result.features->size(), 5u); - EXPECT_EQ(state_result.features->at(0), media_perception::FEATURE_AUTOZOOM); + EXPECT_EQ(state_result.features->at(0), media_perception::Feature::kAutozoom); EXPECT_EQ(state_result.features->at(1), - media_perception::FEATURE_HOTWORD_DETECTION); + media_perception::Feature::kHotwordDetection); EXPECT_EQ(state_result.features->at(2), - media_perception::FEATURE_OCCUPANCY_DETECTION); + media_perception::Feature::kOccupancyDetection); EXPECT_EQ(state_result.features->at(3), - media_perception::FEATURE_EDGE_EMBEDDINGS); + media_perception::Feature::kEdgeEmbeddings); EXPECT_EQ(state_result.features->at(4), - media_perception::FEATURE_SOFTWARE_CROPPING); + media_perception::Feature::kSoftwareCropping); ASSERT_EQ(state_result.named_template_arguments->size(), kNamedTemplateArgumentsSize); @@ -608,27 +608,27 @@ state.set_status(mri::State::STARTED); state.set_device_context(kTestDeviceContext); state_result = media_perception::StateProtoToIdl(state); - EXPECT_EQ(state_result.status, media_perception::STATUS_STARTED); + EXPECT_EQ(state_result.status, media_perception::Status::kStarted); ASSERT_TRUE(state_result.device_context); EXPECT_EQ(*state_result.device_context, kTestDeviceContext); state.set_status(mri::State::RESTARTING); state_result = media_perception::StateProtoToIdl(state); - EXPECT_EQ(state_result.status, media_perception::STATUS_RESTARTING); + EXPECT_EQ(state_result.status, media_perception::Status::kRestarting); state.set_status(mri::State::STOPPED); state_result = media_perception::StateProtoToIdl(state); - EXPECT_EQ(state_result.status, media_perception::STATUS_STOPPED); + EXPECT_EQ(state_result.status, media_perception::Status::kStopped); } TEST(MediaPerceptionConversionUtilsTest, StateIdlToProto) { media_perception::State state; - state.status = media_perception::STATUS_UNINITIALIZED; + state.status = media_perception::Status::kUninitialized; mri::State state_proto = StateIdlToProto(state); EXPECT_EQ(state_proto.status(), mri::State::UNINITIALIZED); EXPECT_FALSE(state_proto.has_device_context()); - state.status = media_perception::STATUS_RUNNING; + state.status = media_perception::Status::kRunning; state.configuration = kTestConfiguration; state.whiteboard.emplace(); state.whiteboard->top_left = @@ -642,12 +642,12 @@ state.whiteboard->aspect_ratio = kWhiteboardAspectRatio; state.features.emplace(); - state.features->emplace_back(media_perception::FEATURE_AUTOZOOM); - state.features->emplace_back(media_perception::FEATURE_HOTWORD_DETECTION); - state.features->emplace_back(media_perception::FEATURE_OCCUPANCY_DETECTION); - state.features->emplace_back(media_perception::FEATURE_EDGE_EMBEDDINGS); - state.features->emplace_back(media_perception::FEATURE_SOFTWARE_CROPPING); - state.features->emplace_back(media_perception::FEATURE_NONE); + state.features->emplace_back(media_perception::Feature::kAutozoom); + state.features->emplace_back(media_perception::Feature::kHotwordDetection); + state.features->emplace_back(media_perception::Feature::kOccupancyDetection); + state.features->emplace_back(media_perception::Feature::kEdgeEmbeddings); + state.features->emplace_back(media_perception::Feature::kSoftwareCropping); + state.features->emplace_back(media_perception::Feature::kNone); // {Number, Empty, String} test cases. state.named_template_arguments = @@ -712,24 +712,24 @@ EXPECT_EQ(state_proto.named_template_arguments(2).str(), kStringTemplateArgumentValue); - state.status = media_perception::STATUS_SUSPENDED; + state.status = media_perception::Status::kSuspended; state.device_context = kTestDeviceContext; state_proto = StateIdlToProto(state); EXPECT_EQ(state_proto.status(), mri::State::SUSPENDED); EXPECT_EQ(state_proto.device_context(), kTestDeviceContext); - state.status = media_perception::STATUS_RESTARTING; + state.status = media_perception::Status::kRestarting; state_proto = StateIdlToProto(state); EXPECT_EQ(state_proto.status(), mri::State::RESTARTING); - state.status = media_perception::STATUS_STOPPED; + state.status = media_perception::Status::kStopped; state_proto = StateIdlToProto(state); EXPECT_EQ(mri::State::STOPPED, state_proto.status()); } TEST(MediaPerceptionConversionUtilsTest, StateIdlToProtoWithVideoStreamParam) { media_perception::State state; - state.status = media_perception::STATUS_RUNNING; + state.status = media_perception::Status::kRunning; state.video_stream_param = std::vector<media_perception::VideoStreamParam>(2); InitializeVideoStreamParam( state.video_stream_param->at(0), kVideoStreamIdForFaceDetection,
diff --git a/extensions/browser/api/media_perception_private/media_perception_api_manager.cc b/extensions/browser/api/media_perception_private/media_perception_api_manager.cc index 9bad0a2..a552aae6 100644 --- a/extensions/browser/api/media_perception_private/media_perception_api_manager.cc +++ b/extensions/browser/api/media_perception_private/media_perception_api_manager.cc
@@ -37,7 +37,7 @@ service_error) { extensions::api::media_perception_private::State state; state.status = - extensions::api::media_perception_private::STATUS_SERVICE_ERROR; + extensions::api::media_perception_private::Status::kServiceError; state.service_error = service_error; return state; } @@ -48,7 +48,7 @@ service_error) { extensions::api::media_perception_private::ProcessState process_state; process_state.status = - extensions::api::media_perception_private::PROCESS_STATUS_SERVICE_ERROR; + extensions::api::media_perception_private::ProcessStatus::kServiceError; process_state.service_error = service_error; return process_state; } @@ -66,7 +66,7 @@ GetFailedToInstallComponentState() { extensions::api::media_perception_private::ComponentState component_state; component_state.status = extensions::api::media_perception_private:: - COMPONENT_STATUS_FAILED_TO_INSTALL; + ComponentStatus::kFailedToInstall; return component_state; } @@ -169,14 +169,14 @@ AnalyticsProcessState::CHANGING_PROCESS_STATE) { std::move(callback).Run( GetStateForServiceError(extensions::api::media_perception_private:: - SERVICE_ERROR_SERVICE_BUSY_LAUNCHING)); + ServiceError::kServiceBusyLaunching)); return; } // Calling getState with process not running returns State UNINITIALIZED. extensions::api::media_perception_private::State state_uninitialized; state_uninitialized.status = - extensions::api::media_perception_private::STATUS_UNINITIALIZED; + extensions::api::media_perception_private::Status::kUninitialized; std::move(callback).Run(std::move(state_uninitialized)); } @@ -203,7 +203,7 @@ installation_error, const base::FilePath& mount_point) { if (installation_error != extensions::api::media_perception_private:: - COMPONENT_INSTALLATION_ERROR_NONE) { + ComponentInstallationError::kNone) { extensions::api::media_perception_private::ComponentState component_state = GetFailedToInstallComponentState(); component_state.installation_error_code = installation_error; @@ -216,7 +216,7 @@ extensions::api::media_perception_private::ComponentState component_state; component_state.status = - extensions::api::media_perception_private::COMPONENT_STATUS_INSTALLED; + extensions::api::media_perception_private::ComponentStatus::kInstalled; component_state.version = ExtractVersionFromMountPoint(mount_point_); std::move(callback).Run(std::move(component_state)); return; @@ -228,20 +228,20 @@ APIComponentProcessStateCallback callback) { DCHECK( process_state.status == - extensions::api::media_perception_private::PROCESS_STATUS_STARTED || + extensions::api::media_perception_private::ProcessStatus::kStarted || process_state.status == - extensions::api::media_perception_private::PROCESS_STATUS_STOPPED); + extensions::api::media_perception_private::ProcessStatus::kStopped); if (analytics_process_state_ == AnalyticsProcessState::CHANGING_PROCESS_STATE) { std::move(callback).Run(GetProcessStateForServiceError( - extensions::api::media_perception_private:: - SERVICE_ERROR_SERVICE_BUSY_LAUNCHING)); + extensions::api::media_perception_private::ServiceError:: + kServiceBusyLaunching)); return; } analytics_process_state_ = AnalyticsProcessState::CHANGING_PROCESS_STATE; if (process_state.status == - extensions::api::media_perception_private::PROCESS_STATUS_STOPPED) { + extensions::api::media_perception_private::ProcessStatus::kStopped) { base::OnceCallback<void(bool)> stop_callback = base::BindOnce(&MediaPerceptionAPIManager::UpstartStopProcessCallback, weak_ptr_factory_.GetWeakPtr(), std::move(callback)); @@ -250,14 +250,14 @@ } if (process_state.status == - extensions::api::media_perception_private::PROCESS_STATUS_STARTED) { + extensions::api::media_perception_private::ProcessStatus::kStarted) { // Check if a component is loaded and add the necessary mount_point // information to the Upstart start command. if (mount_point_.empty()) { analytics_process_state_ = AnalyticsProcessState::IDLE; std::move(callback).Run(GetProcessStateForServiceError( - extensions::api::media_perception_private:: - SERVICE_ERROR_SERVICE_NOT_INSTALLED)); + extensions::api::media_perception_private::ServiceError:: + kServiceNotInstalled)); return; } @@ -274,7 +274,7 @@ analytics_process_state_ = AnalyticsProcessState::IDLE; std::move(callback).Run( GetProcessStateForServiceError(extensions::api::media_perception_private:: - SERVICE_ERROR_SERVICE_NOT_RUNNING)); + ServiceError::kServiceNotRunning)); } void MediaPerceptionAPIManager::SetState( @@ -292,7 +292,7 @@ AnalyticsProcessState::CHANGING_PROCESS_STATE) { std::move(callback).Run( GetStateForServiceError(extensions::api::media_perception_private:: - SERVICE_ERROR_SERVICE_BUSY_LAUNCHING)); + ServiceError::kServiceBusyLaunching)); return; } @@ -346,7 +346,7 @@ std::move(callback).Run( GetStateForServiceError(extensions::api::media_perception_private:: - SERVICE_ERROR_SERVICE_NOT_RUNNING)); + ServiceError::kServiceNotRunning)); } void MediaPerceptionAPIManager::SetStateInternal(APIStateCallback callback, @@ -370,8 +370,8 @@ if (!succeeded) { analytics_process_state_ = AnalyticsProcessState::IDLE; std::move(callback).Run(GetProcessStateForServiceError( - extensions::api::media_perception_private:: - SERVICE_ERROR_SERVICE_NOT_RUNNING)); + extensions::api::media_perception_private::ServiceError:: + kServiceNotRunning)); return; } @@ -400,8 +400,8 @@ if (!delegate) { DLOG(WARNING) << "Could not get MediaPerceptionAPIDelegate."; std::move(callback).Run(GetProcessStateForServiceError( - extensions::api::media_perception_private:: - SERVICE_ERROR_MOJO_CONNECTION_FAILURE)); + extensions::api::media_perception_private::ServiceError:: + kMojoConnectionFailure)); return; } @@ -433,15 +433,15 @@ if (!succeeded) { analytics_process_state_ = AnalyticsProcessState::UNKNOWN; std::move(callback).Run(GetProcessStateForServiceError( - extensions::api::media_perception_private:: - SERVICE_ERROR_MOJO_CONNECTION_FAILURE)); + extensions::api::media_perception_private::ServiceError:: + kMojoConnectionFailure)); return; } analytics_process_state_ = AnalyticsProcessState::RUNNING; extensions::api::media_perception_private::ProcessState state_started; state_started.status = - extensions::api::media_perception_private::PROCESS_STATUS_STARTED; + extensions::api::media_perception_private::ProcessStatus::kStarted; // Check if the extensions api client is available in this context. Code path // used for testing. @@ -456,16 +456,16 @@ if (!delegate) { DLOG(WARNING) << "Could not get MediaPerceptionAPIDelegate."; std::move(callback).Run(GetProcessStateForServiceError( - extensions::api::media_perception_private:: - SERVICE_ERROR_MOJO_CONNECTION_FAILURE)); + extensions::api::media_perception_private::ServiceError:: + kMojoConnectionFailure)); return; } if (!media_perception_service_.is_bound()) { DLOG(WARNING) << "MediaPerceptionService interface not bound."; std::move(callback).Run(GetProcessStateForServiceError( - extensions::api::media_perception_private:: - SERVICE_ERROR_MOJO_CONNECTION_FAILURE)); + extensions::api::media_perception_private::ServiceError:: + kMojoConnectionFailure)); return; } @@ -494,15 +494,15 @@ if (!succeeded) { analytics_process_state_ = AnalyticsProcessState::UNKNOWN; std::move(callback).Run(GetProcessStateForServiceError( - extensions::api::media_perception_private:: - SERVICE_ERROR_SERVICE_UNREACHABLE)); + extensions::api::media_perception_private::ServiceError:: + kServiceUnreachable)); return; } analytics_process_state_ = AnalyticsProcessState::IDLE; // Stopping the process succeeded so fire a callback with status STOPPED. extensions::api::media_perception_private::ProcessState state_stopped; state_stopped.status = - extensions::api::media_perception_private::PROCESS_STATUS_STOPPED; + extensions::api::media_perception_private::ProcessStatus::kStopped; std::move(callback).Run(std::move(state_stopped)); } @@ -513,7 +513,7 @@ analytics_process_state_ = AnalyticsProcessState::IDLE; std::move(callback).Run( GetStateForServiceError(extensions::api::media_perception_private:: - SERVICE_ERROR_SERVICE_NOT_RUNNING)); + ServiceError::kServiceNotRunning)); return; } analytics_process_state_ = AnalyticsProcessState::RUNNING; @@ -526,14 +526,14 @@ analytics_process_state_ = AnalyticsProcessState::UNKNOWN; std::move(callback).Run( GetStateForServiceError(extensions::api::media_perception_private:: - SERVICE_ERROR_SERVICE_UNREACHABLE)); + ServiceError::kServiceUnreachable)); return; } analytics_process_state_ = AnalyticsProcessState::IDLE; // Stopping the process succeeded so fire a callback with status STOPPED. extensions::api::media_perception_private::State state_stopped; state_stopped.status = - extensions::api::media_perception_private::STATUS_STOPPED; + extensions::api::media_perception_private::Status::kStopped; std::move(callback).Run(std::move(state_stopped)); } @@ -544,7 +544,7 @@ analytics_process_state_ = AnalyticsProcessState::IDLE; std::move(callback).Run( GetStateForServiceError(extensions::api::media_perception_private:: - SERVICE_ERROR_SERVICE_NOT_RUNNING)); + ServiceError::kServiceNotRunning)); return; } analytics_process_state_ = AnalyticsProcessState::RUNNING; @@ -557,7 +557,7 @@ if (!result.has_value()) { std::move(callback).Run( GetStateForServiceError(extensions::api::media_perception_private:: - SERVICE_ERROR_SERVICE_UNREACHABLE)); + ServiceError::kServiceUnreachable)); return; } std::move(callback).Run( @@ -570,8 +570,8 @@ absl::optional<mri::Diagnostics> result) { if (!result.has_value()) { std::move(callback).Run(GetDiagnosticsForServiceError( - extensions::api::media_perception_private:: - SERVICE_ERROR_SERVICE_UNREACHABLE)); + extensions::api::media_perception_private::ServiceError:: + kServiceUnreachable)); return; } std::move(callback).Run(
diff --git a/extensions/browser/api/media_perception_private/media_perception_api_manager_unittest.cc b/extensions/browser/api/media_perception_private/media_perception_api_manager_unittest.cc index bc9bce73..d683a96 100644 --- a/extensions/browser/api/media_perception_private/media_perception_api_manager_unittest.cc +++ b/extensions/browser/api/media_perception_private/media_perception_api_manager_unittest.cc
@@ -196,7 +196,7 @@ TEST_F(MediaPerceptionAPIManagerTest, UpstartFailure) { upstart_client()->set_enqueue_requests(true); media_perception::State state; - state.status = media_perception::STATUS_RUNNING; + state.status = media_perception::Status::kRunning; base::RunLoop run_loop; media_perception::ServiceError service_error; @@ -205,18 +205,18 @@ run_loop.QuitClosure(), &service_error)); EXPECT_TRUE(upstart_client()->HandleNextUpstartRequest(false)); run_loop.Run(); - EXPECT_EQ(media_perception::SERVICE_ERROR_SERVICE_NOT_RUNNING, service_error); + EXPECT_EQ(media_perception::ServiceError::kServiceNotRunning, service_error); // Check that after a failed request, setState RUNNING will go through. upstart_client()->set_enqueue_requests(false); - EXPECT_EQ(media_perception::SERVICE_ERROR_NONE, + EXPECT_EQ(media_perception::ServiceError::kNone, SetStateAndWaitForResponse(manager_.get(), state)); } TEST_F(MediaPerceptionAPIManagerTest, ProcessStateUpstartFailure) { upstart_client()->set_enqueue_requests(true); media_perception::ProcessState process_state; - process_state.status = media_perception::PROCESS_STATUS_STARTED; + process_state.status = media_perception::ProcessStatus::kStarted; base::RunLoop run_loop; media_perception::ServiceError service_error; @@ -226,11 +226,11 @@ run_loop.QuitClosure(), &service_error)); EXPECT_TRUE(upstart_client()->HandleNextUpstartRequest(false)); run_loop.Run(); - EXPECT_EQ(media_perception::SERVICE_ERROR_SERVICE_NOT_RUNNING, service_error); + EXPECT_EQ(media_perception::ServiceError::kServiceNotRunning, service_error); // Check that after a failed request, setState RUNNING will go through. upstart_client()->set_enqueue_requests(false); - EXPECT_EQ(media_perception::SERVICE_ERROR_NONE, + EXPECT_EQ(media_perception::ServiceError::kNone, SetComponentProcessStateAndWaitForResponse(manager_.get(), process_state)); } @@ -238,7 +238,7 @@ TEST_F(MediaPerceptionAPIManagerTest, UpstartStopFailure) { upstart_client()->set_enqueue_requests(true); media_perception::State state; - state.status = media_perception::STATUS_STOPPED; + state.status = media_perception::Status::kStopped; base::RunLoop run_loop; media_perception::ServiceError service_error; @@ -247,18 +247,18 @@ run_loop.QuitClosure(), &service_error)); EXPECT_TRUE(upstart_client()->HandleNextUpstartRequest(false)); run_loop.Run(); - EXPECT_EQ(media_perception::SERVICE_ERROR_SERVICE_UNREACHABLE, service_error); + EXPECT_EQ(media_perception::ServiceError::kServiceUnreachable, service_error); // Check that after a failed request, STOPPED will go through. upstart_client()->set_enqueue_requests(false); - EXPECT_EQ(media_perception::SERVICE_ERROR_NONE, + EXPECT_EQ(media_perception::ServiceError::kNone, SetStateAndWaitForResponse(manager_.get(), state)); } TEST_F(MediaPerceptionAPIManagerTest, ProcessStateUpstartStopFailure) { upstart_client()->set_enqueue_requests(true); media_perception::ProcessState process_state; - process_state.status = media_perception::PROCESS_STATUS_STOPPED; + process_state.status = media_perception::ProcessStatus::kStopped; base::RunLoop run_loop; media_perception::ServiceError service_error; @@ -268,11 +268,11 @@ run_loop.QuitClosure(), &service_error)); EXPECT_TRUE(upstart_client()->HandleNextUpstartRequest(false)); run_loop.Run(); - EXPECT_EQ(media_perception::SERVICE_ERROR_SERVICE_UNREACHABLE, service_error); + EXPECT_EQ(media_perception::ServiceError::kServiceUnreachable, service_error); // Check that after a failed request, STOPPED will go through. upstart_client()->set_enqueue_requests(false); - EXPECT_EQ(media_perception::SERVICE_ERROR_NONE, + EXPECT_EQ(media_perception::ServiceError::kNone, SetComponentProcessStateAndWaitForResponse(manager_.get(), process_state)); } @@ -280,7 +280,7 @@ TEST_F(MediaPerceptionAPIManagerTest, UpstartRestartFailure) { upstart_client()->set_enqueue_requests(true); media_perception::State state; - state.status = media_perception::STATUS_RESTARTING; + state.status = media_perception::Status::kRestarting; base::RunLoop run_loop; media_perception::ServiceError service_error; @@ -289,19 +289,19 @@ run_loop.QuitClosure(), &service_error)); EXPECT_TRUE(upstart_client()->HandleNextUpstartRequest(false)); run_loop.Run(); - EXPECT_EQ(media_perception::SERVICE_ERROR_SERVICE_NOT_RUNNING, service_error); + EXPECT_EQ(media_perception::ServiceError::kServiceNotRunning, service_error); // Check that after a failed request, setState restarted will still go // through. upstart_client()->set_enqueue_requests(false); - EXPECT_EQ(media_perception::SERVICE_ERROR_NONE, + EXPECT_EQ(media_perception::ServiceError::kNone, SetStateAndWaitForResponse(manager_.get(), state)); } TEST_F(MediaPerceptionAPIManagerTest, UpstartStall) { upstart_client()->set_enqueue_requests(true); media_perception::State state; - state.status = media_perception::STATUS_RUNNING; + state.status = media_perception::Status::kRunning; base::RunLoop run_loop; media_perception::ServiceError service_error; @@ -309,27 +309,27 @@ base::BindOnce(&RecordServiceErrorFromStateAndRunClosure, run_loop.QuitClosure(), &service_error)); - EXPECT_EQ(media_perception::SERVICE_ERROR_SERVICE_BUSY_LAUNCHING, + EXPECT_EQ(media_perception::ServiceError::kServiceBusyLaunching, GetStateAndWaitForResponse(manager_.get())); - EXPECT_EQ(media_perception::SERVICE_ERROR_SERVICE_BUSY_LAUNCHING, + EXPECT_EQ(media_perception::ServiceError::kServiceBusyLaunching, SetStateAndWaitForResponse(manager_.get(), state)); EXPECT_TRUE(upstart_client()->HandleNextUpstartRequest(true)); run_loop.Run(); - EXPECT_EQ(media_perception::SERVICE_ERROR_NONE, service_error); + EXPECT_EQ(media_perception::ServiceError::kNone, service_error); // Verify that after the slow start, things works as normal. upstart_client()->set_enqueue_requests(false); - EXPECT_EQ(media_perception::SERVICE_ERROR_NONE, + EXPECT_EQ(media_perception::ServiceError::kNone, GetStateAndWaitForResponse(manager_.get())); - state.status = media_perception::STATUS_SUSPENDED; - EXPECT_EQ(media_perception::SERVICE_ERROR_NONE, + state.status = media_perception::Status::kSuspended; + EXPECT_EQ(media_perception::ServiceError::kNone, SetStateAndWaitForResponse(manager_.get(), state)); } TEST_F(MediaPerceptionAPIManagerTest, SetComponentProcessStateUpstartStall) { upstart_client()->set_enqueue_requests(true); media_perception::ProcessState process_state; - process_state.status = media_perception::PROCESS_STATUS_STARTED; + process_state.status = media_perception::ProcessStatus::kStarted; base::RunLoop run_loop; media_perception::ServiceError service_error; @@ -338,24 +338,24 @@ base::BindOnce(&RecordServiceErrorFromProcessStateAndRunClosure, run_loop.QuitClosure(), &service_error)); - EXPECT_EQ(media_perception::SERVICE_ERROR_SERVICE_BUSY_LAUNCHING, + EXPECT_EQ(media_perception::ServiceError::kServiceBusyLaunching, SetComponentProcessStateAndWaitForResponse(manager_.get(), process_state)); EXPECT_TRUE(upstart_client()->HandleNextUpstartRequest(true)); run_loop.Run(); - EXPECT_EQ(media_perception::SERVICE_ERROR_NONE, service_error); + EXPECT_EQ(media_perception::ServiceError::kNone, service_error); // Verify that after the slow start, things works as normal. upstart_client()->set_enqueue_requests(false); - process_state.status = media_perception::PROCESS_STATUS_STARTED; - EXPECT_EQ(media_perception::SERVICE_ERROR_NONE, + process_state.status = media_perception::ProcessStatus::kStarted; + EXPECT_EQ(media_perception::ServiceError::kNone, SetComponentProcessStateAndWaitForResponse(manager_.get(), process_state)); } TEST_F(MediaPerceptionAPIManagerTest, UpstartRestartStall) { upstart_client()->set_enqueue_requests(true); media_perception::State state; - state.status = media_perception::STATUS_RESTARTING; + state.status = media_perception::Status::kRestarting; base::RunLoop run_loop; media_perception::ServiceError service_error; @@ -363,36 +363,36 @@ base::BindOnce(&RecordServiceErrorFromStateAndRunClosure, run_loop.QuitClosure(), &service_error)); - EXPECT_EQ(media_perception::SERVICE_ERROR_SERVICE_BUSY_LAUNCHING, + EXPECT_EQ(media_perception::ServiceError::kServiceBusyLaunching, GetStateAndWaitForResponse(manager_.get())); - EXPECT_EQ(media_perception::SERVICE_ERROR_SERVICE_BUSY_LAUNCHING, + EXPECT_EQ(media_perception::ServiceError::kServiceBusyLaunching, SetStateAndWaitForResponse(manager_.get(), state)); EXPECT_TRUE(upstart_client()->HandleNextUpstartRequest(true)); run_loop.Run(); - EXPECT_EQ(media_perception::SERVICE_ERROR_NONE, service_error); + EXPECT_EQ(media_perception::ServiceError::kNone, service_error); // Verify that after the slow start, things works as normal. upstart_client()->set_enqueue_requests(false); - EXPECT_EQ(media_perception::SERVICE_ERROR_NONE, + EXPECT_EQ(media_perception::ServiceError::kNone, GetStateAndWaitForResponse(manager_.get())); - state.status = media_perception::STATUS_RUNNING; - EXPECT_EQ(media_perception::SERVICE_ERROR_NONE, + state.status = media_perception::Status::kRunning; + EXPECT_EQ(media_perception::ServiceError::kNone, SetStateAndWaitForResponse(manager_.get(), state)); } TEST_F(MediaPerceptionAPIManagerTest, MediaAnalyticsDbusError) { media_perception::State state; - state.status = media_perception::STATUS_RUNNING; - EXPECT_EQ(media_perception::SERVICE_ERROR_NONE, + state.status = media_perception::Status::kRunning; + EXPECT_EQ(media_perception::ServiceError::kNone, SetStateAndWaitForResponse(manager_.get(), state)); // Disable the functionality of the fake process. ash::FakeMediaAnalyticsClient::Get()->set_process_running(false); - EXPECT_EQ(media_perception::SERVICE_ERROR_SERVICE_UNREACHABLE, + EXPECT_EQ(media_perception::ServiceError::kServiceUnreachable, GetStateAndWaitForResponse(manager_.get())); - EXPECT_EQ(media_perception::SERVICE_ERROR_SERVICE_UNREACHABLE, + EXPECT_EQ(media_perception::ServiceError::kServiceUnreachable, SetStateAndWaitForResponse(manager_.get(), state)); // Check that getting diagnostics also errors in the same way. - EXPECT_EQ(media_perception::SERVICE_ERROR_SERVICE_UNREACHABLE, + EXPECT_EQ(media_perception::ServiceError::kServiceUnreachable, GetDiagnosticsAndWaitForResponse(manager_.get())); }
diff --git a/extensions/browser/api/media_perception_private/media_perception_private_api.cc b/extensions/browser/api/media_perception_private/media_perception_private_api.cc index e0359ae..ddcd2a8 100644 --- a/extensions/browser/api/media_perception_private/media_perception_private_api.cc +++ b/extensions/browser/api/media_perception_private/media_perception_private_api.cc
@@ -41,13 +41,13 @@ args()); EXTENSION_FUNCTION_VALIDATE(params); if (params->state.status != - extensions::api::media_perception_private::STATUS_RUNNING && + extensions::api::media_perception_private::Status::kRunning && params->state.status != - extensions::api::media_perception_private::STATUS_SUSPENDED && + extensions::api::media_perception_private::Status::kSuspended && params->state.status != - extensions::api::media_perception_private::STATUS_RESTARTING && + extensions::api::media_perception_private::Status::kRestarting && params->state.status != - extensions::api::media_perception_private::STATUS_STOPPED) { + extensions::api::media_perception_private::Status::kStopped) { return RespondNow( Error("Status can only be set to RUNNING, SUSPENDED, RESTARTING, or " "STOPPED.")); @@ -55,7 +55,7 @@ // Check that device context is only provided with SetState RUNNING. if (params->state.status != - extensions::api::media_perception_private::STATUS_RUNNING && + extensions::api::media_perception_private::Status::kRunning && params->state.device_context) { return RespondNow( Error("Only provide deviceContext with SetState RUNNING.")); @@ -63,7 +63,7 @@ // Check that video stream parameters are only provided with SetState RUNNING. if (params->state.status != - extensions::api::media_perception_private::STATUS_RUNNING && + extensions::api::media_perception_private::Status::kRunning && params->state.video_stream_param) { return RespondNow( Error("SetState: status must be RUNNING to set videoStreamParam.")); @@ -72,14 +72,14 @@ // Check that configuration is only provided with SetState RUNNING. if (params->state.configuration && params->state.status != - extensions::api::media_perception_private::STATUS_RUNNING) { + extensions::api::media_perception_private::Status::kRunning) { return RespondNow(Error("Status must be RUNNING to set configuration.")); } // Check that whiteboard configuration is only provided with SetState RUNNING. if (params->state.whiteboard && params->state.status != - extensions::api::media_perception_private::STATUS_RUNNING) { + extensions::api::media_perception_private::Status::kRunning) { return RespondNow(Error( "Status must be RUNNING to set whiteboard configuration.")); } @@ -164,9 +164,9 @@ SetComponentProcessState::Params::Create(args()); EXTENSION_FUNCTION_VALIDATE(params); if (params->process_state.status != - extensions::api::media_perception_private::PROCESS_STATUS_STARTED && + extensions::api::media_perception_private::ProcessStatus::kStarted && params->process_state.status != - extensions::api::media_perception_private::PROCESS_STATUS_STOPPED) { + extensions::api::media_perception_private::ProcessStatus::kStopped) { return RespondNow( Error("Cannot set process_state to something other than STARTED or " "STOPPED."));
diff --git a/extensions/browser/api/media_perception_private/media_perception_private_apitest.cc b/extensions/browser/api/media_perception_private/media_perception_private_apitest.cc index 141c997..d138d1e 100644 --- a/extensions/browser/api/media_perception_private/media_perception_private_apitest.cc +++ b/extensions/browser/api/media_perception_private/media_perception_private_apitest.cc
@@ -34,12 +34,12 @@ LoadCrOSComponentCallback load_callback) override { // For testing both success and failure cases, test class has the LIGHT // component succeed install and the others fail. - if (type == media_perception::COMPONENT_TYPE_LIGHT) { + if (type == media_perception::ComponentType::kLight) { base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask( FROM_HERE, base::BindOnce( std::move(load_callback), - media_perception::COMPONENT_INSTALLATION_ERROR_NONE, + media_perception::ComponentInstallationError::kNone, base::FilePath("/run/imageloader/rtanalytics-light/1.0"))); return; } @@ -47,7 +47,7 @@ base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask( FROM_HERE, base::BindOnce(std::move(load_callback), - media_perception::COMPONENT_INSTALLATION_ERROR_NOT_FOUND, + media_perception::ComponentInstallationError::kNotFound, base::FilePath())); }
diff --git a/extensions/browser/permissions_manager_unittest.cc b/extensions/browser/permissions_manager_unittest.cc index 7c4f573..3628c48 100644 --- a/extensions/browser/permissions_manager_unittest.cc +++ b/extensions/browser/permissions_manager_unittest.cc
@@ -40,9 +40,12 @@ PermissionsManagerUnittest& operator=(const PermissionsManagerUnittest&) = delete; + scoped_refptr<const Extension> AddExtension(const std::string& name); scoped_refptr<const Extension> AddExtensionWithHostPermission( const std::string& name, const std::string& host_permission); + scoped_refptr<const Extension> AddExtensionWithActiveTab( + const std::string& name); // Returns the restricted sites stored in `manager_`. std::set<url::Origin> GetRestrictedSitesFromManager(); @@ -79,6 +82,11 @@ extension_prefs_ = ExtensionPrefs::Get(browser_context()); } +scoped_refptr<const Extension> PermissionsManagerUnittest::AddExtension( + const std::string& name) { + return AddExtensionWithHostPermission(name, ""); +} + scoped_refptr<const Extension> PermissionsManagerUnittest::AddExtensionWithHostPermission( const std::string& name, @@ -97,6 +105,21 @@ return extension; } +scoped_refptr<const Extension> +PermissionsManagerUnittest::AddExtensionWithActiveTab(const std::string& name) { + scoped_refptr<const extensions::Extension> extension = + extensions::ExtensionBuilder(name) + .SetManifestVersion(3) + .AddPermission("activeTab") + .Build(); + DCHECK(extension->permissions_data()->HasAPIPermission("activeTab")); + + ExtensionRegistryFactory::GetForBrowserContext(browser_context()) + ->AddEnabled(extension); + + return extension; +} + const base::Value* PermissionsManagerUnittest::GetRestrictedSitesFromPrefs() { const base::Value::Dict& permissions = extension_prefs_->GetPrefAsDictionary(kUserPermissions); @@ -315,8 +338,7 @@ } TEST_F(PermissionsManagerUnittest, GetSiteAccess_ActiveTab) { - auto extension = - AddExtensionWithHostPermission("ActiveTab Extension", "activeTab"); + auto extension = AddExtensionWithActiveTab("ActiveTab Extension"); const GURL url("https://example.com"); { @@ -332,7 +354,7 @@ } TEST_F(PermissionsManagerUnittest, GetSiteAccess_NoHostPermissions) { - auto extension = AddExtensionWithHostPermission("Test", "Extension"); + auto extension = AddExtension("Test"); const GURL url("https://example.com"); {
diff --git a/extensions/common/api/_permission_features.json b/extensions/common/api/_permission_features.json index ffd2ace..b318ef1 100644 --- a/extensions/common/api/_permission_features.json +++ b/extensions/common/api/_permission_features.json
@@ -11,6 +11,10 @@ // chrome/test/data/extensions/api_test/stubs_app/manifest.json { + "activeTab": { + "channel": "stable", + "extension_types": ["extension", "legacy_packaged_app"] + }, "alarms": { "channel": "stable", "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
diff --git a/extensions/common/api/media_perception_private.idl b/extensions/common/api/media_perception_private.idl index 6563dac2..088be53 100644 --- a/extensions/common/api/media_perception_private.idl +++ b/extensions/common/api/media_perception_private.idl
@@ -3,7 +3,7 @@ // found in the LICENSE file. // Private API for receiving real-time media perception information. -[platforms=("chromeos")] +[platforms=("chromeos"), modernised_enums] namespace mediaPerceptionPrivate { enum Status { // The media analytics process is waiting to be launched.
diff --git a/extensions/common/permissions/extensions_api_permissions.cc b/extensions/common/permissions/extensions_api_permissions.cc index e175875f..4362f299 100644 --- a/extensions/common/permissions/extensions_api_permissions.cc +++ b/extensions/common/permissions/extensions_api_permissions.cc
@@ -30,6 +30,7 @@ // add the corresponding permission message rule to // ChromePermissionMessageRule::GetAllRules as well. constexpr APIPermissionInfo::InitInfo permissions_to_register[] = { + {APIPermissionID::kActiveTab, "activeTab"}, {APIPermissionID::kAlarms, "alarms", APIPermissionInfo::kFlagDoesNotRequireManagedSessionFullLoginWarning}, {APIPermissionID::kAlphaEnabled, "app.window.alpha",
diff --git a/gpu/command_buffer/service/skia_utils.cc b/gpu/command_buffer/service/skia_utils.cc index cc5dea19..e84afdb 100644 --- a/gpu/command_buffer/service/skia_utils.cc +++ b/gpu/command_buffer/service/skia_utils.cc
@@ -359,8 +359,10 @@ const absl::optional<uint32_t>& sync_cpu_memory_limit = context_provider->GetSyncCpuMemoryLimit(); if (sync_cpu_memory_limit.has_value()) { - uint64_t total_allocated_bytes = gpu::vma::GetTotalAllocatedMemory( - context_provider->GetDeviceQueue()->vma_allocator()); + uint64_t total_allocated_bytes = + gpu::vma::GetTotalAllocatedAndUsedMemory( + context_provider->GetDeviceQueue()->vma_allocator()) + .first; if (total_allocated_bytes > sync_cpu_memory_limit.value()) { return true; }
diff --git a/gpu/vulkan/vma_wrapper.cc b/gpu/vulkan/vma_wrapper.cc index b2d91aa..20ec6a035 100644 --- a/gpu/vulkan/vma_wrapper.cc +++ b/gpu/vulkan/vma_wrapper.cc
@@ -4,6 +4,8 @@ #include "gpu/vulkan/vma_wrapper.h" +#include <algorithm> + #include <vk_mem_alloc.h> #include "base/metrics/histogram_functions.h" @@ -180,18 +182,23 @@ vmaGetBudget(allocator, budget); } -uint64_t GetTotalAllocatedMemory(VmaAllocator allocator) { +std::pair<uint64_t, uint64_t> GetTotalAllocatedAndUsedMemory( + VmaAllocator allocator) { + // See GrVkMemoryAllocatorImpl::totalAllocatedAndUsedMemory() in skia for + // reference. VmaBudget budget[VK_MAX_MEMORY_HEAPS]; vmaGetBudget(allocator, budget); const VkPhysicalDeviceMemoryProperties* pPhysicalDeviceMemoryProperties; vmaGetMemoryProperties(allocator, &pPhysicalDeviceMemoryProperties); - uint64_t total_allocated_memory = 0; + uint64_t total_allocated_memory = 0, total_used_memory = 0; for (uint32_t i = 0; i < pPhysicalDeviceMemoryProperties->memoryHeapCount; ++i) { - total_allocated_memory += - std::max(budget[i].blockBytes, budget[i].allocationBytes); + total_allocated_memory += budget[i].blockBytes; + total_used_memory += budget[i].allocationBytes; } - return total_allocated_memory; + DCHECK_LE(total_used_memory, total_allocated_memory); + + return {total_allocated_memory, total_used_memory}; } } // namespace vma
diff --git a/gpu/vulkan/vma_wrapper.h b/gpu/vulkan/vma_wrapper.h index 47096ae7..bb98615c 100644 --- a/gpu/vulkan/vma_wrapper.h +++ b/gpu/vulkan/vma_wrapper.h
@@ -5,6 +5,8 @@ #ifndef GPU_VULKAN_VMA_WRAPPER_H_ #define GPU_VULKAN_VMA_WRAPPER_H_ +#include <algorithm> + #include <vulkan/vulkan_core.h> #include "base/component_export.h" @@ -99,8 +101,10 @@ COMPONENT_EXPORT(VULKAN) void GetBudget(VmaAllocator allocator, VmaBudget* budget); +// Allocated and used, respectively. COMPONENT_EXPORT(VULKAN) -uint64_t GetTotalAllocatedMemory(VmaAllocator allocator); +std::pair<uint64_t, uint64_t> GetTotalAllocatedAndUsedMemory( + VmaAllocator allocator); } // namespace vma } // namespace gpu
diff --git a/gpu/vulkan/vulkan_device_queue.cc b/gpu/vulkan/vulkan_device_queue.cc index 1d91992..3af9baf7 100644 --- a/gpu/vulkan/vulkan_device_queue.cc +++ b/gpu/vulkan/vulkan_device_queue.cc
@@ -12,6 +12,9 @@ #include "base/logging.h" #include "base/ranges/algorithm.h" #include "base/strings/stringprintf.h" +#include "base/task/single_thread_task_runner.h" +#include "base/trace_event/memory_dump_manager.h" +#include "base/trace_event/process_memory_dump.h" #include "build/build_config.h" #include "gpu/config/gpu_info.h" // nogncheck #include "gpu/config/vulkan_info.h" @@ -31,6 +34,7 @@ : vk_instance_(instance->vk_instance()), instance_(instance) {} VulkanDeviceQueue::~VulkanDeviceQueue() { + // Destroy() should have been called. DCHECK_EQ(static_cast<VkPhysicalDevice>(VK_NULL_HANDLE), vk_physical_device_); DCHECK_EQ(static_cast<VkDevice>(VK_NULL_HANDLE), vk_device_); DCHECK_EQ(static_cast<VkQueue>(VK_NULL_HANDLE), vk_queue_); @@ -337,6 +341,11 @@ } cleanup_helper_ = std::make_unique<VulkanFenceHelper>(this); + + if (base::SingleThreadTaskRunner::HasCurrentDefault()) { + base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( + this, "vulkan", base::SingleThreadTaskRunner::GetCurrentDefault()); + } return true; } @@ -424,6 +433,9 @@ } void VulkanDeviceQueue::Destroy() { + base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( + this); + if (cleanup_helper_) { cleanup_helper_->Destroy(); cleanup_helper_.reset(); @@ -462,4 +474,15 @@ return command_pool; } +bool VulkanDeviceQueue::OnMemoryDump( + const base::trace_event::MemoryDumpArgs& args, + base::trace_event::ProcessMemoryDump* pmd) { + auto* dump = pmd->CreateAllocatorDump( + base::StringPrintf("gpu/vulkan/vma_allocator_%p", pmd)); + auto allocated_used = vma::GetTotalAllocatedAndUsedMemory(vma_allocator()); + dump->AddScalar("allocated_size", "bytes", allocated_used.first); + dump->AddScalar("used_size", "bytes", allocated_used.second); + return true; +} + } // namespace gpu
diff --git a/gpu/vulkan/vulkan_device_queue.h b/gpu/vulkan/vulkan_device_queue.h index dd01ca76..2ea53db 100644 --- a/gpu/vulkan/vulkan_device_queue.h +++ b/gpu/vulkan/vulkan_device_queue.h
@@ -13,6 +13,9 @@ #include "base/component_export.h" #include "base/functional/callback.h" #include "base/memory/raw_ptr.h" +#include "base/trace_event/memory_dump_provider.h" +#include "base/trace_event/memory_dump_request_args.h" +#include "base/trace_event/process_memory_dump.h" #include "build/build_config.h" #include "gpu/vulkan/vma_wrapper.h" #include "gpu/vulkan/vulkan_instance.h" @@ -24,7 +27,8 @@ class VulkanFenceHelper; struct GPUInfo; -class COMPONENT_EXPORT(VULKAN) VulkanDeviceQueue { +class COMPONENT_EXPORT(VULKAN) VulkanDeviceQueue + : public base::trace_event::MemoryDumpProvider { public: enum DeviceQueueOption { GRAPHICS_QUEUE_FLAG = 0x01, @@ -37,7 +41,7 @@ VulkanDeviceQueue(const VulkanDeviceQueue&) = delete; VulkanDeviceQueue& operator=(const VulkanDeviceQueue&) = delete; - ~VulkanDeviceQueue(); + ~VulkanDeviceQueue() override; using GetPresentationSupportCallback = base::RepeatingCallback<bool(VkPhysicalDevice, @@ -130,6 +134,9 @@ bool allow_protected_memory() const { return allow_protected_memory_; } + bool OnMemoryDump(const base::trace_event::MemoryDumpArgs& args, + base::trace_event::ProcessMemoryDump* pmd) override; + private: // Common Init method to be used by both webview and compositor gpu thread. bool InitCommon(VkPhysicalDevice vk_physical_device,
diff --git a/ios/chrome/app/resources/BUILD.gn b/ios/chrome/app/resources/BUILD.gn index 540ada4..c5fba2e 100644 --- a/ios/chrome/app/resources/BUILD.gn +++ b/ios/chrome/app/resources/BUILD.gn
@@ -154,43 +154,13 @@ deps = [ "//ios/chrome/app/resources:packed_resources" ] } -imageset("quick_action_incognito_search") { +symbolset("quick_action_incognito") { sources = [ - "quick_action_incognito_search.imageset/Contents.json", - "quick_action_incognito_search.imageset/quick_action_incognito_search@2x.png", - "quick_action_incognito_search.imageset/quick_action_incognito_search@3x.png", - ] -} - -imageset("quick_action_new_search") { - sources = [ - "quick_action_new_search.imageset/Contents.json", - "quick_action_new_search.imageset/quick_action_new_search@2x.png", - "quick_action_new_search.imageset/quick_action_new_search@3x.png", - ] -} - -imageset("quick_action_qr_scanner") { - sources = [ - "quick_action_qr_scanner.imageset/Contents.json", - "quick_action_qr_scanner.imageset/quick_action_qr_scanner@2x.png", - "quick_action_qr_scanner.imageset/quick_action_qr_scanner@3x.png", - ] -} - -imageset("quick_action_voice_search") { - sources = [ - "quick_action_voice_search.imageset/Contents.json", - "quick_action_voice_search.imageset/quick_action_voice_search@2x.png", - "quick_action_voice_search.imageset/quick_action_voice_search@3x.png", + "quick_action_incognito.symbolset/Contents.json", + "quick_action_incognito.symbolset/incognito.cr.svg", ] } group("quick_action_icons") { - public_deps = [ - ":quick_action_incognito_search", - ":quick_action_new_search", - ":quick_action_qr_scanner", - ":quick_action_voice_search", - ] + public_deps = [ ":quick_action_incognito" ] }
diff --git a/ios/chrome/app/resources/Info.plist b/ios/chrome/app/resources/Info.plist index 5e7db54..0e7f8f5f 100644 --- a/ios/chrome/app/resources/Info.plist +++ b/ios/chrome/app/resources/Info.plist
@@ -104,8 +104,8 @@ <key>UIApplicationShortcutItems</key> <array> <dict> - <key>UIApplicationShortcutItemIconFile</key> - <string>quick_action_new_search</string> + <key>UIApplicationShortcutItemIconSymbolName</key> + <string>magnifyingglass</string> <key>UIApplicationShortcutItemTitle</key> <string>IDS_IOS_APPLICATION_SHORTCUT_NEWSEARCH_TITLE</string> <key>UIApplicationShortcutItemType</key> @@ -113,23 +113,23 @@ </dict> <dict> <key>UIApplicationShortcutItemIconFile</key> - <string>quick_action_incognito_search</string> + <string>quick_action_incognito</string> <key>UIApplicationShortcutItemTitle</key> <string>IDS_IOS_APPLICATION_SHORTCUT_INCOGNITOSEARCH_TITLE</string> <key>UIApplicationShortcutItemType</key> <string>OpenIncognitoSearch</string> </dict> <dict> - <key>UIApplicationShortcutItemIconFile</key> - <string>quick_action_voice_search</string> + <key>UIApplicationShortcutItemIconSymbolName</key> + <string>mic</string> <key>UIApplicationShortcutItemTitle</key> <string>IDS_IOS_APPLICATION_SHORTCUT_VOICE_SEARCH_TITLE</string> <key>UIApplicationShortcutItemType</key> <string>OpenVoiceSearch</string> </dict> <dict> - <key>UIApplicationShortcutItemIconFile</key> - <string>quick_action_qr_scanner</string> + <key>UIApplicationShortcutItemIconSymbolName</key> + <string>qrcode</string> <key>UIApplicationShortcutItemTitle</key> <string>IDS_IOS_APPLICATION_SHORTCUT_QR_SCANNER_TITLE</string> <key>UIApplicationShortcutItemType</key>
diff --git a/ios/chrome/app/resources/quick_action_incognito.symbolset/Contents.json b/ios/chrome/app/resources/quick_action_incognito.symbolset/Contents.json new file mode 100644 index 0000000..364cdbd --- /dev/null +++ b/ios/chrome/app/resources/quick_action_incognito.symbolset/Contents.json
@@ -0,0 +1,12 @@ +{ + "info": { + "author": "xcode", + "version": 1 + }, + "symbols": [ + { + "filename": "incognito.cr.svg", + "idiom": "universal" + } + ] +}
diff --git a/ios/chrome/app/resources/quick_action_incognito.symbolset/incognito.cr.svg b/ios/chrome/app/resources/quick_action_incognito.symbolset/incognito.cr.svg new file mode 100644 index 0000000..e0d48b6 --- /dev/null +++ b/ios/chrome/app/resources/quick_action_incognito.symbolset/incognito.cr.svg
@@ -0,0 +1,161 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--Generator: Apple Native CoreSVG 149--> +<!DOCTYPE svg +PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="3300" height="2200"> + <!--glyph: "", point size: 100.0, font version: "17.0d8e1", template writer version: "58"--> + <g id="Notes"> + <rect height="2200" id="artboard" style="fill:white;opacity:1" width="3300" x="0" y="0"/> + <line style="fill:none;stroke:black;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="292" y2="292"/> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;font-weight:bold;" transform="matrix(1 0 0 1 263 322)">Weight/Scale Variations</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 559.711 322)">Ultralight</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 856.422 322)">Thin</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 1153.13 322)">Light</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 1449.84 322)">Regular</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 1746.56 322)">Medium</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 2043.27 322)">Semibold</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 2339.98 322)">Bold</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 2636.69 322)">Heavy</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 2933.4 322)">Black</text> + <line style="fill:none;stroke:black;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="1903" y2="1903"/> + <g transform="matrix(1 0 0 1 263 1933)"> + <path d="M9.24805 0.830078Q10.8691 0.830078 12.2949 0.214844Q13.7207-0.400391 14.8096-1.49414Q15.8984-2.58789 16.5186-4.01367Q17.1387-5.43945 17.1387-7.05078Q17.1387-8.66211 16.5186-10.0879Q15.8984-11.5137 14.8047-12.6074Q13.7109-13.7012 12.2852-14.3164Q10.8594-14.9316 9.23828-14.9316Q7.62695-14.9316 6.20117-14.3164Q4.77539-13.7012 3.69141-12.6074Q2.60742-11.5137 1.9873-10.0879Q1.36719-8.66211 1.36719-7.05078Q1.36719-5.43945 1.9873-4.01367Q2.60742-2.58789 3.69629-1.49414Q4.78516-0.400391 6.21094 0.214844Q7.63672 0.830078 9.24805 0.830078ZM9.24805-0.654297Q7.91992-0.654297 6.7627-1.14746Q5.60547-1.64062 4.73145-2.51953Q3.85742-3.39844 3.36426-4.56055Q2.87109-5.72266 2.87109-7.05078Q2.87109-8.37891 3.35938-9.54102Q3.84766-10.7031 4.72168-11.582Q5.5957-12.4609 6.75293-12.9541Q7.91016-13.4473 9.23828-13.4473Q10.5762-13.4473 11.7334-12.9541Q12.8906-12.4609 13.7695-11.582Q14.6484-10.7031 15.1465-9.54102Q15.6445-8.37891 15.6445-7.05078Q15.6445-5.72266 15.1514-4.56055Q14.6582-3.39844 13.7842-2.51953Q12.9102-1.64062 11.748-1.14746Q10.5859-0.654297 9.24805-0.654297ZM5.83984-7.04102Q5.83984-6.71875 6.04492-6.51855Q6.25-6.31836 6.5918-6.31836L8.50586-6.31836L8.50586-4.39453Q8.50586-4.0625 8.70605-3.85742Q8.90625-3.65234 9.22852-3.65234Q9.56055-3.65234 9.76562-3.85742Q9.9707-4.0625 9.9707-4.39453L9.9707-6.31836L11.8945-6.31836Q12.2266-6.31836 12.4316-6.51855Q12.6367-6.71875 12.6367-7.04102Q12.6367-7.37305 12.4316-7.57812Q12.2266-7.7832 11.8945-7.7832L9.9707-7.7832L9.9707-9.69727Q9.9707-10.0391 9.76562-10.2441Q9.56055-10.4492 9.22852-10.4492Q8.90625-10.4492 8.70605-10.2441Q8.50586-10.0391 8.50586-9.69727L8.50586-7.7832L6.5918-7.7832Q6.25-7.7832 6.04492-7.57812Q5.83984-7.37305 5.83984-7.04102Z"/> + </g> + <g transform="matrix(1 0 0 1 281.867 1933)"> + <path d="M11.709 2.91016Q13.75 2.91016 15.5518 2.12891Q17.3535 1.34766 18.7305-0.0292969Q20.1074-1.40625 20.8887-3.20801Q21.6699-5.00977 21.6699-7.05078Q21.6699-9.0918 20.8887-10.8936Q20.1074-12.6953 18.7305-14.0723Q17.3535-15.4492 15.5469-16.2305Q13.7402-17.0117 11.6992-17.0117Q9.6582-17.0117 7.85645-16.2305Q6.05469-15.4492 4.68262-14.0723Q3.31055-12.6953 2.5293-10.8936Q1.74805-9.0918 1.74805-7.05078Q1.74805-5.00977 2.5293-3.20801Q3.31055-1.40625 4.6875-0.0292969Q6.06445 1.34766 7.86621 2.12891Q9.66797 2.91016 11.709 2.91016ZM11.709 1.25Q9.98047 1.25 8.47656 0.605469Q6.97266-0.0390625 5.83496-1.17676Q4.69727-2.31445 4.05762-3.81836Q3.41797-5.32227 3.41797-7.05078Q3.41797-8.7793 4.05762-10.2832Q4.69727-11.7871 5.83008-12.9297Q6.96289-14.0723 8.4668-14.7119Q9.9707-15.3516 11.6992-15.3516Q13.4277-15.3516 14.9316-14.7119Q16.4355-14.0723 17.5781-12.9297Q18.7207-11.7871 19.3652-10.2832Q20.0098-8.7793 20.0098-7.05078Q20.0098-5.32227 19.3701-3.81836Q18.7305-2.31445 17.5928-1.17676Q16.4551-0.0390625 14.9463 0.605469Q13.4375 1.25 11.709 1.25ZM7.39258-7.04102Q7.39258-6.68945 7.62695-6.46484Q7.86133-6.24023 8.23242-6.24023L10.8789-6.24023L10.8789-3.57422Q10.8789-3.21289 11.1035-2.9834Q11.3281-2.75391 11.6797-2.75391Q12.0508-2.75391 12.2852-2.9834Q12.5195-3.21289 12.5195-3.57422L12.5195-6.24023L15.1758-6.24023Q15.5371-6.24023 15.7715-6.46484Q16.0059-6.68945 16.0059-7.04102Q16.0059-7.41211 15.7715-7.6416Q15.5371-7.87109 15.1758-7.87109L12.5195-7.87109L12.5195-10.5176Q12.5195-10.8984 12.2852-11.1279Q12.0508-11.3574 11.6797-11.3574Q11.3281-11.3574 11.1035-11.1279Q10.8789-10.8984 10.8789-10.5176L10.8789-7.87109L8.23242-7.87109Q7.85156-7.87109 7.62207-7.6416Q7.39258-7.41211 7.39258-7.04102Z"/> + </g> + <g transform="matrix(1 0 0 1 305.646 1933)"> + <path d="M14.9707 5.66406Q17.0605 5.66406 18.96 5.01465Q20.8594 4.36523 22.4512 3.19336Q24.043 2.02148 25.2197 0.429688Q26.3965-1.16211 27.0459-3.06641Q27.6953-4.9707 27.6953-7.05078Q27.6953-9.14062 27.0459-11.04Q26.3965-12.9395 25.2197-14.5312Q24.043-16.123 22.4512-17.2998Q20.8594-18.4766 18.9551-19.126Q17.0508-19.7754 14.9609-19.7754Q12.8711-19.7754 10.9717-19.126Q9.07227-18.4766 7.48535-17.2998Q5.89844-16.123 4.72168-14.5312Q3.54492-12.9395 2.90039-11.04Q2.25586-9.14062 2.25586-7.05078Q2.25586-4.9707 2.90527-3.06641Q3.55469-1.16211 4.72656 0.429688Q5.89844 2.02148 7.49023 3.19336Q9.08203 4.36523 10.9814 5.01465Q12.8809 5.66406 14.9707 5.66406ZM14.9707 3.84766Q13.1641 3.84766 11.5283 3.2959Q9.89258 2.74414 8.53516 1.74805Q7.17773 0.751953 6.17676-0.610352Q5.17578-1.97266 4.62891-3.6084Q4.08203-5.24414 4.08203-7.05078Q4.08203-8.86719 4.62891-10.5029Q5.17578-12.1387 6.17188-13.501Q7.16797-14.8633 8.52539-15.8594Q9.88281-16.8555 11.5186-17.4023Q13.1543-17.9492 14.9609-17.9492Q16.7773-17.9492 18.4131-17.4023Q20.0488-16.8555 21.4111-15.8594Q22.7734-14.8633 23.7695-13.501Q24.7656-12.1387 25.3174-10.5029Q25.8691-8.86719 25.8691-7.05078Q25.8789-5.24414 25.332-3.6084Q24.7852-1.97266 23.7842-0.610352Q22.7832 0.751953 21.4209 1.74805Q20.0586 2.74414 18.4229 3.2959Q16.7871 3.84766 14.9707 3.84766ZM9.45312-7.04102Q9.45312-6.66016 9.71191-6.41113Q9.9707-6.16211 10.3711-6.16211L14.0625-6.16211L14.0625-2.46094Q14.0625-2.06055 14.3115-1.80664Q14.5605-1.55273 14.9414-1.55273Q15.3516-1.55273 15.6055-1.80664Q15.8594-2.06055 15.8594-2.46094L15.8594-6.16211L19.5605-6.16211Q19.9609-6.16211 20.2148-6.41113Q20.4688-6.66016 20.4688-7.04102Q20.4688-7.45117 20.2148-7.70508Q19.9609-7.95898 19.5605-7.95898L15.8594-7.95898L15.8594-11.6504Q15.8594-12.0605 15.6055-12.3145Q15.3516-12.5684 14.9414-12.5684Q14.5605-12.5684 14.3115-12.3096Q14.0625-12.0508 14.0625-11.6504L14.0625-7.95898L10.3711-7.95898Q9.96094-7.95898 9.70703-7.70508Q9.45312-7.45117 9.45312-7.04102Z"/> + </g> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;font-weight:bold;" transform="matrix(1 0 0 1 263 1953)">Design Variations</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 263 1971)">Symbols are supported in up to nine weights and three scales.</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 263 1989)">For optimal layout with text and other symbols, vertically align</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 263 2007)">symbols with the adjacent text.</text> + <line style="fill:none;stroke:#00AEEF;stroke-width:0.5;opacity:1.0;" x1="776" x2="776" y1="1919" y2="1933"/> + <g transform="matrix(1 0 0 1 776 1933)"> + <path d="M3.31055 0.15625Q3.70117 0.15625 3.91602-0.00976562Q4.13086-0.175781 4.26758-0.585938L5.52734-4.0332L11.2891-4.0332L12.5488-0.585938Q12.6855-0.175781 12.9004-0.00976562Q13.1152 0.15625 13.4961 0.15625Q13.8867 0.15625 14.1162-0.0585938Q14.3457-0.273438 14.3457-0.644531Q14.3457-0.869141 14.2383-1.17188L9.6582-13.3691Q9.48242-13.8184 9.17969-14.043Q8.87695-14.2676 8.4082-14.2676Q7.5-14.2676 7.17773-13.3789L2.59766-1.16211Q2.49023-0.859375 2.49023-0.634766Q2.49023-0.263672 2.70996-0.0537109Q2.92969 0.15625 3.31055 0.15625ZM6.00586-5.51758L8.37891-12.0898L8.42773-12.0898L10.8008-5.51758Z"/> + </g> + <line style="fill:none;stroke:#00AEEF;stroke-width:0.5;opacity:1.0;" x1="793.197" x2="793.197" y1="1919" y2="1933"/> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;font-weight:bold;" transform="matrix(1 0 0 1 776 1953)">Margins</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 776 1971)">Leading and trailing margins on the left and right side of each symbol</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 776 1989)">can be adjusted by modifying the x-location of the margin guidelines.</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 776 2007)">Modifications are automatically applied proportionally to all</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 776 2025)">scales and weights.</text> + <g transform="matrix(1 0 0 1 1289 1933)"> + <path d="M2.8418 1.86523L4.54102 3.57422Q5.18555 4.22852 5.90332 4.17969Q6.62109 4.13086 7.31445 3.35938L18.0078-8.42773L17.041-9.4043L6.42578 2.27539Q6.16211 2.57812 5.89355 2.61719Q5.625 2.65625 5.27344 2.30469L4.10156 1.14258Q3.75 0.791016 3.79395 0.522461Q3.83789 0.253906 4.14062-0.0195312L15.6152-10.8203L14.6387-11.7871L3.04688-0.898438Q2.30469-0.214844 2.25098 0.498047Q2.19727 1.21094 2.8418 1.86523ZM9.25781-16.3281Q8.94531-16.0254 8.90625-15.6348Q8.86719-15.2441 9.04297-14.9512Q9.21875-14.6777 9.55566-14.541Q9.89258-14.4043 10.3809-14.5215Q11.4746-14.7754 12.5977-14.7314Q13.7207-14.6875 14.7949-13.9844L14.209-12.5293Q13.9551-11.9043 14.0674-11.4404Q14.1797-10.9766 14.5801-10.5664L16.875-8.25195Q17.2363-7.88086 17.5781-7.82227Q17.9199-7.76367 18.3398-7.8418L19.4043-8.03711L20.0684-7.36328L20.0293-6.80664Q20-6.43555 20.1221-6.12305Q20.2441-5.81055 20.6055-5.44922L21.3672-4.70703Q21.7285-4.3457 22.1533-4.33105Q22.5781-4.31641 22.9297-4.66797L25.8398-7.58789Q26.1914-7.93945 26.1816-8.35449Q26.1719-8.76953 25.8105-9.13086L25.0391-9.89258Q24.6875-10.2539 24.3799-10.3857Q24.0723-10.5176 23.7109-10.4883L23.1348-10.4395L22.4902-11.0742L22.7344-12.1973Q22.832-12.6172 22.6953-12.9834Q22.5586-13.3496 22.1191-13.7891L19.9219-15.9766Q18.6719-17.2168 17.2607-17.8369Q15.8496-18.457 14.4189-18.4814Q12.9883-18.5059 11.665-17.959Q10.3418-17.4121 9.25781-16.3281ZM10.752-15.957Q11.6602-16.6211 12.7002-16.9043Q13.7402-17.1875 14.8047-17.085Q15.8691-16.9824 16.8701-16.5137Q17.8711-16.0449 18.7012-15.2051L21.1328-12.793Q21.3086-12.6172 21.3525-12.4512Q21.3965-12.2852 21.3379-12.0312L21.0156-10.5469L22.5195-9.0625L23.5059-9.12109Q23.6914-9.13086 23.7891-9.09668Q23.8867-9.0625 24.0332-8.91602L24.6094-8.33984L22.168-5.89844L21.5918-6.47461Q21.4453-6.62109 21.4062-6.71875Q21.3672-6.81641 21.377-7.01172L21.4453-7.98828L19.9512-9.47266L18.4277-9.21875Q18.1836-9.16992 18.042-9.2041Q17.9004-9.23828 17.7148-9.41406L15.7129-11.416Q15.5176-11.5918 15.4932-11.7529Q15.4688-11.9141 15.5859-12.1875L16.4648-14.2773Q15.293-15.3711 13.8281-15.791Q12.3633-16.2109 10.8398-15.7617Q10.7227-15.7324 10.6885-15.8057Q10.6543-15.8789 10.752-15.957Z"/> + </g> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;font-weight:bold;" transform="matrix(1 0 0 1 1289 1953)">Exporting</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 1289 1971)">Symbols should be outlined when exporting to ensure the</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 1289 1989)">design is preserved when submitting to Xcode.</text> + <text id="template-version" style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:end;" transform="matrix(1 0 0 1 3036 1933)">Template v.2.0</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:end;" transform="matrix(1 0 0 1 3036 1951)">Requires Xcode 13 or greater</text> + <text id="descriptive-name" style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:end;" transform="matrix(1 0 0 1 3036 1969)">Generated from incognito.cr</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:end;" transform="matrix(1 0 0 1 3036 1987)">Typeset at 100 points</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 263 726)">Small</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 263 1156)">Medium</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 263 1586)">Large</text> + </g> + <g id="Guides"> + <g id="H-reference" style="fill:#27AAE1;stroke:none;" transform="matrix(1 0 0 1 339 696)"> + <path d="M0.993347 0L3.6377 0L29.3282-67.1326L30.0301-67.1326L30.0301-70.459L28.1227-70.459ZM11.6882-24.4797L46.9818-24.4797L46.2311-26.7288L12.4382-26.7288ZM55.1193 0L57.7637 0L30.6381-70.459L29.4327-70.459L29.4327-67.1326Z"/> + </g> + <line id="Baseline-S" style="fill:none;stroke:#27AAE1;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="696" y2="696"/> + <line id="Capline-S" style="fill:none;stroke:#27AAE1;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="625.541" y2="625.541"/> + <g id="H-reference" style="fill:#27AAE1;stroke:none;" transform="matrix(1 0 0 1 339 1126)"> + <path d="M0.993347 0L3.6377 0L29.3282-67.1326L30.0301-67.1326L30.0301-70.459L28.1227-70.459ZM11.6882-24.4797L46.9818-24.4797L46.2311-26.7288L12.4382-26.7288ZM55.1193 0L57.7637 0L30.6381-70.459L29.4327-70.459L29.4327-67.1326Z"/> + </g> + <line id="Baseline-M" style="fill:none;stroke:#27AAE1;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="1126" y2="1126"/> + <line id="Capline-M" style="fill:none;stroke:#27AAE1;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="1055.54" y2="1055.54"/> + <g id="H-reference" style="fill:#27AAE1;stroke:none;" transform="matrix(1 0 0 1 339 1556)"> + <path d="M0.993347 0L3.6377 0L29.3282-67.1326L30.0301-67.1326L30.0301-70.459L28.1227-70.459ZM11.6882-24.4797L46.9818-24.4797L46.2311-26.7288L12.4382-26.7288ZM55.1193 0L57.7637 0L30.6381-70.459L29.4327-70.459L29.4327-67.1326Z"/> + </g> + <line id="Baseline-L" style="fill:none;stroke:#27AAE1;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="1556" y2="1556"/> + <line id="Capline-L" style="fill:none;stroke:#27AAE1;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="1485.54" y2="1485.54"/> + <line id="left-margin" style="fill:none;stroke:#00AEEF;stroke-width:0.5;opacity:1.0;" x1="1392.2" x2="1392.2" y1="1030.78" y2="1150.12"/> + <line id="right-margin" style="fill:none;stroke:#00AEEF;stroke-width:0.5;opacity:1.0;" x1="1507.49" x2="1507.49" y1="1030.78" y2="1150.12"/> + </g> + <g id="Symbols"> + <g id="Black-L" transform="matrix(1 0 0 1 2854.26 1556)"> + <path d="M104.61-103.582L124.54-54.2316L145.17-54.2316C150.01-54.2316 153.92-50.3116 153.92-45.4816C153.92-40.6416 150.01-36.7316 145.17-36.7316L13.12-36.7316C8.29-36.7316 4.37-40.6416 4.37-45.4816C4.37-50.3116 8.29-54.2316 13.12-54.2316L31.41-54.2316L51.15-103.552C53.34-109.262 59.56-112.332 65.43-110.602L77.88-106.942L90.34-110.612C96.19-112.332 102.4-109.282 104.61-103.582ZM90.2-92.3316L80.51-89.4716C79.63-89.2216 78.74-89.1016 77.87-89.1216L77.4997-89.1216C76.7561-89.1385 75.9957-89.2573 75.25-89.4716L75.25-89.4716L65.58-92.3216L50.16-54.2316L105.77-54.2316L90.2-92.3316ZM114.7-31.0816C130.12-31.0816 142.63-18.5816 142.63-3.15161C142.63 12.2784 130.12 24.7784 114.7 24.7784C102.85 24.7784 92.73 17.4084 88.67 6.99839C88.48 6.89839 88.29 6.79839 88.1 6.67839C83.18 3.64839 80.39 2.89839 78.3 2.89839C76.21 2.89839 73.42 3.64839 68.49 6.67839C68.31 6.78839 68.12 6.89839 67.93 6.99839C63.87 17.4084 53.75 24.7784 41.9 24.7784C26.47 24.7784 13.97 12.2784 13.97-3.15161C13.97-18.5816 26.47-31.0816 41.9-31.0816C53.98-31.0816 64.27-23.4116 68.17-12.6816C71.42-13.8916 74.76-14.6016 78.3-14.6016C81.83-14.6016 85.18-13.8916 88.43-12.6816C92.33-23.4116 102.62-31.0816 114.7-31.0816ZM41.9-13.5816C36.14-13.5816 31.47-8.91161 31.47-3.15161C31.47 2.60839 36.14 7.27839 41.9 7.27839C47.66 7.27839 52.33 2.60839 52.33-3.15161C52.33-8.91161 47.66-13.5816 41.9-13.5816ZM104.26-3.15161C104.26 2.60839 108.94 7.27839 114.7 7.27839C120.46 7.27839 125.13 2.60839 125.13-3.15161C125.13-8.91161 120.46-13.5816 114.7-13.5816C108.94-13.5816 104.26-8.91161 104.26-3.15161Z"/> + </g> + <g id="Heavy-L" transform="matrix(1 0 0 1 2558.54 1556)"> + <path d="M102.67-103.114L122.85-53.1139L144.17-53.1139C148.45-53.1139 151.92-49.6539 151.92-45.3639C151.92-41.0839 148.45-37.6139 144.17-37.6139L12.12-37.6139C7.84-37.6139 4.37-41.0839 4.37-45.3639C4.37-49.6539 7.84-53.1139 12.12-53.1139L31.1-53.1139L31.11-53.1439L51.08-103.084C53.09-108.314 58.77-111.114 64.15-109.534L76.88-105.794L89.62-109.544C94.98-111.114 100.65-108.324 102.67-103.114ZM89.8-93.4339L79.23-90.3239C78.44-90.0939 77.65-89.9939 76.87-90.0139C76.1-89.9939 75.31-90.0939 74.53-90.3239L74.53-90.3239L63.97-93.4339L47.7-53.1139L106.23-53.1139L89.8-93.4339ZM113.7-30.9739C129.12-30.9739 141.63-18.4739 141.63-3.04393C141.63 12.3861 129.12 24.8861 113.7 24.8861C101.78 24.8861 91.6 17.4261 87.59 6.91607C82.62 3.85607 79.65 3.00607 77.3 3.00607C74.95 3.00607 71.98 3.85607 67.01 6.91607C63 17.4261 52.82 24.8861 40.9 24.8861C25.47 24.8861 12.97 12.3861 12.97-3.04393C12.97-18.4739 25.47-30.9739 40.9-30.9739C53.66-30.9739 64.43-22.4139 67.77-10.7239C70.85-11.8439 73.99-12.4939 77.3-12.4939C80.6-12.4939 83.75-11.8439 86.83-10.7239C90.17-22.4139 100.93-30.9739 113.7-30.9739ZM40.9-15.4739C34.03-15.4739 28.47-9.91393 28.47-3.04393C28.47 3.82607 34.03 9.38607 40.9 9.38607C47.77 9.38607 53.33 3.82607 53.33-3.04393C53.33-9.91393 47.77-15.4739 40.9-15.4739ZM101.26-3.04393C101.26 3.82607 106.83 9.38607 113.7 9.38607C120.56 9.38607 126.13 3.82607 126.13-3.04393C126.13-9.91393 120.56-15.4739 113.7-15.4739C106.83-15.4739 101.26-9.91393 101.26-3.04393Z"/> + </g> + <g id="Bold-L" transform="matrix(1 0 0 1 2263.33 1556)"> + <path d="M62.22-107.952L75.38-104.082L88.54-107.952C93.15-109.302 98.04-106.902 99.78-102.422L119.98-52.3625C120.09-52.0625 120.18-51.7625 120.25-51.4725L142.67-51.4725C146.12-51.4725 148.92-48.6725 148.92-45.2225C148.92-41.7625 146.12-38.9725 142.67-38.9725L10.62-38.9725C7.17-38.9725 4.37-41.7625 4.37-45.2225C4.37-48.6725 7.17-51.4725 10.62-51.4725L30.72-51.4725C30.79-51.8025 30.88-52.1325 31.01-52.4625L50.98-102.392C52.71-106.892 57.6-109.312 62.22-107.952ZM89.2-95.1125L77.3-91.6125C76.66-91.4225 76.01-91.3425 75.38-91.3625C74.74-91.3425 74.09-91.4225 73.45-91.6125L73.45-91.6125L61.57-95.1125L44.02-51.4725L106.92-51.4725L89.2-95.1125ZM112.2-30.8225C127.62-30.8225 140.13-18.3225 140.13-2.89246C140.13 12.5375 127.62 25.0375 112.2 25.0375C99.47 25.0375 88.73 16.5275 85.36 4.88754C81.14 2.47754 78.27 1.65754 75.8 1.65754C73.33 1.65754 70.46 2.47754 66.24 4.88754C62.87 16.5275 52.13 25.0375 39.4 25.0375C23.97 25.0375 11.47 12.5375 11.47-2.89246C11.47-18.3225 23.97-30.8225 39.4-30.8225C52.69-30.8225 63.81-21.5425 66.64-9.11246C69.63-10.2125 72.65-10.8425 75.8-10.8425C78.95-10.8425 81.97-10.2125 84.96-9.11246C87.79-21.5425 98.91-30.8225 112.2-30.8225ZM39.4-18.3225C30.88-18.3225 23.97-11.4125 23.97-2.89246C23.97 5.62754 30.88 12.5375 39.4 12.5375C47.93 12.5375 54.83 5.62754 54.83-2.89246C54.83-11.4125 47.93-18.3225 39.4-18.3225ZM96.76-2.89246C96.76 5.62754 103.67 12.5375 112.2 12.5375C120.72 12.5375 127.63 5.62754 127.63-2.89246C127.63-11.4125 120.72-18.3225 112.2-18.3225C103.67-18.3225 96.76-11.4125 96.76-2.89246Z"/> + </g> + <g id="Semibold-L" transform="matrix(1 0 0 1 1967.37 1556)"> + <path d="M98.33-102.085L119.16-50.6452L141.92-50.6452C144.96-50.6452 147.42-48.1752 147.42-45.1452C147.42-42.1052 144.96-39.6452 141.92-39.6452L115.53-39.6452C115.44-39.6352 115.36-39.6352 115.27-39.6452L34.53-39.6452C34.44-39.6352 34.36-39.6352 34.27-39.6452L9.87-39.6452C6.84-39.6452 4.37-42.1052 4.37-45.1452C4.37-48.1752 6.84-50.6452 9.87-50.6452L30.61-50.6452L50.93-102.015C52.51-106.165 57.01-108.405 61.27-107.145L74.63-103.215L88.01-107.155C92.24-108.395 96.72-106.195 98.33-102.085ZM88.91-95.9552L76.34-92.2552C75.77-92.0852 75.19-92.0152 74.63-92.0352C74.06-92.0152 73.49-92.0852 72.92-92.2552L72.92-92.2552L60.39-95.9452L42.38-50.6452L107.35-50.6452L88.91-95.9552ZM111.45-30.7452C126.87-30.7452 139.38-18.2452 139.38-2.81522C139.38 12.6148 126.87 25.1148 111.45 25.1148C98.35 25.1148 87.36 16.1048 84.34 3.95478C80.4 1.77478 77.56 0.984776 75.05 0.984776C72.53 0.984776 69.7 1.77478 65.76 3.95478C62.74 16.1048 51.75 25.1148 38.65 25.1148C23.22 25.1148 10.72 12.6148 10.72-2.81522C10.72-18.2452 23.22-30.7452 38.65-30.7452C52.2-30.7452 63.5-21.0952 66.05-8.29522C69.01-9.39522 71.97-10.0152 75.05-10.0152C78.13-10.0152 81.09-9.39522 84.05-8.29522C86.6-21.0952 97.9-30.7452 111.45-30.7452ZM38.65-19.7452C29.3-19.7452 21.72-12.1652 21.72-2.81522C21.72 6.53478 29.3 14.1148 38.65 14.1148C48 14.1148 55.58 6.53478 55.58-2.81522C55.58-12.1652 48-19.7452 38.65-19.7452ZM94.51-2.81522C94.51 6.53478 102.1 14.1148 111.45 14.1148C120.8 14.1148 128.38 6.53478 128.38-2.81522C128.38-12.1652 120.8-19.7452 111.45-19.7452C102.1-19.7452 94.51-12.1652 94.51-2.81522Z"/> + </g> + <g id="Medium-L" transform="matrix(1 0 0 1 1671.16 1556)"> + <path d="M97.36-101.844L118.32-50.0841L141.42-50.0841C144.18-50.0841 146.42-47.8441 146.42-45.0841C146.42-42.3141 144.18-40.0841 141.42-40.0841L115.02-40.0841C114.94-40.0741 114.86-40.0741 114.79-40.0841L34.01-40.0841C33.94-40.0741 33.86-40.0741 33.78-40.0841L9.37-40.0841C6.61-40.0841 4.37-42.3141 4.37-45.0841C4.37-47.8441 6.61-50.0841 9.37-50.0841L30.45-50.0841L50.9-101.784C52.38-105.684 56.62-107.784 60.63-106.604L74.13-102.634L87.65-106.614C91.63-107.784 95.85-105.714 97.36-101.844ZM88.71-96.5041L75.7-92.6741C75.18-92.5241 74.64-92.4541 74.13-92.4741C73.61-92.4541 73.08-92.5241 72.56-92.6741L72.56-92.6741L59.58-96.4941L41.15-50.0841L107.58-50.0841L88.71-96.5041ZM110.95-30.6941C126.37-30.6941 138.88-18.1841 138.88-2.75409C138.88 12.6659 126.37 25.1759 110.95 25.1759C97.62 25.1759 86.48 15.8459 83.69 3.36591C79.9 1.32591 77.09 0.545906 74.55 0.545906C72.01 0.545906 69.2 1.32591 65.41 3.36591C62.62 15.8459 51.48 25.1759 38.15 25.1759C22.72 25.1759 10.22 12.6659 10.22-2.75409C10.22-18.1841 22.72-30.6941 38.15-30.6941C51.88-30.6941 63.3-20.7841 65.64-7.73409C68.58-8.83409 71.51-9.45409 74.55-9.45409C77.59-9.45409 80.52-8.83409 83.46-7.73409C85.8-20.7841 97.22-30.6941 110.95-30.6941ZM38.15-20.6941C28.25-20.6941 20.22-12.6641 20.22-2.75409C20.22 7.14591 28.25 15.1759 38.15 15.1759C48.06 15.1759 56.08 7.14591 56.08-2.75409C56.08-12.6641 48.06-20.6941 38.15-20.6941ZM93.01-2.75409C93.01 7.14591 101.04 15.1759 110.95 15.1759C120.85 15.1759 128.88 7.14591 128.88-2.75409C128.88-12.6641 120.85-20.6941 110.95-20.6941C101.04-20.6941 93.01-12.6641 93.01-2.75409Z"/> + </g> + <g id="Regular-L" transform="matrix(1 0 0 1 1375.45 1556)"> + <path d="M95.43-100.383L116.63-47.9827L140.42-47.9827C142.63-47.9827 144.42-46.1827 144.42-43.9827C144.42-41.7727 142.63-39.9827 140.42-39.9827L113.99-39.9827C113.93-39.9727 113.87-39.9727 113.81-39.9827L32.99-39.9827C32.93-39.9727 32.87-39.9727 32.81-39.9827L8.37-39.9827C6.16-39.9827 4.37-41.7727 4.37-43.9827C4.37-46.1827 6.16-47.9827 8.37-47.9827L30.14-47.9827L50.83-100.323C52.13-103.743 55.84-105.583 59.35-104.543L73.13-100.493L86.93-104.553C90.42-105.583 94.11-103.763 95.43-100.383ZM88.31-96.6227L74.42-92.5327C73.99-92.4027 73.55-92.3527 73.13-92.3727C72.7-92.3527 72.27-92.4127 71.84-92.5327L71.84-92.5327L57.98-96.6127L38.7-47.9827L108.05-47.9827L88.31-96.6227ZM109.95-29.5927C125.37-29.5927 137.88-17.0827 137.88-1.65269C137.88 13.7673 125.37 26.2773 109.95 26.2773C96.18 26.2773 84.74 16.3173 82.44 3.20731C78.91 1.39731 76.14 0.647305 73.55 0.647305C70.96 0.647305 68.19 1.39731 64.66 3.19731C62.36 16.3173 50.92 26.2773 37.15 26.2773C21.72 26.2773 9.22 13.7673 9.22-1.65269C9.22-17.0827 21.72-29.5927 37.15-29.5927C51.23-29.5927 62.88-19.1727 64.81-5.62269C67.72-6.74269 70.59-7.35269 73.55-7.35269C76.51-7.35269 79.38-6.74269 82.29-5.62269C84.22-19.1727 95.87-29.5927 109.95-29.5927ZM37.15-21.5927C26.14-21.5927 17.22-12.6627 17.22-1.65269C17.22 9.34731 26.14 18.2773 37.15 18.2773C48.15 18.2773 57.08 9.35731 57.08-1.64269L57.08-1.64269L57.06-1.67269C57.07-1.68269 57.08-1.68269 57.08-1.69269C57.07-12.6827 48.15-21.5927 37.15-21.5927ZM90.01-1.64269C90.02 9.35731 98.94 18.2773 109.95 18.2773C120.96 18.2773 129.88 9.34731 129.88-1.65269C129.88-12.6627 120.96-21.5927 109.95-21.5927C98.95-21.5927 90.03-12.6827 90.01-1.69269C90.02-1.68269 90.03-1.68269 90.04-1.67269L90.01-1.64269Z"/> + </g> + <g id="Light-L" transform="matrix(1 0 0 1 1079.24 1556)"> + <path d="M94.46-100.145L115.79-47.4253L139.92-47.4253C141.86-47.4253 143.42-45.8553 143.42-43.9253C143.42-41.9853 141.86-40.4253 139.92-40.4253L113.48-40.4253C113.43-40.4153 113.37-40.4153 113.32-40.4253L32.48-40.4253C32.43-40.4153 32.37-40.4153 32.32-40.4253L7.87-40.4253C5.94-40.4253 4.37-41.9853 4.37-43.9253C4.37-45.8553 5.94-47.4253 7.87-47.4253L29.99-47.4253L50.8-100.085C52.01-103.255 55.45-104.965 58.71-104.005L72.63-99.9153L86.57-104.015C89.81-104.965 93.24-103.285 94.46-100.145ZM88.11-97.1753L73.78-92.9553C73.39-92.8453 73.01-92.7953 72.63-92.8153C72.25-92.7953 71.86-92.8453 71.48-92.9553L71.48-92.9553L57.17-97.1653L37.48-47.4253L108.28-47.4253L88.11-97.1753ZM109.45-29.5353C124.87-29.5353 137.38-17.0253 137.38-1.59529C137.38 13.8247 124.87 26.3347 109.45 26.3347C95.46 26.3347 83.88 16.0547 81.83 2.64471C78.7 1.07471 76.12 0.334712 73.71 0.224712C70.9 0.094712 67.96 0.794712 64.26 2.64471C62.22 16.0547 50.63 26.3347 36.65 26.3347C21.22 26.3347 8.72 13.8247 8.72-1.59529C8.72-17.0253 21.22-29.5353 36.65-29.5353C50.91-29.5353 62.67-18.8553 64.37-5.05529C67.61-6.30529 70.76-6.92529 74.04-6.76529C76.62-6.64529 79.15-6.05529 81.73-5.05529C83.43-18.8553 95.19-29.5353 109.45-29.5353ZM36.65-22.5353C25.09-22.5353 15.72-13.1653 15.72-1.59529C15.72 9.96471 25.09 19.3347 36.65 19.3347C48.21 19.3347 57.58 9.96471 57.58-1.59529C57.58-13.1653 48.21-22.5353 36.65-22.5353ZM88.51-1.59529C88.51 9.96471 97.89 19.3347 109.45 19.3347C121.01 19.3347 130.38 9.96471 130.38-1.59529C130.38-13.1653 121.01-22.5353 109.45-22.5353C97.89-22.5353 88.51-13.1653 88.51-1.59529Z"/> + </g> + <g id="Thin-L" transform="matrix(1 0 0 1 783.527 1556)"> + <path d="M92.527-99.674L114.106-46.324L138.92-46.324C140.301-46.324 141.42-45.204 141.42-43.824C141.42-42.434 140.301-41.324 138.92-41.324L112.455-41.324C112.417-41.314 112.378-41.314 112.34-41.324L31.454-41.324C31.416-41.314 31.377-41.314 31.339-41.324L6.87-41.324C5.489-41.324 4.37-42.434 4.37-43.824C4.37-45.204 5.489-46.324 6.87-46.324L29.674-46.324L50.729-99.634C51.751-102.314 54.666-103.764 57.421-102.954L71.626-98.774L85.851-102.954C88.59-103.764 91.49-102.334 92.527-99.674ZM87.869-97.864C87.774-98.104 87.511-98.234 87.262-98.154L87.262-98.154L72.492-93.814C72.202-93.734 71.909-93.704 71.624-93.714C71.34-93.704 71.048-93.734 70.759-93.814L70.759-93.814L56.01-98.154C55.76-98.224 55.495-98.094 55.402-97.854L55.402-97.854L35.024-46.324L108.739-46.324ZM108.444-29.434C123.872-29.434 136.378-16.924 136.378-1.49396C136.378 13.926 123.872 26.436 108.444 26.436C94.051 26.436 82.2 15.546 80.676 1.55604C77.716 0.146044 75.176-0.563956 72.752-0.673956C69.883-0.813956 66.943-0.123956 63.416 1.55604C61.893 15.546 50.042 26.436 35.648 26.436C20.221 26.436 7.714 13.926 7.714-1.49396C7.714-16.924 20.221-29.434 35.648-29.434C50.258-29.434 62.248-18.214 63.478-3.92396C66.702-5.20396 69.796-5.82396 72.987-5.67396C75.528-5.55396 78.032-4.94396 80.615-3.92396C81.844-18.214 93.834-29.434 108.444-29.434ZM35.648-24.434C22.982-24.434 12.714-14.164 12.714-1.49396C12.714 11.166 22.982 21.436 35.648 21.436C48.314 21.436 58.582 11.166 58.582-1.49396C58.582-14.164 48.314-24.434 35.648-24.434ZM85.512-1.29396C85.621 11.276 95.847 21.436 108.444 21.436C121.11 21.436 131.378 11.166 131.378-1.49396C131.378-14.164 121.11-24.434 108.444-24.434C95.798-24.434 85.542-14.194 85.511-1.55396C85.548-1.53396 85.586-1.51396 85.624-1.49396L85.512-1.29396Z"/> + </g> + <g id="Ultralight-L" transform="matrix(1 0 0 1 487.316 1556)"> + <path d="M91.561-99.4365L113.264-45.7565L138.42-45.7565C139.525-45.7565 140.42-44.8665 140.42-43.7565C140.42-42.6565 139.525-41.7565 138.42-41.7565L6.37-41.7565C5.266-41.7565 4.37-42.6565 4.37-43.7565C4.37-44.8665 5.266-45.7565 6.37-45.7565L29.518-45.7565L50.696-99.3965C51.625-101.837 54.275-103.147 56.78-102.417L71.126-98.1965L85.492-102.417C87.982-103.147 90.619-101.857 91.561-99.4365ZM87.835-97.9865C87.646-98.4665 87.119-98.7265 86.621-98.5765L86.621-98.5765L71.851-94.2365C71.608-94.1665 71.363-94.1465 71.124-94.1565C70.887-94.1465 70.642-94.1665 70.4-94.2365L70.4-94.2365L55.651-98.5765C55.15-98.7265 54.62-98.4565 54.435-97.9665L54.435-97.9665L33.798-45.7565L108.971-45.7565ZM107.944-29.3765C123.372-29.3765 135.878-16.8665 135.878-1.43655C135.878 13.9835 123.372 26.4935 107.944 26.4935C93.352 26.4935 81.373 15.3035 80.119 1.03345C76.929-0.456549 74.182-1.13655 71.509-1.13655C68.86-1.12655 66.134-0.436549 62.973 1.03345C61.719 15.3035 49.74 26.4935 35.148 26.4935C19.721 26.4935 7.214 13.9835 7.214-1.43655C7.214-16.8665 19.721-29.3765 35.148-29.3765C49.936-29.3765 62.039-17.8865 63.018-3.34655C65.911-4.50655 68.679-5.12655 71.499-5.13655C74.352-5.13655 77.149-4.51655 80.075-3.34655C81.053-17.8865 93.157-29.3765 107.944-29.3765ZM35.148-25.3765C21.93-25.3765 11.214-14.6565 11.214-1.43655C11.214 11.7735 21.93 22.4935 35.148 22.4935C48.366 22.4935 59.082 11.7735 59.082-1.43655C59.082-14.6565 48.366-25.3765 35.148-25.3765ZM84.011-1.43655C84.011 11.7735 94.726 22.4935 107.944 22.4935C121.163 22.4935 131.878 11.7735 131.878-1.43655C131.878-14.6565 121.163-25.3765 107.944-25.3765C94.726-25.3765 84.011-14.6565 84.011-1.43655Z"/> + </g> + <g id="Black-M" transform="matrix(1 0 0 1 2872 1126)"> + <path d="M68.87-91.2815L60.45-88.8015L52.04-91.2715C46.79-92.8215 41.24-90.0715 39.27-84.9715L24.95-47.7215L11.87-47.7215C7.73-47.7215 4.37-44.3615 4.37-40.2215C4.37-36.0715 7.73-32.7215 11.87-32.7215L110.93-32.7215C115.07-32.7215 118.43-36.0715 118.43-40.2215C118.43-44.3615 115.07-47.7215 110.93-47.7215L96.09-47.7215L81.62-85.0015C79.64-90.0915 74.1-92.8215 68.87-91.2815ZM41.02-47.7215L51.78-75.7115L58.21-73.8215C58.95-73.6015 59.71-73.5115 60.44-73.5215C61.18-73.5115 61.94-73.6015 62.68-73.8215L69.13-75.7215L80-47.7215L41.02-47.7215ZM88.07-29.4215C99.64-29.4215 109.02-20.0415 109.02-8.47151C109.02 3.09849 99.64 12.4885 88.07 12.4885C79.55 12.4885 72.22 7.39849 68.94 0.0984948C68.49-0.0715052 68.05-0.281505 67.63-0.541505C63.99-2.78151 62.08-3.24151 60.76-3.24151C59.45-3.24151 57.53-2.78151 53.9-0.541505C53.48-0.281505 53.04-0.0715052 52.59 0.0984948C49.31 7.39849 41.98 12.4885 33.46 12.4885C21.89 12.4885 12.51 3.09849 12.51-8.47151C12.51-20.0415 21.89-29.4215 33.46-29.4215C42.11-29.4215 49.54-24.1815 52.74-16.7015C55.29-17.6615 57.94-18.2415 60.76-18.2415C63.59-18.2415 66.24-17.6615 68.79-16.7015C71.99-24.1815 79.42-29.4215 88.07-29.4215ZM33.46-14.4215C30.17-14.4215 27.51-11.7615 27.51-8.47151C27.51-5.18151 30.17-2.51151 33.46-2.51151C36.75-2.51151 39.42-5.18151 39.42-8.47151C39.42-11.7615 36.75-14.4215 33.46-14.4215ZM82.11-8.47151C82.11-5.18151 84.78-2.51151 88.07-2.51151C91.36-2.51151 94.02-5.18151 94.02-8.47151C94.02-11.7615 91.36-14.4215 88.07-14.4215C84.78-14.4215 82.11-11.7615 82.11-8.47151Z"/> + </g> + <g id="Heavy-M" transform="matrix(1 0 0 1 2576.29 1126)"> + <path d="M79.69-87.5338L94.4-49.6138L109.93-49.6138C113.52-49.6138 116.43-46.7038 116.43-43.1138C116.43-39.5238 113.52-36.6138 109.93-36.6138L10.87-36.6138C7.28-36.6138 4.37-39.5238 4.37-43.1138C4.37-46.7038 7.28-49.6138 10.87-49.6138L24.63-49.6138L39.21-87.5038C40.98-92.1238 46.01-94.6038 50.75-93.2138L59.45-90.6538L68.15-93.2138C72.89-94.6038 77.9-92.1338 79.69-87.5338ZM68.73-79.8338L61.4-77.6738C60.75-77.4838 60.09-77.4038 59.44-77.4138C58.8-77.4038 58.14-77.4838 57.49-77.6738L57.49-77.6738L50.18-79.8238L38.56-49.6138L80.46-49.6138L68.73-79.8338ZM87.07-32.3138C98.64-32.3138 108.02-22.9338 108.02-11.3638C108.02 0.206172 98.64 9.59617 87.07 9.59617C78.03 9.59617 70.33 3.86617 67.39-4.14383L67.15-4.28383L67.15-4.28383C63.45-6.56383 61.35-7.13383 59.76-7.13383C58.18-7.13383 56.08-6.56383 52.38-4.28383L52.14-4.14383L52.14-4.14383C49.2 3.86617 41.5 9.59617 32.46 9.59617C20.89 9.59617 11.51 0.206172 11.51-11.3638C11.51-22.9338 20.89-32.3138 32.46-32.3138C41.47-32.3138 49.14-26.6338 52.11-18.6638C54.57-19.5838 57.09-20.1338 59.76-20.1338C62.44-20.1338 64.96-19.5838 67.42-18.6638C70.39-26.6338 78.06-32.3138 87.07-32.3138ZM32.46-19.3138C28.07-19.3138 24.51-15.7538 24.51-11.3638C24.51-6.97383 28.07-3.40383 32.46-3.40383C36.85-3.40383 40.42-6.97383 40.42-11.3638C40.42-15.7538 36.85-19.3138 32.46-19.3138ZM79.11-11.3638C79.11-6.97383 82.68-3.40383 87.07-3.40383C91.46-3.40383 95.02-6.97383 95.02-11.3638C95.02-15.7538 91.46-19.3138 87.07-19.3138C82.68-19.3138 79.11-15.7538 79.11-11.3638Z"/> + </g> + <g id="Bold-M" transform="matrix(1 0 0 1 2280.58 1126)"> + <path d="M77.75-84.0716L92.66-45.6616L92.72-45.5116L92.72-45.5116L108.93-45.5116C111.96-45.5116 114.43-43.0416 114.43-40.0116C114.43-36.9716 111.96-34.5116 108.93-34.5116L9.87-34.5116C6.84-34.5116 4.37-36.9716 4.37-40.0116C4.37-43.0416 6.84-45.5116 9.87-45.5116L24.33-45.5116C24.35-45.5816 24.38-45.6616 24.41-45.7316L39.14-84.0416C40.73-88.1816 45.22-90.4016 49.47-89.1516L58.45-86.5116L67.43-89.1516C71.67-90.4016 76.16-88.1916 77.75-84.0716ZM68.33-77.9516L60.12-75.5316C59.56-75.3716 59-75.3016 58.44-75.3116C57.89-75.3016 57.33-75.3716 56.77-75.5316L56.77-75.5316L48.58-77.9416L36.11-45.5116L80.92-45.5116L68.33-77.9516ZM86.07-29.2116C97.64-29.2116 107.02-19.8316 107.02-8.26157C107.02 3.30843 97.64 12.6884 86.07 12.6884C76.95 12.6884 69.19 6.86843 66.31-1.26157C62.76-3.40157 60.56-4.03157 58.77-4.03157C56.97-4.03157 54.77-3.40157 51.22-1.26157C48.34 6.86843 40.58 12.6884 31.46 12.6884C19.89 12.6884 10.51 3.30843 10.51-8.26157C10.51-19.8316 19.89-29.2116 31.46-29.2116C41.15-29.2116 49.3-22.6416 51.7-13.7116C53.99-14.5516 56.32-15.0316 58.77-15.0316C61.21-15.0316 63.54-14.5516 65.83-13.7116C68.23-22.6416 76.38-29.2116 86.07-29.2116ZM31.46-18.2116C25.96-18.2116 21.51-13.7616 21.51-8.26157C21.51-2.76157 25.96 1.68843 31.46 1.68843C36.96 1.68843 41.42-2.76157 41.42-8.26157C41.42-13.7616 36.96-18.2116 31.46-18.2116ZM76.11-8.26157C76.11-2.76157 80.57 1.68843 86.07 1.68843C91.57 1.68843 96.02-2.76157 96.02-8.26157C96.02-13.7616 91.57-18.2116 86.07-18.2116C80.57-18.2116 76.11-13.7616 76.11-8.26157Z"/> + </g> + <g id="Semibold-M" transform="matrix(1 0 0 1 1984.62 1126)"> + <path d="M76.31-83.7226L91.21-45.3026C91.29-45.1026 91.36-44.8926 91.41-44.6826L108.18-44.6826C110.8-44.6826 112.93-42.5526 112.93-39.9326C112.93-37.3026 110.8-35.1826 108.18-35.1826L9.12-35.1826C6.5-35.1826 4.37-37.3026 4.37-39.9326C4.37-42.5526 6.5-44.6826 9.12-44.6826L24.15-44.6826C24.2-44.9126 24.27-45.1526 24.36-45.3826L39.09-83.6926C40.54-87.4626 44.64-89.4926 48.51-88.3526L57.7-85.6426L66.89-88.3526C70.76-89.4926 74.85-87.4726 76.31-83.7226ZM68.03-78.7826L59.16-76.1726C58.67-76.0326 58.18-75.9726 57.7-75.9826C57.21-75.9726 56.72-76.0326 56.24-76.1726L56.24-76.1726L47.38-78.7826L34.26-44.6826L81.27-44.6826L68.03-78.7826ZM85.32-29.1326C96.89-29.1326 106.27-19.7526 106.27-8.1826C106.27 3.3874 96.89 12.7774 85.32 12.7774C75.8 12.7774 67.77 6.4274 65.21-2.2526C62.02-4.0826 59.86-4.7026 58.02-4.7026C56.17-4.7026 54.01-4.0826 50.82-2.2526C48.26 6.4274 40.23 12.7774 30.71 12.7774C19.14 12.7774 9.76 3.3874 9.76-8.1826C9.76-19.7526 19.14-29.1326 30.71-29.1326C40.66-29.1326 48.99-22.2026 51.13-12.9026C53.38-13.7326 55.65-14.2026 58.02-14.2026C60.38-14.2026 62.65-13.7326 64.9-12.9026C67.04-22.2026 75.37-29.1326 85.32-29.1326ZM30.71-19.6326C24.39-19.6326 19.26-14.5026 19.26-8.1826C19.26-1.8526 24.39 3.2774 30.71 3.2774C37.04 3.2774 42.17-1.8526 42.17-8.1826C42.17-14.5026 37.04-19.6326 30.71-19.6326ZM73.86-8.1826C73.86-1.8526 78.99 3.2774 85.32 3.2774C91.64 3.2774 96.77-1.8526 96.77-8.1826C96.77-14.5026 91.64-19.6326 85.32-19.6326C78.99-19.6326 73.86-14.5026 73.86-8.1826Z"/> + </g> + <g id="Medium-M" transform="matrix(1 0 0 1 1688.41 1126)"> + <path d="M75.34-83.4852L90.25-45.0652C90.37-44.7552 90.45-44.4352 90.49-44.1252L107.68-44.1252C110.02-44.1252 111.93-42.2152 111.93-39.8752C111.93-37.5252 110.02-35.6252 107.68-35.6252L8.62-35.6252C6.28-35.6252 4.37-37.5252 4.37-39.8752C4.37-42.2152 6.28-44.1252 8.62-44.1252L24.07-44.1252C24.11-44.4652 24.19-44.8052 24.32-45.1452L39.06-83.4552C40.41-86.9852 44.25-88.8752 47.87-87.8152L57.2-85.0652L66.53-87.8152C70.15-88.8752 73.98-86.9952 75.34-83.4852ZM67.83-79.3352L58.52-76.5952C58.08-76.4652 57.63-76.4152 57.2-76.4252C56.76-76.4152 56.32-76.4652 55.88-76.5952L55.88-76.5952L46.58-79.3352L33.04-44.1252L81.5-44.1252L67.83-79.3352ZM84.82-29.0752C96.39-29.0752 105.77-19.6952 105.77-8.12519C105.77 3.44481 96.39 12.8348 84.82 12.8348C75.06 12.8348 66.86 6.15481 64.53-2.87519C61.53-4.54519 59.39-5.14519 57.52-5.14519C55.64-5.14519 53.5-4.54519 50.5-2.87519C48.17 6.15481 39.97 12.8348 30.21 12.8348C18.64 12.8348 9.26 3.44481 9.26-8.12519C9.26-19.6952 18.64-29.0752 30.21-29.0752C40.34-29.0752 48.78-21.8952 50.74-12.3552C52.96-13.1752 55.19-13.6452 57.52-13.6452C59.84-13.6452 62.07-13.1752 64.29-12.3552C66.25-21.8952 74.69-29.0752 84.82-29.0752ZM30.21-20.5752C23.33-20.5752 17.76-15.0052 17.76-8.12519C17.76-1.24519 23.33 4.33481 30.21 4.33481C37.09 4.33481 42.67-1.24519 42.67-8.12519C42.67-15.0052 37.09-20.5752 30.21-20.5752ZM72.36-8.12519C72.36-1.24519 77.94 4.33481 84.82 4.33481C91.7 4.33481 97.27-1.24519 97.27-8.12519C97.27-15.0052 91.7-20.5752 84.82-20.5752C77.94-20.5752 72.36-15.0052 72.36-8.12519Z"/> + </g> + <g id="Regular-M" transform="matrix(1 0 0 1 1392.2 1126)"> + <path d="M74.37-83.245L89.72-43.575L107.17-43.575C109.24-43.575 110.92-41.895 110.92-39.825C110.92-37.755 109.24-36.075 107.17-36.075L8.12-36.075C6.05-36.075 4.37-37.755 4.37-39.825C4.37-41.895 6.05-43.575 8.12-43.575L24.05-43.575L39.02-83.185C40.27-86.495 43.85-88.275 47.24-87.275L56.69-84.495L66.17-87.285C69.54-88.275 73.1-86.515 74.37-83.245ZM67.62-79.895L57.87-77.025C57.48-76.915 57.08-76.865 56.69-76.875C56.3-76.865 55.91-76.915 55.52-77.025L55.52-77.025L45.79-79.885L32.07-43.575L81.68-43.575L67.62-79.895ZM84.32-29.025C95.89-29.025 105.27-19.645 105.27-8.07499C105.27 3.49501 95.89 12.885 84.32 12.885C74.32 12.885 65.96 5.88501 63.87-3.48499C61.03-5.01499 58.92-5.59499 57.01-5.59499C55.11-5.59499 53-5.01499 50.16-3.48499C48.06 5.88501 39.7 12.885 29.71 12.885C18.14 12.885 8.75 3.49501 8.75-8.07499C8.75-19.645 18.14-29.025 29.71-29.025C40.01-29.025 48.57-21.595 50.33-11.805C52.54-12.635 54.73-13.095 57.01-13.095C59.29-13.095 61.49-12.635 63.69-11.805C65.45-21.595 74.02-29.025 84.32-29.025ZM29.71-21.525C22.28-21.525 16.25-15.505 16.25-8.07499C16.25-0.644988 22.28 5.38501 29.71 5.38501C37.14 5.38501 43.16-0.644988 43.16-8.07499C43.16-15.505 37.14-21.525 29.71-21.525ZM70.86-8.07499C70.86-0.644988 76.88 5.38501 84.32 5.38501C91.75 5.38501 97.77-0.644988 97.77-8.07499C97.77-15.505 91.75-21.525 84.32-21.525C76.88-21.525 70.86-15.505 70.86-8.07499Z"/> + </g> + <g id="Light-M" transform="matrix(1 0 0 1 1096.23 1126)"> + <path d="M72.92-82.8952C71.8-85.8052 68.63-87.3652 65.64-86.4852L55.95-83.6352L46.27-86.4852C43.27-87.3652 40.09-85.7952 38.97-82.8752L23.59-42.7452L7.37-42.7452C5.72-42.7452 4.37-41.3952 4.37-39.7452C4.37-38.0852 5.72-36.7452 7.37-36.7452L106.43-36.7452C108.08-36.7452 109.43-38.0852 109.43-39.7452C109.43-41.3952 108.08-42.7452 106.43-42.7452L88.51-42.7452L72.92-82.8952ZM54.98-77.6652C55.3-77.5752 55.63-77.5352 55.95-77.5452C56.27-77.5352 56.59-77.5752 56.92-77.6652L67.33-80.7252L82.07-42.7452L30.02-42.7452L44.58-80.7252L54.98-77.6652ZM83.57-28.9452C95.14-28.9452 104.52-19.5652 104.52-7.99515C104.52 3.57485 95.14 12.9548 83.57 12.9548C73.24 12.9548 64.66 5.48485 62.93-4.34515C60.29-5.70515 58.21-6.26515 56.27-6.26515C54.32-6.26515 52.24-5.70515 49.6-4.34515C47.87 5.48485 39.29 12.9548 28.96 12.9548C17.39 12.9548 8.01 3.57485 8.01-7.99515C8.01-19.5652 17.39-28.9452 28.96-28.9452C39.52-28.9452 48.26-21.1352 49.71-10.9652C51.89-11.8052 54.04-12.2652 56.27-12.2652C58.49-12.2652 60.64-11.8052 62.82-10.9652C64.27-21.1352 73.01-28.9452 83.57-28.9452ZM28.96-22.9452C20.7-22.9452 14.01-16.2552 14.01-7.99515C14.01 0.264845 20.7 6.95485 28.96 6.95485C37.22 6.95485 43.91 0.274845 43.92-7.98515L43.92-7.98515L43.9-8.00515C43.9-8.01515 43.91-8.01515 43.92-8.01515C43.9-16.2652 37.21-22.9452 28.96-22.9452ZM68.61-7.98515C68.62 0.274845 75.31 6.95485 83.57 6.95485C91.83 6.95485 98.52 0.264845 98.52-7.99515C98.52-16.2552 91.83-22.9452 83.57-22.9452C75.32-22.9452 68.63-16.2652 68.61-8.01515C68.62-8.01515 68.63-8.01515 68.63-8.00515L68.61-7.98515Z"/> + </g> + <g id="Thin-M" transform="matrix(1 0 0 1 800.525 1126)"> + <path d="M70.988-83.4266L86.822-42.6366L105.424-42.6366C106.529-42.6366 107.424-41.7366 107.424-40.6366C107.424-39.5266 106.529-38.6366 105.424-38.6366L6.37-38.6366C5.266-38.6366 4.37-39.5266 4.37-40.6366C4.37-41.7366 5.266-42.6366 6.37-42.6366L23.275-42.6366L38.904-83.4066C39.837-85.8366 42.483-87.1466 44.984-86.4166L54.945-83.4866L64.916-86.4166C67.409-87.1466 70.048-85.8566 70.988-83.4266ZM43.855-82.5766C43.355-82.7266 42.826-82.4666 42.639-81.9766L42.639-81.9766L27.559-42.6366L82.531-42.6366L67.259-81.9866C67.071-82.4666 66.544-82.7266 66.045-82.5766L66.045-82.5766L55.63-79.5166C55.401-79.4466 55.169-79.4266 54.944-79.4366C54.719-79.4266 54.488-79.4466 54.259-79.5166L54.259-79.5166ZM82.566-29.8366C94.138-29.8366 103.519-20.4566 103.519-8.88662C103.519 2.68338 94.138 12.0734 82.566 12.0734C71.818 12.0734 62.961 3.97338 61.752-6.44662C59.298-7.62662 57.239-8.15662 55.262-8.15662C53.285-8.15662 51.226-7.62662 48.772-6.44662C47.563 3.97338 38.706 12.0734 27.959 12.0734C16.386 12.0734 7.005 2.68338 7.005-8.88662C7.005-20.4566 16.386-29.8366 27.959-29.8366C38.874-29.8366 47.84-21.4966 48.823-10.8366C50.999-11.6966 53.105-12.1566 55.262-12.1566C57.419-12.1566 59.525-11.6966 61.701-10.8366C62.685-21.4966 71.65-29.8366 82.566-29.8366ZM27.959-25.8366C18.595-25.8366 11.005-18.2466 11.005-8.88662C11.005 0.473383 18.595 8.07338 27.959 8.07338C37.322 8.07338 44.912 0.473383 44.912-8.88662C44.912-18.2466 37.322-25.8366 27.959-25.8366ZM65.612-8.88662C65.612 0.473383 73.202 8.07338 82.566 8.07338C91.929 8.07338 99.519 0.473383 99.519-8.88662C99.519-18.2466 91.929-25.8366 82.566-25.8366C73.202-25.8366 65.612-18.2466 65.612-8.88662Z"/> + </g> + <g id="Ultralight-M" transform="matrix(1 0 0 1 504.565 1126)"> + <path d="M69.539-86.0776L85.558-44.8076L104.673-44.8076C105.364-44.8076 105.923-44.2476 105.923-43.5576C105.923-42.8676 105.364-42.3076 104.673-42.3076L5.62-42.3076C4.929-42.3076 4.37-42.8676 4.37-43.5576C4.37-44.2476 4.929-44.8076 5.62-44.8076L23.04-44.8076L38.854-86.0576C39.647-88.1276 41.896-89.2376 44.022-88.6176L54.194-85.6276L64.377-88.6176C66.496-89.2376 68.74-88.1376 69.539-86.0776ZM67.208-85.1776C66.879-86.0176 65.955-86.4776 65.083-86.2176L65.083-86.2176L54.668-83.1576C54.509-83.1076 54.349-83.0976 54.193-83.1076C54.039-83.0976 53.879-83.1076 53.72-83.1576L53.72-83.1576L43.316-86.2176C42.441-86.4776 41.515-86.0176 41.189-85.1676L41.189-85.1676L25.718-44.8076L82.876-44.8076ZM81.815-32.7576C93.387-32.7576 102.769-23.3776 102.769-11.8076C102.769-0.237645 93.387 9.15235 81.815 9.15235C70.771 9.15235 61.723 0.602355 60.919-10.2376C58.594-11.3076 56.563-11.8176 54.579-11.8276C52.551-11.8376 50.48-11.3276 48.104-10.2376C47.3 0.602355 38.252 9.15235 27.208 9.15235C15.636 9.15235 6.254-0.237645 6.254-11.8076C6.254-23.3776 15.636-32.7576 27.208-32.7576C38.39-32.7576 47.526-23.9976 48.13-12.9676C50.346-13.8676 52.451-14.3376 54.593-14.3276C56.679-14.3176 58.734-13.8476 60.893-12.9676C61.497-23.9976 70.633-32.7576 81.815-32.7576ZM27.208-30.2576C17.016-30.2576 8.754-21.9976 8.754-11.8076C8.754-1.61765 17.016 6.65235 27.208 6.65235C37.4 6.65235 45.662-1.61765 45.662-11.8076C45.662-21.9976 37.4-30.2576 27.208-30.2576ZM63.361-11.8076C63.361-1.61765 71.623 6.65235 81.815 6.65235C92.007 6.65235 100.269-1.61765 100.269-11.8076C100.269-21.9976 92.007-30.2576 81.815-30.2576C71.623-30.2576 63.361-21.9976 63.361-11.8076Z"/> + </g> + <g id="Black-S" transform="matrix(1 0 0 1 2884.03 696)"> + <path d="M65.59-73.9535L76.75-45.1985L88.37-45.1985C91.68-45.1985 94.37-42.5125 94.37-39.1985C94.37-35.8855 91.68-33.1985 88.37-33.1985L10.37-33.1985C7.06-33.1985 4.37-35.8855 4.37-39.1985C4.37-42.5125 7.06-45.1985 10.37-45.1985L20.6-45.1985L31.65-73.9255C33.33-78.3005 38.09-80.6525 42.59-79.3295L48.62-77.5545L54.66-79.3315C59.15-80.6515 63.9-78.3135 65.59-73.9535ZM55.4-67.0415L50.41-65.5725C49.81-65.3965 49.21-65.3185 48.62-65.3275C48.03-65.3195 47.43-65.3975 46.83-65.5725L46.83-65.5725L41.85-67.0365L33.46-45.1985L63.88-45.1985L55.4-67.0415ZM70.37-30.6985C79.48-30.6985 86.87-23.3115 86.87-14.1985C86.87-5.08651 79.48 2.30149 70.37 2.30149C63.61 2.30149 57.8-1.76551 55.25-7.58551C54.9-7.71751 54.56-7.88551 54.23-8.08951C51.37-9.84551 49.88-10.1985 48.87-10.1985C47.86-10.1985 46.37-9.84551 43.51-8.08851C43.18-7.88551 42.84-7.71751 42.49-7.58551C39.94-1.76551 34.13 2.30149 27.37 2.30149C18.26 2.30149 10.87-5.08651 10.87-14.1985C10.87-23.3115 18.26-30.6985 27.37-30.6985C34.08-30.6985 39.85-26.6965 42.43-20.9495C44.48-21.7295 46.6-22.1985 48.87-22.1985C51.14-22.1985 53.26-21.7295 55.31-20.9495C57.89-26.6965 63.66-30.6985 70.37-30.6985ZM27.37-18.6985C24.88-18.6985 22.87-16.6845 22.87-14.1985C22.87-11.7135 24.88-9.69851 27.37-9.69851C29.86-9.69851 31.87-11.7135 31.87-14.1985C31.87-16.6845 29.86-18.6985 27.37-18.6985ZM65.87-14.1985C65.87-11.7135 67.88-9.69851 70.37-9.69851C72.86-9.69851 74.87-11.7135 74.87-14.1985C74.87-16.6845 72.86-18.6985 70.37-18.6985C67.88-18.6985 65.87-16.6845 65.87-14.1985Z"/> + </g> + <g id="Heavy-S" transform="matrix(1 0 0 1 2588.32 696)"> + <path d="M63.66-73.4845L75.06-44.0925L87.37-44.0925C90.13-44.0925 92.37-41.8535 92.37-39.0925C92.37-36.3305 90.13-34.0925 87.37-34.0925L9.37-34.0925C6.61-34.0925 4.37-36.3305 4.37-39.0925C4.37-41.8535 6.61-44.0925 9.37-44.0925L20.29-44.0925L31.58-73.4595C33.08-77.3495 37.31-79.4385 41.3-78.2635L47.62-76.4055L53.94-78.2655C57.93-79.4385 62.15-77.3605 63.66-73.4845ZM55-68.1535L49.13-66.4255C48.62-66.2775 48.12-66.2115 47.62-66.2215C47.12-66.2125 46.61-66.2775 46.11-66.4255L46.11-66.4255L40.25-68.1495L31-44.0925L64.34-44.0925L55-68.1535ZM69.37-30.5925C78.48-30.5925 85.87-23.2045 85.87-14.0925C85.87-4.97948 78.48 2.40752 69.37 2.40752C62.09 2.40752 55.91-2.30848 53.72-8.85248C50.82-10.6345 49.14-11.0925 47.87-11.0925C46.6-11.0925 44.92-10.6345 42.02-8.85248C39.83-2.30848 33.65 2.40752 26.37 2.40752C17.26 2.40752 9.87-4.97948 9.87-14.0925C9.87-23.2045 17.26-30.5925 26.37-30.5925C33.43-30.5925 39.46-26.1555 41.81-19.9175C43.76-20.6565 45.76-21.0925 47.87-21.0925C49.98-21.0925 51.98-20.6565 53.93-19.9175C56.28-26.1555 62.31-30.5925 69.37-30.5925ZM26.37-20.5925C22.78-20.5925 19.87-17.6825 19.87-14.0925C19.87-10.5025 22.78-7.59248 26.37-7.59248C29.96-7.59248 32.87-10.5025 32.87-14.0925C32.87-17.6825 29.96-20.5925 26.37-20.5925ZM62.87-14.0925C62.87-10.5025 65.78-7.59248 69.37-7.59248C72.96-7.59248 75.87-10.5025 75.87-14.0925C75.87-17.6825 72.96-20.5925 69.37-20.5925C65.78-20.5925 62.87-17.6825 62.87-14.0925Z"/> + </g> + <g id="Bold-S" transform="matrix(1 0 0 1 2292.11 696)"> + <path d="M62.69-73.2507L74.22-43.5487L74.22-43.5387L86.87-43.5387C89.36-43.5387 91.37-41.5247 91.37-39.0387C91.37-36.5537 89.36-34.5387 86.87-34.5387L8.87-34.5387C6.38-34.5387 4.37-36.5537 4.37-39.0387C4.37-41.5247 6.38-43.5387 8.87-43.5387L20.13-43.5387L20.14-43.5667L20.16-43.6057L31.55-73.2267C32.95-76.8737 36.92-78.8327 40.66-77.7307L47.12-75.8317L53.58-77.7327C57.32-78.8327 61.28-76.8847 62.69-73.2507ZM54.8-68.7097L48.49-66.8517C48.03-66.7177 47.57-66.6587 47.12-66.6687C46.67-66.6597 46.21-66.7177 45.75-66.8517L45.75-66.8517L39.45-68.7057L29.77-43.5387L64.57-43.5387L54.8-68.7097ZM68.87-30.5387C77.98-30.5387 85.37-23.1517 85.37-14.0387C85.37-4.92673 77.98 2.46127 68.87 2.46127C61.79 2.46127 55.75-2.00273 53.41-8.27073C50.52-10.0367 48.77-10.5387 47.37-10.5387C45.97-10.5387 44.22-10.0367 41.33-8.27073C38.99-2.00273 32.95 2.46127 25.87 2.46127C16.76 2.46127 9.37-4.92673 9.37-14.0387C9.37-23.1517 16.76-30.5387 25.87-30.5387C33.44-30.5387 39.82-25.4447 41.76-18.4977C43.58-19.1577 45.43-19.5387 47.37-19.5387C49.31-19.5387 51.16-19.1577 52.98-18.4977C54.92-25.4447 61.3-30.5387 68.87-30.5387ZM25.87-21.5387C21.73-21.5387 18.37-18.1807 18.37-14.0387C18.37-9.89673 21.73-6.53873 25.87-6.53873C30.01-6.53873 33.37-9.89673 33.37-14.0387C33.37-18.1807 30.01-21.5387 25.87-21.5387ZM61.37-14.0387C61.37-9.89673 64.73-6.53873 68.87-6.53873C73.01-6.53873 76.37-9.89673 76.37-14.0387C76.37-18.1807 73.01-21.5387 68.87-21.5387C64.73-21.5387 61.37-18.1807 61.37-14.0387Z"/> + </g> + <g id="Semibold-S" transform="matrix(1 0 0 1 1995.65 696)"> + <path d="M62.21-73.1391L73.74-43.4371L73.8-43.2671L73.8-43.2671L86.62-43.2671C88.97-43.2671 90.87-41.3641 90.87-39.0171C90.87-36.6701 88.97-34.7671 86.62-34.7671L8.62-34.7671C6.27-34.7671 4.37-36.6701 4.37-39.0171C4.37-41.3641 6.27-43.2671 8.62-43.2671L20.06-43.2671C20.08-43.3431 20.11-43.4191 20.14-43.4951L31.53-73.1151C32.89-76.6401 36.72-78.5341 40.34-77.4691L46.87-75.5491L53.4-77.4711C57.02-78.5341 60.85-76.6511 62.21-73.1391ZM54.7-68.9921L48.16-67.0701C47.73-66.9421 47.3-66.8871 46.87-66.8971C46.44-66.8881 46.01-66.9431 45.58-67.0701L45.58-67.0701L39.05-68.9891L29.16-43.2671L64.68-43.2671L54.7-68.9921ZM68.62-30.5171C77.73-30.5171 85.12-23.1301 85.12-14.0171C85.12-4.90509 77.73 2.48291 68.62 2.48291C61.4 2.48291 55.26-2.15909 53.02-8.62309C50.27-10.2701 48.54-10.7671 47.12-10.7671C45.7-10.7671 43.97-10.2701 41.22-8.62309C38.98-2.15909 32.84 2.48291 25.62 2.48291C16.51 2.48291 9.12-4.90509 9.12-14.0171C9.12-23.1301 16.51-30.5171 25.62-30.5171C33.28-30.5171 39.71-25.3041 41.58-18.2341C43.37-18.8901 45.2-19.2671 47.12-19.2671C49.04-19.2671 50.87-18.8901 52.66-18.2341C54.53-25.3041 60.96-30.5171 68.62-30.5171ZM25.62-22.0171C21.2-22.0171 17.62-18.4351 17.62-14.0171C17.62-9.59909 21.2-6.01709 25.62-6.01709C30.04-6.01709 33.62-9.59909 33.62-14.0171C33.62-18.4351 30.04-22.0171 25.62-22.0171ZM60.62-14.0171C60.62-9.59909 64.2-6.01709 68.62-6.01709C73.04-6.01709 76.62-9.59909 76.62-14.0171C76.62-18.4351 73.04-22.0171 68.62-22.0171C64.2-22.0171 60.62-18.4351 60.62-14.0171Z"/> + </g> + <g id="Medium-S" transform="matrix(1 0 0 1 1699.19 696)"> + <path d="M61.39-73.7739L73.25-43.2149C73.3-43.1059 73.33-42.9959 73.36-42.8859L86.37-42.8859C88.58-42.8859 90.37-41.0949 90.37-38.8859C90.37-36.6769 88.58-34.8859 86.37-34.8859L8.37-34.8859C6.16-34.8859 4.37-36.6769 4.37-38.8859C4.37-41.0949 6.16-42.8859 8.37-42.8859L20-42.8859C20.03-43.0159 20.07-43.1449 20.12-43.2739L31.84-73.7549C32.97-76.6719 36.14-78.2399 39.14-77.3579L46.62-75.1569L54.11-77.3589C57.1-78.2389 60.27-76.6809 61.39-73.7739ZM54.6-69.1659L47.84-67.1779C47.44-67.0579 47.02-67.0059 46.62-67.0159C46.21-67.0069 45.8-67.0579 45.4-67.1779L45.4-67.1779L38.65-69.1619L28.55-42.8859L64.8-42.8859L54.6-69.1659ZM68.37-30.3859C77.48-30.3859 84.87-22.9989 84.87-13.8859C84.87-4.77295 77.48 2.61405 68.37 2.61405C61.01 2.61405 54.78-2.20195 52.65-8.85295C50.02-10.3949 48.31-10.8859 46.87-10.8859C45.43-10.8859 43.72-10.3949 41.09-8.85295C38.96-2.20195 32.73 2.61405 25.37 2.61405C16.26 2.61405 8.87-4.77295 8.87-13.8859C8.87-22.9989 16.26-30.3859 25.37-30.3859C33.11-30.3859 39.61-25.0529 41.39-17.8589C43.17-18.5129 44.98-18.8859 46.87-18.8859C48.76-18.8859 50.57-18.5129 52.35-17.8589C54.13-25.0529 60.63-30.3859 68.37-30.3859ZM25.37-22.3859C20.68-22.3859 16.87-18.5799 16.87-13.8859C16.87-9.19195 20.68-5.38595 25.37-5.38595C30.06-5.38595 33.87-9.19195 33.87-13.8859C33.87-18.5799 30.06-22.3859 25.37-22.3859ZM59.87-13.8859C59.87-9.19195 63.68-5.38595 68.37-5.38595C73.06-5.38595 76.87-9.19195 76.87-13.8859C76.87-18.5799 73.06-22.3859 68.37-22.3859C63.68-22.3859 59.87-18.5799 59.87-13.8859Z"/> + </g> + <g id="Regular-S" transform="matrix(1 0 0 1 1402.97 696)"> + <path d="M60.76-70.7877L72.29-41.0857C72.37-40.8717 72.43-40.6547 72.47-40.4377L85.87-40.4377C87.8-40.4377 89.37-38.8707 89.37-36.9377C89.37-35.0047 87.8-33.4377 85.87-33.4377L7.87-33.4377C5.94-33.4377 4.37-35.0047 4.37-36.9377C4.37-38.8707 5.94-40.4377 7.87-40.4377L19.9-40.4377C19.94-40.6747 20-40.9127 20.09-41.1457L31.48-70.7667C32.7-73.9267 36.13-75.6247 39.38-74.6697L46.12-72.6877L52.87-74.6717C56.11-75.6247 59.54-73.9367 60.76-70.7877ZM54.4-67.8267L47.2-65.7097C46.84-65.6027 46.48-65.5577 46.12-65.5677C45.76-65.5587 45.4-65.6037 45.04-65.7097L45.04-65.7097L37.85-67.8237L27.32-40.4377L65.03-40.4377L54.4-67.8267ZM67.87-28.4377C76.98-28.4377 84.37-21.0507 84.37-11.9377C84.37-2.8247 76.98 4.5623 67.87 4.5623C60.26 4.5623 53.85-0.591697 51.95-7.5997C49.53-8.9617 47.84-9.4377 46.37-9.4377C44.9-9.4377 43.21-8.9617 40.79-7.5997C38.89-0.591697 32.48 4.5623 24.87 4.5623C15.76 4.5623 8.37-2.8247 8.37-11.9377C8.37-21.0507 15.76-28.4377 24.87-28.4377C32.79-28.4377 39.4-22.8597 41-15.4197C42.76-16.0697 44.53-16.4377 46.37-16.4377C48.21-16.4377 49.98-16.0697 51.74-15.4197C53.34-22.8597 59.95-28.4377 67.87-28.4377ZM24.87-21.4377C19.62-21.4377 15.37-17.1847 15.37-11.9377C15.37-6.6907 19.62-2.4377 24.87-2.4377C30.12-2.4377 34.37-6.6907 34.37-11.9377C34.37-17.1847 30.12-21.4377 24.87-21.4377ZM58.37-11.9377C58.37-6.6907 62.62-2.4377 67.87-2.4377C73.12-2.4377 77.37-6.6907 77.37-11.9377C77.37-17.1847 73.12-21.4377 67.87-21.4377C62.62-21.4377 58.37-17.1847 58.37-11.9377Z"/> + </g> + <g id="Light-S" transform="matrix(1 0 0 1 1107.26 696)"> + <path d="M58.82-70.2837L70.59-39.3357L84.87-39.3357C86.25-39.3357 87.37-38.2167 87.37-36.8357C87.37-35.4547 86.25-34.3357 84.87-34.3357L6.87-34.3357C5.49-34.3357 4.37-35.4547 4.37-36.8357C4.37-38.2167 5.49-39.3357 6.87-39.3357L19.65-39.3357L31.42-70.2837C32.44-72.9687 35.35-74.4157 38.11-73.6057L45.12-71.5437L52.13-73.6057C54.89-74.4157 57.8-72.9687 58.82-70.2837ZM54.15-68.5067C54.06-68.7507 53.79-68.8817 53.54-68.8087L53.54-68.8087L45.92-66.5667C45.65-66.4877 45.38-66.4567 45.12-66.4667C44.86-66.4567 44.59-66.4887 44.32-66.5667L44.32-66.5667L36.7-68.8087C36.45-68.8817 36.18-68.7507 36.09-68.5067L36.09-68.5067L25-39.3357L65.24-39.3357ZM66.87-28.3357C75.98-28.3357 83.37-20.9487 83.37-11.8357C83.37-2.7227 75.98 4.6643 66.87 4.6643C58.8 4.6643 52.08-1.1347 50.65-8.7957C48.54-9.8917 46.89-10.3357 45.37-10.3357C43.85-10.3357 42.2-9.8917 40.09-8.7957C38.66-1.1347 31.94 4.6643 23.87 4.6643C14.76 4.6643 7.37-2.7227 7.37-11.8357C7.37-20.9487 14.76-28.3357 23.87-28.3357C32.14-28.3357 38.99-22.2527 40.18-14.3187C41.91-14.9747 43.61-15.3357 45.37-15.3357C47.13-15.3357 48.83-14.9747 50.56-14.3187C51.75-22.2527 58.6-28.3357 66.87-28.3357ZM23.87-23.3357C17.52-23.3357 12.37-18.1867 12.37-11.8357C12.37-5.4847 17.52-0.335701 23.87-0.335701C30.22-0.335701 35.37-5.4847 35.37-11.8357C35.37-18.1867 30.22-23.3357 23.87-23.3357ZM55.37-11.8357C55.37-5.4847 60.52-0.335701 66.87-0.335701C73.22-0.335701 78.37-5.4847 78.37-11.8357C78.37-18.1867 73.22-23.3357 66.87-23.3357C60.52-23.3357 55.37-18.1867 55.37-11.8357Z"/> + </g> + <g id="Thin-S" transform="matrix(1 0 0 1 811.427 696)"> + <path d="M57.131-70.88L69.116-39.368L83.995-39.368C84.892-39.368 85.62-38.641 85.62-37.743C85.62-36.846 84.892-36.118 83.995-36.118L5.995-36.118C5.098-36.118 4.37-36.846 4.37-37.743C4.37-38.641 5.098-39.368 5.995-39.368L19.374-39.368L31.359-70.88C32.218-73.138 34.67-74.355 36.987-73.673L44.245-71.539L51.503-73.673C53.82-74.355 56.272-73.138 57.131-70.88ZM54.093-69.725C53.838-70.396 53.109-70.758 52.42-70.555L52.42-70.555L44.799-68.314C44.614-68.259 44.426-68.239 44.244-68.25C44.062-68.24 43.876-68.26 43.691-68.314L43.691-68.314L36.07-70.555C35.381-70.758 34.652-70.396 34.397-69.725L34.397-69.725L22.852-39.368L65.638-39.368ZM65.995-29.243C75.108-29.243 82.495-21.856 82.495-12.743C82.495-3.63 75.108 3.757 65.995 3.757C57.552 3.757 50.591-2.584 49.613-10.763C47.748-11.665 46.178-12.084 44.68-12.116C43.066-12.15 41.392-11.737 39.377-10.763C38.399-2.584 31.438 3.757 22.995 3.757C13.882 3.757 6.495-3.63 6.495-12.743C6.495-21.856 13.882-29.243 22.995-29.243C31.572-29.243 38.621-22.698 39.42-14.33C41.22-15.04 42.96-15.403 44.749-15.365C46.363-15.331 47.943-14.971 49.57-14.33C50.369-22.698 57.418-29.243 65.995-29.243ZM22.995-25.993C15.677-25.993 9.745-20.061 9.745-12.743C9.745-5.425 15.677 0.506995 22.995 0.506995C30.313 0.506995 36.245-5.425 36.245-12.743C36.245-20.061 30.313-25.993 22.995-25.993ZM52.745-12.743C52.745-5.425 58.677 0.506995 65.995 0.506995C73.313 0.506995 79.245-5.425 79.245-12.743C79.245-20.061 73.313-25.993 65.995-25.993C58.677-25.993 52.745-20.061 52.745-12.743Z"/> + </g> + <g id="Ultralight-S" transform="matrix(1 0 0 1 515.216 696)"> + <path d="M56.163-70.6485L68.271-38.8145L83.495-38.8145C84.116-38.8145 84.62-38.3105 84.62-37.6895C84.62-37.0675 84.116-36.5645 83.495-36.5645L5.495-36.5645C4.874-36.5645 4.37-37.0675 4.37-37.6895C4.37-38.3105 4.874-38.8145 5.495-38.8145L19.219-38.8145L31.327-70.6485C32.093-72.6625 34.279-73.7475 36.346-73.1395L43.745-70.9635L51.144-73.1395C53.211-73.7475 55.397-72.6625 56.163-70.6485ZM35.711-70.9815C34.772-71.2575 33.778-70.7645 33.43-69.8485L33.43-69.8485L21.626-38.8145L65.864-38.8145L54.06-69.8485C53.712-70.7645 52.718-71.2575 51.779-70.9815L51.779-70.9815L44.158-68.7395C44.02-68.6985 43.88-68.6865 43.744-68.6975C43.609-68.6865 43.47-68.6995 43.332-68.7395L43.332-68.7395ZM65.495-29.1895C74.608-29.1895 81.995-21.8015 81.995-12.6895C81.995-3.57652 74.608 3.81048 65.495 3.81048C56.853 3.81048 49.763-2.83252 49.053-11.2905C47.261-12.1245 45.702-12.5295 44.191-12.5625C42.554-12.5965 40.881-12.1955 38.937-11.2905C38.227-2.83252 31.137 3.81048 22.495 3.81048C13.382 3.81048 5.995-3.57652 5.995-12.6895C5.995-21.8015 13.382-29.1895 22.495-29.1895C31.25-29.1895 38.412-22.3705 38.961-13.7545C40.765-14.4825 42.483-14.8485 44.239-14.8115C45.828-14.7775 47.394-14.4145 49.029-13.7545C49.578-22.3705 56.74-29.1895 65.495-29.1895ZM22.495-26.9395C14.625-26.9395 8.245-20.5595 8.245-12.6895C8.245-4.81952 14.625 1.56048 22.495 1.56048C30.365 1.56048 36.745-4.81952 36.745-12.6895C36.745-20.5595 30.365-26.9395 22.495-26.9395ZM51.245-12.6895C51.245-4.81952 57.625 1.56048 65.495 1.56048C73.365 1.56048 79.745-4.81952 79.745-12.6895C79.745-20.5595 73.365-26.9395 65.495-26.9395C57.625-26.9395 51.245-20.5595 51.245-12.6895Z"/> + </g> + </g> +</svg>
diff --git a/ios/chrome/app/resources/quick_action_incognito_search.imageset/Contents.json b/ios/chrome/app/resources/quick_action_incognito_search.imageset/Contents.json deleted file mode 100644 index 2035055..0000000 --- a/ios/chrome/app/resources/quick_action_incognito_search.imageset/Contents.json +++ /dev/null
@@ -1,18 +0,0 @@ -{ - "images": [ - { - "idiom": "universal", - "scale": "2x", - "filename": "quick_action_incognito_search@2x.png" - }, - { - "idiom": "universal", - "scale": "3x", - "filename": "quick_action_incognito_search@3x.png" - } - ], - "info": { - "version": 1, - "author": "xcode" - } -}
diff --git a/ios/chrome/app/resources/quick_action_incognito_search.imageset/quick_action_incognito_search@2x.png b/ios/chrome/app/resources/quick_action_incognito_search.imageset/quick_action_incognito_search@2x.png deleted file mode 100644 index 83f4a4958..0000000 --- a/ios/chrome/app/resources/quick_action_incognito_search.imageset/quick_action_incognito_search@2x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/app/resources/quick_action_incognito_search.imageset/quick_action_incognito_search@3x.png b/ios/chrome/app/resources/quick_action_incognito_search.imageset/quick_action_incognito_search@3x.png deleted file mode 100644 index 0ec88884..0000000 --- a/ios/chrome/app/resources/quick_action_incognito_search.imageset/quick_action_incognito_search@3x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/app/resources/quick_action_new_search.imageset/Contents.json b/ios/chrome/app/resources/quick_action_new_search.imageset/Contents.json deleted file mode 100644 index 55b3d62..0000000 --- a/ios/chrome/app/resources/quick_action_new_search.imageset/Contents.json +++ /dev/null
@@ -1,18 +0,0 @@ -{ - "images": [ - { - "idiom": "universal", - "scale": "2x", - "filename": "quick_action_new_search@2x.png" - }, - { - "idiom": "universal", - "scale": "3x", - "filename": "quick_action_new_search@3x.png" - } - ], - "info": { - "version": 1, - "author": "xcode" - } -}
diff --git a/ios/chrome/app/resources/quick_action_new_search.imageset/quick_action_new_search@2x.png b/ios/chrome/app/resources/quick_action_new_search.imageset/quick_action_new_search@2x.png deleted file mode 100644 index 9fad48d..0000000 --- a/ios/chrome/app/resources/quick_action_new_search.imageset/quick_action_new_search@2x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/app/resources/quick_action_new_search.imageset/quick_action_new_search@3x.png b/ios/chrome/app/resources/quick_action_new_search.imageset/quick_action_new_search@3x.png deleted file mode 100644 index 525af72..0000000 --- a/ios/chrome/app/resources/quick_action_new_search.imageset/quick_action_new_search@3x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/app/resources/quick_action_qr_scanner.imageset/Contents.json b/ios/chrome/app/resources/quick_action_qr_scanner.imageset/Contents.json deleted file mode 100644 index 6184966d..0000000 --- a/ios/chrome/app/resources/quick_action_qr_scanner.imageset/Contents.json +++ /dev/null
@@ -1,18 +0,0 @@ -{ - "images": [ - { - "idiom": "universal", - "scale": "2x", - "filename": "quick_action_qr_scanner@2x.png" - }, - { - "idiom": "universal", - "scale": "3x", - "filename": "quick_action_qr_scanner@3x.png" - } - ], - "info": { - "version": 1, - "author": "xcode" - } -}
diff --git a/ios/chrome/app/resources/quick_action_qr_scanner.imageset/quick_action_qr_scanner@2x.png b/ios/chrome/app/resources/quick_action_qr_scanner.imageset/quick_action_qr_scanner@2x.png deleted file mode 100644 index 5c41bd5..0000000 --- a/ios/chrome/app/resources/quick_action_qr_scanner.imageset/quick_action_qr_scanner@2x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/app/resources/quick_action_qr_scanner.imageset/quick_action_qr_scanner@3x.png b/ios/chrome/app/resources/quick_action_qr_scanner.imageset/quick_action_qr_scanner@3x.png deleted file mode 100644 index 170c669e..0000000 --- a/ios/chrome/app/resources/quick_action_qr_scanner.imageset/quick_action_qr_scanner@3x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/app/resources/quick_action_voice_search.imageset/Contents.json b/ios/chrome/app/resources/quick_action_voice_search.imageset/Contents.json deleted file mode 100644 index 230147f..0000000 --- a/ios/chrome/app/resources/quick_action_voice_search.imageset/Contents.json +++ /dev/null
@@ -1,18 +0,0 @@ -{ - "images": [ - { - "idiom": "universal", - "scale": "2x", - "filename": "quick_action_voice_search@2x.png" - }, - { - "idiom": "universal", - "scale": "3x", - "filename": "quick_action_voice_search@3x.png" - } - ], - "info": { - "version": 1, - "author": "xcode" - } -}
diff --git a/ios/chrome/app/resources/quick_action_voice_search.imageset/quick_action_voice_search@2x.png b/ios/chrome/app/resources/quick_action_voice_search.imageset/quick_action_voice_search@2x.png deleted file mode 100644 index 3ea943c9..0000000 --- a/ios/chrome/app/resources/quick_action_voice_search.imageset/quick_action_voice_search@2x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/app/resources/quick_action_voice_search.imageset/quick_action_voice_search@3x.png b/ios/chrome/app/resources/quick_action_voice_search.imageset/quick_action_voice_search@3x.png deleted file mode 100644 index 80c1d444..0000000 --- a/ios/chrome/app/resources/quick_action_voice_search.imageset/quick_action_voice_search@3x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd index 47524ba1..31f78bfb 100644 --- a/ios/chrome/app/strings/ios_strings.grd +++ b/ios/chrome/app/strings/ios_strings.grd
@@ -2280,6 +2280,11 @@ <message name="IDS_IOS_READING_LIST_SNACKBAR_MESSAGE" desc="Message briefly displayed at the bottom of the screen to the user to inform that the selected page has been added to the reading list. [Length: 35em]" meaning="The selected page has been added to your reading list. [Length: 35em]"> Added to Reading List </message> + <message name="IDS_IOS_READING_LIST_SNACKBAR_MESSAGE_FOR_ACCOUNT" desc="Message briefly displayed at the bottom of the screen to the user to inform that the selected page has been added to the reading list of their account." meaning="The selected page has been added to your account's reading list."> + {count, plural, + =1 {Page added to your reading list in your account, {email}} + other {Pages added to your reading list in your account, {email}}} + </message> <message name="IDS_IOS_READING_LIST_ENTRY_ACCESSIBILITY_LABEL" desc="Accessibility label for a reading list entry. Summarizes fields in the reading list entry (title, status and url). Read by Text To Speech. Similar to IDS_IOS_READING_LIST_ENTRY_WITH_UPLOAD_STATE_ACCESSIBILITY_LABEL"> <ph name="TITLE"><ex>Chromium - The Chromium Projects</ex>$1</ph>, <ph name="STATE"><ex>Available offline</ex>$2</ph>, <ph name="URL"><ex>http://www.chromium.org/Home</ex>$3</ph> </message>
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_READING_LIST_SNACKBAR_MESSAGE_FOR_ACCOUNT.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_READING_LIST_SNACKBAR_MESSAGE_FOR_ACCOUNT.png.sha1 new file mode 100644 index 0000000..a28714e --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_READING_LIST_SNACKBAR_MESSAGE_FOR_ACCOUNT.png.sha1
@@ -0,0 +1 @@ +93aca0128c28425ab953d7c69654d7cfc7877869 \ No newline at end of file
diff --git a/ios/chrome/browser/credential_provider/BUILD.gn b/ios/chrome/browser/credential_provider/BUILD.gn index b8653ee5..fe21527b 100644 --- a/ios/chrome/browser/credential_provider/BUILD.gn +++ b/ios/chrome/browser/credential_provider/BUILD.gn
@@ -43,6 +43,7 @@ "//components/password_manager/core/common:features", "//components/prefs:prefs", "//components/signin/public/identity_manager", + "//components/sync/base", "//ios/chrome/browser/browser_state", "//ios/chrome/browser/favicon", "//ios/chrome/browser/passwords",
diff --git a/ios/chrome/browser/credential_provider/archivable_credential+password_form.mm b/ios/chrome/browser/credential_provider/archivable_credential+password_form.mm index 956c548..73e71edf 100644 --- a/ios/chrome/browser/credential_provider/archivable_credential+password_form.mm +++ b/ios/chrome/browser/credential_provider/archivable_credential+password_form.mm
@@ -10,6 +10,7 @@ #import "components/password_manager/core/browser/password_form.h" #import "components/password_manager/core/browser/password_manager_util.h" #import "components/password_manager/core/browser/password_ui_utils.h" +#import "components/sync/base/features.h" #import "ios/chrome/browser/credential_provider/credential_provider_util.h" #import "url/gurl.h" @@ -38,6 +39,9 @@ form.username_value = SysNSStringToUTF16(credential.user); form.encrypted_password = SysNSStringToUTF8(credential.keychainIdentifier); form.times_used_in_html_form = credential.rank; + if (base::FeatureList::IsEnabled(syncer::kPasswordNotesWithBackup)) { + form.SetNoteWithEmptyUniqueDisplayName(SysNSStringToUTF16(credential.note)); + } return form; } @@ -59,6 +63,11 @@ NSString* serviceIdentifier = SysUTF8ToNSString(passwordForm.url.spec()); NSString* serviceName = SysUTF8ToNSString(site_name); + NSString* note = @""; + if (base::FeatureList::IsEnabled(syncer::kPasswordNotesWithBackup)) { + note = SysUTF16ToNSString(passwordForm.GetNoteWithEmptyUniqueDisplayName()); + } + if (password_manager::IsValidAndroidFacetURI(passwordForm.signon_realm)) { NSString* webRealm = SysUTF8ToNSString(passwordForm.affiliated_web_realm); url::Origin origin = @@ -95,7 +104,8 @@ serviceIdentifier:serviceIdentifier serviceName:serviceName user:SysUTF16ToNSString(passwordForm.username_value) - validationIdentifier:validationIdentifier]; + validationIdentifier:validationIdentifier + note:note]; } @end
diff --git a/ios/chrome/browser/credential_provider/archivable_credential+password_form_unittest.mm b/ios/chrome/browser/credential_provider/archivable_credential+password_form_unittest.mm index 20b343c..8dee324 100644 --- a/ios/chrome/browser/credential_provider/archivable_credential+password_form_unittest.mm +++ b/ios/chrome/browser/credential_provider/archivable_credential+password_form_unittest.mm
@@ -124,7 +124,8 @@ serviceIdentifier:url serviceName:nil user:username - validationIdentifier:nil]; + validationIdentifier:nil + note:nil]; EXPECT_TRUE(credential); PasswordForm passwordForm = PasswordFormFromCredential(credential);
diff --git a/ios/chrome/browser/credential_provider/credential_provider_migrator_unittest.mm b/ios/chrome/browser/credential_provider/credential_provider_migrator_unittest.mm index bcfa4b2..252e288d8 100644 --- a/ios/chrome/browser/credential_provider/credential_provider_migrator_unittest.mm +++ b/ios/chrome/browser/credential_provider/credential_provider_migrator_unittest.mm
@@ -41,7 +41,8 @@ serviceIdentifier:url serviceName:nil user:username - validationIdentifier:nil]; + validationIdentifier:nil + note:nil]; } class CredentialProviderMigratorTest : public PlatformTest {
diff --git a/ios/chrome/browser/credential_provider/credential_provider_util.mm b/ios/chrome/browser/credential_provider/credential_provider_util.mm index d6bbb0705..cb0f3da 100644 --- a/ios/chrome/browser/credential_provider/credential_provider_util.mm +++ b/ios/chrome/browser/credential_provider/credential_provider_util.mm
@@ -264,7 +264,8 @@ serviceIdentifier:credential.serviceIdentifier serviceName:credential.serviceName user:credential.user - validationIdentifier:credential.validationIdentifier]; + validationIdentifier:credential.validationIdentifier + note:credential.note]; if ([archivable_store credentialWithRecordIdentifier:newCredential.recordIdentifier]) { [archivable_store updateCredential:newCredential];
diff --git a/ios/chrome/browser/metrics/BUILD.gn b/ios/chrome/browser/metrics/BUILD.gn index 38745487..159ce06f 100644 --- a/ios/chrome/browser/metrics/BUILD.gn +++ b/ios/chrome/browser/metrics/BUILD.gn
@@ -221,6 +221,7 @@ "//components/google/core/common", "//ios/chrome/browser/browser_state", "//ios/chrome/browser/url:constants", + "//ios/chrome/browser/voice", "//ios/chrome/browser/web_state_list", "//ios/web", "//services/metrics/public/cpp:ukm_builders",
diff --git a/ios/chrome/browser/metrics/new_tab_page_uma.h b/ios/chrome/browser/metrics/new_tab_page_uma.h index 8e52cd7..166fcf7f 100644 --- a/ios/chrome/browser/metrics/new_tab_page_uma.h +++ b/ios/chrome/browser/metrics/new_tab_page_uma.h
@@ -34,15 +34,20 @@ NUM_ACTION_TYPES, }; +void RecordAction(bool is_incognito, + web::WebState* web_state, + ActionType action); + +// TODO(crbug.com/1424397): This method is DEPRECATED, to be removed +// once ios_internal has been updated. void RecordAction(ChromeBrowserState* browser_state, web::WebState* web_state, ActionType action); -void RecordActionFromOmnibox(ChromeBrowserState* browser_state, +void RecordActionFromOmnibox(bool is_incognito, web::WebState* web_state, const GURL& url, - ui::PageTransition transition, - bool is_expecting_voice_search); + ui::PageTransition transition); } // namespace new_tab_page_uma
diff --git a/ios/chrome/browser/metrics/new_tab_page_uma.mm b/ios/chrome/browser/metrics/new_tab_page_uma.mm index 409fda3c..09d9313 100644 --- a/ios/chrome/browser/metrics/new_tab_page_uma.mm +++ b/ios/chrome/browser/metrics/new_tab_page_uma.mm
@@ -8,6 +8,7 @@ #import "components/google/core/common/google_util.h" #import "ios/chrome/browser/browser_state/chrome_browser_state.h" #import "ios/chrome/browser/url/chrome_url_constants.h" +#import "ios/chrome/browser/voice/voice_search_navigations_tab_helper.h" #import "ios/chrome/browser/web_state_list/web_state_list.h" #import "ios/web/public/web_state.h" #import "url/gurl.h" @@ -18,6 +19,21 @@ namespace new_tab_page_uma { +void RecordAction(bool is_incognito, + web::WebState* web_state, + ActionType action) { + if (is_incognito || !web_state || + web_state->GetVisibleURL() != kChromeUINewTabURL) { + return; + } + base::HistogramBase* counter = base::Histogram::FactoryGet( + "NewTabPage.ActioniOS", 0, NUM_ACTION_TYPES, NUM_ACTION_TYPES + 1, + base::HistogramBase::kUmaTargetedHistogramFlag); + counter->Add(action); +} + +// TODO(crbug.com/1424397): This method is DEPRECATED, to be removed +// once ios_internal has been updated. void RecordAction(ChromeBrowserState* browser_state, web::WebState* web_state, ActionType action) { @@ -32,26 +48,28 @@ counter->Add(action); } -void RecordActionFromOmnibox(ChromeBrowserState* browser_state, +void RecordActionFromOmnibox(bool is_incognito, web::WebState* web_state, const GURL& url, - ui::PageTransition transition, - bool is_expecting_voice_search) { + ui::PageTransition transition) { + bool is_expecting_voice_search = + VoiceSearchNavigationTabHelper::FromWebState(web_state) + ->IsExpectingVoiceSearch(); if (is_expecting_voice_search) { - RecordAction(browser_state, web_state, ACTION_NAVIGATED_USING_VOICE_SEARCH); + RecordAction(is_incognito, web_state, ACTION_NAVIGATED_USING_VOICE_SEARCH); return; } ui::PageTransition core_transition = static_cast<ui::PageTransition>( transition & ui::PAGE_TRANSITION_CORE_MASK); if (PageTransitionCoreTypeIs(core_transition, ui::PAGE_TRANSITION_GENERATED)) { - RecordAction(browser_state, web_state, ACTION_SEARCHED_USING_OMNIBOX); + RecordAction(is_incognito, web_state, ACTION_SEARCHED_USING_OMNIBOX); } else { if (google_util::IsGoogleHomePageUrl(GURL(url))) { - RecordAction(browser_state, web_state, + RecordAction(is_incognito, web_state, ACTION_NAVIGATED_TO_GOOGLE_HOMEPAGE); } else { - RecordAction(browser_state, web_state, ACTION_NAVIGATED_USING_OMNIBOX); + RecordAction(is_incognito, web_state, ACTION_NAVIGATED_USING_OMNIBOX); } } }
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_accessory_view_controller.mm b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_accessory_view_controller.mm index 136d1b6..0681d5f 100644 --- a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_accessory_view_controller.mm +++ b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_accessory_view_controller.mm
@@ -191,7 +191,7 @@ self.passwordButton.hidden = self.isPasswordButtonHidden; - // TODO(crbug.com/1418068): Simplify after minimum version required is >= + // TODO(crbug.com/1418068):Simplify after minimum version required is >= // iOS 15. if (base::ios::IsRunningOnIOS15OrLater() && IsUIButtonConfigurationEnabled()) {
diff --git a/ios/chrome/browser/ui/bookmarks/bookmarks_coordinator.mm b/ios/chrome/browser/ui/bookmarks/bookmarks_coordinator.mm index 2df3fe0f..029a1d2 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmarks_coordinator.mm +++ b/ios/chrome/browser/ui/bookmarks/bookmarks_coordinator.mm
@@ -488,7 +488,7 @@ // TODO(crbug.com/695749): See if we need different metrics for 'Open // all', 'Open all in incognito' and 'Open in incognito'. - new_tab_page_uma::RecordAction(_browserState, + new_tab_page_uma::RecordAction(_browserState->IsOffTheRecord(), webStateList->GetActiveWebState(), new_tab_page_uma::ACTION_OPENED_BOOKMARK); base::RecordAction(
diff --git a/ios/chrome/browser/ui/bookmarks/home/bookmarks_home_view_controller.mm b/ios/chrome/browser/ui/bookmarks/home/bookmarks_home_view_controller.mm index a0c089c..1d19e22 100644 --- a/ios/chrome/browser/ui/bookmarks/home/bookmarks_home_view_controller.mm +++ b/ios/chrome/browser/ui/bookmarks/home/bookmarks_home_view_controller.mm
@@ -1161,7 +1161,7 @@ return; } - new_tab_page_uma::RecordAction(self.browserState, + new_tab_page_uma::RecordAction(self.browserState->IsOffTheRecord(), self.webStateList->GetActiveWebState(), new_tab_page_uma::ACTION_OPENED_BOOKMARK); base::RecordAction(
diff --git a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm index ab239f5..8d4171c5 100644 --- a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm +++ b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm
@@ -16,6 +16,7 @@ #import "components/reading_list/core/reading_list_model.h" #import "components/safe_browsing/core/common/features.h" #import "components/signin/ios/browser/active_state_manager.h" +#import "components/signin/public/identity_manager/identity_manager.h" #import "components/translate/core/browser/translate_manager.h" #import "ios/chrome/browser/app_launcher/app_launcher_abuse_detector.h" #import "ios/chrome/browser/app_launcher/app_launcher_tab_helper.h" @@ -73,6 +74,7 @@ #import "ios/chrome/browser/shared/ui/util/util_swift.h" #import "ios/chrome/browser/signin/account_consistency_browser_agent.h" #import "ios/chrome/browser/signin/account_consistency_service_factory.h" +#import "ios/chrome/browser/signin/identity_manager_factory.h" #import "ios/chrome/browser/store_kit/store_kit_coordinator.h" #import "ios/chrome/browser/sync/sync_error_browser_agent.h" #import "ios/chrome/browser/tabs/tab_title_util.h" @@ -882,6 +884,9 @@ _viewControllerDependencies.readingModel = ReadingListModelFactory::GetForBrowserState( self.browser->GetBrowserState()); + _viewControllerDependencies.identityManager = + IdentityManagerFactory::GetForBrowserState( + self.browser->GetBrowserState()); } - (void)updateViewControllerDependencies { @@ -940,6 +945,7 @@ _viewControllerDependencies.loadQueryCommandsHandler = nil; _viewControllerDependencies.omniboxCommandsHandler = nil; _viewControllerDependencies.readingModel = nil; + _viewControllerDependencies.identityManager = nil; [_bookmarksCoordinator shutdown]; _bookmarksCoordinator = nil;
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.h b/ios/chrome/browser/ui/browser_view/browser_view_controller.h index e59325c..2f01f95 100644 --- a/ios/chrome/browser/ui/browser_view/browser_view_controller.h +++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.h
@@ -11,6 +11,7 @@ #import "base/memory/weak_ptr.h" #import "components/reading_list/core/reading_list_model.h" +#import "components/signin/public/identity_manager/identity_manager.h" #import "ios/chrome/browser/metrics/tab_usage_recorder_browser_agent.h" #import "ios/chrome/browser/shared/public/commands/browser_commands.h" #import "ios/chrome/browser/ui/authentication/signin_presenter.h" @@ -71,6 +72,10 @@ class UrlLoadingNotifierBrowserAgent; class WebNavigationBrowserAgent; +namespace signin { +class IdentityManager; +} // namespace signin + // TODO(crbug.com/1328039): Remove all use of the prerender service from BVC typedef struct { PrerenderService* prerenderService; @@ -98,6 +103,7 @@ id<OmniboxCommands> omniboxCommandsHandler; BOOL isOffTheRecord; ReadingListModel* readingModel; + signin::IdentityManager* identityManager; UrlLoadingBrowserAgent* urlLoadingBrowserAgent; UrlLoadingNotifierBrowserAgent* urlLoadingNotifierBrowserAgent; TabUsageRecorderBrowserAgent* tabUsageRecorderBrowserAgent;
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm index 091ba2e5..a32433b 100644 --- a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm +++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
@@ -8,13 +8,14 @@ #import <MaterialComponents/MaterialSnackbar.h> +#import "base/i18n/message_formatter.h" #import "base/mac/bundle_locations.h" #import "base/mac/foundation_util.h" #import "base/metrics/user_metrics.h" #import "base/metrics/user_metrics_action.h" #import "base/strings/sys_string_conversions.h" +#import "base/strings/utf_string_conversions.h" #import "base/task/sequenced_task_runner.h" - #import "components/strings/grit/components_strings.h" #import "components/ukm/ios/ukm_url_recorder.h" #import "ios/chrome/app/application_delegate/app_state.h" @@ -90,7 +91,6 @@ #import "ios/chrome/browser/url_loading/new_tab_animation_tab_helper.h" #import "ios/chrome/browser/url_loading/url_loading_observer_bridge.h" #import "ios/chrome/browser/url_loading/url_loading_params.h" -#import "ios/chrome/browser/voice/voice_search_navigations_tab_helper.h" #import "ios/chrome/browser/web/page_placeholder_tab_helper.h" #import "ios/chrome/browser/web/web_navigation_util.h" #import "ios/chrome/browser/web_state_list/web_state_list.h" @@ -306,6 +306,9 @@ LayoutGuideCenter* _layoutGuideCenter; ReadingListModel* _readingModel; + + // Used to retrieve the account email for the reading list snackbar. + signin::IdentityManager* _identityManager; } // Activates/deactivates the object. This will enable/disable the ability for @@ -503,6 +506,7 @@ _layoutGuideCenter = dependencies.layoutGuideCenter; _webStateList = dependencies.webStateList; _readingModel = dependencies.readingModel; + _identityManager = dependencies.identityManager; dependencies.lensCoordinator.delegate = self; @@ -988,6 +992,7 @@ [[NSNotificationCenter defaultCenter] removeObserver:self]; _bookmarksCoordinator = nil; + _identityManager = nullptr; } #pragma mark - NSObject @@ -2118,10 +2123,29 @@ TriggerHapticFeedbackForNotification(UINotificationFeedbackTypeSuccess); - NSString* text = - l10n_util::GetNSString(IDS_IOS_READING_LIST_SNACKBAR_MESSAGE); - MDCSnackbarMessage* message = [MDCSnackbarMessage messageWithText:text]; - message.accessibilityLabel = text; + CoreAccountId accountId = + _readingModel->GetAccountWhereEntryIsSavedTo(URLs.lastObject.URL); + AccountInfo accountInfo = + _identityManager->FindExtendedAccountInfoByAccountId(accountId); + + NSString* snackbarText = nil; + if (!accountInfo.IsEmpty() && + base::FeatureList::IsEnabled( + kEnableEmailInBookmarksReadingListSnackbar)) { + std::u16string pattern = l10n_util::GetStringUTF16( + IDS_IOS_READING_LIST_SNACKBAR_MESSAGE_FOR_ACCOUNT); + std::u16string utf16Text = + base::i18n::MessageFormatter::FormatWithNamedArgs( + pattern, "count", (int)URLs.count, "email", accountInfo.email); + snackbarText = base::SysUTF16ToNSString(utf16Text); + } else { + snackbarText = + l10n_util::GetNSString(IDS_IOS_READING_LIST_SNACKBAR_MESSAGE); + } + + MDCSnackbarMessage* message = + [MDCSnackbarMessage messageWithText:snackbarText]; + message.accessibilityLabel = snackbarText; message.duration = 2.0; message.category = kBrowserViewControllerSnackbarCategory; @@ -2532,12 +2556,8 @@ web::WebState* currentWebState = self.currentWebState; if (currentWebState && (transitionType & ui::PAGE_TRANSITION_FROM_ADDRESS_BAR)) { - bool isExpectingVoiceSearch = - VoiceSearchNavigationTabHelper::FromWebState(currentWebState) - ->IsExpectingVoiceSearch(); - new_tab_page_uma::RecordActionFromOmnibox( - self.browserState, currentWebState, URL, transitionType, - isExpectingVoiceSearch); + new_tab_page_uma::RecordActionFromOmnibox(_isOffTheRecord, currentWebState, + URL, transitionType); } }
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller_unittest.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller_unittest.mm index 1d39a6d..6d344a1 100644 --- a/ios/chrome/browser/ui/browser_view/browser_view_controller_unittest.mm +++ b/ios/chrome/browser/ui/browser_view/browser_view_controller_unittest.mm
@@ -13,6 +13,7 @@ #import "components/open_from_clipboard/fake_clipboard_recent_content.h" #import "components/reading_list/core/reading_list_model.h" #import "components/search_engines/template_url_service.h" +#import "components/signin/public/identity_manager/identity_manager.h" #import "ios/chrome/browser/bookmarks/local_or_syncable_bookmark_model_factory.h" #import "ios/chrome/browser/browser_state/test_chrome_browser_state.h" #import "ios/chrome/browser/favicon/favicon_service_factory.h" @@ -39,6 +40,7 @@ #import "ios/chrome/browser/shared/public/commands/text_zoom_commands.h" #import "ios/chrome/browser/signin/authentication_service_factory.h" #import "ios/chrome/browser/signin/fake_authentication_service_delegate.h" +#import "ios/chrome/browser/signin/identity_manager_factory.h" #import "ios/chrome/browser/tabs/tab_helper_util.h" #import "ios/chrome/browser/ui/bookmarks/bookmarks_coordinator.h" #import "ios/chrome/browser/ui/browser_container/browser_container_view_controller.h" @@ -277,6 +279,8 @@ dependencies.webStateList = browser_->GetWebStateList()->AsWeakPtr(); dependencies.readingModel = ReadingListModelFactory::GetForBrowserState( browser_.get()->GetBrowserState()); + dependencies.identityManager = IdentityManagerFactory::GetForBrowserState( + browser_.get()->GetBrowserState()); bvc_ = [[BrowserViewController alloc] initWithBrowser:browser_.get() browserContainerViewController:container_
diff --git a/ios/chrome/browser/ui/content_suggestions/BUILD.gn b/ios/chrome/browser/ui/content_suggestions/BUILD.gn index bf4aa22..5a2a9d9a 100644 --- a/ios/chrome/browser/ui/content_suggestions/BUILD.gn +++ b/ios/chrome/browser/ui/content_suggestions/BUILD.gn
@@ -132,6 +132,7 @@ deps = [ ":content_suggestions_constant", "//base", + "//ios/chrome/browser/browser_state", "//ios/chrome/browser/metrics:metrics_internal", "//ios/chrome/browser/ui/content_suggestions:constants", ]
diff --git a/ios/chrome/browser/ui/content_suggestions/ntp_home_metrics.mm b/ios/chrome/browser/ui/content_suggestions/ntp_home_metrics.mm index b6a543a0..62b536ab 100644 --- a/ios/chrome/browser/ui/content_suggestions/ntp_home_metrics.mm +++ b/ios/chrome/browser/ui/content_suggestions/ntp_home_metrics.mm
@@ -8,6 +8,7 @@ #import "base/metrics/histogram_macros.h" #import "base/metrics/user_metrics.h" #import "base/metrics/user_metrics_action.h" +#import "ios/chrome/browser/browser_state/chrome_browser_state.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_constants.h" #if !defined(__has_feature) || !__has_feature(objc_arc) @@ -73,7 +74,8 @@ - (void)recordAction:(new_tab_page_uma::ActionType)action { DCHECK(self.webState); - new_tab_page_uma::RecordAction(self.browserState, self.webState, action); + new_tab_page_uma::RecordAction(self.browserState->IsOffTheRecord(), + self.webState, action); } - (void)recordContentSuggestionsActionForType:
diff --git a/ios/chrome/browser/ui/history/history_table_view_controller.mm b/ios/chrome/browser/ui/history/history_table_view_controller.mm index ac18514..b21ce32 100644 --- a/ios/chrome/browser/ui/history/history_table_view_controller.mm +++ b/ios/chrome/browser/ui/history/history_table_view_controller.mm
@@ -1183,7 +1183,7 @@ // Opens URL in the current tab and dismisses the history view. - (void)openURL:(const GURL&)URL { new_tab_page_uma::RecordAction( - self.browser->GetBrowserState(), + self.browser->GetBrowserState()->IsOffTheRecord(), self.browser->GetWebStateList()->GetActiveWebState(), new_tab_page_uma::ACTION_OPENED_HISTORY_ENTRY); UrlLoadParams params = UrlLoadParams::InCurrentTab(URL);
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 e54a5a6..2b99281 100644 --- a/ios/chrome/browser/ui/reading_list/reading_list_coordinator.mm +++ b/ios/chrome/browser/ui/reading_list/reading_list_coordinator.mm
@@ -274,7 +274,7 @@ web::WebState* activeWebState = self.browser->GetWebStateList()->GetActiveWebState(); new_tab_page_uma::RecordAction( - self.browser->GetBrowserState(), activeWebState, + self.browser->GetBrowserState()->IsOffTheRecord(), activeWebState, new_tab_page_uma::ACTION_OPENED_READING_LIST_ENTRY); // Load the offline URL if available.
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 adf2e46..a65ae2b 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
@@ -1504,7 +1504,8 @@ self.searchTerms = @""; } new_tab_page_uma::RecordAction( - self.browserState, self.webStateList->GetActiveWebState(), + self.browserState->IsOffTheRecord(), + self.webStateList->GetActiveWebState(), new_tab_page_uma::ACTION_OPENED_FOREIGN_SESSION); std::unique_ptr<web::WebState> web_state = session_util::CreateWebStateWithNavigationEntries( @@ -1549,7 +1550,8 @@ "MobileRecentTabManagerRecentTabOpenedSearchResult")); } new_tab_page_uma::RecordAction( - self.browserState, self.webStateList->GetActiveWebState(), + self.browserState->IsOffTheRecord(), + self.webStateList->GetActiveWebState(), new_tab_page_uma::ACTION_OPENED_RECENTLY_CLOSED_ENTRY); // If RecentTabs is being displayed from incognito, the resulting tab will
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/pinned_tabs/pinned_tabs_view_controller.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/pinned_tabs/pinned_tabs_view_controller.mm index 81dcf11..9bb72b82 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/pinned_tabs/pinned_tabs_view_controller.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/pinned_tabs/pinned_tabs_view_controller.mm
@@ -265,7 +265,7 @@ _items = [items mutableCopy]; _selectedItemID = selectedItemID; - [self updateDropOverlayViewVisibility]; + [self updatePinnedTabsVisibility]; [self.delegate pinnedTabsViewController:self didChangeItemCount:items.count]; @@ -614,6 +614,11 @@ #pragma mark - Private +// Updates the visibility of the pinned view. +- (void)updatePinnedTabsVisibility { + [self pinnedTabsAvailable:_available]; +} + // Performs (in batch) all the actions needed to insert an `item` at the // specified `index` into the collection view and updates its appearance. // `selectedItemID` is saved to an instance variable. @@ -803,7 +808,7 @@ // disappear from the user's sight. [self scrollCollectionViewToLastItemAnimated:YES]; - [self pinnedTabsAvailable:_available]; + [self updatePinnedTabsVisibility]; } // Updates the collection view after an item deletion.
diff --git a/ios/chrome/browser/variations/ios_chrome_variations_service_client.h b/ios/chrome/browser/variations/ios_chrome_variations_service_client.h index 80c5e33..a8b8f010 100644 --- a/ios/chrome/browser/variations/ios_chrome_variations_service_client.h +++ b/ios/chrome/browser/variations/ios_chrome_variations_service_client.h
@@ -12,6 +12,8 @@ class SharedURLLoaderFactory; } // namespace network +class PrefService; + namespace variations { struct SeedResponse; } // namespace variations @@ -38,6 +40,8 @@ version_info::Channel GetChannel() override; bool OverridesRestrictParameter(std::string* parameter) override; bool IsEnterprise() override; + void RemoveGoogleGroupsFromPrefsForDeletedProfiles( + PrefService* local_state) override; std::unique_ptr<variations::SeedResponse> TakeSeedFromNativeVariationsSeedStore() override; };
diff --git a/ios/chrome/browser/variations/ios_chrome_variations_service_client.mm b/ios/chrome/browser/variations/ios_chrome_variations_service_client.mm index e2ecaed1..e92272e 100644 --- a/ios/chrome/browser/variations/ios_chrome_variations_service_client.mm +++ b/ios/chrome/browser/variations/ios_chrome_variations_service_client.mm
@@ -52,6 +52,10 @@ return false; } +// Nothing to do, as iOS doesn't support multiple profiles. +void IOSChromeVariationsServiceClient:: + RemoveGoogleGroupsFromPrefsForDeletedProfiles(PrefService* local_state) {} + std::unique_ptr<variations::SeedResponse> IOSChromeVariationsServiceClient::TakeSeedFromNativeVariationsSeedStore() { return [IOSChromeVariationsSeedStore popSeed];
diff --git a/ios/chrome/common/credential_provider/archivable_credential.h b/ios/chrome/common/credential_provider/archivable_credential.h index e584dcb..d217bcb 100644 --- a/ios/chrome/common/credential_provider/archivable_credential.h +++ b/ios/chrome/common/credential_provider/archivable_credential.h
@@ -24,7 +24,7 @@ serviceName:(NSString*)serviceName user:(NSString*)user validationIdentifier:(NSString*)validationIdentifier - NS_DESIGNATED_INITIALIZER; + note:(NSString*)note NS_DESIGNATED_INITIALIZER; - (instancetype)init NS_UNAVAILABLE;
diff --git a/ios/chrome/common/credential_provider/archivable_credential.mm b/ios/chrome/common/credential_provider/archivable_credential.mm index 79bc844..0eca74e 100644 --- a/ios/chrome/common/credential_provider/archivable_credential.mm +++ b/ios/chrome/common/credential_provider/archivable_credential.mm
@@ -19,6 +19,7 @@ NSString* const kACServiceNameKey = @"serviceName"; NSString* const kACUserKey = @"user"; NSString* const kACValidationIdentifierKey = @"validationIdentifier"; +NSString* const kNoteKey = @"note"; } // namespace @@ -32,6 +33,7 @@ @synthesize serviceName = _serviceName; @synthesize user = _user; @synthesize validationIdentifier = _validationIdentifier; +@synthesize note = _note; - (instancetype)initWithFavicon:(NSString*)favicon keychainIdentifier:(NSString*)keychainIdentifier @@ -40,7 +42,8 @@ serviceIdentifier:(NSString*)serviceIdentifier serviceName:(NSString*)serviceName user:(NSString*)user - validationIdentifier:(NSString*)validationIdentifier { + validationIdentifier:(NSString*)validationIdentifier + note:(NSString*)note { self = [super init]; if (self) { _favicon = favicon; @@ -51,6 +54,7 @@ _serviceName = serviceName; _user = user; _validationIdentifier = validationIdentifier; + _note = note; } return self; } @@ -72,7 +76,8 @@ [self.serviceName isEqual:otherCredential.serviceName] && [self.user isEqual:otherCredential.user] && [self.validationIdentifier - isEqual:otherCredential.validationIdentifier]; + isEqual:otherCredential.validationIdentifier] && + [self.note isEqual:otherCredential.note]; } } @@ -97,6 +102,7 @@ [coder encodeObject:self.user forKey:kACUserKey]; [coder encodeObject:self.validationIdentifier forKey:kACValidationIdentifierKey]; + [coder encodeObject:self.note forKey:kNoteKey]; } - (instancetype)initWithCoder:(NSCoder*)coder { @@ -108,8 +114,8 @@ serviceIdentifier:[coder decodeObjectForKey:kACServiceIdentifierKey] serviceName:[coder decodeObjectForKey:kACServiceNameKey] user:[coder decodeObjectForKey:kACUserKey] - validationIdentifier:[coder - decodeObjectForKey:kACValidationIdentifierKey]]; + validationIdentifier:[coder decodeObjectForKey:kACValidationIdentifierKey] + note:[coder decodeObjectForKey:kNoteKey]]; } @end
diff --git a/ios/chrome/common/credential_provider/archivable_credential_store_unittest.mm b/ios/chrome/common/credential_provider/archivable_credential_store_unittest.mm index 05e734f7..9287caf0 100644 --- a/ios/chrome/common/credential_provider/archivable_credential_store_unittest.mm +++ b/ios/chrome/common/credential_provider/archivable_credential_store_unittest.mm
@@ -46,7 +46,8 @@ serviceIdentifier:@"serviceIdentifier" serviceName:@"serviceName" user:@"user" - validationIdentifier:@"validationIdentifier"]; + validationIdentifier:@"validationIdentifier" + note:@"note"]; } // Tests that an ArchivableCredentialStore can be created. @@ -83,7 +84,8 @@ serviceIdentifier:@"other_serviceIdentifier" serviceName:@"other_serviceName" user:@"other_user" - validationIdentifier:@"other_validationIdentifier"]; + validationIdentifier:@"other_validationIdentifier" + note:@"other_note"]; [credentialStore updateCredential:updatedCredential]; EXPECT_EQ(1u, credentialStore.credentials.count);
diff --git a/ios/chrome/common/credential_provider/archivable_credential_unittest.mm b/ios/chrome/common/credential_provider/archivable_credential_unittest.mm index 2d3d2dcd..6eda653 100644 --- a/ios/chrome/common/credential_provider/archivable_credential_unittest.mm +++ b/ios/chrome/common/credential_provider/archivable_credential_unittest.mm
@@ -24,7 +24,8 @@ serviceIdentifier:@"serviceIdentifier" serviceName:@"serviceName" user:@"user" - validationIdentifier:@"validationIdentifier"]; + validationIdentifier:@"validationIdentifier" + note:@"note"]; } // Tests that an ArchivableCredential can be created. @@ -37,7 +38,8 @@ serviceIdentifier:@"serviceIdentifier" serviceName:@"serviceName" user:@"user" - validationIdentifier:@"validationIdentifier"]; + validationIdentifier:@"validationIdentifier" + note:@"note"]; EXPECT_TRUE(credential); } @@ -100,7 +102,8 @@ serviceIdentifier:@"other_serviceIdentifier" serviceName:@"other_serviceName" user:@"other_user" - validationIdentifier:@"other_validationIdentifier"]; + validationIdentifier:@"other_validationIdentifier" + note:@"other_note"]; EXPECT_NSNE(credential, credentialSameIdentifier); ArchivableCredential* credentialDiferentIdentifier = @@ -111,7 +114,8 @@ serviceIdentifier:@"serviceIdentifier" serviceName:@"serviceName" user:@"user" - validationIdentifier:@"validationIdentifier"]; + validationIdentifier:@"validationIdentifier" + note:@"note"]; EXPECT_NSNE(credential, credentialDiferentIdentifier); EXPECT_NSNE(credential, nil);
diff --git a/ios/chrome/common/credential_provider/as_password_credential_identity+credential_unittests.mm b/ios/chrome/common/credential_provider/as_password_credential_identity+credential_unittests.mm index 7c1de75..cfa418b 100644 --- a/ios/chrome/common/credential_provider/as_password_credential_identity+credential_unittests.mm +++ b/ios/chrome/common/credential_provider/as_password_credential_identity+credential_unittests.mm
@@ -27,7 +27,8 @@ serviceIdentifier:@"serviceIdentifier" serviceName:@"serviceName" user:@"user" - validationIdentifier:@"validationIdentifier"]; + validationIdentifier:@"validationIdentifier" + note:@"note"]; ASPasswordCredentialIdentity* credentialIdentity = [[ASPasswordCredentialIdentity alloc] initWithCredential:credential];
diff --git a/ios/chrome/common/credential_provider/credential.h b/ios/chrome/common/credential_provider/credential.h index 0b7026f..400cde8 100644 --- a/ios/chrome/common/credential_provider/credential.h +++ b/ios/chrome/common/credential_provider/credential.h
@@ -35,6 +35,9 @@ // ID to validate the credential before providing it to the system. @property(nonatomic, readonly) NSString* validationIdentifier; +// Attached note to the credential. +@property(nonatomic, readonly) NSString* note; + @end #endif // IOS_CHROME_COMMON_CREDENTIAL_PROVIDER_CREDENTIAL_H_
diff --git a/ios/chrome/common/credential_provider/memory_credential_store_unittests.mm b/ios/chrome/common/credential_provider/memory_credential_store_unittests.mm index d4b5bae..d3dc83a 100644 --- a/ios/chrome/common/credential_provider/memory_credential_store_unittests.mm +++ b/ios/chrome/common/credential_provider/memory_credential_store_unittests.mm
@@ -24,7 +24,8 @@ serviceIdentifier:@"serviceIdentifier" serviceName:@"serviceName" user:@"user" - validationIdentifier:@"validationIdentifier"]; + validationIdentifier:@"validationIdentifier" + note:@"note"]; } // Tests that an MemoryCredentialStore can be created. @@ -58,7 +59,8 @@ serviceIdentifier:@"other_serviceIdentifier" serviceName:@"other_serviceName" user:@"other_user" - validationIdentifier:@"other_validationIdentifier"]; + validationIdentifier:@"other_validationIdentifier" + note:@"other_note"]; [credentialStore updateCredential:updatedCredential]; EXPECT_EQ(1u, credentialStore.credentials.count);
diff --git a/ios/chrome/common/credential_provider/multi_store_credential_store_unittests.mm b/ios/chrome/common/credential_provider/multi_store_credential_store_unittests.mm index 505eee7e..8542e6e 100644 --- a/ios/chrome/common/credential_provider/multi_store_credential_store_unittests.mm +++ b/ios/chrome/common/credential_provider/multi_store_credential_store_unittests.mm
@@ -29,7 +29,8 @@ serviceIdentifier:@"serviceIdentifier" serviceName:@"serviceName" user:user - validationIdentifier:@"validationIdentifier"]; + validationIdentifier:@"validationIdentifier" + note:@"note"]; } NSArray<id<CredentialStore>>* TestStoreArray() {
diff --git a/ios/chrome/common/credential_provider/user_defaults_credential_store_unittests.mm b/ios/chrome/common/credential_provider/user_defaults_credential_store_unittests.mm index 97469da..2115175 100644 --- a/ios/chrome/common/credential_provider/user_defaults_credential_store_unittests.mm +++ b/ios/chrome/common/credential_provider/user_defaults_credential_store_unittests.mm
@@ -44,7 +44,8 @@ serviceIdentifier:@"serviceIdentifier" serviceName:@"serviceName" user:@"user" - validationIdentifier:@"validationIdentifier"]; + validationIdentifier:@"validationIdentifier" + note:@"note"]; } // Tests that an UserDefaultsCredentialStore can be created. @@ -87,7 +88,8 @@ serviceIdentifier:@"other_serviceIdentifier" serviceName:@"other_serviceName" user:@"other_user" - validationIdentifier:@"other_validationIdentifier"]; + validationIdentifier:@"other_validationIdentifier" + note:@"other_note"]; [credentialStore updateCredential:updatedCredential]; EXPECT_EQ(1u, credentialStore.credentials.count);
diff --git a/ios/chrome/credential_provider_extension/credential_provider_extension_localize_strings_config.plist b/ios/chrome/credential_provider_extension/credential_provider_extension_localize_strings_config.plist index cff5bd5..d556747 100644 --- a/ios/chrome/credential_provider_extension/credential_provider_extension_localize_strings_config.plist +++ b/ios/chrome/credential_provider_extension/credential_provider_extension_localize_strings_config.plist
@@ -53,6 +53,7 @@ <string>IDS_IOS_CREDENTIAL_PROVIDER_NEW_PASSWORD_USERNAME</string> <string>IDS_IOS_CREDENTIAL_PROVIDER_NEW_PASSWORD_USERNAME_PLACEHOLDER</string> <string>IDS_IOS_CREDENTIAL_PROVIDER_NO_SEARCH_RESULTS</string> + <string>IDS_IOS_CREDENTIAL_PROVIDER_NOTE</string> <string>IDS_IOS_CREDENTIAL_PROVIDER_STALE_CREDENTIALS_SUBTITLE</string> <string>IDS_IOS_CREDENTIAL_PROVIDER_STALE_CREDENTIALS_TITLE</string> <string>IDS_IOS_CREDENTIAL_PROVIDER_SCREENLOCK_REASON</string>
diff --git a/ios/chrome/credential_provider_extension/strings/ios_credential_provider_extension_strings.grd b/ios/chrome/credential_provider_extension/strings/ios_credential_provider_extension_strings.grd index 7beb4ee..4bab1e6c8 100644 --- a/ios/chrome/credential_provider_extension/strings/ios_credential_provider_extension_strings.grd +++ b/ios/chrome/credential_provider_extension/strings/ios_credential_provider_extension_strings.grd
@@ -310,6 +310,9 @@ <message name="IDS_IOS_CREDENTIAL_PROVIDER_NO_SEARCH_RESULTS" desc="Text shown when no password search results have been found" meaning="Textual search for passwords returned nothing [CHAR_LIMIT=30]"> No Passwords Found </message> + <message name="IDS_IOS_CREDENTIAL_PROVIDER_NOTE" desc="Title for row to type in or display a note for a credential"> + Note + </message> <message name="IDS_IOS_CREDENTIAL_PROVIDER_STALE_CREDENTIALS_SUBTITLE" desc="Subtitle for stale credentials screen" meaning="Subtitle to show when a user signs out, and the credentials are no longer available."> You recently signed out of your Google Account. To see your passwords, sign in to Chrome. </message>
diff --git a/ios/chrome/credential_provider_extension/strings/ios_credential_provider_extension_strings_grd/IDS_IOS_CREDENTIAL_PROVIDER_NOTE.png.sha1 b/ios/chrome/credential_provider_extension/strings/ios_credential_provider_extension_strings_grd/IDS_IOS_CREDENTIAL_PROVIDER_NOTE.png.sha1 new file mode 100644 index 0000000..e9c8710 --- /dev/null +++ b/ios/chrome/credential_provider_extension/strings/ios_credential_provider_extension_strings_grd/IDS_IOS_CREDENTIAL_PROVIDER_NOTE.png.sha1
@@ -0,0 +1 @@ +e76b61922bd40408ef172999ab7801f8411806f7 \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/ui/BUILD.gn b/ios/chrome/credential_provider_extension/ui/BUILD.gn index 248c7a3..902c24f8 100644 --- a/ios/chrome/credential_provider_extension/ui/BUILD.gn +++ b/ios/chrome/credential_provider_extension/ui/BUILD.gn
@@ -37,6 +37,8 @@ "new_password_ui_handler.h", "new_password_view_controller.h", "new_password_view_controller.mm", + "password_note_cell.h", + "password_note_cell.mm", "stale_credentials_view_controller.h", "stale_credentials_view_controller.mm", "ui_util.h", @@ -61,6 +63,7 @@ "//ios/chrome/common/ui/promo_style", "//ios/chrome/common/ui/resources:default_world_favicon", "//ios/chrome/common/ui/table_view", + "//ios/chrome/common/ui/table_view:cells_constants", "//ios/chrome/common/ui/util", "//ios/chrome/credential_provider_extension:metrics_util", "//ios/chrome/credential_provider_extension:password_spec_fetcher_buildflags",
diff --git a/ios/chrome/credential_provider_extension/ui/credential_details_view_controller.mm b/ios/chrome/credential_provider_extension/ui/credential_details_view_controller.mm index 66d6596..2c24dc3 100644 --- a/ios/chrome/credential_provider_extension/ui/credential_details_view_controller.mm +++ b/ios/chrome/credential_provider_extension/ui/credential_details_view_controller.mm
@@ -14,6 +14,7 @@ #import "ios/chrome/common/ui/elements/highlight_button.h" #import "ios/chrome/credential_provider_extension/metrics_util.h" #import "ios/chrome/credential_provider_extension/ui/feature_flags.h" +#import "ios/chrome/credential_provider_extension/ui/password_note_cell.h" #import "ios/chrome/credential_provider_extension/ui/tooltip_view.h" #import "ios/chrome/credential_provider_extension/ui/ui_util.h" @@ -35,9 +36,17 @@ RowIdentifierURL, RowIdentifierUsername, RowIdentifierPassword, + RowIdentifierNote, NumRows }; +// TODO(crbug.com/1414897): Replace with checking feature flag value when build +// deps are resolved (as currenly importing feature file would add deps +// disallowed in extensions). +bool IsPasswordNotesWithBackupEnabled() { + return false; +} + } // namespace @interface CredentialDetailsViewController () <TooltipViewDelegate, @@ -104,11 +113,29 @@ - (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section { - return RowIdentifier::NumRows; + if (IsPasswordNotesWithBackupEnabled()) { + return RowIdentifier::NumRows; + } + + return RowIdentifier::NumRows - 1; } - (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath { + if (indexPath.row == RowIdentifier::RowIdentifierNote && + IsPasswordNotesWithBackupEnabled()) { + PasswordNoteCell* cell = + [tableView dequeueReusableCellWithIdentifier:PasswordNoteCell.reuseID]; + if (!cell) { + cell = [[PasswordNoteCell alloc] initWithStyle:UITableViewCellStyleValue1 + reuseIdentifier:PasswordNoteCell.reuseID]; + } + [cell configureCell]; + cell.textView.text = self.credential.note; + cell.textView.editable = NO; + return cell; + } + UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentifier]; if (!cell) { @@ -139,6 +166,8 @@ @"IDS_IOS_CREDENTIAL_PROVIDER_DETAILS_PASSWORD", @"Password"); cell.detailTextLabel.text = [self password]; break; + case RowIdentifier::RowIdentifierNote: + break; default: break; }
diff --git a/ios/chrome/credential_provider_extension/ui/new_password_mediator.mm b/ios/chrome/credential_provider_extension/ui/new_password_mediator.mm index 63cfaee..e1e6810 100644 --- a/ios/chrome/credential_provider_extension/ui/new_password_mediator.mm +++ b/ios/chrome/credential_provider_extension/ui/new_password_mediator.mm
@@ -79,6 +79,7 @@ - (void)saveCredentialWithUsername:(NSString*)username password:(NSString*)password + note:(NSString*)note shouldReplace:(BOOL)shouldReplace { if (!shouldReplace && [self credentialExistsForUsername:username]) { [self.uiHandler alertUserCredentialExists]; @@ -86,7 +87,9 @@ } ArchivableCredential* credential = - [self createNewCredentialWithUsername:username password:password]; + [self createNewCredentialWithUsername:username + password:password + note:note]; if (!credential) { [self.uiHandler alertSavePasswordFailed]; @@ -120,7 +123,8 @@ // Creates a new credential but doesn't add it to any stores. - (ArchivableCredential*)createNewCredentialWithUsername:(NSString*)username - password:(NSString*)password { + password:(NSString*)password + note:(NSString*)note { NSString* identifier = [self currentIdentifier]; NSURL* url = [NSURL URLWithString:identifier]; NSString* recordIdentifier = RecordIdentifierForData(url, username); @@ -141,7 +145,8 @@ serviceIdentifier:identifier serviceName:url.host ?: identifier user:username - validationIdentifier:validationIdentifier]; + validationIdentifier:validationIdentifier + note:note]; } // Saves the given credential to disk and calls `completion` once the operation
diff --git a/ios/chrome/credential_provider_extension/ui/new_password_mediator_unittest.mm b/ios/chrome/credential_provider_extension/ui/new_password_mediator_unittest.mm index c643efc5..6d4f8e5 100644 --- a/ios/chrome/credential_provider_extension/ui/new_password_mediator_unittest.mm +++ b/ios/chrome/credential_provider_extension/ui/new_password_mediator_unittest.mm
@@ -109,7 +109,8 @@ serviceIdentifier:@"serviceIdentifier" serviceName:@"serviceName" user:@"user" - validationIdentifier:@"validationIdentifier"]; + validationIdentifier:@"validationIdentifier" + note:@"note"]; } class NewPasswordMediatorTest : public PlatformTest { @@ -172,6 +173,7 @@ // gets saved to disk. NSString* testUsername = @"user"; NSString* testPassword = @"password"; + NSString* testNote = @"note"; responseHandler_.receivedCredentialBlock = ^() { blockWaitCompleted = YES; @@ -180,6 +182,7 @@ blockWaitCompleted = NO; [mediator_ saveCredentialWithUsername:testUsername password:testPassword + note:testNote shouldReplace:NO]; EXPECT_TRUE(WaitUntilConditionOrTimeout(kWaitForFileOperationTimeout, ^BOOL { return blockWaitCompleted; @@ -235,8 +238,10 @@ blockWaitCompleted = NO; NSString* testUsername = @"user"; NSString* testPassword = @"password"; + NSString* testNote = @"note"; [mediator_ saveCredentialWithUsername:testUsername password:testPassword + note:testNote shouldReplace:NO]; EXPECT_TRUE(uiHandler_.alertedCredentialExists); @@ -248,6 +253,7 @@ blockWaitCompleted = NO; [mediator_ saveCredentialWithUsername:testUsername password:testPassword + note:testNote shouldReplace:YES]; EXPECT_TRUE(WaitUntilConditionOrTimeout(kWaitForFileOperationTimeout, ^BOOL { return blockWaitCompleted;
diff --git a/ios/chrome/credential_provider_extension/ui/new_password_view_controller.h b/ios/chrome/credential_provider_extension/ui/new_password_view_controller.h index f2d2c36..e77e5af 100644 --- a/ios/chrome/credential_provider_extension/ui/new_password_view_controller.h +++ b/ios/chrome/credential_provider_extension/ui/new_password_view_controller.h
@@ -26,12 +26,13 @@ // User tapped on "Generate Strong Password" button. - (void)userDidRequestGeneratedPassword; -// Asks the handler to save a credential with the given `username` and -// `password`. If `shouldReplace` is true, then the user has already been warned +// Asks the handler to save a credential with the given `username`, `password` +// and `note`. If `shouldReplace` is true, then the user has already been warned // that they may be replacing an existing credential. Otherwise, the handler // should not replace an existing credential. - (void)saveCredentialWithUsername:(NSString*)username password:(NSString*)password + note:(NSString*)note shouldReplace:(BOOL)shouldReplace; @end
diff --git a/ios/chrome/credential_provider_extension/ui/new_password_view_controller.mm b/ios/chrome/credential_provider_extension/ui/new_password_view_controller.mm index bffdaa48..4c48738 100644 --- a/ios/chrome/credential_provider_extension/ui/new_password_view_controller.mm +++ b/ios/chrome/credential_provider_extension/ui/new_password_view_controller.mm
@@ -14,6 +14,7 @@ #import "ios/chrome/credential_provider_extension/metrics_util.h" #import "ios/chrome/credential_provider_extension/ui/new_password_footer_view.h" #import "ios/chrome/credential_provider_extension/ui/new_password_table_cell.h" +#import "ios/chrome/credential_provider_extension/ui/password_note_cell.h" #import "ios/chrome/credential_provider_extension/ui/ui_util.h" #if !defined(__has_feature) || !__has_feature(objc_arc) @@ -26,10 +27,24 @@ // view. const CGFloat kTableViewTopSpace = 14; +typedef NS_ENUM(NSInteger, SectionIdentifier) { + SectionIdentifierPassword, + SectionIdentifierNote, + SectionIdentifierNumSections +}; + +// TODO(crbug.com/1414897): Replace with checking feature flag value when build +// deps are resolved (as currenly importing feature file would add deps +// disallowed in extensions). +bool IsPasswordNotesWithBackupEnabled() { + return false; +} + } // namespace @interface NewPasswordViewController () <FormInputAccessoryViewDelegate, NewPasswordTableCellDelegate, + PasswordNoteCellDelegate, UITableViewDataSource> // The current creation type of the entered password. @@ -44,6 +59,9 @@ // The cell for password entry @property(nonatomic, readonly) NewPasswordTableCell* passwordCell; +// The cell for note entry. +@property(nonatomic, readonly) PasswordNoteCell* noteCell; + @end @implementation NewPasswordViewController @@ -92,12 +110,20 @@ forCellReuseIdentifier:NewPasswordTableCell.reuseID]; [self.tableView registerClass:[NewPasswordFooterView class] forHeaderFooterViewReuseIdentifier:NewPasswordFooterView.reuseID]; + if (IsPasswordNotesWithBackupEnabled()) { + [self.tableView registerClass:[PasswordNoteCell class] + forCellReuseIdentifier:PasswordNoteCell.reuseID]; + } } #pragma mark - UITableViewDataSource - (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section { + if (section == SectionIdentifierNote) { + return 1; + } + // If password sync is not on (represented by the user's email not being // available as used in the sync disclaimer), then don't show the "Suggest // Strong Password" button. @@ -108,8 +134,27 @@ : NewPasswordTableCellTypeNumRows - 1; } +- (NSInteger)numberOfSectionsInTableView:(UITableView*)tableView { + if (IsPasswordNotesWithBackupEnabled()) { + return SectionIdentifierNumSections; + } + + return SectionIdentifierNumSections - 1; +} + - (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath { + if (IsPasswordNotesWithBackupEnabled() && + indexPath.section == SectionIdentifierNote) { + DCHECK(indexPath.row == 0); + PasswordNoteCell* cell = + [tableView dequeueReusableCellWithIdentifier:PasswordNoteCell.reuseID]; + [cell configureCell]; + cell.delegate = self; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + return cell; + } + NewPasswordTableCell* cell = [tableView dequeueReusableCellWithIdentifier:NewPasswordTableCell.reuseID]; cell.textField.inputAccessoryView = self.accessoryView; @@ -143,15 +188,23 @@ - (UIView*)tableView:(UITableView*)tableView viewForFooterInSection:(NSInteger)section { - return [tableView - dequeueReusableHeaderFooterViewWithIdentifier:NewPasswordFooterView - .reuseID]; + if (section == SectionIdentifierPassword) { + return [tableView + dequeueReusableHeaderFooterViewWithIdentifier:NewPasswordFooterView + .reuseID]; + } + + return nil; } #pragma mark - UITableViewDelegate - (NSIndexPath*)tableView:(UITableView*)tableView willSelectRowAtIndexPath:(NSIndexPath*)indexPath { + if (indexPath.section == SectionIdentifierNote) { + return nil; + } + switch (indexPath.row) { case NewPasswordTableCellTypeUsername: case NewPasswordTableCellTypePassword: @@ -175,7 +228,7 @@ - (NewPasswordTableCell*)usernameCell { NSIndexPath* usernameIndexPath = [NSIndexPath indexPathForRow:NewPasswordTableCellTypeUsername - inSection:0]; + inSection:SectionIdentifierPassword]; NewPasswordTableCell* usernameCell = [self.tableView cellForRowAtIndexPath:usernameIndexPath]; @@ -185,13 +238,31 @@ - (NewPasswordTableCell*)passwordCell { NSIndexPath* passwordIndexPath = [NSIndexPath indexPathForRow:NewPasswordTableCellTypePassword - inSection:0]; + inSection:SectionIdentifierPassword]; NewPasswordTableCell* passwordCell = [self.tableView cellForRowAtIndexPath:passwordIndexPath]; return passwordCell; } +- (PasswordNoteCell*)noteCell { + NSIndexPath* noteIndexPath = + [NSIndexPath indexPathForRow:0 inSection:SectionIdentifierNote]; + PasswordNoteCell* noteCell = + [self.tableView cellForRowAtIndexPath:noteIndexPath]; + + return noteCell; +} + +#pragma mark - PasswordNoteCellDelegate + +- (void)textViewDidChangeInCell:(PasswordNoteCell*)cell { + // Refresh the cell's height to make the note fully visible while typing or to + // clear unnecessary blank lines while removing characters. + [self.tableView beginUpdates]; + [self.tableView endUpdates]; +} + #pragma mark - NewPasswordTableCellDelegate - (void)textFieldDidBeginEditingInCell:(NewPasswordTableCell*)cell { @@ -247,7 +318,7 @@ - (NSString*)currentUsername { NSIndexPath* usernameIndexPath = [NSIndexPath indexPathForRow:NewPasswordTableCellTypeUsername - inSection:0]; + inSection:SectionIdentifierPassword]; NewPasswordTableCell* usernameCell = [self.tableView cellForRowAtIndexPath:usernameIndexPath]; return usernameCell.textField.text; @@ -256,21 +327,32 @@ - (NSString*)currentPassword { NSIndexPath* passwordIndexPath = [NSIndexPath indexPathForRow:NewPasswordTableCellTypePassword - inSection:0]; + inSection:SectionIdentifierPassword]; NewPasswordTableCell* passwordCell = [self.tableView cellForRowAtIndexPath:passwordIndexPath]; return passwordCell.textField.text; } +- (NSString*)currentNote { + NSIndexPath* noteIndexPath = + [NSIndexPath indexPathForRow:0 inSection:SectionIdentifierNote]; + PasswordNoteCell* noteCell = + [self.tableView cellForRowAtIndexPath:noteIndexPath]; + return noteCell.textView.text; +} + // Saves the current data as a credential. If `shouldReplace` is YES, then the // user has already said they are aware that they are replacing a previous // credential. - (void)saveCredential:(BOOL)shouldReplace { NSString* username = [self currentUsername]; NSString* password = [self currentPassword]; + NSString* note = + IsPasswordNotesWithBackupEnabled() ? [self currentNote] : @""; [self.credentialHandler saveCredentialWithUsername:username password:password + note:note shouldReplace:shouldReplace]; }
diff --git a/ios/chrome/credential_provider_extension/ui/password_note_cell.h b/ios/chrome/credential_provider_extension/ui/password_note_cell.h new file mode 100644 index 0000000..ad37495e --- /dev/null +++ b/ios/chrome/credential_provider_extension/ui/password_note_cell.h
@@ -0,0 +1,37 @@ +// 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_CREDENTIAL_PROVIDER_EXTENSION_UI_PASSWORD_NOTE_CELL_H_ +#define IOS_CHROME_CREDENTIAL_PROVIDER_EXTENSION_UI_PASSWORD_NOTE_CELL_H_ + +#import <UIKit/UIKit.h> + +@class PasswordNoteCell; + +@protocol PasswordNoteCellDelegate + +// Alerts the delegate every time the text field changes in this cell. +- (void)textViewDidChangeInCell:(PasswordNoteCell*)cell; + +@end + +@interface PasswordNoteCell : UITableViewCell + +// Reuse ID for registering this class in table views. +@property(nonatomic, class, readonly) NSString* reuseID; + +// Label at the leading edge of the cell. +@property(nonatomic, strong) UILabel* textLabel; + +// Text field below the label. +@property(nonatomic, strong) UITextView* textView; + +// Delegate for this cell. +@property(nonatomic, weak) id<PasswordNoteCellDelegate> delegate; + +- (void)configureCell; + +@end + +#endif // IOS_CHROME_CREDENTIAL_PROVIDER_EXTENSION_UI_PASSWORD_NOTE_CELL_H_
diff --git a/ios/chrome/credential_provider_extension/ui/password_note_cell.mm b/ios/chrome/credential_provider_extension/ui/password_note_cell.mm new file mode 100644 index 0000000..2c88cc7 --- /dev/null +++ b/ios/chrome/credential_provider_extension/ui/password_note_cell.mm
@@ -0,0 +1,91 @@ +// 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/credential_provider_extension/ui/password_note_cell.h" + +#import "ios/chrome/common/ui/table_view/table_view_cells_constants.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +@interface PasswordNoteCell () <UITextViewDelegate> +@end + +@implementation PasswordNoteCell + +@synthesize textLabel = _textLabel; + ++ (NSString*)reuseID { + return @"PasswordNoteCell"; +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style + reuseIdentifier:(NSString*)reuseIdentifier { + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + _textLabel = [[UILabel alloc] init]; + _textLabel.adjustsFontForContentSizeCategory = YES; + _textLabel.translatesAutoresizingMaskIntoConstraints = NO; + _textLabel.font = + [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline]; + [self.contentView addSubview:_textLabel]; + + _textView = [[UITextView alloc] init]; + _textView.adjustsFontForContentSizeCategory = YES; + _textView.translatesAutoresizingMaskIntoConstraints = NO; + _textView.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody]; + _textView.backgroundColor = UIColor.clearColor; + _textView.scrollEnabled = NO; + _textView.textContainer.lineFragmentPadding = 0; + _textView.textContainerInset = UIEdgeInsetsZero; + [self.contentView addSubview:_textView]; + + [NSLayoutConstraint activateConstraints:@[ + // Label constraints. + [_textLabel.leadingAnchor + constraintEqualToAnchor:self.contentView.leadingAnchor + constant:kTableViewHorizontalSpacing], + [_textLabel.topAnchor + constraintEqualToAnchor:self.contentView.topAnchor + constant:kTableViewOneLabelCellVerticalSpacing], + // Text constraints. + [_textView.leadingAnchor + constraintEqualToAnchor:self.contentView.leadingAnchor + constant:kTableViewHorizontalSpacing], + [_textView.trailingAnchor + constraintEqualToAnchor:self.contentView.trailingAnchor + constant:-kTableViewHorizontalSpacing], + [_textView.topAnchor + constraintEqualToAnchor:_textLabel.bottomAnchor + constant:kTableViewOneLabelCellVerticalSpacing], + [_textView.bottomAnchor + constraintEqualToAnchor:self.contentView.bottomAnchor + constant:-kTableViewOneLabelCellVerticalSpacing], + + ]]; + } + return self; +} + +- (void)configureCell { + self.textLabel.text = + NSLocalizedString(@"IDS_IOS_CREDENTIAL_PROVIDER_NOTE", @"Note"); + self.textView.delegate = self; +} + +- (void)prepareForReuse { + [super prepareForReuse]; + + self.textLabel.text = @""; + self.textView.text = @""; + self.delegate = nil; +} + +#pragma mark - UITextViewDelegate + +- (void)textViewDidChange:(UITextView*)textView { + [self.delegate textViewDidChangeInCell:self]; +} + +@end
diff --git a/ios/chrome/search_widget_extension/BUILD.gn b/ios/chrome/search_widget_extension/BUILD.gn index 1d8a4c7..dfe8d0a 100644 --- a/ios/chrome/search_widget_extension/BUILD.gn +++ b/ios/chrome/search_widget_extension/BUILD.gn
@@ -33,10 +33,7 @@ deps = [ ":search_widget", ":system_strings", - "resources:quick_action_incognito_search", - "resources:quick_action_scan_qr_code", - "resources:quick_action_search", - "resources:quick_action_voice_search", + "resources:quick_action_incognito", ] assert_no_deps = ios_extension_assert_no_deps
diff --git a/ios/chrome/search_widget_extension/resources/BUILD.gn b/ios/chrome/search_widget_extension/resources/BUILD.gn index 4126ebe..8d92fe8 100644 --- a/ios/chrome/search_widget_extension/resources/BUILD.gn +++ b/ios/chrome/search_widget_extension/resources/BUILD.gn
@@ -4,38 +4,9 @@ import("//build/config/ios/asset_catalog.gni") -imageset("quick_action_search") { +symbolset("quick_action_incognito") { sources = [ - "quick_action_search.imageset/Contents.json", - "quick_action_search.imageset/quick_action_search.png", - "quick_action_search.imageset/quick_action_search@2x.png", - "quick_action_search.imageset/quick_action_search@3x.png", - ] -} - -imageset("quick_action_incognito_search") { - sources = [ - "quick_action_incognito_search.imageset/Contents.json", - "quick_action_incognito_search.imageset/quick_action_incognito_search.png", - "quick_action_incognito_search.imageset/quick_action_incognito_search@2x.png", - "quick_action_incognito_search.imageset/quick_action_incognito_search@3x.png", - ] -} - -imageset("quick_action_voice_search") { - sources = [ - "quick_action_voice_search.imageset/Contents.json", - "quick_action_voice_search.imageset/quick_action_voice_search.png", - "quick_action_voice_search.imageset/quick_action_voice_search@2x.png", - "quick_action_voice_search.imageset/quick_action_voice_search@3x.png", - ] -} - -imageset("quick_action_scan_qr_code") { - sources = [ - "quick_action_scan_qr_code.imageset/Contents.json", - "quick_action_scan_qr_code.imageset/quick_action_scan_qr_code.png", - "quick_action_scan_qr_code.imageset/quick_action_scan_qr_code@2x.png", - "quick_action_scan_qr_code.imageset/quick_action_scan_qr_code@3x.png", + "quick_action_incognito.symbolset/Contents.json", + "quick_action_incognito.symbolset/incognito.cr.svg", ] }
diff --git a/ios/chrome/search_widget_extension/resources/quick_action_incognito.symbolset/Contents.json b/ios/chrome/search_widget_extension/resources/quick_action_incognito.symbolset/Contents.json new file mode 100644 index 0000000..364cdbd --- /dev/null +++ b/ios/chrome/search_widget_extension/resources/quick_action_incognito.symbolset/Contents.json
@@ -0,0 +1,12 @@ +{ + "info": { + "author": "xcode", + "version": 1 + }, + "symbols": [ + { + "filename": "incognito.cr.svg", + "idiom": "universal" + } + ] +}
diff --git a/ios/chrome/search_widget_extension/resources/quick_action_incognito.symbolset/incognito.cr.svg b/ios/chrome/search_widget_extension/resources/quick_action_incognito.symbolset/incognito.cr.svg new file mode 100644 index 0000000..e0d48b6 --- /dev/null +++ b/ios/chrome/search_widget_extension/resources/quick_action_incognito.symbolset/incognito.cr.svg
@@ -0,0 +1,161 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--Generator: Apple Native CoreSVG 149--> +<!DOCTYPE svg +PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="3300" height="2200"> + <!--glyph: "", point size: 100.0, font version: "17.0d8e1", template writer version: "58"--> + <g id="Notes"> + <rect height="2200" id="artboard" style="fill:white;opacity:1" width="3300" x="0" y="0"/> + <line style="fill:none;stroke:black;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="292" y2="292"/> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;font-weight:bold;" transform="matrix(1 0 0 1 263 322)">Weight/Scale Variations</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 559.711 322)">Ultralight</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 856.422 322)">Thin</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 1153.13 322)">Light</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 1449.84 322)">Regular</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 1746.56 322)">Medium</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 2043.27 322)">Semibold</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 2339.98 322)">Bold</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 2636.69 322)">Heavy</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 2933.4 322)">Black</text> + <line style="fill:none;stroke:black;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="1903" y2="1903"/> + <g transform="matrix(1 0 0 1 263 1933)"> + <path d="M9.24805 0.830078Q10.8691 0.830078 12.2949 0.214844Q13.7207-0.400391 14.8096-1.49414Q15.8984-2.58789 16.5186-4.01367Q17.1387-5.43945 17.1387-7.05078Q17.1387-8.66211 16.5186-10.0879Q15.8984-11.5137 14.8047-12.6074Q13.7109-13.7012 12.2852-14.3164Q10.8594-14.9316 9.23828-14.9316Q7.62695-14.9316 6.20117-14.3164Q4.77539-13.7012 3.69141-12.6074Q2.60742-11.5137 1.9873-10.0879Q1.36719-8.66211 1.36719-7.05078Q1.36719-5.43945 1.9873-4.01367Q2.60742-2.58789 3.69629-1.49414Q4.78516-0.400391 6.21094 0.214844Q7.63672 0.830078 9.24805 0.830078ZM9.24805-0.654297Q7.91992-0.654297 6.7627-1.14746Q5.60547-1.64062 4.73145-2.51953Q3.85742-3.39844 3.36426-4.56055Q2.87109-5.72266 2.87109-7.05078Q2.87109-8.37891 3.35938-9.54102Q3.84766-10.7031 4.72168-11.582Q5.5957-12.4609 6.75293-12.9541Q7.91016-13.4473 9.23828-13.4473Q10.5762-13.4473 11.7334-12.9541Q12.8906-12.4609 13.7695-11.582Q14.6484-10.7031 15.1465-9.54102Q15.6445-8.37891 15.6445-7.05078Q15.6445-5.72266 15.1514-4.56055Q14.6582-3.39844 13.7842-2.51953Q12.9102-1.64062 11.748-1.14746Q10.5859-0.654297 9.24805-0.654297ZM5.83984-7.04102Q5.83984-6.71875 6.04492-6.51855Q6.25-6.31836 6.5918-6.31836L8.50586-6.31836L8.50586-4.39453Q8.50586-4.0625 8.70605-3.85742Q8.90625-3.65234 9.22852-3.65234Q9.56055-3.65234 9.76562-3.85742Q9.9707-4.0625 9.9707-4.39453L9.9707-6.31836L11.8945-6.31836Q12.2266-6.31836 12.4316-6.51855Q12.6367-6.71875 12.6367-7.04102Q12.6367-7.37305 12.4316-7.57812Q12.2266-7.7832 11.8945-7.7832L9.9707-7.7832L9.9707-9.69727Q9.9707-10.0391 9.76562-10.2441Q9.56055-10.4492 9.22852-10.4492Q8.90625-10.4492 8.70605-10.2441Q8.50586-10.0391 8.50586-9.69727L8.50586-7.7832L6.5918-7.7832Q6.25-7.7832 6.04492-7.57812Q5.83984-7.37305 5.83984-7.04102Z"/> + </g> + <g transform="matrix(1 0 0 1 281.867 1933)"> + <path d="M11.709 2.91016Q13.75 2.91016 15.5518 2.12891Q17.3535 1.34766 18.7305-0.0292969Q20.1074-1.40625 20.8887-3.20801Q21.6699-5.00977 21.6699-7.05078Q21.6699-9.0918 20.8887-10.8936Q20.1074-12.6953 18.7305-14.0723Q17.3535-15.4492 15.5469-16.2305Q13.7402-17.0117 11.6992-17.0117Q9.6582-17.0117 7.85645-16.2305Q6.05469-15.4492 4.68262-14.0723Q3.31055-12.6953 2.5293-10.8936Q1.74805-9.0918 1.74805-7.05078Q1.74805-5.00977 2.5293-3.20801Q3.31055-1.40625 4.6875-0.0292969Q6.06445 1.34766 7.86621 2.12891Q9.66797 2.91016 11.709 2.91016ZM11.709 1.25Q9.98047 1.25 8.47656 0.605469Q6.97266-0.0390625 5.83496-1.17676Q4.69727-2.31445 4.05762-3.81836Q3.41797-5.32227 3.41797-7.05078Q3.41797-8.7793 4.05762-10.2832Q4.69727-11.7871 5.83008-12.9297Q6.96289-14.0723 8.4668-14.7119Q9.9707-15.3516 11.6992-15.3516Q13.4277-15.3516 14.9316-14.7119Q16.4355-14.0723 17.5781-12.9297Q18.7207-11.7871 19.3652-10.2832Q20.0098-8.7793 20.0098-7.05078Q20.0098-5.32227 19.3701-3.81836Q18.7305-2.31445 17.5928-1.17676Q16.4551-0.0390625 14.9463 0.605469Q13.4375 1.25 11.709 1.25ZM7.39258-7.04102Q7.39258-6.68945 7.62695-6.46484Q7.86133-6.24023 8.23242-6.24023L10.8789-6.24023L10.8789-3.57422Q10.8789-3.21289 11.1035-2.9834Q11.3281-2.75391 11.6797-2.75391Q12.0508-2.75391 12.2852-2.9834Q12.5195-3.21289 12.5195-3.57422L12.5195-6.24023L15.1758-6.24023Q15.5371-6.24023 15.7715-6.46484Q16.0059-6.68945 16.0059-7.04102Q16.0059-7.41211 15.7715-7.6416Q15.5371-7.87109 15.1758-7.87109L12.5195-7.87109L12.5195-10.5176Q12.5195-10.8984 12.2852-11.1279Q12.0508-11.3574 11.6797-11.3574Q11.3281-11.3574 11.1035-11.1279Q10.8789-10.8984 10.8789-10.5176L10.8789-7.87109L8.23242-7.87109Q7.85156-7.87109 7.62207-7.6416Q7.39258-7.41211 7.39258-7.04102Z"/> + </g> + <g transform="matrix(1 0 0 1 305.646 1933)"> + <path d="M14.9707 5.66406Q17.0605 5.66406 18.96 5.01465Q20.8594 4.36523 22.4512 3.19336Q24.043 2.02148 25.2197 0.429688Q26.3965-1.16211 27.0459-3.06641Q27.6953-4.9707 27.6953-7.05078Q27.6953-9.14062 27.0459-11.04Q26.3965-12.9395 25.2197-14.5312Q24.043-16.123 22.4512-17.2998Q20.8594-18.4766 18.9551-19.126Q17.0508-19.7754 14.9609-19.7754Q12.8711-19.7754 10.9717-19.126Q9.07227-18.4766 7.48535-17.2998Q5.89844-16.123 4.72168-14.5312Q3.54492-12.9395 2.90039-11.04Q2.25586-9.14062 2.25586-7.05078Q2.25586-4.9707 2.90527-3.06641Q3.55469-1.16211 4.72656 0.429688Q5.89844 2.02148 7.49023 3.19336Q9.08203 4.36523 10.9814 5.01465Q12.8809 5.66406 14.9707 5.66406ZM14.9707 3.84766Q13.1641 3.84766 11.5283 3.2959Q9.89258 2.74414 8.53516 1.74805Q7.17773 0.751953 6.17676-0.610352Q5.17578-1.97266 4.62891-3.6084Q4.08203-5.24414 4.08203-7.05078Q4.08203-8.86719 4.62891-10.5029Q5.17578-12.1387 6.17188-13.501Q7.16797-14.8633 8.52539-15.8594Q9.88281-16.8555 11.5186-17.4023Q13.1543-17.9492 14.9609-17.9492Q16.7773-17.9492 18.4131-17.4023Q20.0488-16.8555 21.4111-15.8594Q22.7734-14.8633 23.7695-13.501Q24.7656-12.1387 25.3174-10.5029Q25.8691-8.86719 25.8691-7.05078Q25.8789-5.24414 25.332-3.6084Q24.7852-1.97266 23.7842-0.610352Q22.7832 0.751953 21.4209 1.74805Q20.0586 2.74414 18.4229 3.2959Q16.7871 3.84766 14.9707 3.84766ZM9.45312-7.04102Q9.45312-6.66016 9.71191-6.41113Q9.9707-6.16211 10.3711-6.16211L14.0625-6.16211L14.0625-2.46094Q14.0625-2.06055 14.3115-1.80664Q14.5605-1.55273 14.9414-1.55273Q15.3516-1.55273 15.6055-1.80664Q15.8594-2.06055 15.8594-2.46094L15.8594-6.16211L19.5605-6.16211Q19.9609-6.16211 20.2148-6.41113Q20.4688-6.66016 20.4688-7.04102Q20.4688-7.45117 20.2148-7.70508Q19.9609-7.95898 19.5605-7.95898L15.8594-7.95898L15.8594-11.6504Q15.8594-12.0605 15.6055-12.3145Q15.3516-12.5684 14.9414-12.5684Q14.5605-12.5684 14.3115-12.3096Q14.0625-12.0508 14.0625-11.6504L14.0625-7.95898L10.3711-7.95898Q9.96094-7.95898 9.70703-7.70508Q9.45312-7.45117 9.45312-7.04102Z"/> + </g> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;font-weight:bold;" transform="matrix(1 0 0 1 263 1953)">Design Variations</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 263 1971)">Symbols are supported in up to nine weights and three scales.</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 263 1989)">For optimal layout with text and other symbols, vertically align</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 263 2007)">symbols with the adjacent text.</text> + <line style="fill:none;stroke:#00AEEF;stroke-width:0.5;opacity:1.0;" x1="776" x2="776" y1="1919" y2="1933"/> + <g transform="matrix(1 0 0 1 776 1933)"> + <path d="M3.31055 0.15625Q3.70117 0.15625 3.91602-0.00976562Q4.13086-0.175781 4.26758-0.585938L5.52734-4.0332L11.2891-4.0332L12.5488-0.585938Q12.6855-0.175781 12.9004-0.00976562Q13.1152 0.15625 13.4961 0.15625Q13.8867 0.15625 14.1162-0.0585938Q14.3457-0.273438 14.3457-0.644531Q14.3457-0.869141 14.2383-1.17188L9.6582-13.3691Q9.48242-13.8184 9.17969-14.043Q8.87695-14.2676 8.4082-14.2676Q7.5-14.2676 7.17773-13.3789L2.59766-1.16211Q2.49023-0.859375 2.49023-0.634766Q2.49023-0.263672 2.70996-0.0537109Q2.92969 0.15625 3.31055 0.15625ZM6.00586-5.51758L8.37891-12.0898L8.42773-12.0898L10.8008-5.51758Z"/> + </g> + <line style="fill:none;stroke:#00AEEF;stroke-width:0.5;opacity:1.0;" x1="793.197" x2="793.197" y1="1919" y2="1933"/> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;font-weight:bold;" transform="matrix(1 0 0 1 776 1953)">Margins</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 776 1971)">Leading and trailing margins on the left and right side of each symbol</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 776 1989)">can be adjusted by modifying the x-location of the margin guidelines.</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 776 2007)">Modifications are automatically applied proportionally to all</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 776 2025)">scales and weights.</text> + <g transform="matrix(1 0 0 1 1289 1933)"> + <path d="M2.8418 1.86523L4.54102 3.57422Q5.18555 4.22852 5.90332 4.17969Q6.62109 4.13086 7.31445 3.35938L18.0078-8.42773L17.041-9.4043L6.42578 2.27539Q6.16211 2.57812 5.89355 2.61719Q5.625 2.65625 5.27344 2.30469L4.10156 1.14258Q3.75 0.791016 3.79395 0.522461Q3.83789 0.253906 4.14062-0.0195312L15.6152-10.8203L14.6387-11.7871L3.04688-0.898438Q2.30469-0.214844 2.25098 0.498047Q2.19727 1.21094 2.8418 1.86523ZM9.25781-16.3281Q8.94531-16.0254 8.90625-15.6348Q8.86719-15.2441 9.04297-14.9512Q9.21875-14.6777 9.55566-14.541Q9.89258-14.4043 10.3809-14.5215Q11.4746-14.7754 12.5977-14.7314Q13.7207-14.6875 14.7949-13.9844L14.209-12.5293Q13.9551-11.9043 14.0674-11.4404Q14.1797-10.9766 14.5801-10.5664L16.875-8.25195Q17.2363-7.88086 17.5781-7.82227Q17.9199-7.76367 18.3398-7.8418L19.4043-8.03711L20.0684-7.36328L20.0293-6.80664Q20-6.43555 20.1221-6.12305Q20.2441-5.81055 20.6055-5.44922L21.3672-4.70703Q21.7285-4.3457 22.1533-4.33105Q22.5781-4.31641 22.9297-4.66797L25.8398-7.58789Q26.1914-7.93945 26.1816-8.35449Q26.1719-8.76953 25.8105-9.13086L25.0391-9.89258Q24.6875-10.2539 24.3799-10.3857Q24.0723-10.5176 23.7109-10.4883L23.1348-10.4395L22.4902-11.0742L22.7344-12.1973Q22.832-12.6172 22.6953-12.9834Q22.5586-13.3496 22.1191-13.7891L19.9219-15.9766Q18.6719-17.2168 17.2607-17.8369Q15.8496-18.457 14.4189-18.4814Q12.9883-18.5059 11.665-17.959Q10.3418-17.4121 9.25781-16.3281ZM10.752-15.957Q11.6602-16.6211 12.7002-16.9043Q13.7402-17.1875 14.8047-17.085Q15.8691-16.9824 16.8701-16.5137Q17.8711-16.0449 18.7012-15.2051L21.1328-12.793Q21.3086-12.6172 21.3525-12.4512Q21.3965-12.2852 21.3379-12.0312L21.0156-10.5469L22.5195-9.0625L23.5059-9.12109Q23.6914-9.13086 23.7891-9.09668Q23.8867-9.0625 24.0332-8.91602L24.6094-8.33984L22.168-5.89844L21.5918-6.47461Q21.4453-6.62109 21.4062-6.71875Q21.3672-6.81641 21.377-7.01172L21.4453-7.98828L19.9512-9.47266L18.4277-9.21875Q18.1836-9.16992 18.042-9.2041Q17.9004-9.23828 17.7148-9.41406L15.7129-11.416Q15.5176-11.5918 15.4932-11.7529Q15.4688-11.9141 15.5859-12.1875L16.4648-14.2773Q15.293-15.3711 13.8281-15.791Q12.3633-16.2109 10.8398-15.7617Q10.7227-15.7324 10.6885-15.8057Q10.6543-15.8789 10.752-15.957Z"/> + </g> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;font-weight:bold;" transform="matrix(1 0 0 1 1289 1953)">Exporting</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 1289 1971)">Symbols should be outlined when exporting to ensure the</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 1289 1989)">design is preserved when submitting to Xcode.</text> + <text id="template-version" style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:end;" transform="matrix(1 0 0 1 3036 1933)">Template v.2.0</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:end;" transform="matrix(1 0 0 1 3036 1951)">Requires Xcode 13 or greater</text> + <text id="descriptive-name" style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:end;" transform="matrix(1 0 0 1 3036 1969)">Generated from incognito.cr</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:end;" transform="matrix(1 0 0 1 3036 1987)">Typeset at 100 points</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 263 726)">Small</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 263 1156)">Medium</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 263 1586)">Large</text> + </g> + <g id="Guides"> + <g id="H-reference" style="fill:#27AAE1;stroke:none;" transform="matrix(1 0 0 1 339 696)"> + <path d="M0.993347 0L3.6377 0L29.3282-67.1326L30.0301-67.1326L30.0301-70.459L28.1227-70.459ZM11.6882-24.4797L46.9818-24.4797L46.2311-26.7288L12.4382-26.7288ZM55.1193 0L57.7637 0L30.6381-70.459L29.4327-70.459L29.4327-67.1326Z"/> + </g> + <line id="Baseline-S" style="fill:none;stroke:#27AAE1;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="696" y2="696"/> + <line id="Capline-S" style="fill:none;stroke:#27AAE1;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="625.541" y2="625.541"/> + <g id="H-reference" style="fill:#27AAE1;stroke:none;" transform="matrix(1 0 0 1 339 1126)"> + <path d="M0.993347 0L3.6377 0L29.3282-67.1326L30.0301-67.1326L30.0301-70.459L28.1227-70.459ZM11.6882-24.4797L46.9818-24.4797L46.2311-26.7288L12.4382-26.7288ZM55.1193 0L57.7637 0L30.6381-70.459L29.4327-70.459L29.4327-67.1326Z"/> + </g> + <line id="Baseline-M" style="fill:none;stroke:#27AAE1;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="1126" y2="1126"/> + <line id="Capline-M" style="fill:none;stroke:#27AAE1;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="1055.54" y2="1055.54"/> + <g id="H-reference" style="fill:#27AAE1;stroke:none;" transform="matrix(1 0 0 1 339 1556)"> + <path d="M0.993347 0L3.6377 0L29.3282-67.1326L30.0301-67.1326L30.0301-70.459L28.1227-70.459ZM11.6882-24.4797L46.9818-24.4797L46.2311-26.7288L12.4382-26.7288ZM55.1193 0L57.7637 0L30.6381-70.459L29.4327-70.459L29.4327-67.1326Z"/> + </g> + <line id="Baseline-L" style="fill:none;stroke:#27AAE1;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="1556" y2="1556"/> + <line id="Capline-L" style="fill:none;stroke:#27AAE1;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="1485.54" y2="1485.54"/> + <line id="left-margin" style="fill:none;stroke:#00AEEF;stroke-width:0.5;opacity:1.0;" x1="1392.2" x2="1392.2" y1="1030.78" y2="1150.12"/> + <line id="right-margin" style="fill:none;stroke:#00AEEF;stroke-width:0.5;opacity:1.0;" x1="1507.49" x2="1507.49" y1="1030.78" y2="1150.12"/> + </g> + <g id="Symbols"> + <g id="Black-L" transform="matrix(1 0 0 1 2854.26 1556)"> + <path d="M104.61-103.582L124.54-54.2316L145.17-54.2316C150.01-54.2316 153.92-50.3116 153.92-45.4816C153.92-40.6416 150.01-36.7316 145.17-36.7316L13.12-36.7316C8.29-36.7316 4.37-40.6416 4.37-45.4816C4.37-50.3116 8.29-54.2316 13.12-54.2316L31.41-54.2316L51.15-103.552C53.34-109.262 59.56-112.332 65.43-110.602L77.88-106.942L90.34-110.612C96.19-112.332 102.4-109.282 104.61-103.582ZM90.2-92.3316L80.51-89.4716C79.63-89.2216 78.74-89.1016 77.87-89.1216L77.4997-89.1216C76.7561-89.1385 75.9957-89.2573 75.25-89.4716L75.25-89.4716L65.58-92.3216L50.16-54.2316L105.77-54.2316L90.2-92.3316ZM114.7-31.0816C130.12-31.0816 142.63-18.5816 142.63-3.15161C142.63 12.2784 130.12 24.7784 114.7 24.7784C102.85 24.7784 92.73 17.4084 88.67 6.99839C88.48 6.89839 88.29 6.79839 88.1 6.67839C83.18 3.64839 80.39 2.89839 78.3 2.89839C76.21 2.89839 73.42 3.64839 68.49 6.67839C68.31 6.78839 68.12 6.89839 67.93 6.99839C63.87 17.4084 53.75 24.7784 41.9 24.7784C26.47 24.7784 13.97 12.2784 13.97-3.15161C13.97-18.5816 26.47-31.0816 41.9-31.0816C53.98-31.0816 64.27-23.4116 68.17-12.6816C71.42-13.8916 74.76-14.6016 78.3-14.6016C81.83-14.6016 85.18-13.8916 88.43-12.6816C92.33-23.4116 102.62-31.0816 114.7-31.0816ZM41.9-13.5816C36.14-13.5816 31.47-8.91161 31.47-3.15161C31.47 2.60839 36.14 7.27839 41.9 7.27839C47.66 7.27839 52.33 2.60839 52.33-3.15161C52.33-8.91161 47.66-13.5816 41.9-13.5816ZM104.26-3.15161C104.26 2.60839 108.94 7.27839 114.7 7.27839C120.46 7.27839 125.13 2.60839 125.13-3.15161C125.13-8.91161 120.46-13.5816 114.7-13.5816C108.94-13.5816 104.26-8.91161 104.26-3.15161Z"/> + </g> + <g id="Heavy-L" transform="matrix(1 0 0 1 2558.54 1556)"> + <path d="M102.67-103.114L122.85-53.1139L144.17-53.1139C148.45-53.1139 151.92-49.6539 151.92-45.3639C151.92-41.0839 148.45-37.6139 144.17-37.6139L12.12-37.6139C7.84-37.6139 4.37-41.0839 4.37-45.3639C4.37-49.6539 7.84-53.1139 12.12-53.1139L31.1-53.1139L31.11-53.1439L51.08-103.084C53.09-108.314 58.77-111.114 64.15-109.534L76.88-105.794L89.62-109.544C94.98-111.114 100.65-108.324 102.67-103.114ZM89.8-93.4339L79.23-90.3239C78.44-90.0939 77.65-89.9939 76.87-90.0139C76.1-89.9939 75.31-90.0939 74.53-90.3239L74.53-90.3239L63.97-93.4339L47.7-53.1139L106.23-53.1139L89.8-93.4339ZM113.7-30.9739C129.12-30.9739 141.63-18.4739 141.63-3.04393C141.63 12.3861 129.12 24.8861 113.7 24.8861C101.78 24.8861 91.6 17.4261 87.59 6.91607C82.62 3.85607 79.65 3.00607 77.3 3.00607C74.95 3.00607 71.98 3.85607 67.01 6.91607C63 17.4261 52.82 24.8861 40.9 24.8861C25.47 24.8861 12.97 12.3861 12.97-3.04393C12.97-18.4739 25.47-30.9739 40.9-30.9739C53.66-30.9739 64.43-22.4139 67.77-10.7239C70.85-11.8439 73.99-12.4939 77.3-12.4939C80.6-12.4939 83.75-11.8439 86.83-10.7239C90.17-22.4139 100.93-30.9739 113.7-30.9739ZM40.9-15.4739C34.03-15.4739 28.47-9.91393 28.47-3.04393C28.47 3.82607 34.03 9.38607 40.9 9.38607C47.77 9.38607 53.33 3.82607 53.33-3.04393C53.33-9.91393 47.77-15.4739 40.9-15.4739ZM101.26-3.04393C101.26 3.82607 106.83 9.38607 113.7 9.38607C120.56 9.38607 126.13 3.82607 126.13-3.04393C126.13-9.91393 120.56-15.4739 113.7-15.4739C106.83-15.4739 101.26-9.91393 101.26-3.04393Z"/> + </g> + <g id="Bold-L" transform="matrix(1 0 0 1 2263.33 1556)"> + <path d="M62.22-107.952L75.38-104.082L88.54-107.952C93.15-109.302 98.04-106.902 99.78-102.422L119.98-52.3625C120.09-52.0625 120.18-51.7625 120.25-51.4725L142.67-51.4725C146.12-51.4725 148.92-48.6725 148.92-45.2225C148.92-41.7625 146.12-38.9725 142.67-38.9725L10.62-38.9725C7.17-38.9725 4.37-41.7625 4.37-45.2225C4.37-48.6725 7.17-51.4725 10.62-51.4725L30.72-51.4725C30.79-51.8025 30.88-52.1325 31.01-52.4625L50.98-102.392C52.71-106.892 57.6-109.312 62.22-107.952ZM89.2-95.1125L77.3-91.6125C76.66-91.4225 76.01-91.3425 75.38-91.3625C74.74-91.3425 74.09-91.4225 73.45-91.6125L73.45-91.6125L61.57-95.1125L44.02-51.4725L106.92-51.4725L89.2-95.1125ZM112.2-30.8225C127.62-30.8225 140.13-18.3225 140.13-2.89246C140.13 12.5375 127.62 25.0375 112.2 25.0375C99.47 25.0375 88.73 16.5275 85.36 4.88754C81.14 2.47754 78.27 1.65754 75.8 1.65754C73.33 1.65754 70.46 2.47754 66.24 4.88754C62.87 16.5275 52.13 25.0375 39.4 25.0375C23.97 25.0375 11.47 12.5375 11.47-2.89246C11.47-18.3225 23.97-30.8225 39.4-30.8225C52.69-30.8225 63.81-21.5425 66.64-9.11246C69.63-10.2125 72.65-10.8425 75.8-10.8425C78.95-10.8425 81.97-10.2125 84.96-9.11246C87.79-21.5425 98.91-30.8225 112.2-30.8225ZM39.4-18.3225C30.88-18.3225 23.97-11.4125 23.97-2.89246C23.97 5.62754 30.88 12.5375 39.4 12.5375C47.93 12.5375 54.83 5.62754 54.83-2.89246C54.83-11.4125 47.93-18.3225 39.4-18.3225ZM96.76-2.89246C96.76 5.62754 103.67 12.5375 112.2 12.5375C120.72 12.5375 127.63 5.62754 127.63-2.89246C127.63-11.4125 120.72-18.3225 112.2-18.3225C103.67-18.3225 96.76-11.4125 96.76-2.89246Z"/> + </g> + <g id="Semibold-L" transform="matrix(1 0 0 1 1967.37 1556)"> + <path d="M98.33-102.085L119.16-50.6452L141.92-50.6452C144.96-50.6452 147.42-48.1752 147.42-45.1452C147.42-42.1052 144.96-39.6452 141.92-39.6452L115.53-39.6452C115.44-39.6352 115.36-39.6352 115.27-39.6452L34.53-39.6452C34.44-39.6352 34.36-39.6352 34.27-39.6452L9.87-39.6452C6.84-39.6452 4.37-42.1052 4.37-45.1452C4.37-48.1752 6.84-50.6452 9.87-50.6452L30.61-50.6452L50.93-102.015C52.51-106.165 57.01-108.405 61.27-107.145L74.63-103.215L88.01-107.155C92.24-108.395 96.72-106.195 98.33-102.085ZM88.91-95.9552L76.34-92.2552C75.77-92.0852 75.19-92.0152 74.63-92.0352C74.06-92.0152 73.49-92.0852 72.92-92.2552L72.92-92.2552L60.39-95.9452L42.38-50.6452L107.35-50.6452L88.91-95.9552ZM111.45-30.7452C126.87-30.7452 139.38-18.2452 139.38-2.81522C139.38 12.6148 126.87 25.1148 111.45 25.1148C98.35 25.1148 87.36 16.1048 84.34 3.95478C80.4 1.77478 77.56 0.984776 75.05 0.984776C72.53 0.984776 69.7 1.77478 65.76 3.95478C62.74 16.1048 51.75 25.1148 38.65 25.1148C23.22 25.1148 10.72 12.6148 10.72-2.81522C10.72-18.2452 23.22-30.7452 38.65-30.7452C52.2-30.7452 63.5-21.0952 66.05-8.29522C69.01-9.39522 71.97-10.0152 75.05-10.0152C78.13-10.0152 81.09-9.39522 84.05-8.29522C86.6-21.0952 97.9-30.7452 111.45-30.7452ZM38.65-19.7452C29.3-19.7452 21.72-12.1652 21.72-2.81522C21.72 6.53478 29.3 14.1148 38.65 14.1148C48 14.1148 55.58 6.53478 55.58-2.81522C55.58-12.1652 48-19.7452 38.65-19.7452ZM94.51-2.81522C94.51 6.53478 102.1 14.1148 111.45 14.1148C120.8 14.1148 128.38 6.53478 128.38-2.81522C128.38-12.1652 120.8-19.7452 111.45-19.7452C102.1-19.7452 94.51-12.1652 94.51-2.81522Z"/> + </g> + <g id="Medium-L" transform="matrix(1 0 0 1 1671.16 1556)"> + <path d="M97.36-101.844L118.32-50.0841L141.42-50.0841C144.18-50.0841 146.42-47.8441 146.42-45.0841C146.42-42.3141 144.18-40.0841 141.42-40.0841L115.02-40.0841C114.94-40.0741 114.86-40.0741 114.79-40.0841L34.01-40.0841C33.94-40.0741 33.86-40.0741 33.78-40.0841L9.37-40.0841C6.61-40.0841 4.37-42.3141 4.37-45.0841C4.37-47.8441 6.61-50.0841 9.37-50.0841L30.45-50.0841L50.9-101.784C52.38-105.684 56.62-107.784 60.63-106.604L74.13-102.634L87.65-106.614C91.63-107.784 95.85-105.714 97.36-101.844ZM88.71-96.5041L75.7-92.6741C75.18-92.5241 74.64-92.4541 74.13-92.4741C73.61-92.4541 73.08-92.5241 72.56-92.6741L72.56-92.6741L59.58-96.4941L41.15-50.0841L107.58-50.0841L88.71-96.5041ZM110.95-30.6941C126.37-30.6941 138.88-18.1841 138.88-2.75409C138.88 12.6659 126.37 25.1759 110.95 25.1759C97.62 25.1759 86.48 15.8459 83.69 3.36591C79.9 1.32591 77.09 0.545906 74.55 0.545906C72.01 0.545906 69.2 1.32591 65.41 3.36591C62.62 15.8459 51.48 25.1759 38.15 25.1759C22.72 25.1759 10.22 12.6659 10.22-2.75409C10.22-18.1841 22.72-30.6941 38.15-30.6941C51.88-30.6941 63.3-20.7841 65.64-7.73409C68.58-8.83409 71.51-9.45409 74.55-9.45409C77.59-9.45409 80.52-8.83409 83.46-7.73409C85.8-20.7841 97.22-30.6941 110.95-30.6941ZM38.15-20.6941C28.25-20.6941 20.22-12.6641 20.22-2.75409C20.22 7.14591 28.25 15.1759 38.15 15.1759C48.06 15.1759 56.08 7.14591 56.08-2.75409C56.08-12.6641 48.06-20.6941 38.15-20.6941ZM93.01-2.75409C93.01 7.14591 101.04 15.1759 110.95 15.1759C120.85 15.1759 128.88 7.14591 128.88-2.75409C128.88-12.6641 120.85-20.6941 110.95-20.6941C101.04-20.6941 93.01-12.6641 93.01-2.75409Z"/> + </g> + <g id="Regular-L" transform="matrix(1 0 0 1 1375.45 1556)"> + <path d="M95.43-100.383L116.63-47.9827L140.42-47.9827C142.63-47.9827 144.42-46.1827 144.42-43.9827C144.42-41.7727 142.63-39.9827 140.42-39.9827L113.99-39.9827C113.93-39.9727 113.87-39.9727 113.81-39.9827L32.99-39.9827C32.93-39.9727 32.87-39.9727 32.81-39.9827L8.37-39.9827C6.16-39.9827 4.37-41.7727 4.37-43.9827C4.37-46.1827 6.16-47.9827 8.37-47.9827L30.14-47.9827L50.83-100.323C52.13-103.743 55.84-105.583 59.35-104.543L73.13-100.493L86.93-104.553C90.42-105.583 94.11-103.763 95.43-100.383ZM88.31-96.6227L74.42-92.5327C73.99-92.4027 73.55-92.3527 73.13-92.3727C72.7-92.3527 72.27-92.4127 71.84-92.5327L71.84-92.5327L57.98-96.6127L38.7-47.9827L108.05-47.9827L88.31-96.6227ZM109.95-29.5927C125.37-29.5927 137.88-17.0827 137.88-1.65269C137.88 13.7673 125.37 26.2773 109.95 26.2773C96.18 26.2773 84.74 16.3173 82.44 3.20731C78.91 1.39731 76.14 0.647305 73.55 0.647305C70.96 0.647305 68.19 1.39731 64.66 3.19731C62.36 16.3173 50.92 26.2773 37.15 26.2773C21.72 26.2773 9.22 13.7673 9.22-1.65269C9.22-17.0827 21.72-29.5927 37.15-29.5927C51.23-29.5927 62.88-19.1727 64.81-5.62269C67.72-6.74269 70.59-7.35269 73.55-7.35269C76.51-7.35269 79.38-6.74269 82.29-5.62269C84.22-19.1727 95.87-29.5927 109.95-29.5927ZM37.15-21.5927C26.14-21.5927 17.22-12.6627 17.22-1.65269C17.22 9.34731 26.14 18.2773 37.15 18.2773C48.15 18.2773 57.08 9.35731 57.08-1.64269L57.08-1.64269L57.06-1.67269C57.07-1.68269 57.08-1.68269 57.08-1.69269C57.07-12.6827 48.15-21.5927 37.15-21.5927ZM90.01-1.64269C90.02 9.35731 98.94 18.2773 109.95 18.2773C120.96 18.2773 129.88 9.34731 129.88-1.65269C129.88-12.6627 120.96-21.5927 109.95-21.5927C98.95-21.5927 90.03-12.6827 90.01-1.69269C90.02-1.68269 90.03-1.68269 90.04-1.67269L90.01-1.64269Z"/> + </g> + <g id="Light-L" transform="matrix(1 0 0 1 1079.24 1556)"> + <path d="M94.46-100.145L115.79-47.4253L139.92-47.4253C141.86-47.4253 143.42-45.8553 143.42-43.9253C143.42-41.9853 141.86-40.4253 139.92-40.4253L113.48-40.4253C113.43-40.4153 113.37-40.4153 113.32-40.4253L32.48-40.4253C32.43-40.4153 32.37-40.4153 32.32-40.4253L7.87-40.4253C5.94-40.4253 4.37-41.9853 4.37-43.9253C4.37-45.8553 5.94-47.4253 7.87-47.4253L29.99-47.4253L50.8-100.085C52.01-103.255 55.45-104.965 58.71-104.005L72.63-99.9153L86.57-104.015C89.81-104.965 93.24-103.285 94.46-100.145ZM88.11-97.1753L73.78-92.9553C73.39-92.8453 73.01-92.7953 72.63-92.8153C72.25-92.7953 71.86-92.8453 71.48-92.9553L71.48-92.9553L57.17-97.1653L37.48-47.4253L108.28-47.4253L88.11-97.1753ZM109.45-29.5353C124.87-29.5353 137.38-17.0253 137.38-1.59529C137.38 13.8247 124.87 26.3347 109.45 26.3347C95.46 26.3347 83.88 16.0547 81.83 2.64471C78.7 1.07471 76.12 0.334712 73.71 0.224712C70.9 0.094712 67.96 0.794712 64.26 2.64471C62.22 16.0547 50.63 26.3347 36.65 26.3347C21.22 26.3347 8.72 13.8247 8.72-1.59529C8.72-17.0253 21.22-29.5353 36.65-29.5353C50.91-29.5353 62.67-18.8553 64.37-5.05529C67.61-6.30529 70.76-6.92529 74.04-6.76529C76.62-6.64529 79.15-6.05529 81.73-5.05529C83.43-18.8553 95.19-29.5353 109.45-29.5353ZM36.65-22.5353C25.09-22.5353 15.72-13.1653 15.72-1.59529C15.72 9.96471 25.09 19.3347 36.65 19.3347C48.21 19.3347 57.58 9.96471 57.58-1.59529C57.58-13.1653 48.21-22.5353 36.65-22.5353ZM88.51-1.59529C88.51 9.96471 97.89 19.3347 109.45 19.3347C121.01 19.3347 130.38 9.96471 130.38-1.59529C130.38-13.1653 121.01-22.5353 109.45-22.5353C97.89-22.5353 88.51-13.1653 88.51-1.59529Z"/> + </g> + <g id="Thin-L" transform="matrix(1 0 0 1 783.527 1556)"> + <path d="M92.527-99.674L114.106-46.324L138.92-46.324C140.301-46.324 141.42-45.204 141.42-43.824C141.42-42.434 140.301-41.324 138.92-41.324L112.455-41.324C112.417-41.314 112.378-41.314 112.34-41.324L31.454-41.324C31.416-41.314 31.377-41.314 31.339-41.324L6.87-41.324C5.489-41.324 4.37-42.434 4.37-43.824C4.37-45.204 5.489-46.324 6.87-46.324L29.674-46.324L50.729-99.634C51.751-102.314 54.666-103.764 57.421-102.954L71.626-98.774L85.851-102.954C88.59-103.764 91.49-102.334 92.527-99.674ZM87.869-97.864C87.774-98.104 87.511-98.234 87.262-98.154L87.262-98.154L72.492-93.814C72.202-93.734 71.909-93.704 71.624-93.714C71.34-93.704 71.048-93.734 70.759-93.814L70.759-93.814L56.01-98.154C55.76-98.224 55.495-98.094 55.402-97.854L55.402-97.854L35.024-46.324L108.739-46.324ZM108.444-29.434C123.872-29.434 136.378-16.924 136.378-1.49396C136.378 13.926 123.872 26.436 108.444 26.436C94.051 26.436 82.2 15.546 80.676 1.55604C77.716 0.146044 75.176-0.563956 72.752-0.673956C69.883-0.813956 66.943-0.123956 63.416 1.55604C61.893 15.546 50.042 26.436 35.648 26.436C20.221 26.436 7.714 13.926 7.714-1.49396C7.714-16.924 20.221-29.434 35.648-29.434C50.258-29.434 62.248-18.214 63.478-3.92396C66.702-5.20396 69.796-5.82396 72.987-5.67396C75.528-5.55396 78.032-4.94396 80.615-3.92396C81.844-18.214 93.834-29.434 108.444-29.434ZM35.648-24.434C22.982-24.434 12.714-14.164 12.714-1.49396C12.714 11.166 22.982 21.436 35.648 21.436C48.314 21.436 58.582 11.166 58.582-1.49396C58.582-14.164 48.314-24.434 35.648-24.434ZM85.512-1.29396C85.621 11.276 95.847 21.436 108.444 21.436C121.11 21.436 131.378 11.166 131.378-1.49396C131.378-14.164 121.11-24.434 108.444-24.434C95.798-24.434 85.542-14.194 85.511-1.55396C85.548-1.53396 85.586-1.51396 85.624-1.49396L85.512-1.29396Z"/> + </g> + <g id="Ultralight-L" transform="matrix(1 0 0 1 487.316 1556)"> + <path d="M91.561-99.4365L113.264-45.7565L138.42-45.7565C139.525-45.7565 140.42-44.8665 140.42-43.7565C140.42-42.6565 139.525-41.7565 138.42-41.7565L6.37-41.7565C5.266-41.7565 4.37-42.6565 4.37-43.7565C4.37-44.8665 5.266-45.7565 6.37-45.7565L29.518-45.7565L50.696-99.3965C51.625-101.837 54.275-103.147 56.78-102.417L71.126-98.1965L85.492-102.417C87.982-103.147 90.619-101.857 91.561-99.4365ZM87.835-97.9865C87.646-98.4665 87.119-98.7265 86.621-98.5765L86.621-98.5765L71.851-94.2365C71.608-94.1665 71.363-94.1465 71.124-94.1565C70.887-94.1465 70.642-94.1665 70.4-94.2365L70.4-94.2365L55.651-98.5765C55.15-98.7265 54.62-98.4565 54.435-97.9665L54.435-97.9665L33.798-45.7565L108.971-45.7565ZM107.944-29.3765C123.372-29.3765 135.878-16.8665 135.878-1.43655C135.878 13.9835 123.372 26.4935 107.944 26.4935C93.352 26.4935 81.373 15.3035 80.119 1.03345C76.929-0.456549 74.182-1.13655 71.509-1.13655C68.86-1.12655 66.134-0.436549 62.973 1.03345C61.719 15.3035 49.74 26.4935 35.148 26.4935C19.721 26.4935 7.214 13.9835 7.214-1.43655C7.214-16.8665 19.721-29.3765 35.148-29.3765C49.936-29.3765 62.039-17.8865 63.018-3.34655C65.911-4.50655 68.679-5.12655 71.499-5.13655C74.352-5.13655 77.149-4.51655 80.075-3.34655C81.053-17.8865 93.157-29.3765 107.944-29.3765ZM35.148-25.3765C21.93-25.3765 11.214-14.6565 11.214-1.43655C11.214 11.7735 21.93 22.4935 35.148 22.4935C48.366 22.4935 59.082 11.7735 59.082-1.43655C59.082-14.6565 48.366-25.3765 35.148-25.3765ZM84.011-1.43655C84.011 11.7735 94.726 22.4935 107.944 22.4935C121.163 22.4935 131.878 11.7735 131.878-1.43655C131.878-14.6565 121.163-25.3765 107.944-25.3765C94.726-25.3765 84.011-14.6565 84.011-1.43655Z"/> + </g> + <g id="Black-M" transform="matrix(1 0 0 1 2872 1126)"> + <path d="M68.87-91.2815L60.45-88.8015L52.04-91.2715C46.79-92.8215 41.24-90.0715 39.27-84.9715L24.95-47.7215L11.87-47.7215C7.73-47.7215 4.37-44.3615 4.37-40.2215C4.37-36.0715 7.73-32.7215 11.87-32.7215L110.93-32.7215C115.07-32.7215 118.43-36.0715 118.43-40.2215C118.43-44.3615 115.07-47.7215 110.93-47.7215L96.09-47.7215L81.62-85.0015C79.64-90.0915 74.1-92.8215 68.87-91.2815ZM41.02-47.7215L51.78-75.7115L58.21-73.8215C58.95-73.6015 59.71-73.5115 60.44-73.5215C61.18-73.5115 61.94-73.6015 62.68-73.8215L69.13-75.7215L80-47.7215L41.02-47.7215ZM88.07-29.4215C99.64-29.4215 109.02-20.0415 109.02-8.47151C109.02 3.09849 99.64 12.4885 88.07 12.4885C79.55 12.4885 72.22 7.39849 68.94 0.0984948C68.49-0.0715052 68.05-0.281505 67.63-0.541505C63.99-2.78151 62.08-3.24151 60.76-3.24151C59.45-3.24151 57.53-2.78151 53.9-0.541505C53.48-0.281505 53.04-0.0715052 52.59 0.0984948C49.31 7.39849 41.98 12.4885 33.46 12.4885C21.89 12.4885 12.51 3.09849 12.51-8.47151C12.51-20.0415 21.89-29.4215 33.46-29.4215C42.11-29.4215 49.54-24.1815 52.74-16.7015C55.29-17.6615 57.94-18.2415 60.76-18.2415C63.59-18.2415 66.24-17.6615 68.79-16.7015C71.99-24.1815 79.42-29.4215 88.07-29.4215ZM33.46-14.4215C30.17-14.4215 27.51-11.7615 27.51-8.47151C27.51-5.18151 30.17-2.51151 33.46-2.51151C36.75-2.51151 39.42-5.18151 39.42-8.47151C39.42-11.7615 36.75-14.4215 33.46-14.4215ZM82.11-8.47151C82.11-5.18151 84.78-2.51151 88.07-2.51151C91.36-2.51151 94.02-5.18151 94.02-8.47151C94.02-11.7615 91.36-14.4215 88.07-14.4215C84.78-14.4215 82.11-11.7615 82.11-8.47151Z"/> + </g> + <g id="Heavy-M" transform="matrix(1 0 0 1 2576.29 1126)"> + <path d="M79.69-87.5338L94.4-49.6138L109.93-49.6138C113.52-49.6138 116.43-46.7038 116.43-43.1138C116.43-39.5238 113.52-36.6138 109.93-36.6138L10.87-36.6138C7.28-36.6138 4.37-39.5238 4.37-43.1138C4.37-46.7038 7.28-49.6138 10.87-49.6138L24.63-49.6138L39.21-87.5038C40.98-92.1238 46.01-94.6038 50.75-93.2138L59.45-90.6538L68.15-93.2138C72.89-94.6038 77.9-92.1338 79.69-87.5338ZM68.73-79.8338L61.4-77.6738C60.75-77.4838 60.09-77.4038 59.44-77.4138C58.8-77.4038 58.14-77.4838 57.49-77.6738L57.49-77.6738L50.18-79.8238L38.56-49.6138L80.46-49.6138L68.73-79.8338ZM87.07-32.3138C98.64-32.3138 108.02-22.9338 108.02-11.3638C108.02 0.206172 98.64 9.59617 87.07 9.59617C78.03 9.59617 70.33 3.86617 67.39-4.14383L67.15-4.28383L67.15-4.28383C63.45-6.56383 61.35-7.13383 59.76-7.13383C58.18-7.13383 56.08-6.56383 52.38-4.28383L52.14-4.14383L52.14-4.14383C49.2 3.86617 41.5 9.59617 32.46 9.59617C20.89 9.59617 11.51 0.206172 11.51-11.3638C11.51-22.9338 20.89-32.3138 32.46-32.3138C41.47-32.3138 49.14-26.6338 52.11-18.6638C54.57-19.5838 57.09-20.1338 59.76-20.1338C62.44-20.1338 64.96-19.5838 67.42-18.6638C70.39-26.6338 78.06-32.3138 87.07-32.3138ZM32.46-19.3138C28.07-19.3138 24.51-15.7538 24.51-11.3638C24.51-6.97383 28.07-3.40383 32.46-3.40383C36.85-3.40383 40.42-6.97383 40.42-11.3638C40.42-15.7538 36.85-19.3138 32.46-19.3138ZM79.11-11.3638C79.11-6.97383 82.68-3.40383 87.07-3.40383C91.46-3.40383 95.02-6.97383 95.02-11.3638C95.02-15.7538 91.46-19.3138 87.07-19.3138C82.68-19.3138 79.11-15.7538 79.11-11.3638Z"/> + </g> + <g id="Bold-M" transform="matrix(1 0 0 1 2280.58 1126)"> + <path d="M77.75-84.0716L92.66-45.6616L92.72-45.5116L92.72-45.5116L108.93-45.5116C111.96-45.5116 114.43-43.0416 114.43-40.0116C114.43-36.9716 111.96-34.5116 108.93-34.5116L9.87-34.5116C6.84-34.5116 4.37-36.9716 4.37-40.0116C4.37-43.0416 6.84-45.5116 9.87-45.5116L24.33-45.5116C24.35-45.5816 24.38-45.6616 24.41-45.7316L39.14-84.0416C40.73-88.1816 45.22-90.4016 49.47-89.1516L58.45-86.5116L67.43-89.1516C71.67-90.4016 76.16-88.1916 77.75-84.0716ZM68.33-77.9516L60.12-75.5316C59.56-75.3716 59-75.3016 58.44-75.3116C57.89-75.3016 57.33-75.3716 56.77-75.5316L56.77-75.5316L48.58-77.9416L36.11-45.5116L80.92-45.5116L68.33-77.9516ZM86.07-29.2116C97.64-29.2116 107.02-19.8316 107.02-8.26157C107.02 3.30843 97.64 12.6884 86.07 12.6884C76.95 12.6884 69.19 6.86843 66.31-1.26157C62.76-3.40157 60.56-4.03157 58.77-4.03157C56.97-4.03157 54.77-3.40157 51.22-1.26157C48.34 6.86843 40.58 12.6884 31.46 12.6884C19.89 12.6884 10.51 3.30843 10.51-8.26157C10.51-19.8316 19.89-29.2116 31.46-29.2116C41.15-29.2116 49.3-22.6416 51.7-13.7116C53.99-14.5516 56.32-15.0316 58.77-15.0316C61.21-15.0316 63.54-14.5516 65.83-13.7116C68.23-22.6416 76.38-29.2116 86.07-29.2116ZM31.46-18.2116C25.96-18.2116 21.51-13.7616 21.51-8.26157C21.51-2.76157 25.96 1.68843 31.46 1.68843C36.96 1.68843 41.42-2.76157 41.42-8.26157C41.42-13.7616 36.96-18.2116 31.46-18.2116ZM76.11-8.26157C76.11-2.76157 80.57 1.68843 86.07 1.68843C91.57 1.68843 96.02-2.76157 96.02-8.26157C96.02-13.7616 91.57-18.2116 86.07-18.2116C80.57-18.2116 76.11-13.7616 76.11-8.26157Z"/> + </g> + <g id="Semibold-M" transform="matrix(1 0 0 1 1984.62 1126)"> + <path d="M76.31-83.7226L91.21-45.3026C91.29-45.1026 91.36-44.8926 91.41-44.6826L108.18-44.6826C110.8-44.6826 112.93-42.5526 112.93-39.9326C112.93-37.3026 110.8-35.1826 108.18-35.1826L9.12-35.1826C6.5-35.1826 4.37-37.3026 4.37-39.9326C4.37-42.5526 6.5-44.6826 9.12-44.6826L24.15-44.6826C24.2-44.9126 24.27-45.1526 24.36-45.3826L39.09-83.6926C40.54-87.4626 44.64-89.4926 48.51-88.3526L57.7-85.6426L66.89-88.3526C70.76-89.4926 74.85-87.4726 76.31-83.7226ZM68.03-78.7826L59.16-76.1726C58.67-76.0326 58.18-75.9726 57.7-75.9826C57.21-75.9726 56.72-76.0326 56.24-76.1726L56.24-76.1726L47.38-78.7826L34.26-44.6826L81.27-44.6826L68.03-78.7826ZM85.32-29.1326C96.89-29.1326 106.27-19.7526 106.27-8.1826C106.27 3.3874 96.89 12.7774 85.32 12.7774C75.8 12.7774 67.77 6.4274 65.21-2.2526C62.02-4.0826 59.86-4.7026 58.02-4.7026C56.17-4.7026 54.01-4.0826 50.82-2.2526C48.26 6.4274 40.23 12.7774 30.71 12.7774C19.14 12.7774 9.76 3.3874 9.76-8.1826C9.76-19.7526 19.14-29.1326 30.71-29.1326C40.66-29.1326 48.99-22.2026 51.13-12.9026C53.38-13.7326 55.65-14.2026 58.02-14.2026C60.38-14.2026 62.65-13.7326 64.9-12.9026C67.04-22.2026 75.37-29.1326 85.32-29.1326ZM30.71-19.6326C24.39-19.6326 19.26-14.5026 19.26-8.1826C19.26-1.8526 24.39 3.2774 30.71 3.2774C37.04 3.2774 42.17-1.8526 42.17-8.1826C42.17-14.5026 37.04-19.6326 30.71-19.6326ZM73.86-8.1826C73.86-1.8526 78.99 3.2774 85.32 3.2774C91.64 3.2774 96.77-1.8526 96.77-8.1826C96.77-14.5026 91.64-19.6326 85.32-19.6326C78.99-19.6326 73.86-14.5026 73.86-8.1826Z"/> + </g> + <g id="Medium-M" transform="matrix(1 0 0 1 1688.41 1126)"> + <path d="M75.34-83.4852L90.25-45.0652C90.37-44.7552 90.45-44.4352 90.49-44.1252L107.68-44.1252C110.02-44.1252 111.93-42.2152 111.93-39.8752C111.93-37.5252 110.02-35.6252 107.68-35.6252L8.62-35.6252C6.28-35.6252 4.37-37.5252 4.37-39.8752C4.37-42.2152 6.28-44.1252 8.62-44.1252L24.07-44.1252C24.11-44.4652 24.19-44.8052 24.32-45.1452L39.06-83.4552C40.41-86.9852 44.25-88.8752 47.87-87.8152L57.2-85.0652L66.53-87.8152C70.15-88.8752 73.98-86.9952 75.34-83.4852ZM67.83-79.3352L58.52-76.5952C58.08-76.4652 57.63-76.4152 57.2-76.4252C56.76-76.4152 56.32-76.4652 55.88-76.5952L55.88-76.5952L46.58-79.3352L33.04-44.1252L81.5-44.1252L67.83-79.3352ZM84.82-29.0752C96.39-29.0752 105.77-19.6952 105.77-8.12519C105.77 3.44481 96.39 12.8348 84.82 12.8348C75.06 12.8348 66.86 6.15481 64.53-2.87519C61.53-4.54519 59.39-5.14519 57.52-5.14519C55.64-5.14519 53.5-4.54519 50.5-2.87519C48.17 6.15481 39.97 12.8348 30.21 12.8348C18.64 12.8348 9.26 3.44481 9.26-8.12519C9.26-19.6952 18.64-29.0752 30.21-29.0752C40.34-29.0752 48.78-21.8952 50.74-12.3552C52.96-13.1752 55.19-13.6452 57.52-13.6452C59.84-13.6452 62.07-13.1752 64.29-12.3552C66.25-21.8952 74.69-29.0752 84.82-29.0752ZM30.21-20.5752C23.33-20.5752 17.76-15.0052 17.76-8.12519C17.76-1.24519 23.33 4.33481 30.21 4.33481C37.09 4.33481 42.67-1.24519 42.67-8.12519C42.67-15.0052 37.09-20.5752 30.21-20.5752ZM72.36-8.12519C72.36-1.24519 77.94 4.33481 84.82 4.33481C91.7 4.33481 97.27-1.24519 97.27-8.12519C97.27-15.0052 91.7-20.5752 84.82-20.5752C77.94-20.5752 72.36-15.0052 72.36-8.12519Z"/> + </g> + <g id="Regular-M" transform="matrix(1 0 0 1 1392.2 1126)"> + <path d="M74.37-83.245L89.72-43.575L107.17-43.575C109.24-43.575 110.92-41.895 110.92-39.825C110.92-37.755 109.24-36.075 107.17-36.075L8.12-36.075C6.05-36.075 4.37-37.755 4.37-39.825C4.37-41.895 6.05-43.575 8.12-43.575L24.05-43.575L39.02-83.185C40.27-86.495 43.85-88.275 47.24-87.275L56.69-84.495L66.17-87.285C69.54-88.275 73.1-86.515 74.37-83.245ZM67.62-79.895L57.87-77.025C57.48-76.915 57.08-76.865 56.69-76.875C56.3-76.865 55.91-76.915 55.52-77.025L55.52-77.025L45.79-79.885L32.07-43.575L81.68-43.575L67.62-79.895ZM84.32-29.025C95.89-29.025 105.27-19.645 105.27-8.07499C105.27 3.49501 95.89 12.885 84.32 12.885C74.32 12.885 65.96 5.88501 63.87-3.48499C61.03-5.01499 58.92-5.59499 57.01-5.59499C55.11-5.59499 53-5.01499 50.16-3.48499C48.06 5.88501 39.7 12.885 29.71 12.885C18.14 12.885 8.75 3.49501 8.75-8.07499C8.75-19.645 18.14-29.025 29.71-29.025C40.01-29.025 48.57-21.595 50.33-11.805C52.54-12.635 54.73-13.095 57.01-13.095C59.29-13.095 61.49-12.635 63.69-11.805C65.45-21.595 74.02-29.025 84.32-29.025ZM29.71-21.525C22.28-21.525 16.25-15.505 16.25-8.07499C16.25-0.644988 22.28 5.38501 29.71 5.38501C37.14 5.38501 43.16-0.644988 43.16-8.07499C43.16-15.505 37.14-21.525 29.71-21.525ZM70.86-8.07499C70.86-0.644988 76.88 5.38501 84.32 5.38501C91.75 5.38501 97.77-0.644988 97.77-8.07499C97.77-15.505 91.75-21.525 84.32-21.525C76.88-21.525 70.86-15.505 70.86-8.07499Z"/> + </g> + <g id="Light-M" transform="matrix(1 0 0 1 1096.23 1126)"> + <path d="M72.92-82.8952C71.8-85.8052 68.63-87.3652 65.64-86.4852L55.95-83.6352L46.27-86.4852C43.27-87.3652 40.09-85.7952 38.97-82.8752L23.59-42.7452L7.37-42.7452C5.72-42.7452 4.37-41.3952 4.37-39.7452C4.37-38.0852 5.72-36.7452 7.37-36.7452L106.43-36.7452C108.08-36.7452 109.43-38.0852 109.43-39.7452C109.43-41.3952 108.08-42.7452 106.43-42.7452L88.51-42.7452L72.92-82.8952ZM54.98-77.6652C55.3-77.5752 55.63-77.5352 55.95-77.5452C56.27-77.5352 56.59-77.5752 56.92-77.6652L67.33-80.7252L82.07-42.7452L30.02-42.7452L44.58-80.7252L54.98-77.6652ZM83.57-28.9452C95.14-28.9452 104.52-19.5652 104.52-7.99515C104.52 3.57485 95.14 12.9548 83.57 12.9548C73.24 12.9548 64.66 5.48485 62.93-4.34515C60.29-5.70515 58.21-6.26515 56.27-6.26515C54.32-6.26515 52.24-5.70515 49.6-4.34515C47.87 5.48485 39.29 12.9548 28.96 12.9548C17.39 12.9548 8.01 3.57485 8.01-7.99515C8.01-19.5652 17.39-28.9452 28.96-28.9452C39.52-28.9452 48.26-21.1352 49.71-10.9652C51.89-11.8052 54.04-12.2652 56.27-12.2652C58.49-12.2652 60.64-11.8052 62.82-10.9652C64.27-21.1352 73.01-28.9452 83.57-28.9452ZM28.96-22.9452C20.7-22.9452 14.01-16.2552 14.01-7.99515C14.01 0.264845 20.7 6.95485 28.96 6.95485C37.22 6.95485 43.91 0.274845 43.92-7.98515L43.92-7.98515L43.9-8.00515C43.9-8.01515 43.91-8.01515 43.92-8.01515C43.9-16.2652 37.21-22.9452 28.96-22.9452ZM68.61-7.98515C68.62 0.274845 75.31 6.95485 83.57 6.95485C91.83 6.95485 98.52 0.264845 98.52-7.99515C98.52-16.2552 91.83-22.9452 83.57-22.9452C75.32-22.9452 68.63-16.2652 68.61-8.01515C68.62-8.01515 68.63-8.01515 68.63-8.00515L68.61-7.98515Z"/> + </g> + <g id="Thin-M" transform="matrix(1 0 0 1 800.525 1126)"> + <path d="M70.988-83.4266L86.822-42.6366L105.424-42.6366C106.529-42.6366 107.424-41.7366 107.424-40.6366C107.424-39.5266 106.529-38.6366 105.424-38.6366L6.37-38.6366C5.266-38.6366 4.37-39.5266 4.37-40.6366C4.37-41.7366 5.266-42.6366 6.37-42.6366L23.275-42.6366L38.904-83.4066C39.837-85.8366 42.483-87.1466 44.984-86.4166L54.945-83.4866L64.916-86.4166C67.409-87.1466 70.048-85.8566 70.988-83.4266ZM43.855-82.5766C43.355-82.7266 42.826-82.4666 42.639-81.9766L42.639-81.9766L27.559-42.6366L82.531-42.6366L67.259-81.9866C67.071-82.4666 66.544-82.7266 66.045-82.5766L66.045-82.5766L55.63-79.5166C55.401-79.4466 55.169-79.4266 54.944-79.4366C54.719-79.4266 54.488-79.4466 54.259-79.5166L54.259-79.5166ZM82.566-29.8366C94.138-29.8366 103.519-20.4566 103.519-8.88662C103.519 2.68338 94.138 12.0734 82.566 12.0734C71.818 12.0734 62.961 3.97338 61.752-6.44662C59.298-7.62662 57.239-8.15662 55.262-8.15662C53.285-8.15662 51.226-7.62662 48.772-6.44662C47.563 3.97338 38.706 12.0734 27.959 12.0734C16.386 12.0734 7.005 2.68338 7.005-8.88662C7.005-20.4566 16.386-29.8366 27.959-29.8366C38.874-29.8366 47.84-21.4966 48.823-10.8366C50.999-11.6966 53.105-12.1566 55.262-12.1566C57.419-12.1566 59.525-11.6966 61.701-10.8366C62.685-21.4966 71.65-29.8366 82.566-29.8366ZM27.959-25.8366C18.595-25.8366 11.005-18.2466 11.005-8.88662C11.005 0.473383 18.595 8.07338 27.959 8.07338C37.322 8.07338 44.912 0.473383 44.912-8.88662C44.912-18.2466 37.322-25.8366 27.959-25.8366ZM65.612-8.88662C65.612 0.473383 73.202 8.07338 82.566 8.07338C91.929 8.07338 99.519 0.473383 99.519-8.88662C99.519-18.2466 91.929-25.8366 82.566-25.8366C73.202-25.8366 65.612-18.2466 65.612-8.88662Z"/> + </g> + <g id="Ultralight-M" transform="matrix(1 0 0 1 504.565 1126)"> + <path d="M69.539-86.0776L85.558-44.8076L104.673-44.8076C105.364-44.8076 105.923-44.2476 105.923-43.5576C105.923-42.8676 105.364-42.3076 104.673-42.3076L5.62-42.3076C4.929-42.3076 4.37-42.8676 4.37-43.5576C4.37-44.2476 4.929-44.8076 5.62-44.8076L23.04-44.8076L38.854-86.0576C39.647-88.1276 41.896-89.2376 44.022-88.6176L54.194-85.6276L64.377-88.6176C66.496-89.2376 68.74-88.1376 69.539-86.0776ZM67.208-85.1776C66.879-86.0176 65.955-86.4776 65.083-86.2176L65.083-86.2176L54.668-83.1576C54.509-83.1076 54.349-83.0976 54.193-83.1076C54.039-83.0976 53.879-83.1076 53.72-83.1576L53.72-83.1576L43.316-86.2176C42.441-86.4776 41.515-86.0176 41.189-85.1676L41.189-85.1676L25.718-44.8076L82.876-44.8076ZM81.815-32.7576C93.387-32.7576 102.769-23.3776 102.769-11.8076C102.769-0.237645 93.387 9.15235 81.815 9.15235C70.771 9.15235 61.723 0.602355 60.919-10.2376C58.594-11.3076 56.563-11.8176 54.579-11.8276C52.551-11.8376 50.48-11.3276 48.104-10.2376C47.3 0.602355 38.252 9.15235 27.208 9.15235C15.636 9.15235 6.254-0.237645 6.254-11.8076C6.254-23.3776 15.636-32.7576 27.208-32.7576C38.39-32.7576 47.526-23.9976 48.13-12.9676C50.346-13.8676 52.451-14.3376 54.593-14.3276C56.679-14.3176 58.734-13.8476 60.893-12.9676C61.497-23.9976 70.633-32.7576 81.815-32.7576ZM27.208-30.2576C17.016-30.2576 8.754-21.9976 8.754-11.8076C8.754-1.61765 17.016 6.65235 27.208 6.65235C37.4 6.65235 45.662-1.61765 45.662-11.8076C45.662-21.9976 37.4-30.2576 27.208-30.2576ZM63.361-11.8076C63.361-1.61765 71.623 6.65235 81.815 6.65235C92.007 6.65235 100.269-1.61765 100.269-11.8076C100.269-21.9976 92.007-30.2576 81.815-30.2576C71.623-30.2576 63.361-21.9976 63.361-11.8076Z"/> + </g> + <g id="Black-S" transform="matrix(1 0 0 1 2884.03 696)"> + <path d="M65.59-73.9535L76.75-45.1985L88.37-45.1985C91.68-45.1985 94.37-42.5125 94.37-39.1985C94.37-35.8855 91.68-33.1985 88.37-33.1985L10.37-33.1985C7.06-33.1985 4.37-35.8855 4.37-39.1985C4.37-42.5125 7.06-45.1985 10.37-45.1985L20.6-45.1985L31.65-73.9255C33.33-78.3005 38.09-80.6525 42.59-79.3295L48.62-77.5545L54.66-79.3315C59.15-80.6515 63.9-78.3135 65.59-73.9535ZM55.4-67.0415L50.41-65.5725C49.81-65.3965 49.21-65.3185 48.62-65.3275C48.03-65.3195 47.43-65.3975 46.83-65.5725L46.83-65.5725L41.85-67.0365L33.46-45.1985L63.88-45.1985L55.4-67.0415ZM70.37-30.6985C79.48-30.6985 86.87-23.3115 86.87-14.1985C86.87-5.08651 79.48 2.30149 70.37 2.30149C63.61 2.30149 57.8-1.76551 55.25-7.58551C54.9-7.71751 54.56-7.88551 54.23-8.08951C51.37-9.84551 49.88-10.1985 48.87-10.1985C47.86-10.1985 46.37-9.84551 43.51-8.08851C43.18-7.88551 42.84-7.71751 42.49-7.58551C39.94-1.76551 34.13 2.30149 27.37 2.30149C18.26 2.30149 10.87-5.08651 10.87-14.1985C10.87-23.3115 18.26-30.6985 27.37-30.6985C34.08-30.6985 39.85-26.6965 42.43-20.9495C44.48-21.7295 46.6-22.1985 48.87-22.1985C51.14-22.1985 53.26-21.7295 55.31-20.9495C57.89-26.6965 63.66-30.6985 70.37-30.6985ZM27.37-18.6985C24.88-18.6985 22.87-16.6845 22.87-14.1985C22.87-11.7135 24.88-9.69851 27.37-9.69851C29.86-9.69851 31.87-11.7135 31.87-14.1985C31.87-16.6845 29.86-18.6985 27.37-18.6985ZM65.87-14.1985C65.87-11.7135 67.88-9.69851 70.37-9.69851C72.86-9.69851 74.87-11.7135 74.87-14.1985C74.87-16.6845 72.86-18.6985 70.37-18.6985C67.88-18.6985 65.87-16.6845 65.87-14.1985Z"/> + </g> + <g id="Heavy-S" transform="matrix(1 0 0 1 2588.32 696)"> + <path d="M63.66-73.4845L75.06-44.0925L87.37-44.0925C90.13-44.0925 92.37-41.8535 92.37-39.0925C92.37-36.3305 90.13-34.0925 87.37-34.0925L9.37-34.0925C6.61-34.0925 4.37-36.3305 4.37-39.0925C4.37-41.8535 6.61-44.0925 9.37-44.0925L20.29-44.0925L31.58-73.4595C33.08-77.3495 37.31-79.4385 41.3-78.2635L47.62-76.4055L53.94-78.2655C57.93-79.4385 62.15-77.3605 63.66-73.4845ZM55-68.1535L49.13-66.4255C48.62-66.2775 48.12-66.2115 47.62-66.2215C47.12-66.2125 46.61-66.2775 46.11-66.4255L46.11-66.4255L40.25-68.1495L31-44.0925L64.34-44.0925L55-68.1535ZM69.37-30.5925C78.48-30.5925 85.87-23.2045 85.87-14.0925C85.87-4.97948 78.48 2.40752 69.37 2.40752C62.09 2.40752 55.91-2.30848 53.72-8.85248C50.82-10.6345 49.14-11.0925 47.87-11.0925C46.6-11.0925 44.92-10.6345 42.02-8.85248C39.83-2.30848 33.65 2.40752 26.37 2.40752C17.26 2.40752 9.87-4.97948 9.87-14.0925C9.87-23.2045 17.26-30.5925 26.37-30.5925C33.43-30.5925 39.46-26.1555 41.81-19.9175C43.76-20.6565 45.76-21.0925 47.87-21.0925C49.98-21.0925 51.98-20.6565 53.93-19.9175C56.28-26.1555 62.31-30.5925 69.37-30.5925ZM26.37-20.5925C22.78-20.5925 19.87-17.6825 19.87-14.0925C19.87-10.5025 22.78-7.59248 26.37-7.59248C29.96-7.59248 32.87-10.5025 32.87-14.0925C32.87-17.6825 29.96-20.5925 26.37-20.5925ZM62.87-14.0925C62.87-10.5025 65.78-7.59248 69.37-7.59248C72.96-7.59248 75.87-10.5025 75.87-14.0925C75.87-17.6825 72.96-20.5925 69.37-20.5925C65.78-20.5925 62.87-17.6825 62.87-14.0925Z"/> + </g> + <g id="Bold-S" transform="matrix(1 0 0 1 2292.11 696)"> + <path d="M62.69-73.2507L74.22-43.5487L74.22-43.5387L86.87-43.5387C89.36-43.5387 91.37-41.5247 91.37-39.0387C91.37-36.5537 89.36-34.5387 86.87-34.5387L8.87-34.5387C6.38-34.5387 4.37-36.5537 4.37-39.0387C4.37-41.5247 6.38-43.5387 8.87-43.5387L20.13-43.5387L20.14-43.5667L20.16-43.6057L31.55-73.2267C32.95-76.8737 36.92-78.8327 40.66-77.7307L47.12-75.8317L53.58-77.7327C57.32-78.8327 61.28-76.8847 62.69-73.2507ZM54.8-68.7097L48.49-66.8517C48.03-66.7177 47.57-66.6587 47.12-66.6687C46.67-66.6597 46.21-66.7177 45.75-66.8517L45.75-66.8517L39.45-68.7057L29.77-43.5387L64.57-43.5387L54.8-68.7097ZM68.87-30.5387C77.98-30.5387 85.37-23.1517 85.37-14.0387C85.37-4.92673 77.98 2.46127 68.87 2.46127C61.79 2.46127 55.75-2.00273 53.41-8.27073C50.52-10.0367 48.77-10.5387 47.37-10.5387C45.97-10.5387 44.22-10.0367 41.33-8.27073C38.99-2.00273 32.95 2.46127 25.87 2.46127C16.76 2.46127 9.37-4.92673 9.37-14.0387C9.37-23.1517 16.76-30.5387 25.87-30.5387C33.44-30.5387 39.82-25.4447 41.76-18.4977C43.58-19.1577 45.43-19.5387 47.37-19.5387C49.31-19.5387 51.16-19.1577 52.98-18.4977C54.92-25.4447 61.3-30.5387 68.87-30.5387ZM25.87-21.5387C21.73-21.5387 18.37-18.1807 18.37-14.0387C18.37-9.89673 21.73-6.53873 25.87-6.53873C30.01-6.53873 33.37-9.89673 33.37-14.0387C33.37-18.1807 30.01-21.5387 25.87-21.5387ZM61.37-14.0387C61.37-9.89673 64.73-6.53873 68.87-6.53873C73.01-6.53873 76.37-9.89673 76.37-14.0387C76.37-18.1807 73.01-21.5387 68.87-21.5387C64.73-21.5387 61.37-18.1807 61.37-14.0387Z"/> + </g> + <g id="Semibold-S" transform="matrix(1 0 0 1 1995.65 696)"> + <path d="M62.21-73.1391L73.74-43.4371L73.8-43.2671L73.8-43.2671L86.62-43.2671C88.97-43.2671 90.87-41.3641 90.87-39.0171C90.87-36.6701 88.97-34.7671 86.62-34.7671L8.62-34.7671C6.27-34.7671 4.37-36.6701 4.37-39.0171C4.37-41.3641 6.27-43.2671 8.62-43.2671L20.06-43.2671C20.08-43.3431 20.11-43.4191 20.14-43.4951L31.53-73.1151C32.89-76.6401 36.72-78.5341 40.34-77.4691L46.87-75.5491L53.4-77.4711C57.02-78.5341 60.85-76.6511 62.21-73.1391ZM54.7-68.9921L48.16-67.0701C47.73-66.9421 47.3-66.8871 46.87-66.8971C46.44-66.8881 46.01-66.9431 45.58-67.0701L45.58-67.0701L39.05-68.9891L29.16-43.2671L64.68-43.2671L54.7-68.9921ZM68.62-30.5171C77.73-30.5171 85.12-23.1301 85.12-14.0171C85.12-4.90509 77.73 2.48291 68.62 2.48291C61.4 2.48291 55.26-2.15909 53.02-8.62309C50.27-10.2701 48.54-10.7671 47.12-10.7671C45.7-10.7671 43.97-10.2701 41.22-8.62309C38.98-2.15909 32.84 2.48291 25.62 2.48291C16.51 2.48291 9.12-4.90509 9.12-14.0171C9.12-23.1301 16.51-30.5171 25.62-30.5171C33.28-30.5171 39.71-25.3041 41.58-18.2341C43.37-18.8901 45.2-19.2671 47.12-19.2671C49.04-19.2671 50.87-18.8901 52.66-18.2341C54.53-25.3041 60.96-30.5171 68.62-30.5171ZM25.62-22.0171C21.2-22.0171 17.62-18.4351 17.62-14.0171C17.62-9.59909 21.2-6.01709 25.62-6.01709C30.04-6.01709 33.62-9.59909 33.62-14.0171C33.62-18.4351 30.04-22.0171 25.62-22.0171ZM60.62-14.0171C60.62-9.59909 64.2-6.01709 68.62-6.01709C73.04-6.01709 76.62-9.59909 76.62-14.0171C76.62-18.4351 73.04-22.0171 68.62-22.0171C64.2-22.0171 60.62-18.4351 60.62-14.0171Z"/> + </g> + <g id="Medium-S" transform="matrix(1 0 0 1 1699.19 696)"> + <path d="M61.39-73.7739L73.25-43.2149C73.3-43.1059 73.33-42.9959 73.36-42.8859L86.37-42.8859C88.58-42.8859 90.37-41.0949 90.37-38.8859C90.37-36.6769 88.58-34.8859 86.37-34.8859L8.37-34.8859C6.16-34.8859 4.37-36.6769 4.37-38.8859C4.37-41.0949 6.16-42.8859 8.37-42.8859L20-42.8859C20.03-43.0159 20.07-43.1449 20.12-43.2739L31.84-73.7549C32.97-76.6719 36.14-78.2399 39.14-77.3579L46.62-75.1569L54.11-77.3589C57.1-78.2389 60.27-76.6809 61.39-73.7739ZM54.6-69.1659L47.84-67.1779C47.44-67.0579 47.02-67.0059 46.62-67.0159C46.21-67.0069 45.8-67.0579 45.4-67.1779L45.4-67.1779L38.65-69.1619L28.55-42.8859L64.8-42.8859L54.6-69.1659ZM68.37-30.3859C77.48-30.3859 84.87-22.9989 84.87-13.8859C84.87-4.77295 77.48 2.61405 68.37 2.61405C61.01 2.61405 54.78-2.20195 52.65-8.85295C50.02-10.3949 48.31-10.8859 46.87-10.8859C45.43-10.8859 43.72-10.3949 41.09-8.85295C38.96-2.20195 32.73 2.61405 25.37 2.61405C16.26 2.61405 8.87-4.77295 8.87-13.8859C8.87-22.9989 16.26-30.3859 25.37-30.3859C33.11-30.3859 39.61-25.0529 41.39-17.8589C43.17-18.5129 44.98-18.8859 46.87-18.8859C48.76-18.8859 50.57-18.5129 52.35-17.8589C54.13-25.0529 60.63-30.3859 68.37-30.3859ZM25.37-22.3859C20.68-22.3859 16.87-18.5799 16.87-13.8859C16.87-9.19195 20.68-5.38595 25.37-5.38595C30.06-5.38595 33.87-9.19195 33.87-13.8859C33.87-18.5799 30.06-22.3859 25.37-22.3859ZM59.87-13.8859C59.87-9.19195 63.68-5.38595 68.37-5.38595C73.06-5.38595 76.87-9.19195 76.87-13.8859C76.87-18.5799 73.06-22.3859 68.37-22.3859C63.68-22.3859 59.87-18.5799 59.87-13.8859Z"/> + </g> + <g id="Regular-S" transform="matrix(1 0 0 1 1402.97 696)"> + <path d="M60.76-70.7877L72.29-41.0857C72.37-40.8717 72.43-40.6547 72.47-40.4377L85.87-40.4377C87.8-40.4377 89.37-38.8707 89.37-36.9377C89.37-35.0047 87.8-33.4377 85.87-33.4377L7.87-33.4377C5.94-33.4377 4.37-35.0047 4.37-36.9377C4.37-38.8707 5.94-40.4377 7.87-40.4377L19.9-40.4377C19.94-40.6747 20-40.9127 20.09-41.1457L31.48-70.7667C32.7-73.9267 36.13-75.6247 39.38-74.6697L46.12-72.6877L52.87-74.6717C56.11-75.6247 59.54-73.9367 60.76-70.7877ZM54.4-67.8267L47.2-65.7097C46.84-65.6027 46.48-65.5577 46.12-65.5677C45.76-65.5587 45.4-65.6037 45.04-65.7097L45.04-65.7097L37.85-67.8237L27.32-40.4377L65.03-40.4377L54.4-67.8267ZM67.87-28.4377C76.98-28.4377 84.37-21.0507 84.37-11.9377C84.37-2.8247 76.98 4.5623 67.87 4.5623C60.26 4.5623 53.85-0.591697 51.95-7.5997C49.53-8.9617 47.84-9.4377 46.37-9.4377C44.9-9.4377 43.21-8.9617 40.79-7.5997C38.89-0.591697 32.48 4.5623 24.87 4.5623C15.76 4.5623 8.37-2.8247 8.37-11.9377C8.37-21.0507 15.76-28.4377 24.87-28.4377C32.79-28.4377 39.4-22.8597 41-15.4197C42.76-16.0697 44.53-16.4377 46.37-16.4377C48.21-16.4377 49.98-16.0697 51.74-15.4197C53.34-22.8597 59.95-28.4377 67.87-28.4377ZM24.87-21.4377C19.62-21.4377 15.37-17.1847 15.37-11.9377C15.37-6.6907 19.62-2.4377 24.87-2.4377C30.12-2.4377 34.37-6.6907 34.37-11.9377C34.37-17.1847 30.12-21.4377 24.87-21.4377ZM58.37-11.9377C58.37-6.6907 62.62-2.4377 67.87-2.4377C73.12-2.4377 77.37-6.6907 77.37-11.9377C77.37-17.1847 73.12-21.4377 67.87-21.4377C62.62-21.4377 58.37-17.1847 58.37-11.9377Z"/> + </g> + <g id="Light-S" transform="matrix(1 0 0 1 1107.26 696)"> + <path d="M58.82-70.2837L70.59-39.3357L84.87-39.3357C86.25-39.3357 87.37-38.2167 87.37-36.8357C87.37-35.4547 86.25-34.3357 84.87-34.3357L6.87-34.3357C5.49-34.3357 4.37-35.4547 4.37-36.8357C4.37-38.2167 5.49-39.3357 6.87-39.3357L19.65-39.3357L31.42-70.2837C32.44-72.9687 35.35-74.4157 38.11-73.6057L45.12-71.5437L52.13-73.6057C54.89-74.4157 57.8-72.9687 58.82-70.2837ZM54.15-68.5067C54.06-68.7507 53.79-68.8817 53.54-68.8087L53.54-68.8087L45.92-66.5667C45.65-66.4877 45.38-66.4567 45.12-66.4667C44.86-66.4567 44.59-66.4887 44.32-66.5667L44.32-66.5667L36.7-68.8087C36.45-68.8817 36.18-68.7507 36.09-68.5067L36.09-68.5067L25-39.3357L65.24-39.3357ZM66.87-28.3357C75.98-28.3357 83.37-20.9487 83.37-11.8357C83.37-2.7227 75.98 4.6643 66.87 4.6643C58.8 4.6643 52.08-1.1347 50.65-8.7957C48.54-9.8917 46.89-10.3357 45.37-10.3357C43.85-10.3357 42.2-9.8917 40.09-8.7957C38.66-1.1347 31.94 4.6643 23.87 4.6643C14.76 4.6643 7.37-2.7227 7.37-11.8357C7.37-20.9487 14.76-28.3357 23.87-28.3357C32.14-28.3357 38.99-22.2527 40.18-14.3187C41.91-14.9747 43.61-15.3357 45.37-15.3357C47.13-15.3357 48.83-14.9747 50.56-14.3187C51.75-22.2527 58.6-28.3357 66.87-28.3357ZM23.87-23.3357C17.52-23.3357 12.37-18.1867 12.37-11.8357C12.37-5.4847 17.52-0.335701 23.87-0.335701C30.22-0.335701 35.37-5.4847 35.37-11.8357C35.37-18.1867 30.22-23.3357 23.87-23.3357ZM55.37-11.8357C55.37-5.4847 60.52-0.335701 66.87-0.335701C73.22-0.335701 78.37-5.4847 78.37-11.8357C78.37-18.1867 73.22-23.3357 66.87-23.3357C60.52-23.3357 55.37-18.1867 55.37-11.8357Z"/> + </g> + <g id="Thin-S" transform="matrix(1 0 0 1 811.427 696)"> + <path d="M57.131-70.88L69.116-39.368L83.995-39.368C84.892-39.368 85.62-38.641 85.62-37.743C85.62-36.846 84.892-36.118 83.995-36.118L5.995-36.118C5.098-36.118 4.37-36.846 4.37-37.743C4.37-38.641 5.098-39.368 5.995-39.368L19.374-39.368L31.359-70.88C32.218-73.138 34.67-74.355 36.987-73.673L44.245-71.539L51.503-73.673C53.82-74.355 56.272-73.138 57.131-70.88ZM54.093-69.725C53.838-70.396 53.109-70.758 52.42-70.555L52.42-70.555L44.799-68.314C44.614-68.259 44.426-68.239 44.244-68.25C44.062-68.24 43.876-68.26 43.691-68.314L43.691-68.314L36.07-70.555C35.381-70.758 34.652-70.396 34.397-69.725L34.397-69.725L22.852-39.368L65.638-39.368ZM65.995-29.243C75.108-29.243 82.495-21.856 82.495-12.743C82.495-3.63 75.108 3.757 65.995 3.757C57.552 3.757 50.591-2.584 49.613-10.763C47.748-11.665 46.178-12.084 44.68-12.116C43.066-12.15 41.392-11.737 39.377-10.763C38.399-2.584 31.438 3.757 22.995 3.757C13.882 3.757 6.495-3.63 6.495-12.743C6.495-21.856 13.882-29.243 22.995-29.243C31.572-29.243 38.621-22.698 39.42-14.33C41.22-15.04 42.96-15.403 44.749-15.365C46.363-15.331 47.943-14.971 49.57-14.33C50.369-22.698 57.418-29.243 65.995-29.243ZM22.995-25.993C15.677-25.993 9.745-20.061 9.745-12.743C9.745-5.425 15.677 0.506995 22.995 0.506995C30.313 0.506995 36.245-5.425 36.245-12.743C36.245-20.061 30.313-25.993 22.995-25.993ZM52.745-12.743C52.745-5.425 58.677 0.506995 65.995 0.506995C73.313 0.506995 79.245-5.425 79.245-12.743C79.245-20.061 73.313-25.993 65.995-25.993C58.677-25.993 52.745-20.061 52.745-12.743Z"/> + </g> + <g id="Ultralight-S" transform="matrix(1 0 0 1 515.216 696)"> + <path d="M56.163-70.6485L68.271-38.8145L83.495-38.8145C84.116-38.8145 84.62-38.3105 84.62-37.6895C84.62-37.0675 84.116-36.5645 83.495-36.5645L5.495-36.5645C4.874-36.5645 4.37-37.0675 4.37-37.6895C4.37-38.3105 4.874-38.8145 5.495-38.8145L19.219-38.8145L31.327-70.6485C32.093-72.6625 34.279-73.7475 36.346-73.1395L43.745-70.9635L51.144-73.1395C53.211-73.7475 55.397-72.6625 56.163-70.6485ZM35.711-70.9815C34.772-71.2575 33.778-70.7645 33.43-69.8485L33.43-69.8485L21.626-38.8145L65.864-38.8145L54.06-69.8485C53.712-70.7645 52.718-71.2575 51.779-70.9815L51.779-70.9815L44.158-68.7395C44.02-68.6985 43.88-68.6865 43.744-68.6975C43.609-68.6865 43.47-68.6995 43.332-68.7395L43.332-68.7395ZM65.495-29.1895C74.608-29.1895 81.995-21.8015 81.995-12.6895C81.995-3.57652 74.608 3.81048 65.495 3.81048C56.853 3.81048 49.763-2.83252 49.053-11.2905C47.261-12.1245 45.702-12.5295 44.191-12.5625C42.554-12.5965 40.881-12.1955 38.937-11.2905C38.227-2.83252 31.137 3.81048 22.495 3.81048C13.382 3.81048 5.995-3.57652 5.995-12.6895C5.995-21.8015 13.382-29.1895 22.495-29.1895C31.25-29.1895 38.412-22.3705 38.961-13.7545C40.765-14.4825 42.483-14.8485 44.239-14.8115C45.828-14.7775 47.394-14.4145 49.029-13.7545C49.578-22.3705 56.74-29.1895 65.495-29.1895ZM22.495-26.9395C14.625-26.9395 8.245-20.5595 8.245-12.6895C8.245-4.81952 14.625 1.56048 22.495 1.56048C30.365 1.56048 36.745-4.81952 36.745-12.6895C36.745-20.5595 30.365-26.9395 22.495-26.9395ZM51.245-12.6895C51.245-4.81952 57.625 1.56048 65.495 1.56048C73.365 1.56048 79.745-4.81952 79.745-12.6895C79.745-20.5595 73.365-26.9395 65.495-26.9395C57.625-26.9395 51.245-20.5595 51.245-12.6895Z"/> + </g> + </g> +</svg>
diff --git a/ios/chrome/search_widget_extension/resources/quick_action_incognito_search.imageset/Contents.json b/ios/chrome/search_widget_extension/resources/quick_action_incognito_search.imageset/Contents.json deleted file mode 100644 index de95f7e..0000000 --- a/ios/chrome/search_widget_extension/resources/quick_action_incognito_search.imageset/Contents.json +++ /dev/null
@@ -1,23 +0,0 @@ -{ - "images": [ - { - "idiom": "universal", - "scale": "1x", - "filename": "quick_action_incognito_search.png" - }, - { - "idiom": "universal", - "scale": "2x", - "filename": "quick_action_incognito_search@2x.png" - }, - { - "idiom": "universal", - "scale": "3x", - "filename": "quick_action_incognito_search@3x.png" - } - ], - "info": { - "version": 1, - "author": "xcode" - } -}
diff --git a/ios/chrome/search_widget_extension/resources/quick_action_incognito_search.imageset/quick_action_incognito_search.png b/ios/chrome/search_widget_extension/resources/quick_action_incognito_search.imageset/quick_action_incognito_search.png deleted file mode 100644 index 728304b..0000000 --- a/ios/chrome/search_widget_extension/resources/quick_action_incognito_search.imageset/quick_action_incognito_search.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/search_widget_extension/resources/quick_action_incognito_search.imageset/quick_action_incognito_search@2x.png b/ios/chrome/search_widget_extension/resources/quick_action_incognito_search.imageset/quick_action_incognito_search@2x.png deleted file mode 100644 index d870e6b..0000000 --- a/ios/chrome/search_widget_extension/resources/quick_action_incognito_search.imageset/quick_action_incognito_search@2x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/search_widget_extension/resources/quick_action_incognito_search.imageset/quick_action_incognito_search@3x.png b/ios/chrome/search_widget_extension/resources/quick_action_incognito_search.imageset/quick_action_incognito_search@3x.png deleted file mode 100644 index 8be28b7..0000000 --- a/ios/chrome/search_widget_extension/resources/quick_action_incognito_search.imageset/quick_action_incognito_search@3x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/search_widget_extension/resources/quick_action_scan_qr_code.imageset/Contents.json b/ios/chrome/search_widget_extension/resources/quick_action_scan_qr_code.imageset/Contents.json deleted file mode 100644 index bbcaf37a..0000000 --- a/ios/chrome/search_widget_extension/resources/quick_action_scan_qr_code.imageset/Contents.json +++ /dev/null
@@ -1,23 +0,0 @@ -{ - "images": [ - { - "idiom": "universal", - "scale": "1x", - "filename": "quick_action_scan_qr_code.png" - }, - { - "idiom": "universal", - "scale": "2x", - "filename": "quick_action_scan_qr_code@2x.png" - }, - { - "idiom": "universal", - "scale": "3x", - "filename": "quick_action_scan_qr_code@3x.png" - } - ], - "info": { - "version": 1, - "author": "xcode" - } -}
diff --git a/ios/chrome/search_widget_extension/resources/quick_action_scan_qr_code.imageset/quick_action_scan_qr_code.png b/ios/chrome/search_widget_extension/resources/quick_action_scan_qr_code.imageset/quick_action_scan_qr_code.png deleted file mode 100644 index 0ab6962..0000000 --- a/ios/chrome/search_widget_extension/resources/quick_action_scan_qr_code.imageset/quick_action_scan_qr_code.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/search_widget_extension/resources/quick_action_scan_qr_code.imageset/quick_action_scan_qr_code@2x.png b/ios/chrome/search_widget_extension/resources/quick_action_scan_qr_code.imageset/quick_action_scan_qr_code@2x.png deleted file mode 100644 index efd5544..0000000 --- a/ios/chrome/search_widget_extension/resources/quick_action_scan_qr_code.imageset/quick_action_scan_qr_code@2x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/search_widget_extension/resources/quick_action_scan_qr_code.imageset/quick_action_scan_qr_code@3x.png b/ios/chrome/search_widget_extension/resources/quick_action_scan_qr_code.imageset/quick_action_scan_qr_code@3x.png deleted file mode 100644 index f4998f32..0000000 --- a/ios/chrome/search_widget_extension/resources/quick_action_scan_qr_code.imageset/quick_action_scan_qr_code@3x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/search_widget_extension/resources/quick_action_search.imageset/Contents.json b/ios/chrome/search_widget_extension/resources/quick_action_search.imageset/Contents.json deleted file mode 100644 index 51b8e27..0000000 --- a/ios/chrome/search_widget_extension/resources/quick_action_search.imageset/Contents.json +++ /dev/null
@@ -1,23 +0,0 @@ -{ - "images": [ - { - "idiom": "universal", - "scale": "1x", - "filename": "quick_action_search.png" - }, - { - "idiom": "universal", - "scale": "2x", - "filename": "quick_action_search@2x.png" - }, - { - "idiom": "universal", - "scale": "3x", - "filename": "quick_action_search@3x.png" - } - ], - "info": { - "version": 1, - "author": "xcode" - } -}
diff --git a/ios/chrome/search_widget_extension/resources/quick_action_search.imageset/quick_action_search.png b/ios/chrome/search_widget_extension/resources/quick_action_search.imageset/quick_action_search.png deleted file mode 100644 index 572dbbc..0000000 --- a/ios/chrome/search_widget_extension/resources/quick_action_search.imageset/quick_action_search.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/search_widget_extension/resources/quick_action_search.imageset/quick_action_search@2x.png b/ios/chrome/search_widget_extension/resources/quick_action_search.imageset/quick_action_search@2x.png deleted file mode 100644 index e5371f0..0000000 --- a/ios/chrome/search_widget_extension/resources/quick_action_search.imageset/quick_action_search@2x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/search_widget_extension/resources/quick_action_search.imageset/quick_action_search@3x.png b/ios/chrome/search_widget_extension/resources/quick_action_search.imageset/quick_action_search@3x.png deleted file mode 100644 index f579629..0000000 --- a/ios/chrome/search_widget_extension/resources/quick_action_search.imageset/quick_action_search@3x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/search_widget_extension/resources/quick_action_voice_search.imageset/Contents.json b/ios/chrome/search_widget_extension/resources/quick_action_voice_search.imageset/Contents.json deleted file mode 100644 index cce704b..0000000 --- a/ios/chrome/search_widget_extension/resources/quick_action_voice_search.imageset/Contents.json +++ /dev/null
@@ -1,23 +0,0 @@ -{ - "images": [ - { - "idiom": "universal", - "scale": "1x", - "filename": "quick_action_voice_search.png" - }, - { - "idiom": "universal", - "scale": "2x", - "filename": "quick_action_voice_search@2x.png" - }, - { - "idiom": "universal", - "scale": "3x", - "filename": "quick_action_voice_search@3x.png" - } - ], - "info": { - "version": 1, - "author": "xcode" - } -}
diff --git a/ios/chrome/search_widget_extension/resources/quick_action_voice_search.imageset/quick_action_voice_search.png b/ios/chrome/search_widget_extension/resources/quick_action_voice_search.imageset/quick_action_voice_search.png deleted file mode 100644 index 065f9e9..0000000 --- a/ios/chrome/search_widget_extension/resources/quick_action_voice_search.imageset/quick_action_voice_search.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/search_widget_extension/resources/quick_action_voice_search.imageset/quick_action_voice_search@2x.png b/ios/chrome/search_widget_extension/resources/quick_action_voice_search.imageset/quick_action_voice_search@2x.png deleted file mode 100644 index d9ff187..0000000 --- a/ios/chrome/search_widget_extension/resources/quick_action_voice_search.imageset/quick_action_voice_search@2x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/search_widget_extension/resources/quick_action_voice_search.imageset/quick_action_voice_search@3x.png b/ios/chrome/search_widget_extension/resources/quick_action_voice_search.imageset/quick_action_voice_search@3x.png deleted file mode 100644 index a2449fe..0000000 --- a/ios/chrome/search_widget_extension/resources/quick_action_voice_search.imageset/quick_action_voice_search@3x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/search_widget_extension/search_action_view.h b/ios/chrome/search_widget_extension/search_action_view.h index 09c2a1d..4201a099 100644 --- a/ios/chrome/search_widget_extension/search_action_view.h +++ b/ios/chrome/search_widget_extension/search_action_view.h
@@ -19,8 +19,7 @@ - (instancetype)initWithActionTarget:(id)target actionSelector:(SEL)actionSelector title:(NSString*)title - imageName:(NSString*)imageName - NS_DESIGNATED_INITIALIZER; + symbol:(UIImage*)symbol NS_DESIGNATED_INITIALIZER; - (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE; - (instancetype)initWithCoder:(NSCoder*)aDecoder NS_UNAVAILABLE;
diff --git a/ios/chrome/search_widget_extension/search_action_view.mm b/ios/chrome/search_widget_extension/search_action_view.mm index c507999..eb36a34e 100644 --- a/ios/chrome/search_widget_extension/search_action_view.mm +++ b/ios/chrome/search_widget_extension/search_action_view.mm
@@ -26,7 +26,7 @@ - (instancetype)initWithActionTarget:(id)target actionSelector:(SEL)actionSelector title:(NSString*)title - imageName:(NSString*)imageName { + symbol:(UIImage*)symbol { DCHECK(target); self = [super initWithFrame:CGRectZero]; if (self) { @@ -90,10 +90,9 @@ [self addSubview:stack]; AddSameConstraints(self, stack); - UIImage* iconImage = [UIImage imageNamed:imageName]; - iconImage = - [iconImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; - UIImageView* icon = [[UIImageView alloc] initWithImage:iconImage]; + symbol = [symbol imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + UIImageView* icon = [[UIImageView alloc] initWithImage:symbol]; + icon.contentMode = UIViewContentModeCenter; icon.translatesAutoresizingMaskIntoConstraints = NO; [primaryEffectView.contentView addSubview:icon]; AddSameConstraints(primaryEffectView.contentView, icon);
diff --git a/ios/chrome/search_widget_extension/search_widget_view.mm b/ios/chrome/search_widget_extension/search_widget_view.mm index afcb75a..338f8dc5 100644 --- a/ios/chrome/search_widget_extension/search_widget_view.mm +++ b/ios/chrome/search_widget_extension/search_widget_view.mm
@@ -16,6 +16,20 @@ const CGFloat kMaxContentSize = 421; +UIImage* CreateSymbol(NSString* symbol_name, bool system_symbol) { + UIImageConfiguration* configuration = [UIImageSymbolConfiguration + configurationWithPointSize:24 + weight:UIImageSymbolWeightMedium + scale:UIImageSymbolScaleMedium]; + if (system_symbol) { + return [UIImage systemImageNamed:symbol_name + withConfiguration:configuration]; + } + return [UIImage imageNamed:symbol_name + inBundle:nil + withConfiguration:configuration]; +} + } // namespace @interface SearchWidgetView () @@ -138,25 +152,25 @@ actionSelector:@selector(openSearch:) title:NSLocalizedString(@"IDS_IOS_NEW_SEARCH", @"New Search") - imageName:@"quick_action_search"], + symbol:CreateSymbol(@"magnifyingglass", YES)], [[SearchActionView alloc] initWithActionTarget:self.target actionSelector:@selector(openIncognito:) title:NSLocalizedString(@"IDS_IOS_INCOGNITO_SEARCH", @"Incognito Search") - imageName:@"quick_action_incognito_search"], + symbol:CreateSymbol(@"quick_action_incognito", NO)], [[SearchActionView alloc] initWithActionTarget:self.target actionSelector:@selector(openVoice:) title:NSLocalizedString(@"IDS_IOS_VOICE_SEARCH", @"Voice Search") - imageName:@"quick_action_voice_search"], + symbol:CreateSymbol(@"mic", YES)], [[SearchActionView alloc] initWithActionTarget:self.target actionSelector:@selector(openQRCode:) title:NSLocalizedString(@"IDS_IOS_SCAN_QR_CODE", @"Scan QR Code") - imageName:@"quick_action_scan_qr_code"], + symbol:CreateSymbol(@"qrcode", YES)], ]]; actionsContentStack.axis = UILayoutConstraintAxisHorizontal;
diff --git a/ios/chrome/widget_kit_extension/BUILD.gn b/ios/chrome/widget_kit_extension/BUILD.gn index ebd0ba90..84625245 100644 --- a/ios/chrome/widget_kit_extension/BUILD.gn +++ b/ios/chrome/widget_kit_extension/BUILD.gn
@@ -64,6 +64,7 @@ "resources:lockscreen_game_logo", "resources:lockscreen_incognito_logo", "resources:lockscreen_voicesearch_logo", + "resources:widget_actions_icon_color", "resources:widget_actions_row_background_color", "resources:widget_background_color", "resources:widget_chrome_logo", @@ -71,11 +72,9 @@ "resources:widget_dino_background_placeholder", "resources:widget_incognito_icon", "resources:widget_lens_icon", - "resources:widget_qr_icon", "resources:widget_search_bar_color", "resources:widget_separator_color", "resources:widget_text_color", - "resources:widget_voice_search_icon", "//ios/chrome/common/app_group:helper", ]
diff --git a/ios/chrome/widget_kit_extension/quick_actions_widget.swift b/ios/chrome/widget_kit_extension/quick_actions_widget.swift index 6ca6ff9..9bca4ec 100644 --- a/ios/chrome/widget_kit_extension/quick_actions_widget.swift +++ b/ios/chrome/widget_kit_extension/quick_actions_widget.swift
@@ -85,6 +85,13 @@ private let qrA11yLabel: LocalizedStringKey = "IDS_IOS_WIDGET_KIT_EXTENSION_QUICK_ACTIONS_QR_SCAN_A11Y_LABEL" + func symbolWithName(symbolName: String, system: Bool) -> some View { + let image = system ? Image(systemName: symbolName) : Image(symbolName) + return image.foregroundColor(Color("widget_actions_icon_color")).font( + .system(size: 20, weight: .medium) + ).imageScale(.medium) + } + var body: some View { VStack(spacing: 0) { ZStack { @@ -133,7 +140,7 @@ // the custom placeholder otherwise. if redactionReasons.isEmpty { Link(destination: WidgetConstants.QuickActionsWidget.incognitoUrl) { - Image("widget_incognito_icon") + symbolWithName(symbolName: "widget_incognito_icon", system: false) .frame(minWidth: 0, maxWidth: .infinity) } .accessibility(label: Text(incognitoA11yLabel)) @@ -141,20 +148,20 @@ Link( destination: WidgetConstants.QuickActionsWidget.voiceSearchUrl ) { - Image("widget_voice_search_icon") + symbolWithName(symbolName: "mic", system: true) .frame(minWidth: 0, maxWidth: .infinity) } .accessibility(label: Text(voiceSearchA11yLabel)) Separator(height: separatorHeight) if entry.useLens { Link(destination: WidgetConstants.QuickActionsWidget.lensUrl) { - Image("widget_lens_icon") + symbolWithName(symbolName: "widget_lens_icon", system: false) .frame(minWidth: 0, maxWidth: .infinity) } .accessibility(label: Text(lensA11yLabel)) } else { Link(destination: WidgetConstants.QuickActionsWidget.qrCodeUrl) { - Image("widget_qr_icon") + symbolWithName(symbolName: "qrcode", system: true) .frame(minWidth: 0, maxWidth: .infinity) } .accessibility(label: Text(qrA11yLabel))
diff --git a/ios/chrome/widget_kit_extension/resources/BUILD.gn b/ios/chrome/widget_kit_extension/resources/BUILD.gn index 93e8353..6514554 100644 --- a/ios/chrome/widget_kit_extension/resources/BUILD.gn +++ b/ios/chrome/widget_kit_extension/resources/BUILD.gn
@@ -73,51 +73,17 @@ ] } -imageset("widget_incognito_icon") { +symbolset("widget_incognito_icon") { sources = [ - "widget_incognito_icon.imageset/Contents.json", - "widget_incognito_icon.imageset/widget_incognito_icon_dark.png", - "widget_incognito_icon.imageset/widget_incognito_icon_dark@2x.png", - "widget_incognito_icon.imageset/widget_incognito_icon_dark@3x.png", - "widget_incognito_icon.imageset/widget_incognito_icon_light.png", - "widget_incognito_icon.imageset/widget_incognito_icon_light@2x.png", - "widget_incognito_icon.imageset/widget_incognito_icon_light@3x.png", + "widget_incognito_icon.symbolset/Contents.json", + "widget_incognito_icon.symbolset/incognito.cr.svg", ] } -imageset("widget_qr_icon") { +symbolset("widget_lens_icon") { sources = [ - "widget_qr_icon.imageset/Contents.json", - "widget_qr_icon.imageset/widget_qr_icon_dark.png", - "widget_qr_icon.imageset/widget_qr_icon_dark@2x.png", - "widget_qr_icon.imageset/widget_qr_icon_dark@3x.png", - "widget_qr_icon.imageset/widget_qr_icon_light.png", - "widget_qr_icon.imageset/widget_qr_icon_light@2x.png", - "widget_qr_icon.imageset/widget_qr_icon_light@3x.png", - ] -} - -imageset("widget_lens_icon") { - sources = [ - "widget_lens_icon.imageset/Contents.json", - "widget_lens_icon.imageset/widget_lens_icon_dark.png", - "widget_lens_icon.imageset/widget_lens_icon_dark@2x.png", - "widget_lens_icon.imageset/widget_lens_icon_dark@3x.png", - "widget_lens_icon.imageset/widget_lens_icon_light.png", - "widget_lens_icon.imageset/widget_lens_icon_light@2x.png", - "widget_lens_icon.imageset/widget_lens_icon_light@3x.png", - ] -} - -imageset("widget_voice_search_icon") { - sources = [ - "widget_voice_search_icon.imageset/Contents.json", - "widget_voice_search_icon.imageset/widget_voice_search_icon_dark.png", - "widget_voice_search_icon.imageset/widget_voice_search_icon_dark@2x.png", - "widget_voice_search_icon.imageset/widget_voice_search_icon_dark@3x.png", - "widget_voice_search_icon.imageset/widget_voice_search_icon_light.png", - "widget_voice_search_icon.imageset/widget_voice_search_icon_light@2x.png", - "widget_voice_search_icon.imageset/widget_voice_search_icon_light@3x.png", + "widget_lens_icon.symbolset/Contents.json", + "widget_lens_icon.symbolset/lens.cr.svg", ] } @@ -125,6 +91,10 @@ sources = [ "widget_actions_row_background_color.colorset/Contents.json" ] } +colorset("widget_actions_icon_color") { + sources = [ "widget_actions_icon_color.colorset/Contents.json" ] +} + colorset("widget_search_bar_color") { sources = [ "widget_search_bar_color.colorset/Contents.json" ] }
diff --git a/ios/chrome/widget_kit_extension/resources/widget_actions_icon_color.colorset/Contents.json b/ios/chrome/widget_kit_extension/resources/widget_actions_icon_color.colorset/Contents.json new file mode 100644 index 0000000..cf58c40 --- /dev/null +++ b/ios/chrome/widget_kit_extension/resources/widget_actions_icon_color.colorset/Contents.json
@@ -0,0 +1,38 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + }, + "colors" : [ + { + "idiom" : "universal", + "color" : { + "color-space" : "display-p3", + "components" : { + "alpha" : "1.000", + "red" : "0x5F", + "green" : "0x63", + "blue" : "0x68" + } + } + }, + { + "idiom" : "universal", + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "display-p3", + "components" : { + "alpha" : "1.000", + "red" : "0xE8", + "green" : "0xEA", + "blue" : "0xED" + } + } + } + ] +}
diff --git a/ios/chrome/widget_kit_extension/resources/widget_actions_row_background_color.colorset/Contents.json b/ios/chrome/widget_kit_extension/resources/widget_actions_row_background_color.colorset/Contents.json index 2e893ed..a2a140b 100644 --- a/ios/chrome/widget_kit_extension/resources/widget_actions_row_background_color.colorset/Contents.json +++ b/ios/chrome/widget_kit_extension/resources/widget_actions_row_background_color.colorset/Contents.json
@@ -5,27 +5,9 @@ "color-space" : "display-p3", "components" : { "alpha" : "1.000", - "red" : "0.974", - "green" : "0.976", - "blue" : "0.980" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "light" - } - ], - "color" : { - "color-space" : "display-p3", - "components" : { - "alpha" : "1.000", - "red" : "0.974", - "green" : "0.976", - "blue" : "0.980" + "red" : "0xF8", + "green" : "0xF9", + "blue" : "0xFA" } }, "idiom" : "universal" @@ -41,9 +23,9 @@ "color-space" : "display-p3", "components" : { "alpha" : "1.000", - "red" : "0.238", - "green" : "0.250", - "blue" : "0.262" + "red" : "0x3C", + "green" : "0x40", + "blue" : "0x43" } }, "idiom" : "universal"
diff --git a/ios/chrome/widget_kit_extension/resources/widget_background_color.colorset/Contents.json b/ios/chrome/widget_kit_extension/resources/widget_background_color.colorset/Contents.json index 6f8752c..3323845c 100644 --- a/ios/chrome/widget_kit_extension/resources/widget_background_color.colorset/Contents.json +++ b/ios/chrome/widget_kit_extension/resources/widget_background_color.colorset/Contents.json
@@ -5,27 +5,9 @@ "color-space" : "display-p3", "components" : { "alpha" : "1.000", - "red" : "1.000", - "green" : "1.000", - "blue" : "1.000" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "light" - } - ], - "color" : { - "color-space" : "display-p3", - "components" : { - "alpha" : "1.000", - "red" : "1.000", - "green" : "1.000", - "blue" : "1.000" + "red" : "0xFF", + "green" : "0xFF", + "blue" : "0xFF" } }, "idiom" : "universal" @@ -41,9 +23,9 @@ "color-space" : "display-p3", "components" : { "alpha" : "1.000", - "red" : "0.126", - "green" : "0.129", - "blue" : "0.140" + "red" : "0x20", + "green" : "0x21", + "blue" : "0x24" } }, "idiom" : "universal"
diff --git a/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.imageset/Contents.json b/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.imageset/Contents.json deleted file mode 100644 index b48086a3..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.imageset/Contents.json +++ /dev/null
@@ -1,56 +0,0 @@ -{ - "images" : [ - { - "filename" : "widget_incognito_icon_light.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "filename" : "widget_incognito_icon_dark.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "widget_incognito_icon_light@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "filename" : "widget_incognito_icon_dark@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "widget_incognito_icon_light@3x.png", - "idiom" : "universal", - "scale" : "3x" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "filename" : "widget_incognito_icon_dark@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -}
diff --git a/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.imageset/widget_incognito_icon_dark.png b/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.imageset/widget_incognito_icon_dark.png deleted file mode 100644 index 1c36903..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.imageset/widget_incognito_icon_dark.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.imageset/widget_incognito_icon_dark@2x.png b/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.imageset/widget_incognito_icon_dark@2x.png deleted file mode 100644 index 784e7c1d..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.imageset/widget_incognito_icon_dark@2x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.imageset/widget_incognito_icon_dark@3x.png b/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.imageset/widget_incognito_icon_dark@3x.png deleted file mode 100644 index 1ad7ca8..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.imageset/widget_incognito_icon_dark@3x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.imageset/widget_incognito_icon_light.png b/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.imageset/widget_incognito_icon_light.png deleted file mode 100644 index e5e2686..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.imageset/widget_incognito_icon_light.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.imageset/widget_incognito_icon_light@2x.png b/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.imageset/widget_incognito_icon_light@2x.png deleted file mode 100644 index 2fe0aecb..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.imageset/widget_incognito_icon_light@2x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.imageset/widget_incognito_icon_light@3x.png b/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.imageset/widget_incognito_icon_light@3x.png deleted file mode 100644 index 21b60a8c..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.imageset/widget_incognito_icon_light@3x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.symbolset/Contents.json b/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.symbolset/Contents.json new file mode 100644 index 0000000..364cdbd --- /dev/null +++ b/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.symbolset/Contents.json
@@ -0,0 +1,12 @@ +{ + "info": { + "author": "xcode", + "version": 1 + }, + "symbols": [ + { + "filename": "incognito.cr.svg", + "idiom": "universal" + } + ] +}
diff --git a/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.symbolset/incognito.cr.svg b/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.symbolset/incognito.cr.svg new file mode 100644 index 0000000..e0d48b6 --- /dev/null +++ b/ios/chrome/widget_kit_extension/resources/widget_incognito_icon.symbolset/incognito.cr.svg
@@ -0,0 +1,161 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--Generator: Apple Native CoreSVG 149--> +<!DOCTYPE svg +PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="3300" height="2200"> + <!--glyph: "", point size: 100.0, font version: "17.0d8e1", template writer version: "58"--> + <g id="Notes"> + <rect height="2200" id="artboard" style="fill:white;opacity:1" width="3300" x="0" y="0"/> + <line style="fill:none;stroke:black;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="292" y2="292"/> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;font-weight:bold;" transform="matrix(1 0 0 1 263 322)">Weight/Scale Variations</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 559.711 322)">Ultralight</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 856.422 322)">Thin</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 1153.13 322)">Light</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 1449.84 322)">Regular</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 1746.56 322)">Medium</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 2043.27 322)">Semibold</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 2339.98 322)">Bold</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 2636.69 322)">Heavy</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:middle;" transform="matrix(1 0 0 1 2933.4 322)">Black</text> + <line style="fill:none;stroke:black;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="1903" y2="1903"/> + <g transform="matrix(1 0 0 1 263 1933)"> + <path d="M9.24805 0.830078Q10.8691 0.830078 12.2949 0.214844Q13.7207-0.400391 14.8096-1.49414Q15.8984-2.58789 16.5186-4.01367Q17.1387-5.43945 17.1387-7.05078Q17.1387-8.66211 16.5186-10.0879Q15.8984-11.5137 14.8047-12.6074Q13.7109-13.7012 12.2852-14.3164Q10.8594-14.9316 9.23828-14.9316Q7.62695-14.9316 6.20117-14.3164Q4.77539-13.7012 3.69141-12.6074Q2.60742-11.5137 1.9873-10.0879Q1.36719-8.66211 1.36719-7.05078Q1.36719-5.43945 1.9873-4.01367Q2.60742-2.58789 3.69629-1.49414Q4.78516-0.400391 6.21094 0.214844Q7.63672 0.830078 9.24805 0.830078ZM9.24805-0.654297Q7.91992-0.654297 6.7627-1.14746Q5.60547-1.64062 4.73145-2.51953Q3.85742-3.39844 3.36426-4.56055Q2.87109-5.72266 2.87109-7.05078Q2.87109-8.37891 3.35938-9.54102Q3.84766-10.7031 4.72168-11.582Q5.5957-12.4609 6.75293-12.9541Q7.91016-13.4473 9.23828-13.4473Q10.5762-13.4473 11.7334-12.9541Q12.8906-12.4609 13.7695-11.582Q14.6484-10.7031 15.1465-9.54102Q15.6445-8.37891 15.6445-7.05078Q15.6445-5.72266 15.1514-4.56055Q14.6582-3.39844 13.7842-2.51953Q12.9102-1.64062 11.748-1.14746Q10.5859-0.654297 9.24805-0.654297ZM5.83984-7.04102Q5.83984-6.71875 6.04492-6.51855Q6.25-6.31836 6.5918-6.31836L8.50586-6.31836L8.50586-4.39453Q8.50586-4.0625 8.70605-3.85742Q8.90625-3.65234 9.22852-3.65234Q9.56055-3.65234 9.76562-3.85742Q9.9707-4.0625 9.9707-4.39453L9.9707-6.31836L11.8945-6.31836Q12.2266-6.31836 12.4316-6.51855Q12.6367-6.71875 12.6367-7.04102Q12.6367-7.37305 12.4316-7.57812Q12.2266-7.7832 11.8945-7.7832L9.9707-7.7832L9.9707-9.69727Q9.9707-10.0391 9.76562-10.2441Q9.56055-10.4492 9.22852-10.4492Q8.90625-10.4492 8.70605-10.2441Q8.50586-10.0391 8.50586-9.69727L8.50586-7.7832L6.5918-7.7832Q6.25-7.7832 6.04492-7.57812Q5.83984-7.37305 5.83984-7.04102Z"/> + </g> + <g transform="matrix(1 0 0 1 281.867 1933)"> + <path d="M11.709 2.91016Q13.75 2.91016 15.5518 2.12891Q17.3535 1.34766 18.7305-0.0292969Q20.1074-1.40625 20.8887-3.20801Q21.6699-5.00977 21.6699-7.05078Q21.6699-9.0918 20.8887-10.8936Q20.1074-12.6953 18.7305-14.0723Q17.3535-15.4492 15.5469-16.2305Q13.7402-17.0117 11.6992-17.0117Q9.6582-17.0117 7.85645-16.2305Q6.05469-15.4492 4.68262-14.0723Q3.31055-12.6953 2.5293-10.8936Q1.74805-9.0918 1.74805-7.05078Q1.74805-5.00977 2.5293-3.20801Q3.31055-1.40625 4.6875-0.0292969Q6.06445 1.34766 7.86621 2.12891Q9.66797 2.91016 11.709 2.91016ZM11.709 1.25Q9.98047 1.25 8.47656 0.605469Q6.97266-0.0390625 5.83496-1.17676Q4.69727-2.31445 4.05762-3.81836Q3.41797-5.32227 3.41797-7.05078Q3.41797-8.7793 4.05762-10.2832Q4.69727-11.7871 5.83008-12.9297Q6.96289-14.0723 8.4668-14.7119Q9.9707-15.3516 11.6992-15.3516Q13.4277-15.3516 14.9316-14.7119Q16.4355-14.0723 17.5781-12.9297Q18.7207-11.7871 19.3652-10.2832Q20.0098-8.7793 20.0098-7.05078Q20.0098-5.32227 19.3701-3.81836Q18.7305-2.31445 17.5928-1.17676Q16.4551-0.0390625 14.9463 0.605469Q13.4375 1.25 11.709 1.25ZM7.39258-7.04102Q7.39258-6.68945 7.62695-6.46484Q7.86133-6.24023 8.23242-6.24023L10.8789-6.24023L10.8789-3.57422Q10.8789-3.21289 11.1035-2.9834Q11.3281-2.75391 11.6797-2.75391Q12.0508-2.75391 12.2852-2.9834Q12.5195-3.21289 12.5195-3.57422L12.5195-6.24023L15.1758-6.24023Q15.5371-6.24023 15.7715-6.46484Q16.0059-6.68945 16.0059-7.04102Q16.0059-7.41211 15.7715-7.6416Q15.5371-7.87109 15.1758-7.87109L12.5195-7.87109L12.5195-10.5176Q12.5195-10.8984 12.2852-11.1279Q12.0508-11.3574 11.6797-11.3574Q11.3281-11.3574 11.1035-11.1279Q10.8789-10.8984 10.8789-10.5176L10.8789-7.87109L8.23242-7.87109Q7.85156-7.87109 7.62207-7.6416Q7.39258-7.41211 7.39258-7.04102Z"/> + </g> + <g transform="matrix(1 0 0 1 305.646 1933)"> + <path d="M14.9707 5.66406Q17.0605 5.66406 18.96 5.01465Q20.8594 4.36523 22.4512 3.19336Q24.043 2.02148 25.2197 0.429688Q26.3965-1.16211 27.0459-3.06641Q27.6953-4.9707 27.6953-7.05078Q27.6953-9.14062 27.0459-11.04Q26.3965-12.9395 25.2197-14.5312Q24.043-16.123 22.4512-17.2998Q20.8594-18.4766 18.9551-19.126Q17.0508-19.7754 14.9609-19.7754Q12.8711-19.7754 10.9717-19.126Q9.07227-18.4766 7.48535-17.2998Q5.89844-16.123 4.72168-14.5312Q3.54492-12.9395 2.90039-11.04Q2.25586-9.14062 2.25586-7.05078Q2.25586-4.9707 2.90527-3.06641Q3.55469-1.16211 4.72656 0.429688Q5.89844 2.02148 7.49023 3.19336Q9.08203 4.36523 10.9814 5.01465Q12.8809 5.66406 14.9707 5.66406ZM14.9707 3.84766Q13.1641 3.84766 11.5283 3.2959Q9.89258 2.74414 8.53516 1.74805Q7.17773 0.751953 6.17676-0.610352Q5.17578-1.97266 4.62891-3.6084Q4.08203-5.24414 4.08203-7.05078Q4.08203-8.86719 4.62891-10.5029Q5.17578-12.1387 6.17188-13.501Q7.16797-14.8633 8.52539-15.8594Q9.88281-16.8555 11.5186-17.4023Q13.1543-17.9492 14.9609-17.9492Q16.7773-17.9492 18.4131-17.4023Q20.0488-16.8555 21.4111-15.8594Q22.7734-14.8633 23.7695-13.501Q24.7656-12.1387 25.3174-10.5029Q25.8691-8.86719 25.8691-7.05078Q25.8789-5.24414 25.332-3.6084Q24.7852-1.97266 23.7842-0.610352Q22.7832 0.751953 21.4209 1.74805Q20.0586 2.74414 18.4229 3.2959Q16.7871 3.84766 14.9707 3.84766ZM9.45312-7.04102Q9.45312-6.66016 9.71191-6.41113Q9.9707-6.16211 10.3711-6.16211L14.0625-6.16211L14.0625-2.46094Q14.0625-2.06055 14.3115-1.80664Q14.5605-1.55273 14.9414-1.55273Q15.3516-1.55273 15.6055-1.80664Q15.8594-2.06055 15.8594-2.46094L15.8594-6.16211L19.5605-6.16211Q19.9609-6.16211 20.2148-6.41113Q20.4688-6.66016 20.4688-7.04102Q20.4688-7.45117 20.2148-7.70508Q19.9609-7.95898 19.5605-7.95898L15.8594-7.95898L15.8594-11.6504Q15.8594-12.0605 15.6055-12.3145Q15.3516-12.5684 14.9414-12.5684Q14.5605-12.5684 14.3115-12.3096Q14.0625-12.0508 14.0625-11.6504L14.0625-7.95898L10.3711-7.95898Q9.96094-7.95898 9.70703-7.70508Q9.45312-7.45117 9.45312-7.04102Z"/> + </g> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;font-weight:bold;" transform="matrix(1 0 0 1 263 1953)">Design Variations</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 263 1971)">Symbols are supported in up to nine weights and three scales.</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 263 1989)">For optimal layout with text and other symbols, vertically align</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 263 2007)">symbols with the adjacent text.</text> + <line style="fill:none;stroke:#00AEEF;stroke-width:0.5;opacity:1.0;" x1="776" x2="776" y1="1919" y2="1933"/> + <g transform="matrix(1 0 0 1 776 1933)"> + <path d="M3.31055 0.15625Q3.70117 0.15625 3.91602-0.00976562Q4.13086-0.175781 4.26758-0.585938L5.52734-4.0332L11.2891-4.0332L12.5488-0.585938Q12.6855-0.175781 12.9004-0.00976562Q13.1152 0.15625 13.4961 0.15625Q13.8867 0.15625 14.1162-0.0585938Q14.3457-0.273438 14.3457-0.644531Q14.3457-0.869141 14.2383-1.17188L9.6582-13.3691Q9.48242-13.8184 9.17969-14.043Q8.87695-14.2676 8.4082-14.2676Q7.5-14.2676 7.17773-13.3789L2.59766-1.16211Q2.49023-0.859375 2.49023-0.634766Q2.49023-0.263672 2.70996-0.0537109Q2.92969 0.15625 3.31055 0.15625ZM6.00586-5.51758L8.37891-12.0898L8.42773-12.0898L10.8008-5.51758Z"/> + </g> + <line style="fill:none;stroke:#00AEEF;stroke-width:0.5;opacity:1.0;" x1="793.197" x2="793.197" y1="1919" y2="1933"/> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;font-weight:bold;" transform="matrix(1 0 0 1 776 1953)">Margins</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 776 1971)">Leading and trailing margins on the left and right side of each symbol</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 776 1989)">can be adjusted by modifying the x-location of the margin guidelines.</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 776 2007)">Modifications are automatically applied proportionally to all</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 776 2025)">scales and weights.</text> + <g transform="matrix(1 0 0 1 1289 1933)"> + <path d="M2.8418 1.86523L4.54102 3.57422Q5.18555 4.22852 5.90332 4.17969Q6.62109 4.13086 7.31445 3.35938L18.0078-8.42773L17.041-9.4043L6.42578 2.27539Q6.16211 2.57812 5.89355 2.61719Q5.625 2.65625 5.27344 2.30469L4.10156 1.14258Q3.75 0.791016 3.79395 0.522461Q3.83789 0.253906 4.14062-0.0195312L15.6152-10.8203L14.6387-11.7871L3.04688-0.898438Q2.30469-0.214844 2.25098 0.498047Q2.19727 1.21094 2.8418 1.86523ZM9.25781-16.3281Q8.94531-16.0254 8.90625-15.6348Q8.86719-15.2441 9.04297-14.9512Q9.21875-14.6777 9.55566-14.541Q9.89258-14.4043 10.3809-14.5215Q11.4746-14.7754 12.5977-14.7314Q13.7207-14.6875 14.7949-13.9844L14.209-12.5293Q13.9551-11.9043 14.0674-11.4404Q14.1797-10.9766 14.5801-10.5664L16.875-8.25195Q17.2363-7.88086 17.5781-7.82227Q17.9199-7.76367 18.3398-7.8418L19.4043-8.03711L20.0684-7.36328L20.0293-6.80664Q20-6.43555 20.1221-6.12305Q20.2441-5.81055 20.6055-5.44922L21.3672-4.70703Q21.7285-4.3457 22.1533-4.33105Q22.5781-4.31641 22.9297-4.66797L25.8398-7.58789Q26.1914-7.93945 26.1816-8.35449Q26.1719-8.76953 25.8105-9.13086L25.0391-9.89258Q24.6875-10.2539 24.3799-10.3857Q24.0723-10.5176 23.7109-10.4883L23.1348-10.4395L22.4902-11.0742L22.7344-12.1973Q22.832-12.6172 22.6953-12.9834Q22.5586-13.3496 22.1191-13.7891L19.9219-15.9766Q18.6719-17.2168 17.2607-17.8369Q15.8496-18.457 14.4189-18.4814Q12.9883-18.5059 11.665-17.959Q10.3418-17.4121 9.25781-16.3281ZM10.752-15.957Q11.6602-16.6211 12.7002-16.9043Q13.7402-17.1875 14.8047-17.085Q15.8691-16.9824 16.8701-16.5137Q17.8711-16.0449 18.7012-15.2051L21.1328-12.793Q21.3086-12.6172 21.3525-12.4512Q21.3965-12.2852 21.3379-12.0312L21.0156-10.5469L22.5195-9.0625L23.5059-9.12109Q23.6914-9.13086 23.7891-9.09668Q23.8867-9.0625 24.0332-8.91602L24.6094-8.33984L22.168-5.89844L21.5918-6.47461Q21.4453-6.62109 21.4062-6.71875Q21.3672-6.81641 21.377-7.01172L21.4453-7.98828L19.9512-9.47266L18.4277-9.21875Q18.1836-9.16992 18.042-9.2041Q17.9004-9.23828 17.7148-9.41406L15.7129-11.416Q15.5176-11.5918 15.4932-11.7529Q15.4688-11.9141 15.5859-12.1875L16.4648-14.2773Q15.293-15.3711 13.8281-15.791Q12.3633-16.2109 10.8398-15.7617Q10.7227-15.7324 10.6885-15.8057Q10.6543-15.8789 10.752-15.957Z"/> + </g> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;font-weight:bold;" transform="matrix(1 0 0 1 1289 1953)">Exporting</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 1289 1971)">Symbols should be outlined when exporting to ensure the</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 1289 1989)">design is preserved when submitting to Xcode.</text> + <text id="template-version" style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:end;" transform="matrix(1 0 0 1 3036 1933)">Template v.2.0</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:end;" transform="matrix(1 0 0 1 3036 1951)">Requires Xcode 13 or greater</text> + <text id="descriptive-name" style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:end;" transform="matrix(1 0 0 1 3036 1969)">Generated from incognito.cr</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;text-anchor:end;" transform="matrix(1 0 0 1 3036 1987)">Typeset at 100 points</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 263 726)">Small</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 263 1156)">Medium</text> + <text style="stroke:none;fill:black;font-family:SF Pro,SF Pro Display,SF Pro Text,sans-serif;font-size:13;" transform="matrix(1 0 0 1 263 1586)">Large</text> + </g> + <g id="Guides"> + <g id="H-reference" style="fill:#27AAE1;stroke:none;" transform="matrix(1 0 0 1 339 696)"> + <path d="M0.993347 0L3.6377 0L29.3282-67.1326L30.0301-67.1326L30.0301-70.459L28.1227-70.459ZM11.6882-24.4797L46.9818-24.4797L46.2311-26.7288L12.4382-26.7288ZM55.1193 0L57.7637 0L30.6381-70.459L29.4327-70.459L29.4327-67.1326Z"/> + </g> + <line id="Baseline-S" style="fill:none;stroke:#27AAE1;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="696" y2="696"/> + <line id="Capline-S" style="fill:none;stroke:#27AAE1;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="625.541" y2="625.541"/> + <g id="H-reference" style="fill:#27AAE1;stroke:none;" transform="matrix(1 0 0 1 339 1126)"> + <path d="M0.993347 0L3.6377 0L29.3282-67.1326L30.0301-67.1326L30.0301-70.459L28.1227-70.459ZM11.6882-24.4797L46.9818-24.4797L46.2311-26.7288L12.4382-26.7288ZM55.1193 0L57.7637 0L30.6381-70.459L29.4327-70.459L29.4327-67.1326Z"/> + </g> + <line id="Baseline-M" style="fill:none;stroke:#27AAE1;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="1126" y2="1126"/> + <line id="Capline-M" style="fill:none;stroke:#27AAE1;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="1055.54" y2="1055.54"/> + <g id="H-reference" style="fill:#27AAE1;stroke:none;" transform="matrix(1 0 0 1 339 1556)"> + <path d="M0.993347 0L3.6377 0L29.3282-67.1326L30.0301-67.1326L30.0301-70.459L28.1227-70.459ZM11.6882-24.4797L46.9818-24.4797L46.2311-26.7288L12.4382-26.7288ZM55.1193 0L57.7637 0L30.6381-70.459L29.4327-70.459L29.4327-67.1326Z"/> + </g> + <line id="Baseline-L" style="fill:none;stroke:#27AAE1;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="1556" y2="1556"/> + <line id="Capline-L" style="fill:none;stroke:#27AAE1;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="1485.54" y2="1485.54"/> + <line id="left-margin" style="fill:none;stroke:#00AEEF;stroke-width:0.5;opacity:1.0;" x1="1392.2" x2="1392.2" y1="1030.78" y2="1150.12"/> + <line id="right-margin" style="fill:none;stroke:#00AEEF;stroke-width:0.5;opacity:1.0;" x1="1507.49" x2="1507.49" y1="1030.78" y2="1150.12"/> + </g> + <g id="Symbols"> + <g id="Black-L" transform="matrix(1 0 0 1 2854.26 1556)"> + <path d="M104.61-103.582L124.54-54.2316L145.17-54.2316C150.01-54.2316 153.92-50.3116 153.92-45.4816C153.92-40.6416 150.01-36.7316 145.17-36.7316L13.12-36.7316C8.29-36.7316 4.37-40.6416 4.37-45.4816C4.37-50.3116 8.29-54.2316 13.12-54.2316L31.41-54.2316L51.15-103.552C53.34-109.262 59.56-112.332 65.43-110.602L77.88-106.942L90.34-110.612C96.19-112.332 102.4-109.282 104.61-103.582ZM90.2-92.3316L80.51-89.4716C79.63-89.2216 78.74-89.1016 77.87-89.1216L77.4997-89.1216C76.7561-89.1385 75.9957-89.2573 75.25-89.4716L75.25-89.4716L65.58-92.3216L50.16-54.2316L105.77-54.2316L90.2-92.3316ZM114.7-31.0816C130.12-31.0816 142.63-18.5816 142.63-3.15161C142.63 12.2784 130.12 24.7784 114.7 24.7784C102.85 24.7784 92.73 17.4084 88.67 6.99839C88.48 6.89839 88.29 6.79839 88.1 6.67839C83.18 3.64839 80.39 2.89839 78.3 2.89839C76.21 2.89839 73.42 3.64839 68.49 6.67839C68.31 6.78839 68.12 6.89839 67.93 6.99839C63.87 17.4084 53.75 24.7784 41.9 24.7784C26.47 24.7784 13.97 12.2784 13.97-3.15161C13.97-18.5816 26.47-31.0816 41.9-31.0816C53.98-31.0816 64.27-23.4116 68.17-12.6816C71.42-13.8916 74.76-14.6016 78.3-14.6016C81.83-14.6016 85.18-13.8916 88.43-12.6816C92.33-23.4116 102.62-31.0816 114.7-31.0816ZM41.9-13.5816C36.14-13.5816 31.47-8.91161 31.47-3.15161C31.47 2.60839 36.14 7.27839 41.9 7.27839C47.66 7.27839 52.33 2.60839 52.33-3.15161C52.33-8.91161 47.66-13.5816 41.9-13.5816ZM104.26-3.15161C104.26 2.60839 108.94 7.27839 114.7 7.27839C120.46 7.27839 125.13 2.60839 125.13-3.15161C125.13-8.91161 120.46-13.5816 114.7-13.5816C108.94-13.5816 104.26-8.91161 104.26-3.15161Z"/> + </g> + <g id="Heavy-L" transform="matrix(1 0 0 1 2558.54 1556)"> + <path d="M102.67-103.114L122.85-53.1139L144.17-53.1139C148.45-53.1139 151.92-49.6539 151.92-45.3639C151.92-41.0839 148.45-37.6139 144.17-37.6139L12.12-37.6139C7.84-37.6139 4.37-41.0839 4.37-45.3639C4.37-49.6539 7.84-53.1139 12.12-53.1139L31.1-53.1139L31.11-53.1439L51.08-103.084C53.09-108.314 58.77-111.114 64.15-109.534L76.88-105.794L89.62-109.544C94.98-111.114 100.65-108.324 102.67-103.114ZM89.8-93.4339L79.23-90.3239C78.44-90.0939 77.65-89.9939 76.87-90.0139C76.1-89.9939 75.31-90.0939 74.53-90.3239L74.53-90.3239L63.97-93.4339L47.7-53.1139L106.23-53.1139L89.8-93.4339ZM113.7-30.9739C129.12-30.9739 141.63-18.4739 141.63-3.04393C141.63 12.3861 129.12 24.8861 113.7 24.8861C101.78 24.8861 91.6 17.4261 87.59 6.91607C82.62 3.85607 79.65 3.00607 77.3 3.00607C74.95 3.00607 71.98 3.85607 67.01 6.91607C63 17.4261 52.82 24.8861 40.9 24.8861C25.47 24.8861 12.97 12.3861 12.97-3.04393C12.97-18.4739 25.47-30.9739 40.9-30.9739C53.66-30.9739 64.43-22.4139 67.77-10.7239C70.85-11.8439 73.99-12.4939 77.3-12.4939C80.6-12.4939 83.75-11.8439 86.83-10.7239C90.17-22.4139 100.93-30.9739 113.7-30.9739ZM40.9-15.4739C34.03-15.4739 28.47-9.91393 28.47-3.04393C28.47 3.82607 34.03 9.38607 40.9 9.38607C47.77 9.38607 53.33 3.82607 53.33-3.04393C53.33-9.91393 47.77-15.4739 40.9-15.4739ZM101.26-3.04393C101.26 3.82607 106.83 9.38607 113.7 9.38607C120.56 9.38607 126.13 3.82607 126.13-3.04393C126.13-9.91393 120.56-15.4739 113.7-15.4739C106.83-15.4739 101.26-9.91393 101.26-3.04393Z"/> + </g> + <g id="Bold-L" transform="matrix(1 0 0 1 2263.33 1556)"> + <path d="M62.22-107.952L75.38-104.082L88.54-107.952C93.15-109.302 98.04-106.902 99.78-102.422L119.98-52.3625C120.09-52.0625 120.18-51.7625 120.25-51.4725L142.67-51.4725C146.12-51.4725 148.92-48.6725 148.92-45.2225C148.92-41.7625 146.12-38.9725 142.67-38.9725L10.62-38.9725C7.17-38.9725 4.37-41.7625 4.37-45.2225C4.37-48.6725 7.17-51.4725 10.62-51.4725L30.72-51.4725C30.79-51.8025 30.88-52.1325 31.01-52.4625L50.98-102.392C52.71-106.892 57.6-109.312 62.22-107.952ZM89.2-95.1125L77.3-91.6125C76.66-91.4225 76.01-91.3425 75.38-91.3625C74.74-91.3425 74.09-91.4225 73.45-91.6125L73.45-91.6125L61.57-95.1125L44.02-51.4725L106.92-51.4725L89.2-95.1125ZM112.2-30.8225C127.62-30.8225 140.13-18.3225 140.13-2.89246C140.13 12.5375 127.62 25.0375 112.2 25.0375C99.47 25.0375 88.73 16.5275 85.36 4.88754C81.14 2.47754 78.27 1.65754 75.8 1.65754C73.33 1.65754 70.46 2.47754 66.24 4.88754C62.87 16.5275 52.13 25.0375 39.4 25.0375C23.97 25.0375 11.47 12.5375 11.47-2.89246C11.47-18.3225 23.97-30.8225 39.4-30.8225C52.69-30.8225 63.81-21.5425 66.64-9.11246C69.63-10.2125 72.65-10.8425 75.8-10.8425C78.95-10.8425 81.97-10.2125 84.96-9.11246C87.79-21.5425 98.91-30.8225 112.2-30.8225ZM39.4-18.3225C30.88-18.3225 23.97-11.4125 23.97-2.89246C23.97 5.62754 30.88 12.5375 39.4 12.5375C47.93 12.5375 54.83 5.62754 54.83-2.89246C54.83-11.4125 47.93-18.3225 39.4-18.3225ZM96.76-2.89246C96.76 5.62754 103.67 12.5375 112.2 12.5375C120.72 12.5375 127.63 5.62754 127.63-2.89246C127.63-11.4125 120.72-18.3225 112.2-18.3225C103.67-18.3225 96.76-11.4125 96.76-2.89246Z"/> + </g> + <g id="Semibold-L" transform="matrix(1 0 0 1 1967.37 1556)"> + <path d="M98.33-102.085L119.16-50.6452L141.92-50.6452C144.96-50.6452 147.42-48.1752 147.42-45.1452C147.42-42.1052 144.96-39.6452 141.92-39.6452L115.53-39.6452C115.44-39.6352 115.36-39.6352 115.27-39.6452L34.53-39.6452C34.44-39.6352 34.36-39.6352 34.27-39.6452L9.87-39.6452C6.84-39.6452 4.37-42.1052 4.37-45.1452C4.37-48.1752 6.84-50.6452 9.87-50.6452L30.61-50.6452L50.93-102.015C52.51-106.165 57.01-108.405 61.27-107.145L74.63-103.215L88.01-107.155C92.24-108.395 96.72-106.195 98.33-102.085ZM88.91-95.9552L76.34-92.2552C75.77-92.0852 75.19-92.0152 74.63-92.0352C74.06-92.0152 73.49-92.0852 72.92-92.2552L72.92-92.2552L60.39-95.9452L42.38-50.6452L107.35-50.6452L88.91-95.9552ZM111.45-30.7452C126.87-30.7452 139.38-18.2452 139.38-2.81522C139.38 12.6148 126.87 25.1148 111.45 25.1148C98.35 25.1148 87.36 16.1048 84.34 3.95478C80.4 1.77478 77.56 0.984776 75.05 0.984776C72.53 0.984776 69.7 1.77478 65.76 3.95478C62.74 16.1048 51.75 25.1148 38.65 25.1148C23.22 25.1148 10.72 12.6148 10.72-2.81522C10.72-18.2452 23.22-30.7452 38.65-30.7452C52.2-30.7452 63.5-21.0952 66.05-8.29522C69.01-9.39522 71.97-10.0152 75.05-10.0152C78.13-10.0152 81.09-9.39522 84.05-8.29522C86.6-21.0952 97.9-30.7452 111.45-30.7452ZM38.65-19.7452C29.3-19.7452 21.72-12.1652 21.72-2.81522C21.72 6.53478 29.3 14.1148 38.65 14.1148C48 14.1148 55.58 6.53478 55.58-2.81522C55.58-12.1652 48-19.7452 38.65-19.7452ZM94.51-2.81522C94.51 6.53478 102.1 14.1148 111.45 14.1148C120.8 14.1148 128.38 6.53478 128.38-2.81522C128.38-12.1652 120.8-19.7452 111.45-19.7452C102.1-19.7452 94.51-12.1652 94.51-2.81522Z"/> + </g> + <g id="Medium-L" transform="matrix(1 0 0 1 1671.16 1556)"> + <path d="M97.36-101.844L118.32-50.0841L141.42-50.0841C144.18-50.0841 146.42-47.8441 146.42-45.0841C146.42-42.3141 144.18-40.0841 141.42-40.0841L115.02-40.0841C114.94-40.0741 114.86-40.0741 114.79-40.0841L34.01-40.0841C33.94-40.0741 33.86-40.0741 33.78-40.0841L9.37-40.0841C6.61-40.0841 4.37-42.3141 4.37-45.0841C4.37-47.8441 6.61-50.0841 9.37-50.0841L30.45-50.0841L50.9-101.784C52.38-105.684 56.62-107.784 60.63-106.604L74.13-102.634L87.65-106.614C91.63-107.784 95.85-105.714 97.36-101.844ZM88.71-96.5041L75.7-92.6741C75.18-92.5241 74.64-92.4541 74.13-92.4741C73.61-92.4541 73.08-92.5241 72.56-92.6741L72.56-92.6741L59.58-96.4941L41.15-50.0841L107.58-50.0841L88.71-96.5041ZM110.95-30.6941C126.37-30.6941 138.88-18.1841 138.88-2.75409C138.88 12.6659 126.37 25.1759 110.95 25.1759C97.62 25.1759 86.48 15.8459 83.69 3.36591C79.9 1.32591 77.09 0.545906 74.55 0.545906C72.01 0.545906 69.2 1.32591 65.41 3.36591C62.62 15.8459 51.48 25.1759 38.15 25.1759C22.72 25.1759 10.22 12.6659 10.22-2.75409C10.22-18.1841 22.72-30.6941 38.15-30.6941C51.88-30.6941 63.3-20.7841 65.64-7.73409C68.58-8.83409 71.51-9.45409 74.55-9.45409C77.59-9.45409 80.52-8.83409 83.46-7.73409C85.8-20.7841 97.22-30.6941 110.95-30.6941ZM38.15-20.6941C28.25-20.6941 20.22-12.6641 20.22-2.75409C20.22 7.14591 28.25 15.1759 38.15 15.1759C48.06 15.1759 56.08 7.14591 56.08-2.75409C56.08-12.6641 48.06-20.6941 38.15-20.6941ZM93.01-2.75409C93.01 7.14591 101.04 15.1759 110.95 15.1759C120.85 15.1759 128.88 7.14591 128.88-2.75409C128.88-12.6641 120.85-20.6941 110.95-20.6941C101.04-20.6941 93.01-12.6641 93.01-2.75409Z"/> + </g> + <g id="Regular-L" transform="matrix(1 0 0 1 1375.45 1556)"> + <path d="M95.43-100.383L116.63-47.9827L140.42-47.9827C142.63-47.9827 144.42-46.1827 144.42-43.9827C144.42-41.7727 142.63-39.9827 140.42-39.9827L113.99-39.9827C113.93-39.9727 113.87-39.9727 113.81-39.9827L32.99-39.9827C32.93-39.9727 32.87-39.9727 32.81-39.9827L8.37-39.9827C6.16-39.9827 4.37-41.7727 4.37-43.9827C4.37-46.1827 6.16-47.9827 8.37-47.9827L30.14-47.9827L50.83-100.323C52.13-103.743 55.84-105.583 59.35-104.543L73.13-100.493L86.93-104.553C90.42-105.583 94.11-103.763 95.43-100.383ZM88.31-96.6227L74.42-92.5327C73.99-92.4027 73.55-92.3527 73.13-92.3727C72.7-92.3527 72.27-92.4127 71.84-92.5327L71.84-92.5327L57.98-96.6127L38.7-47.9827L108.05-47.9827L88.31-96.6227ZM109.95-29.5927C125.37-29.5927 137.88-17.0827 137.88-1.65269C137.88 13.7673 125.37 26.2773 109.95 26.2773C96.18 26.2773 84.74 16.3173 82.44 3.20731C78.91 1.39731 76.14 0.647305 73.55 0.647305C70.96 0.647305 68.19 1.39731 64.66 3.19731C62.36 16.3173 50.92 26.2773 37.15 26.2773C21.72 26.2773 9.22 13.7673 9.22-1.65269C9.22-17.0827 21.72-29.5927 37.15-29.5927C51.23-29.5927 62.88-19.1727 64.81-5.62269C67.72-6.74269 70.59-7.35269 73.55-7.35269C76.51-7.35269 79.38-6.74269 82.29-5.62269C84.22-19.1727 95.87-29.5927 109.95-29.5927ZM37.15-21.5927C26.14-21.5927 17.22-12.6627 17.22-1.65269C17.22 9.34731 26.14 18.2773 37.15 18.2773C48.15 18.2773 57.08 9.35731 57.08-1.64269L57.08-1.64269L57.06-1.67269C57.07-1.68269 57.08-1.68269 57.08-1.69269C57.07-12.6827 48.15-21.5927 37.15-21.5927ZM90.01-1.64269C90.02 9.35731 98.94 18.2773 109.95 18.2773C120.96 18.2773 129.88 9.34731 129.88-1.65269C129.88-12.6627 120.96-21.5927 109.95-21.5927C98.95-21.5927 90.03-12.6827 90.01-1.69269C90.02-1.68269 90.03-1.68269 90.04-1.67269L90.01-1.64269Z"/> + </g> + <g id="Light-L" transform="matrix(1 0 0 1 1079.24 1556)"> + <path d="M94.46-100.145L115.79-47.4253L139.92-47.4253C141.86-47.4253 143.42-45.8553 143.42-43.9253C143.42-41.9853 141.86-40.4253 139.92-40.4253L113.48-40.4253C113.43-40.4153 113.37-40.4153 113.32-40.4253L32.48-40.4253C32.43-40.4153 32.37-40.4153 32.32-40.4253L7.87-40.4253C5.94-40.4253 4.37-41.9853 4.37-43.9253C4.37-45.8553 5.94-47.4253 7.87-47.4253L29.99-47.4253L50.8-100.085C52.01-103.255 55.45-104.965 58.71-104.005L72.63-99.9153L86.57-104.015C89.81-104.965 93.24-103.285 94.46-100.145ZM88.11-97.1753L73.78-92.9553C73.39-92.8453 73.01-92.7953 72.63-92.8153C72.25-92.7953 71.86-92.8453 71.48-92.9553L71.48-92.9553L57.17-97.1653L37.48-47.4253L108.28-47.4253L88.11-97.1753ZM109.45-29.5353C124.87-29.5353 137.38-17.0253 137.38-1.59529C137.38 13.8247 124.87 26.3347 109.45 26.3347C95.46 26.3347 83.88 16.0547 81.83 2.64471C78.7 1.07471 76.12 0.334712 73.71 0.224712C70.9 0.094712 67.96 0.794712 64.26 2.64471C62.22 16.0547 50.63 26.3347 36.65 26.3347C21.22 26.3347 8.72 13.8247 8.72-1.59529C8.72-17.0253 21.22-29.5353 36.65-29.5353C50.91-29.5353 62.67-18.8553 64.37-5.05529C67.61-6.30529 70.76-6.92529 74.04-6.76529C76.62-6.64529 79.15-6.05529 81.73-5.05529C83.43-18.8553 95.19-29.5353 109.45-29.5353ZM36.65-22.5353C25.09-22.5353 15.72-13.1653 15.72-1.59529C15.72 9.96471 25.09 19.3347 36.65 19.3347C48.21 19.3347 57.58 9.96471 57.58-1.59529C57.58-13.1653 48.21-22.5353 36.65-22.5353ZM88.51-1.59529C88.51 9.96471 97.89 19.3347 109.45 19.3347C121.01 19.3347 130.38 9.96471 130.38-1.59529C130.38-13.1653 121.01-22.5353 109.45-22.5353C97.89-22.5353 88.51-13.1653 88.51-1.59529Z"/> + </g> + <g id="Thin-L" transform="matrix(1 0 0 1 783.527 1556)"> + <path d="M92.527-99.674L114.106-46.324L138.92-46.324C140.301-46.324 141.42-45.204 141.42-43.824C141.42-42.434 140.301-41.324 138.92-41.324L112.455-41.324C112.417-41.314 112.378-41.314 112.34-41.324L31.454-41.324C31.416-41.314 31.377-41.314 31.339-41.324L6.87-41.324C5.489-41.324 4.37-42.434 4.37-43.824C4.37-45.204 5.489-46.324 6.87-46.324L29.674-46.324L50.729-99.634C51.751-102.314 54.666-103.764 57.421-102.954L71.626-98.774L85.851-102.954C88.59-103.764 91.49-102.334 92.527-99.674ZM87.869-97.864C87.774-98.104 87.511-98.234 87.262-98.154L87.262-98.154L72.492-93.814C72.202-93.734 71.909-93.704 71.624-93.714C71.34-93.704 71.048-93.734 70.759-93.814L70.759-93.814L56.01-98.154C55.76-98.224 55.495-98.094 55.402-97.854L55.402-97.854L35.024-46.324L108.739-46.324ZM108.444-29.434C123.872-29.434 136.378-16.924 136.378-1.49396C136.378 13.926 123.872 26.436 108.444 26.436C94.051 26.436 82.2 15.546 80.676 1.55604C77.716 0.146044 75.176-0.563956 72.752-0.673956C69.883-0.813956 66.943-0.123956 63.416 1.55604C61.893 15.546 50.042 26.436 35.648 26.436C20.221 26.436 7.714 13.926 7.714-1.49396C7.714-16.924 20.221-29.434 35.648-29.434C50.258-29.434 62.248-18.214 63.478-3.92396C66.702-5.20396 69.796-5.82396 72.987-5.67396C75.528-5.55396 78.032-4.94396 80.615-3.92396C81.844-18.214 93.834-29.434 108.444-29.434ZM35.648-24.434C22.982-24.434 12.714-14.164 12.714-1.49396C12.714 11.166 22.982 21.436 35.648 21.436C48.314 21.436 58.582 11.166 58.582-1.49396C58.582-14.164 48.314-24.434 35.648-24.434ZM85.512-1.29396C85.621 11.276 95.847 21.436 108.444 21.436C121.11 21.436 131.378 11.166 131.378-1.49396C131.378-14.164 121.11-24.434 108.444-24.434C95.798-24.434 85.542-14.194 85.511-1.55396C85.548-1.53396 85.586-1.51396 85.624-1.49396L85.512-1.29396Z"/> + </g> + <g id="Ultralight-L" transform="matrix(1 0 0 1 487.316 1556)"> + <path d="M91.561-99.4365L113.264-45.7565L138.42-45.7565C139.525-45.7565 140.42-44.8665 140.42-43.7565C140.42-42.6565 139.525-41.7565 138.42-41.7565L6.37-41.7565C5.266-41.7565 4.37-42.6565 4.37-43.7565C4.37-44.8665 5.266-45.7565 6.37-45.7565L29.518-45.7565L50.696-99.3965C51.625-101.837 54.275-103.147 56.78-102.417L71.126-98.1965L85.492-102.417C87.982-103.147 90.619-101.857 91.561-99.4365ZM87.835-97.9865C87.646-98.4665 87.119-98.7265 86.621-98.5765L86.621-98.5765L71.851-94.2365C71.608-94.1665 71.363-94.1465 71.124-94.1565C70.887-94.1465 70.642-94.1665 70.4-94.2365L70.4-94.2365L55.651-98.5765C55.15-98.7265 54.62-98.4565 54.435-97.9665L54.435-97.9665L33.798-45.7565L108.971-45.7565ZM107.944-29.3765C123.372-29.3765 135.878-16.8665 135.878-1.43655C135.878 13.9835 123.372 26.4935 107.944 26.4935C93.352 26.4935 81.373 15.3035 80.119 1.03345C76.929-0.456549 74.182-1.13655 71.509-1.13655C68.86-1.12655 66.134-0.436549 62.973 1.03345C61.719 15.3035 49.74 26.4935 35.148 26.4935C19.721 26.4935 7.214 13.9835 7.214-1.43655C7.214-16.8665 19.721-29.3765 35.148-29.3765C49.936-29.3765 62.039-17.8865 63.018-3.34655C65.911-4.50655 68.679-5.12655 71.499-5.13655C74.352-5.13655 77.149-4.51655 80.075-3.34655C81.053-17.8865 93.157-29.3765 107.944-29.3765ZM35.148-25.3765C21.93-25.3765 11.214-14.6565 11.214-1.43655C11.214 11.7735 21.93 22.4935 35.148 22.4935C48.366 22.4935 59.082 11.7735 59.082-1.43655C59.082-14.6565 48.366-25.3765 35.148-25.3765ZM84.011-1.43655C84.011 11.7735 94.726 22.4935 107.944 22.4935C121.163 22.4935 131.878 11.7735 131.878-1.43655C131.878-14.6565 121.163-25.3765 107.944-25.3765C94.726-25.3765 84.011-14.6565 84.011-1.43655Z"/> + </g> + <g id="Black-M" transform="matrix(1 0 0 1 2872 1126)"> + <path d="M68.87-91.2815L60.45-88.8015L52.04-91.2715C46.79-92.8215 41.24-90.0715 39.27-84.9715L24.95-47.7215L11.87-47.7215C7.73-47.7215 4.37-44.3615 4.37-40.2215C4.37-36.0715 7.73-32.7215 11.87-32.7215L110.93-32.7215C115.07-32.7215 118.43-36.0715 118.43-40.2215C118.43-44.3615 115.07-47.7215 110.93-47.7215L96.09-47.7215L81.62-85.0015C79.64-90.0915 74.1-92.8215 68.87-91.2815ZM41.02-47.7215L51.78-75.7115L58.21-73.8215C58.95-73.6015 59.71-73.5115 60.44-73.5215C61.18-73.5115 61.94-73.6015 62.68-73.8215L69.13-75.7215L80-47.7215L41.02-47.7215ZM88.07-29.4215C99.64-29.4215 109.02-20.0415 109.02-8.47151C109.02 3.09849 99.64 12.4885 88.07 12.4885C79.55 12.4885 72.22 7.39849 68.94 0.0984948C68.49-0.0715052 68.05-0.281505 67.63-0.541505C63.99-2.78151 62.08-3.24151 60.76-3.24151C59.45-3.24151 57.53-2.78151 53.9-0.541505C53.48-0.281505 53.04-0.0715052 52.59 0.0984948C49.31 7.39849 41.98 12.4885 33.46 12.4885C21.89 12.4885 12.51 3.09849 12.51-8.47151C12.51-20.0415 21.89-29.4215 33.46-29.4215C42.11-29.4215 49.54-24.1815 52.74-16.7015C55.29-17.6615 57.94-18.2415 60.76-18.2415C63.59-18.2415 66.24-17.6615 68.79-16.7015C71.99-24.1815 79.42-29.4215 88.07-29.4215ZM33.46-14.4215C30.17-14.4215 27.51-11.7615 27.51-8.47151C27.51-5.18151 30.17-2.51151 33.46-2.51151C36.75-2.51151 39.42-5.18151 39.42-8.47151C39.42-11.7615 36.75-14.4215 33.46-14.4215ZM82.11-8.47151C82.11-5.18151 84.78-2.51151 88.07-2.51151C91.36-2.51151 94.02-5.18151 94.02-8.47151C94.02-11.7615 91.36-14.4215 88.07-14.4215C84.78-14.4215 82.11-11.7615 82.11-8.47151Z"/> + </g> + <g id="Heavy-M" transform="matrix(1 0 0 1 2576.29 1126)"> + <path d="M79.69-87.5338L94.4-49.6138L109.93-49.6138C113.52-49.6138 116.43-46.7038 116.43-43.1138C116.43-39.5238 113.52-36.6138 109.93-36.6138L10.87-36.6138C7.28-36.6138 4.37-39.5238 4.37-43.1138C4.37-46.7038 7.28-49.6138 10.87-49.6138L24.63-49.6138L39.21-87.5038C40.98-92.1238 46.01-94.6038 50.75-93.2138L59.45-90.6538L68.15-93.2138C72.89-94.6038 77.9-92.1338 79.69-87.5338ZM68.73-79.8338L61.4-77.6738C60.75-77.4838 60.09-77.4038 59.44-77.4138C58.8-77.4038 58.14-77.4838 57.49-77.6738L57.49-77.6738L50.18-79.8238L38.56-49.6138L80.46-49.6138L68.73-79.8338ZM87.07-32.3138C98.64-32.3138 108.02-22.9338 108.02-11.3638C108.02 0.206172 98.64 9.59617 87.07 9.59617C78.03 9.59617 70.33 3.86617 67.39-4.14383L67.15-4.28383L67.15-4.28383C63.45-6.56383 61.35-7.13383 59.76-7.13383C58.18-7.13383 56.08-6.56383 52.38-4.28383L52.14-4.14383L52.14-4.14383C49.2 3.86617 41.5 9.59617 32.46 9.59617C20.89 9.59617 11.51 0.206172 11.51-11.3638C11.51-22.9338 20.89-32.3138 32.46-32.3138C41.47-32.3138 49.14-26.6338 52.11-18.6638C54.57-19.5838 57.09-20.1338 59.76-20.1338C62.44-20.1338 64.96-19.5838 67.42-18.6638C70.39-26.6338 78.06-32.3138 87.07-32.3138ZM32.46-19.3138C28.07-19.3138 24.51-15.7538 24.51-11.3638C24.51-6.97383 28.07-3.40383 32.46-3.40383C36.85-3.40383 40.42-6.97383 40.42-11.3638C40.42-15.7538 36.85-19.3138 32.46-19.3138ZM79.11-11.3638C79.11-6.97383 82.68-3.40383 87.07-3.40383C91.46-3.40383 95.02-6.97383 95.02-11.3638C95.02-15.7538 91.46-19.3138 87.07-19.3138C82.68-19.3138 79.11-15.7538 79.11-11.3638Z"/> + </g> + <g id="Bold-M" transform="matrix(1 0 0 1 2280.58 1126)"> + <path d="M77.75-84.0716L92.66-45.6616L92.72-45.5116L92.72-45.5116L108.93-45.5116C111.96-45.5116 114.43-43.0416 114.43-40.0116C114.43-36.9716 111.96-34.5116 108.93-34.5116L9.87-34.5116C6.84-34.5116 4.37-36.9716 4.37-40.0116C4.37-43.0416 6.84-45.5116 9.87-45.5116L24.33-45.5116C24.35-45.5816 24.38-45.6616 24.41-45.7316L39.14-84.0416C40.73-88.1816 45.22-90.4016 49.47-89.1516L58.45-86.5116L67.43-89.1516C71.67-90.4016 76.16-88.1916 77.75-84.0716ZM68.33-77.9516L60.12-75.5316C59.56-75.3716 59-75.3016 58.44-75.3116C57.89-75.3016 57.33-75.3716 56.77-75.5316L56.77-75.5316L48.58-77.9416L36.11-45.5116L80.92-45.5116L68.33-77.9516ZM86.07-29.2116C97.64-29.2116 107.02-19.8316 107.02-8.26157C107.02 3.30843 97.64 12.6884 86.07 12.6884C76.95 12.6884 69.19 6.86843 66.31-1.26157C62.76-3.40157 60.56-4.03157 58.77-4.03157C56.97-4.03157 54.77-3.40157 51.22-1.26157C48.34 6.86843 40.58 12.6884 31.46 12.6884C19.89 12.6884 10.51 3.30843 10.51-8.26157C10.51-19.8316 19.89-29.2116 31.46-29.2116C41.15-29.2116 49.3-22.6416 51.7-13.7116C53.99-14.5516 56.32-15.0316 58.77-15.0316C61.21-15.0316 63.54-14.5516 65.83-13.7116C68.23-22.6416 76.38-29.2116 86.07-29.2116ZM31.46-18.2116C25.96-18.2116 21.51-13.7616 21.51-8.26157C21.51-2.76157 25.96 1.68843 31.46 1.68843C36.96 1.68843 41.42-2.76157 41.42-8.26157C41.42-13.7616 36.96-18.2116 31.46-18.2116ZM76.11-8.26157C76.11-2.76157 80.57 1.68843 86.07 1.68843C91.57 1.68843 96.02-2.76157 96.02-8.26157C96.02-13.7616 91.57-18.2116 86.07-18.2116C80.57-18.2116 76.11-13.7616 76.11-8.26157Z"/> + </g> + <g id="Semibold-M" transform="matrix(1 0 0 1 1984.62 1126)"> + <path d="M76.31-83.7226L91.21-45.3026C91.29-45.1026 91.36-44.8926 91.41-44.6826L108.18-44.6826C110.8-44.6826 112.93-42.5526 112.93-39.9326C112.93-37.3026 110.8-35.1826 108.18-35.1826L9.12-35.1826C6.5-35.1826 4.37-37.3026 4.37-39.9326C4.37-42.5526 6.5-44.6826 9.12-44.6826L24.15-44.6826C24.2-44.9126 24.27-45.1526 24.36-45.3826L39.09-83.6926C40.54-87.4626 44.64-89.4926 48.51-88.3526L57.7-85.6426L66.89-88.3526C70.76-89.4926 74.85-87.4726 76.31-83.7226ZM68.03-78.7826L59.16-76.1726C58.67-76.0326 58.18-75.9726 57.7-75.9826C57.21-75.9726 56.72-76.0326 56.24-76.1726L56.24-76.1726L47.38-78.7826L34.26-44.6826L81.27-44.6826L68.03-78.7826ZM85.32-29.1326C96.89-29.1326 106.27-19.7526 106.27-8.1826C106.27 3.3874 96.89 12.7774 85.32 12.7774C75.8 12.7774 67.77 6.4274 65.21-2.2526C62.02-4.0826 59.86-4.7026 58.02-4.7026C56.17-4.7026 54.01-4.0826 50.82-2.2526C48.26 6.4274 40.23 12.7774 30.71 12.7774C19.14 12.7774 9.76 3.3874 9.76-8.1826C9.76-19.7526 19.14-29.1326 30.71-29.1326C40.66-29.1326 48.99-22.2026 51.13-12.9026C53.38-13.7326 55.65-14.2026 58.02-14.2026C60.38-14.2026 62.65-13.7326 64.9-12.9026C67.04-22.2026 75.37-29.1326 85.32-29.1326ZM30.71-19.6326C24.39-19.6326 19.26-14.5026 19.26-8.1826C19.26-1.8526 24.39 3.2774 30.71 3.2774C37.04 3.2774 42.17-1.8526 42.17-8.1826C42.17-14.5026 37.04-19.6326 30.71-19.6326ZM73.86-8.1826C73.86-1.8526 78.99 3.2774 85.32 3.2774C91.64 3.2774 96.77-1.8526 96.77-8.1826C96.77-14.5026 91.64-19.6326 85.32-19.6326C78.99-19.6326 73.86-14.5026 73.86-8.1826Z"/> + </g> + <g id="Medium-M" transform="matrix(1 0 0 1 1688.41 1126)"> + <path d="M75.34-83.4852L90.25-45.0652C90.37-44.7552 90.45-44.4352 90.49-44.1252L107.68-44.1252C110.02-44.1252 111.93-42.2152 111.93-39.8752C111.93-37.5252 110.02-35.6252 107.68-35.6252L8.62-35.6252C6.28-35.6252 4.37-37.5252 4.37-39.8752C4.37-42.2152 6.28-44.1252 8.62-44.1252L24.07-44.1252C24.11-44.4652 24.19-44.8052 24.32-45.1452L39.06-83.4552C40.41-86.9852 44.25-88.8752 47.87-87.8152L57.2-85.0652L66.53-87.8152C70.15-88.8752 73.98-86.9952 75.34-83.4852ZM67.83-79.3352L58.52-76.5952C58.08-76.4652 57.63-76.4152 57.2-76.4252C56.76-76.4152 56.32-76.4652 55.88-76.5952L55.88-76.5952L46.58-79.3352L33.04-44.1252L81.5-44.1252L67.83-79.3352ZM84.82-29.0752C96.39-29.0752 105.77-19.6952 105.77-8.12519C105.77 3.44481 96.39 12.8348 84.82 12.8348C75.06 12.8348 66.86 6.15481 64.53-2.87519C61.53-4.54519 59.39-5.14519 57.52-5.14519C55.64-5.14519 53.5-4.54519 50.5-2.87519C48.17 6.15481 39.97 12.8348 30.21 12.8348C18.64 12.8348 9.26 3.44481 9.26-8.12519C9.26-19.6952 18.64-29.0752 30.21-29.0752C40.34-29.0752 48.78-21.8952 50.74-12.3552C52.96-13.1752 55.19-13.6452 57.52-13.6452C59.84-13.6452 62.07-13.1752 64.29-12.3552C66.25-21.8952 74.69-29.0752 84.82-29.0752ZM30.21-20.5752C23.33-20.5752 17.76-15.0052 17.76-8.12519C17.76-1.24519 23.33 4.33481 30.21 4.33481C37.09 4.33481 42.67-1.24519 42.67-8.12519C42.67-15.0052 37.09-20.5752 30.21-20.5752ZM72.36-8.12519C72.36-1.24519 77.94 4.33481 84.82 4.33481C91.7 4.33481 97.27-1.24519 97.27-8.12519C97.27-15.0052 91.7-20.5752 84.82-20.5752C77.94-20.5752 72.36-15.0052 72.36-8.12519Z"/> + </g> + <g id="Regular-M" transform="matrix(1 0 0 1 1392.2 1126)"> + <path d="M74.37-83.245L89.72-43.575L107.17-43.575C109.24-43.575 110.92-41.895 110.92-39.825C110.92-37.755 109.24-36.075 107.17-36.075L8.12-36.075C6.05-36.075 4.37-37.755 4.37-39.825C4.37-41.895 6.05-43.575 8.12-43.575L24.05-43.575L39.02-83.185C40.27-86.495 43.85-88.275 47.24-87.275L56.69-84.495L66.17-87.285C69.54-88.275 73.1-86.515 74.37-83.245ZM67.62-79.895L57.87-77.025C57.48-76.915 57.08-76.865 56.69-76.875C56.3-76.865 55.91-76.915 55.52-77.025L55.52-77.025L45.79-79.885L32.07-43.575L81.68-43.575L67.62-79.895ZM84.32-29.025C95.89-29.025 105.27-19.645 105.27-8.07499C105.27 3.49501 95.89 12.885 84.32 12.885C74.32 12.885 65.96 5.88501 63.87-3.48499C61.03-5.01499 58.92-5.59499 57.01-5.59499C55.11-5.59499 53-5.01499 50.16-3.48499C48.06 5.88501 39.7 12.885 29.71 12.885C18.14 12.885 8.75 3.49501 8.75-8.07499C8.75-19.645 18.14-29.025 29.71-29.025C40.01-29.025 48.57-21.595 50.33-11.805C52.54-12.635 54.73-13.095 57.01-13.095C59.29-13.095 61.49-12.635 63.69-11.805C65.45-21.595 74.02-29.025 84.32-29.025ZM29.71-21.525C22.28-21.525 16.25-15.505 16.25-8.07499C16.25-0.644988 22.28 5.38501 29.71 5.38501C37.14 5.38501 43.16-0.644988 43.16-8.07499C43.16-15.505 37.14-21.525 29.71-21.525ZM70.86-8.07499C70.86-0.644988 76.88 5.38501 84.32 5.38501C91.75 5.38501 97.77-0.644988 97.77-8.07499C97.77-15.505 91.75-21.525 84.32-21.525C76.88-21.525 70.86-15.505 70.86-8.07499Z"/> + </g> + <g id="Light-M" transform="matrix(1 0 0 1 1096.23 1126)"> + <path d="M72.92-82.8952C71.8-85.8052 68.63-87.3652 65.64-86.4852L55.95-83.6352L46.27-86.4852C43.27-87.3652 40.09-85.7952 38.97-82.8752L23.59-42.7452L7.37-42.7452C5.72-42.7452 4.37-41.3952 4.37-39.7452C4.37-38.0852 5.72-36.7452 7.37-36.7452L106.43-36.7452C108.08-36.7452 109.43-38.0852 109.43-39.7452C109.43-41.3952 108.08-42.7452 106.43-42.7452L88.51-42.7452L72.92-82.8952ZM54.98-77.6652C55.3-77.5752 55.63-77.5352 55.95-77.5452C56.27-77.5352 56.59-77.5752 56.92-77.6652L67.33-80.7252L82.07-42.7452L30.02-42.7452L44.58-80.7252L54.98-77.6652ZM83.57-28.9452C95.14-28.9452 104.52-19.5652 104.52-7.99515C104.52 3.57485 95.14 12.9548 83.57 12.9548C73.24 12.9548 64.66 5.48485 62.93-4.34515C60.29-5.70515 58.21-6.26515 56.27-6.26515C54.32-6.26515 52.24-5.70515 49.6-4.34515C47.87 5.48485 39.29 12.9548 28.96 12.9548C17.39 12.9548 8.01 3.57485 8.01-7.99515C8.01-19.5652 17.39-28.9452 28.96-28.9452C39.52-28.9452 48.26-21.1352 49.71-10.9652C51.89-11.8052 54.04-12.2652 56.27-12.2652C58.49-12.2652 60.64-11.8052 62.82-10.9652C64.27-21.1352 73.01-28.9452 83.57-28.9452ZM28.96-22.9452C20.7-22.9452 14.01-16.2552 14.01-7.99515C14.01 0.264845 20.7 6.95485 28.96 6.95485C37.22 6.95485 43.91 0.274845 43.92-7.98515L43.92-7.98515L43.9-8.00515C43.9-8.01515 43.91-8.01515 43.92-8.01515C43.9-16.2652 37.21-22.9452 28.96-22.9452ZM68.61-7.98515C68.62 0.274845 75.31 6.95485 83.57 6.95485C91.83 6.95485 98.52 0.264845 98.52-7.99515C98.52-16.2552 91.83-22.9452 83.57-22.9452C75.32-22.9452 68.63-16.2652 68.61-8.01515C68.62-8.01515 68.63-8.01515 68.63-8.00515L68.61-7.98515Z"/> + </g> + <g id="Thin-M" transform="matrix(1 0 0 1 800.525 1126)"> + <path d="M70.988-83.4266L86.822-42.6366L105.424-42.6366C106.529-42.6366 107.424-41.7366 107.424-40.6366C107.424-39.5266 106.529-38.6366 105.424-38.6366L6.37-38.6366C5.266-38.6366 4.37-39.5266 4.37-40.6366C4.37-41.7366 5.266-42.6366 6.37-42.6366L23.275-42.6366L38.904-83.4066C39.837-85.8366 42.483-87.1466 44.984-86.4166L54.945-83.4866L64.916-86.4166C67.409-87.1466 70.048-85.8566 70.988-83.4266ZM43.855-82.5766C43.355-82.7266 42.826-82.4666 42.639-81.9766L42.639-81.9766L27.559-42.6366L82.531-42.6366L67.259-81.9866C67.071-82.4666 66.544-82.7266 66.045-82.5766L66.045-82.5766L55.63-79.5166C55.401-79.4466 55.169-79.4266 54.944-79.4366C54.719-79.4266 54.488-79.4466 54.259-79.5166L54.259-79.5166ZM82.566-29.8366C94.138-29.8366 103.519-20.4566 103.519-8.88662C103.519 2.68338 94.138 12.0734 82.566 12.0734C71.818 12.0734 62.961 3.97338 61.752-6.44662C59.298-7.62662 57.239-8.15662 55.262-8.15662C53.285-8.15662 51.226-7.62662 48.772-6.44662C47.563 3.97338 38.706 12.0734 27.959 12.0734C16.386 12.0734 7.005 2.68338 7.005-8.88662C7.005-20.4566 16.386-29.8366 27.959-29.8366C38.874-29.8366 47.84-21.4966 48.823-10.8366C50.999-11.6966 53.105-12.1566 55.262-12.1566C57.419-12.1566 59.525-11.6966 61.701-10.8366C62.685-21.4966 71.65-29.8366 82.566-29.8366ZM27.959-25.8366C18.595-25.8366 11.005-18.2466 11.005-8.88662C11.005 0.473383 18.595 8.07338 27.959 8.07338C37.322 8.07338 44.912 0.473383 44.912-8.88662C44.912-18.2466 37.322-25.8366 27.959-25.8366ZM65.612-8.88662C65.612 0.473383 73.202 8.07338 82.566 8.07338C91.929 8.07338 99.519 0.473383 99.519-8.88662C99.519-18.2466 91.929-25.8366 82.566-25.8366C73.202-25.8366 65.612-18.2466 65.612-8.88662Z"/> + </g> + <g id="Ultralight-M" transform="matrix(1 0 0 1 504.565 1126)"> + <path d="M69.539-86.0776L85.558-44.8076L104.673-44.8076C105.364-44.8076 105.923-44.2476 105.923-43.5576C105.923-42.8676 105.364-42.3076 104.673-42.3076L5.62-42.3076C4.929-42.3076 4.37-42.8676 4.37-43.5576C4.37-44.2476 4.929-44.8076 5.62-44.8076L23.04-44.8076L38.854-86.0576C39.647-88.1276 41.896-89.2376 44.022-88.6176L54.194-85.6276L64.377-88.6176C66.496-89.2376 68.74-88.1376 69.539-86.0776ZM67.208-85.1776C66.879-86.0176 65.955-86.4776 65.083-86.2176L65.083-86.2176L54.668-83.1576C54.509-83.1076 54.349-83.0976 54.193-83.1076C54.039-83.0976 53.879-83.1076 53.72-83.1576L53.72-83.1576L43.316-86.2176C42.441-86.4776 41.515-86.0176 41.189-85.1676L41.189-85.1676L25.718-44.8076L82.876-44.8076ZM81.815-32.7576C93.387-32.7576 102.769-23.3776 102.769-11.8076C102.769-0.237645 93.387 9.15235 81.815 9.15235C70.771 9.15235 61.723 0.602355 60.919-10.2376C58.594-11.3076 56.563-11.8176 54.579-11.8276C52.551-11.8376 50.48-11.3276 48.104-10.2376C47.3 0.602355 38.252 9.15235 27.208 9.15235C15.636 9.15235 6.254-0.237645 6.254-11.8076C6.254-23.3776 15.636-32.7576 27.208-32.7576C38.39-32.7576 47.526-23.9976 48.13-12.9676C50.346-13.8676 52.451-14.3376 54.593-14.3276C56.679-14.3176 58.734-13.8476 60.893-12.9676C61.497-23.9976 70.633-32.7576 81.815-32.7576ZM27.208-30.2576C17.016-30.2576 8.754-21.9976 8.754-11.8076C8.754-1.61765 17.016 6.65235 27.208 6.65235C37.4 6.65235 45.662-1.61765 45.662-11.8076C45.662-21.9976 37.4-30.2576 27.208-30.2576ZM63.361-11.8076C63.361-1.61765 71.623 6.65235 81.815 6.65235C92.007 6.65235 100.269-1.61765 100.269-11.8076C100.269-21.9976 92.007-30.2576 81.815-30.2576C71.623-30.2576 63.361-21.9976 63.361-11.8076Z"/> + </g> + <g id="Black-S" transform="matrix(1 0 0 1 2884.03 696)"> + <path d="M65.59-73.9535L76.75-45.1985L88.37-45.1985C91.68-45.1985 94.37-42.5125 94.37-39.1985C94.37-35.8855 91.68-33.1985 88.37-33.1985L10.37-33.1985C7.06-33.1985 4.37-35.8855 4.37-39.1985C4.37-42.5125 7.06-45.1985 10.37-45.1985L20.6-45.1985L31.65-73.9255C33.33-78.3005 38.09-80.6525 42.59-79.3295L48.62-77.5545L54.66-79.3315C59.15-80.6515 63.9-78.3135 65.59-73.9535ZM55.4-67.0415L50.41-65.5725C49.81-65.3965 49.21-65.3185 48.62-65.3275C48.03-65.3195 47.43-65.3975 46.83-65.5725L46.83-65.5725L41.85-67.0365L33.46-45.1985L63.88-45.1985L55.4-67.0415ZM70.37-30.6985C79.48-30.6985 86.87-23.3115 86.87-14.1985C86.87-5.08651 79.48 2.30149 70.37 2.30149C63.61 2.30149 57.8-1.76551 55.25-7.58551C54.9-7.71751 54.56-7.88551 54.23-8.08951C51.37-9.84551 49.88-10.1985 48.87-10.1985C47.86-10.1985 46.37-9.84551 43.51-8.08851C43.18-7.88551 42.84-7.71751 42.49-7.58551C39.94-1.76551 34.13 2.30149 27.37 2.30149C18.26 2.30149 10.87-5.08651 10.87-14.1985C10.87-23.3115 18.26-30.6985 27.37-30.6985C34.08-30.6985 39.85-26.6965 42.43-20.9495C44.48-21.7295 46.6-22.1985 48.87-22.1985C51.14-22.1985 53.26-21.7295 55.31-20.9495C57.89-26.6965 63.66-30.6985 70.37-30.6985ZM27.37-18.6985C24.88-18.6985 22.87-16.6845 22.87-14.1985C22.87-11.7135 24.88-9.69851 27.37-9.69851C29.86-9.69851 31.87-11.7135 31.87-14.1985C31.87-16.6845 29.86-18.6985 27.37-18.6985ZM65.87-14.1985C65.87-11.7135 67.88-9.69851 70.37-9.69851C72.86-9.69851 74.87-11.7135 74.87-14.1985C74.87-16.6845 72.86-18.6985 70.37-18.6985C67.88-18.6985 65.87-16.6845 65.87-14.1985Z"/> + </g> + <g id="Heavy-S" transform="matrix(1 0 0 1 2588.32 696)"> + <path d="M63.66-73.4845L75.06-44.0925L87.37-44.0925C90.13-44.0925 92.37-41.8535 92.37-39.0925C92.37-36.3305 90.13-34.0925 87.37-34.0925L9.37-34.0925C6.61-34.0925 4.37-36.3305 4.37-39.0925C4.37-41.8535 6.61-44.0925 9.37-44.0925L20.29-44.0925L31.58-73.4595C33.08-77.3495 37.31-79.4385 41.3-78.2635L47.62-76.4055L53.94-78.2655C57.93-79.4385 62.15-77.3605 63.66-73.4845ZM55-68.1535L49.13-66.4255C48.62-66.2775 48.12-66.2115 47.62-66.2215C47.12-66.2125 46.61-66.2775 46.11-66.4255L46.11-66.4255L40.25-68.1495L31-44.0925L64.34-44.0925L55-68.1535ZM69.37-30.5925C78.48-30.5925 85.87-23.2045 85.87-14.0925C85.87-4.97948 78.48 2.40752 69.37 2.40752C62.09 2.40752 55.91-2.30848 53.72-8.85248C50.82-10.6345 49.14-11.0925 47.87-11.0925C46.6-11.0925 44.92-10.6345 42.02-8.85248C39.83-2.30848 33.65 2.40752 26.37 2.40752C17.26 2.40752 9.87-4.97948 9.87-14.0925C9.87-23.2045 17.26-30.5925 26.37-30.5925C33.43-30.5925 39.46-26.1555 41.81-19.9175C43.76-20.6565 45.76-21.0925 47.87-21.0925C49.98-21.0925 51.98-20.6565 53.93-19.9175C56.28-26.1555 62.31-30.5925 69.37-30.5925ZM26.37-20.5925C22.78-20.5925 19.87-17.6825 19.87-14.0925C19.87-10.5025 22.78-7.59248 26.37-7.59248C29.96-7.59248 32.87-10.5025 32.87-14.0925C32.87-17.6825 29.96-20.5925 26.37-20.5925ZM62.87-14.0925C62.87-10.5025 65.78-7.59248 69.37-7.59248C72.96-7.59248 75.87-10.5025 75.87-14.0925C75.87-17.6825 72.96-20.5925 69.37-20.5925C65.78-20.5925 62.87-17.6825 62.87-14.0925Z"/> + </g> + <g id="Bold-S" transform="matrix(1 0 0 1 2292.11 696)"> + <path d="M62.69-73.2507L74.22-43.5487L74.22-43.5387L86.87-43.5387C89.36-43.5387 91.37-41.5247 91.37-39.0387C91.37-36.5537 89.36-34.5387 86.87-34.5387L8.87-34.5387C6.38-34.5387 4.37-36.5537 4.37-39.0387C4.37-41.5247 6.38-43.5387 8.87-43.5387L20.13-43.5387L20.14-43.5667L20.16-43.6057L31.55-73.2267C32.95-76.8737 36.92-78.8327 40.66-77.7307L47.12-75.8317L53.58-77.7327C57.32-78.8327 61.28-76.8847 62.69-73.2507ZM54.8-68.7097L48.49-66.8517C48.03-66.7177 47.57-66.6587 47.12-66.6687C46.67-66.6597 46.21-66.7177 45.75-66.8517L45.75-66.8517L39.45-68.7057L29.77-43.5387L64.57-43.5387L54.8-68.7097ZM68.87-30.5387C77.98-30.5387 85.37-23.1517 85.37-14.0387C85.37-4.92673 77.98 2.46127 68.87 2.46127C61.79 2.46127 55.75-2.00273 53.41-8.27073C50.52-10.0367 48.77-10.5387 47.37-10.5387C45.97-10.5387 44.22-10.0367 41.33-8.27073C38.99-2.00273 32.95 2.46127 25.87 2.46127C16.76 2.46127 9.37-4.92673 9.37-14.0387C9.37-23.1517 16.76-30.5387 25.87-30.5387C33.44-30.5387 39.82-25.4447 41.76-18.4977C43.58-19.1577 45.43-19.5387 47.37-19.5387C49.31-19.5387 51.16-19.1577 52.98-18.4977C54.92-25.4447 61.3-30.5387 68.87-30.5387ZM25.87-21.5387C21.73-21.5387 18.37-18.1807 18.37-14.0387C18.37-9.89673 21.73-6.53873 25.87-6.53873C30.01-6.53873 33.37-9.89673 33.37-14.0387C33.37-18.1807 30.01-21.5387 25.87-21.5387ZM61.37-14.0387C61.37-9.89673 64.73-6.53873 68.87-6.53873C73.01-6.53873 76.37-9.89673 76.37-14.0387C76.37-18.1807 73.01-21.5387 68.87-21.5387C64.73-21.5387 61.37-18.1807 61.37-14.0387Z"/> + </g> + <g id="Semibold-S" transform="matrix(1 0 0 1 1995.65 696)"> + <path d="M62.21-73.1391L73.74-43.4371L73.8-43.2671L73.8-43.2671L86.62-43.2671C88.97-43.2671 90.87-41.3641 90.87-39.0171C90.87-36.6701 88.97-34.7671 86.62-34.7671L8.62-34.7671C6.27-34.7671 4.37-36.6701 4.37-39.0171C4.37-41.3641 6.27-43.2671 8.62-43.2671L20.06-43.2671C20.08-43.3431 20.11-43.4191 20.14-43.4951L31.53-73.1151C32.89-76.6401 36.72-78.5341 40.34-77.4691L46.87-75.5491L53.4-77.4711C57.02-78.5341 60.85-76.6511 62.21-73.1391ZM54.7-68.9921L48.16-67.0701C47.73-66.9421 47.3-66.8871 46.87-66.8971C46.44-66.8881 46.01-66.9431 45.58-67.0701L45.58-67.0701L39.05-68.9891L29.16-43.2671L64.68-43.2671L54.7-68.9921ZM68.62-30.5171C77.73-30.5171 85.12-23.1301 85.12-14.0171C85.12-4.90509 77.73 2.48291 68.62 2.48291C61.4 2.48291 55.26-2.15909 53.02-8.62309C50.27-10.2701 48.54-10.7671 47.12-10.7671C45.7-10.7671 43.97-10.2701 41.22-8.62309C38.98-2.15909 32.84 2.48291 25.62 2.48291C16.51 2.48291 9.12-4.90509 9.12-14.0171C9.12-23.1301 16.51-30.5171 25.62-30.5171C33.28-30.5171 39.71-25.3041 41.58-18.2341C43.37-18.8901 45.2-19.2671 47.12-19.2671C49.04-19.2671 50.87-18.8901 52.66-18.2341C54.53-25.3041 60.96-30.5171 68.62-30.5171ZM25.62-22.0171C21.2-22.0171 17.62-18.4351 17.62-14.0171C17.62-9.59909 21.2-6.01709 25.62-6.01709C30.04-6.01709 33.62-9.59909 33.62-14.0171C33.62-18.4351 30.04-22.0171 25.62-22.0171ZM60.62-14.0171C60.62-9.59909 64.2-6.01709 68.62-6.01709C73.04-6.01709 76.62-9.59909 76.62-14.0171C76.62-18.4351 73.04-22.0171 68.62-22.0171C64.2-22.0171 60.62-18.4351 60.62-14.0171Z"/> + </g> + <g id="Medium-S" transform="matrix(1 0 0 1 1699.19 696)"> + <path d="M61.39-73.7739L73.25-43.2149C73.3-43.1059 73.33-42.9959 73.36-42.8859L86.37-42.8859C88.58-42.8859 90.37-41.0949 90.37-38.8859C90.37-36.6769 88.58-34.8859 86.37-34.8859L8.37-34.8859C6.16-34.8859 4.37-36.6769 4.37-38.8859C4.37-41.0949 6.16-42.8859 8.37-42.8859L20-42.8859C20.03-43.0159 20.07-43.1449 20.12-43.2739L31.84-73.7549C32.97-76.6719 36.14-78.2399 39.14-77.3579L46.62-75.1569L54.11-77.3589C57.1-78.2389 60.27-76.6809 61.39-73.7739ZM54.6-69.1659L47.84-67.1779C47.44-67.0579 47.02-67.0059 46.62-67.0159C46.21-67.0069 45.8-67.0579 45.4-67.1779L45.4-67.1779L38.65-69.1619L28.55-42.8859L64.8-42.8859L54.6-69.1659ZM68.37-30.3859C77.48-30.3859 84.87-22.9989 84.87-13.8859C84.87-4.77295 77.48 2.61405 68.37 2.61405C61.01 2.61405 54.78-2.20195 52.65-8.85295C50.02-10.3949 48.31-10.8859 46.87-10.8859C45.43-10.8859 43.72-10.3949 41.09-8.85295C38.96-2.20195 32.73 2.61405 25.37 2.61405C16.26 2.61405 8.87-4.77295 8.87-13.8859C8.87-22.9989 16.26-30.3859 25.37-30.3859C33.11-30.3859 39.61-25.0529 41.39-17.8589C43.17-18.5129 44.98-18.8859 46.87-18.8859C48.76-18.8859 50.57-18.5129 52.35-17.8589C54.13-25.0529 60.63-30.3859 68.37-30.3859ZM25.37-22.3859C20.68-22.3859 16.87-18.5799 16.87-13.8859C16.87-9.19195 20.68-5.38595 25.37-5.38595C30.06-5.38595 33.87-9.19195 33.87-13.8859C33.87-18.5799 30.06-22.3859 25.37-22.3859ZM59.87-13.8859C59.87-9.19195 63.68-5.38595 68.37-5.38595C73.06-5.38595 76.87-9.19195 76.87-13.8859C76.87-18.5799 73.06-22.3859 68.37-22.3859C63.68-22.3859 59.87-18.5799 59.87-13.8859Z"/> + </g> + <g id="Regular-S" transform="matrix(1 0 0 1 1402.97 696)"> + <path d="M60.76-70.7877L72.29-41.0857C72.37-40.8717 72.43-40.6547 72.47-40.4377L85.87-40.4377C87.8-40.4377 89.37-38.8707 89.37-36.9377C89.37-35.0047 87.8-33.4377 85.87-33.4377L7.87-33.4377C5.94-33.4377 4.37-35.0047 4.37-36.9377C4.37-38.8707 5.94-40.4377 7.87-40.4377L19.9-40.4377C19.94-40.6747 20-40.9127 20.09-41.1457L31.48-70.7667C32.7-73.9267 36.13-75.6247 39.38-74.6697L46.12-72.6877L52.87-74.6717C56.11-75.6247 59.54-73.9367 60.76-70.7877ZM54.4-67.8267L47.2-65.7097C46.84-65.6027 46.48-65.5577 46.12-65.5677C45.76-65.5587 45.4-65.6037 45.04-65.7097L45.04-65.7097L37.85-67.8237L27.32-40.4377L65.03-40.4377L54.4-67.8267ZM67.87-28.4377C76.98-28.4377 84.37-21.0507 84.37-11.9377C84.37-2.8247 76.98 4.5623 67.87 4.5623C60.26 4.5623 53.85-0.591697 51.95-7.5997C49.53-8.9617 47.84-9.4377 46.37-9.4377C44.9-9.4377 43.21-8.9617 40.79-7.5997C38.89-0.591697 32.48 4.5623 24.87 4.5623C15.76 4.5623 8.37-2.8247 8.37-11.9377C8.37-21.0507 15.76-28.4377 24.87-28.4377C32.79-28.4377 39.4-22.8597 41-15.4197C42.76-16.0697 44.53-16.4377 46.37-16.4377C48.21-16.4377 49.98-16.0697 51.74-15.4197C53.34-22.8597 59.95-28.4377 67.87-28.4377ZM24.87-21.4377C19.62-21.4377 15.37-17.1847 15.37-11.9377C15.37-6.6907 19.62-2.4377 24.87-2.4377C30.12-2.4377 34.37-6.6907 34.37-11.9377C34.37-17.1847 30.12-21.4377 24.87-21.4377ZM58.37-11.9377C58.37-6.6907 62.62-2.4377 67.87-2.4377C73.12-2.4377 77.37-6.6907 77.37-11.9377C77.37-17.1847 73.12-21.4377 67.87-21.4377C62.62-21.4377 58.37-17.1847 58.37-11.9377Z"/> + </g> + <g id="Light-S" transform="matrix(1 0 0 1 1107.26 696)"> + <path d="M58.82-70.2837L70.59-39.3357L84.87-39.3357C86.25-39.3357 87.37-38.2167 87.37-36.8357C87.37-35.4547 86.25-34.3357 84.87-34.3357L6.87-34.3357C5.49-34.3357 4.37-35.4547 4.37-36.8357C4.37-38.2167 5.49-39.3357 6.87-39.3357L19.65-39.3357L31.42-70.2837C32.44-72.9687 35.35-74.4157 38.11-73.6057L45.12-71.5437L52.13-73.6057C54.89-74.4157 57.8-72.9687 58.82-70.2837ZM54.15-68.5067C54.06-68.7507 53.79-68.8817 53.54-68.8087L53.54-68.8087L45.92-66.5667C45.65-66.4877 45.38-66.4567 45.12-66.4667C44.86-66.4567 44.59-66.4887 44.32-66.5667L44.32-66.5667L36.7-68.8087C36.45-68.8817 36.18-68.7507 36.09-68.5067L36.09-68.5067L25-39.3357L65.24-39.3357ZM66.87-28.3357C75.98-28.3357 83.37-20.9487 83.37-11.8357C83.37-2.7227 75.98 4.6643 66.87 4.6643C58.8 4.6643 52.08-1.1347 50.65-8.7957C48.54-9.8917 46.89-10.3357 45.37-10.3357C43.85-10.3357 42.2-9.8917 40.09-8.7957C38.66-1.1347 31.94 4.6643 23.87 4.6643C14.76 4.6643 7.37-2.7227 7.37-11.8357C7.37-20.9487 14.76-28.3357 23.87-28.3357C32.14-28.3357 38.99-22.2527 40.18-14.3187C41.91-14.9747 43.61-15.3357 45.37-15.3357C47.13-15.3357 48.83-14.9747 50.56-14.3187C51.75-22.2527 58.6-28.3357 66.87-28.3357ZM23.87-23.3357C17.52-23.3357 12.37-18.1867 12.37-11.8357C12.37-5.4847 17.52-0.335701 23.87-0.335701C30.22-0.335701 35.37-5.4847 35.37-11.8357C35.37-18.1867 30.22-23.3357 23.87-23.3357ZM55.37-11.8357C55.37-5.4847 60.52-0.335701 66.87-0.335701C73.22-0.335701 78.37-5.4847 78.37-11.8357C78.37-18.1867 73.22-23.3357 66.87-23.3357C60.52-23.3357 55.37-18.1867 55.37-11.8357Z"/> + </g> + <g id="Thin-S" transform="matrix(1 0 0 1 811.427 696)"> + <path d="M57.131-70.88L69.116-39.368L83.995-39.368C84.892-39.368 85.62-38.641 85.62-37.743C85.62-36.846 84.892-36.118 83.995-36.118L5.995-36.118C5.098-36.118 4.37-36.846 4.37-37.743C4.37-38.641 5.098-39.368 5.995-39.368L19.374-39.368L31.359-70.88C32.218-73.138 34.67-74.355 36.987-73.673L44.245-71.539L51.503-73.673C53.82-74.355 56.272-73.138 57.131-70.88ZM54.093-69.725C53.838-70.396 53.109-70.758 52.42-70.555L52.42-70.555L44.799-68.314C44.614-68.259 44.426-68.239 44.244-68.25C44.062-68.24 43.876-68.26 43.691-68.314L43.691-68.314L36.07-70.555C35.381-70.758 34.652-70.396 34.397-69.725L34.397-69.725L22.852-39.368L65.638-39.368ZM65.995-29.243C75.108-29.243 82.495-21.856 82.495-12.743C82.495-3.63 75.108 3.757 65.995 3.757C57.552 3.757 50.591-2.584 49.613-10.763C47.748-11.665 46.178-12.084 44.68-12.116C43.066-12.15 41.392-11.737 39.377-10.763C38.399-2.584 31.438 3.757 22.995 3.757C13.882 3.757 6.495-3.63 6.495-12.743C6.495-21.856 13.882-29.243 22.995-29.243C31.572-29.243 38.621-22.698 39.42-14.33C41.22-15.04 42.96-15.403 44.749-15.365C46.363-15.331 47.943-14.971 49.57-14.33C50.369-22.698 57.418-29.243 65.995-29.243ZM22.995-25.993C15.677-25.993 9.745-20.061 9.745-12.743C9.745-5.425 15.677 0.506995 22.995 0.506995C30.313 0.506995 36.245-5.425 36.245-12.743C36.245-20.061 30.313-25.993 22.995-25.993ZM52.745-12.743C52.745-5.425 58.677 0.506995 65.995 0.506995C73.313 0.506995 79.245-5.425 79.245-12.743C79.245-20.061 73.313-25.993 65.995-25.993C58.677-25.993 52.745-20.061 52.745-12.743Z"/> + </g> + <g id="Ultralight-S" transform="matrix(1 0 0 1 515.216 696)"> + <path d="M56.163-70.6485L68.271-38.8145L83.495-38.8145C84.116-38.8145 84.62-38.3105 84.62-37.6895C84.62-37.0675 84.116-36.5645 83.495-36.5645L5.495-36.5645C4.874-36.5645 4.37-37.0675 4.37-37.6895C4.37-38.3105 4.874-38.8145 5.495-38.8145L19.219-38.8145L31.327-70.6485C32.093-72.6625 34.279-73.7475 36.346-73.1395L43.745-70.9635L51.144-73.1395C53.211-73.7475 55.397-72.6625 56.163-70.6485ZM35.711-70.9815C34.772-71.2575 33.778-70.7645 33.43-69.8485L33.43-69.8485L21.626-38.8145L65.864-38.8145L54.06-69.8485C53.712-70.7645 52.718-71.2575 51.779-70.9815L51.779-70.9815L44.158-68.7395C44.02-68.6985 43.88-68.6865 43.744-68.6975C43.609-68.6865 43.47-68.6995 43.332-68.7395L43.332-68.7395ZM65.495-29.1895C74.608-29.1895 81.995-21.8015 81.995-12.6895C81.995-3.57652 74.608 3.81048 65.495 3.81048C56.853 3.81048 49.763-2.83252 49.053-11.2905C47.261-12.1245 45.702-12.5295 44.191-12.5625C42.554-12.5965 40.881-12.1955 38.937-11.2905C38.227-2.83252 31.137 3.81048 22.495 3.81048C13.382 3.81048 5.995-3.57652 5.995-12.6895C5.995-21.8015 13.382-29.1895 22.495-29.1895C31.25-29.1895 38.412-22.3705 38.961-13.7545C40.765-14.4825 42.483-14.8485 44.239-14.8115C45.828-14.7775 47.394-14.4145 49.029-13.7545C49.578-22.3705 56.74-29.1895 65.495-29.1895ZM22.495-26.9395C14.625-26.9395 8.245-20.5595 8.245-12.6895C8.245-4.81952 14.625 1.56048 22.495 1.56048C30.365 1.56048 36.745-4.81952 36.745-12.6895C36.745-20.5595 30.365-26.9395 22.495-26.9395ZM51.245-12.6895C51.245-4.81952 57.625 1.56048 65.495 1.56048C73.365 1.56048 79.745-4.81952 79.745-12.6895C79.745-20.5595 73.365-26.9395 65.495-26.9395C57.625-26.9395 51.245-20.5595 51.245-12.6895Z"/> + </g> + </g> +</svg>
diff --git a/ios/chrome/widget_kit_extension/resources/widget_lens_icon.imageset/Contents.json b/ios/chrome/widget_kit_extension/resources/widget_lens_icon.imageset/Contents.json deleted file mode 100644 index e92b4ae..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_lens_icon.imageset/Contents.json +++ /dev/null
@@ -1,56 +0,0 @@ -{ - "images" : [ - { - "filename" : "widget_lens_icon_light.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "filename" : "widget_lens_icon_dark.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "widget_lens_icon_light@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "filename" : "widget_lens_icon_dark@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "widget_lens_icon_light@3x.png", - "idiom" : "universal", - "scale" : "3x" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "filename" : "widget_lens_icon_dark@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -}
diff --git a/ios/chrome/widget_kit_extension/resources/widget_lens_icon.imageset/widget_lens_icon_dark.png b/ios/chrome/widget_kit_extension/resources/widget_lens_icon.imageset/widget_lens_icon_dark.png deleted file mode 100644 index ebea696..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_lens_icon.imageset/widget_lens_icon_dark.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/widget_kit_extension/resources/widget_lens_icon.imageset/widget_lens_icon_dark@2x.png b/ios/chrome/widget_kit_extension/resources/widget_lens_icon.imageset/widget_lens_icon_dark@2x.png deleted file mode 100644 index f1bfaa92..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_lens_icon.imageset/widget_lens_icon_dark@2x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/widget_kit_extension/resources/widget_lens_icon.imageset/widget_lens_icon_dark@3x.png b/ios/chrome/widget_kit_extension/resources/widget_lens_icon.imageset/widget_lens_icon_dark@3x.png deleted file mode 100644 index 441b115..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_lens_icon.imageset/widget_lens_icon_dark@3x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/widget_kit_extension/resources/widget_lens_icon.imageset/widget_lens_icon_light.png b/ios/chrome/widget_kit_extension/resources/widget_lens_icon.imageset/widget_lens_icon_light.png deleted file mode 100644 index a3bddb1..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_lens_icon.imageset/widget_lens_icon_light.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/widget_kit_extension/resources/widget_lens_icon.imageset/widget_lens_icon_light@2x.png b/ios/chrome/widget_kit_extension/resources/widget_lens_icon.imageset/widget_lens_icon_light@2x.png deleted file mode 100644 index 705ff6c..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_lens_icon.imageset/widget_lens_icon_light@2x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/widget_kit_extension/resources/widget_lens_icon.imageset/widget_lens_icon_light@3x.png b/ios/chrome/widget_kit_extension/resources/widget_lens_icon.imageset/widget_lens_icon_light@3x.png deleted file mode 100644 index 5ba6300..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_lens_icon.imageset/widget_lens_icon_light@3x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/widget_kit_extension/resources/widget_lens_icon.symbolset/Contents.json b/ios/chrome/widget_kit_extension/resources/widget_lens_icon.symbolset/Contents.json new file mode 100644 index 0000000..68c2350 --- /dev/null +++ b/ios/chrome/widget_kit_extension/resources/widget_lens_icon.symbolset/Contents.json
@@ -0,0 +1,12 @@ +{ + "info": { + "author": "xcode", + "version": 1 + }, + "symbols": [ + { + "filename": "lens.cr.svg", + "idiom": "universal" + } + ] +}
diff --git a/ios/chrome/widget_kit_extension/resources/widget_lens_icon.symbolset/lens.cr.svg b/ios/chrome/widget_kit_extension/resources/widget_lens_icon.symbolset/lens.cr.svg new file mode 100644 index 0000000..5b026d1 --- /dev/null +++ b/ios/chrome/widget_kit_extension/resources/widget_lens_icon.symbolset/lens.cr.svg
@@ -0,0 +1,184 @@ +<svg width="3300" height="2200" viewBox="0 0 3300 2200" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g id="camera.lens.cr"> +<g id="Notes"> +<path id="artboard" d="M3300 0H0V2200H3300V0Z" fill="white"/> +<path id="Vector" d="M263 292H3036" stroke="black" stroke-width="0.5"/> +<text id="Weight/Scale Variations" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" font-weight="bold" letter-spacing="0em"><tspan x="263" y="321.727">Weight/Scale Variations</tspan></text> +<text id="Ultralight" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="531.211" y="321.727">Ultralight</tspan></text> +<text id="Thin" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="842.922" y="321.727">Thin</tspan></text> +<text id="Light" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="1137.63" y="321.727">Light</tspan></text> +<text id="Regular" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="1426.34" y="321.727">Regular</tspan></text> +<text id="Medium" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="1721.56" y="321.727">Medium</tspan></text> +<text id="Semibold" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="2014.27" y="321.727">Semibold</tspan></text> +<text id="Bold" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="2325.98" y="321.727">Bold</tspan></text> +<text id="Heavy" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="2617.19" y="321.727">Heavy</tspan></text> +<text id="Black" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="2916.4" y="321.727">Black</tspan></text> +<path id="Vector_2" d="M263 1903H3036" stroke="black" stroke-width="0.5"/> +<g id="Group"> +<path id="Vector_3" d="M272.248 1933.83C273.329 1933.83 274.344 1933.63 275.295 1933.22C276.245 1932.81 277.084 1932.24 277.81 1931.51C278.535 1930.78 279.105 1929.94 279.519 1928.99C279.932 1928.04 280.139 1927.03 280.139 1925.95C280.139 1924.88 279.932 1923.86 279.519 1922.91C279.105 1921.96 278.534 1921.12 277.805 1920.39C277.075 1919.67 276.236 1919.1 275.285 1918.69C274.335 1918.28 273.319 1918.07 272.238 1918.07C271.164 1918.07 270.152 1918.28 269.201 1918.69C268.251 1919.1 267.414 1919.67 266.691 1920.39C265.969 1921.12 265.401 1921.96 264.987 1922.91C264.574 1923.86 264.367 1924.88 264.367 1925.95C264.367 1927.03 264.574 1928.04 264.987 1928.99C265.401 1929.94 265.97 1930.78 266.696 1931.51C267.422 1932.24 268.26 1932.81 269.211 1933.22C270.161 1933.63 271.174 1933.83 272.248 1933.83ZM272.248 1932.35C271.363 1932.35 270.534 1932.18 269.763 1931.85C268.991 1931.53 268.314 1931.07 267.731 1930.48C267.149 1929.9 266.693 1929.22 266.364 1928.44C266.035 1927.67 265.871 1926.84 265.871 1925.95C265.871 1925.07 266.034 1924.24 266.359 1923.46C266.685 1922.69 267.139 1922.01 267.722 1921.42C268.304 1920.83 268.981 1920.38 269.753 1920.05C270.524 1919.72 271.353 1919.55 272.238 1919.55C273.13 1919.55 273.962 1919.72 274.733 1920.05C275.505 1920.38 276.184 1920.83 276.769 1921.42C277.355 1922.01 277.814 1922.69 278.146 1923.46C278.478 1924.24 278.644 1925.07 278.644 1925.95C278.644 1926.84 278.48 1927.67 278.151 1928.44C277.823 1929.22 277.367 1929.9 276.784 1930.48C276.202 1931.07 275.523 1931.53 274.748 1931.85C273.973 1932.18 273.14 1932.35 272.248 1932.35ZM268.654 1925.95C268.654 1926.17 268.723 1926.34 268.859 1926.47C268.996 1926.61 269.178 1926.67 269.406 1926.67H271.516V1928.79C271.516 1929.01 271.581 1929.19 271.711 1929.33C271.841 1929.47 272.017 1929.54 272.238 1929.54C272.453 1929.54 272.631 1929.47 272.771 1929.33C272.91 1929.19 272.98 1929.01 272.98 1928.79V1926.67H275.09C275.311 1926.67 275.49 1926.61 275.627 1926.47C275.764 1926.34 275.832 1926.17 275.832 1925.95C275.832 1925.73 275.764 1925.55 275.627 1925.41C275.49 1925.28 275.311 1925.21 275.09 1925.21H272.98V1923.1C272.98 1922.88 272.91 1922.7 272.771 1922.56C272.631 1922.42 272.453 1922.35 272.238 1922.35C272.017 1922.35 271.841 1922.42 271.711 1922.56C271.581 1922.7 271.516 1922.88 271.516 1923.1V1925.21H269.406C269.178 1925.21 268.996 1925.28 268.859 1925.41C268.723 1925.55 268.654 1925.73 268.654 1925.95Z" fill="black"/> +</g> +<g id="Group_2"> +<path id="Vector_4" d="M293.576 1935.91C294.937 1935.91 296.218 1935.65 297.419 1935.13C298.62 1934.61 299.68 1933.89 300.598 1932.97C301.516 1932.05 302.235 1930.99 302.756 1929.79C303.277 1928.59 303.537 1927.31 303.537 1925.95C303.537 1924.59 303.277 1923.31 302.756 1922.11C302.235 1920.91 301.516 1919.85 300.598 1918.93C299.68 1918.01 298.618 1917.29 297.414 1916.77C296.21 1916.25 294.927 1915.99 293.566 1915.99C292.206 1915.99 290.925 1916.25 289.724 1916.77C288.522 1917.29 287.465 1918.01 286.55 1918.93C285.635 1919.85 284.917 1920.91 284.396 1922.11C283.876 1923.31 283.615 1924.59 283.615 1925.95C283.615 1927.31 283.876 1928.59 284.396 1929.79C284.917 1930.99 285.637 1932.05 286.555 1932.97C287.473 1933.89 288.532 1934.61 289.733 1935.13C290.935 1935.65 292.215 1935.91 293.576 1935.91ZM293.576 1934.25C292.424 1934.25 291.346 1934.04 290.344 1933.61C289.341 1933.18 288.461 1932.58 287.702 1931.82C286.944 1931.06 286.351 1930.18 285.925 1929.18C285.498 1928.18 285.285 1927.1 285.285 1925.95C285.285 1924.8 285.498 1923.72 285.925 1922.72C286.351 1921.71 286.942 1920.83 287.697 1920.07C288.452 1919.31 289.331 1918.71 290.334 1918.29C291.337 1917.86 292.414 1917.65 293.566 1917.65C294.719 1917.65 295.796 1917.86 296.799 1918.29C297.801 1918.71 298.684 1919.31 299.445 1920.07C300.207 1920.83 300.803 1921.71 301.232 1922.72C301.662 1923.72 301.877 1924.8 301.877 1925.95C301.877 1927.1 301.664 1928.18 301.237 1929.18C300.811 1930.18 300.218 1931.06 299.46 1931.82C298.702 1932.58 297.819 1933.18 296.813 1933.61C295.808 1934.04 294.729 1934.25 293.576 1934.25ZM289.045 1925.95C289.045 1926.18 289.123 1926.38 289.279 1926.53C289.436 1926.68 289.637 1926.75 289.885 1926.75H292.756V1929.63C292.756 1929.88 292.831 1930.08 292.98 1930.23C293.13 1930.38 293.322 1930.46 293.557 1930.46C293.804 1930.46 294.004 1930.38 294.157 1930.23C294.31 1930.08 294.387 1929.88 294.387 1929.63V1926.75H297.268C297.515 1926.75 297.715 1926.68 297.868 1926.53C298.021 1926.38 298.098 1926.18 298.098 1925.95C298.098 1925.7 298.021 1925.5 297.868 1925.35C297.715 1925.2 297.515 1925.12 297.268 1925.12H294.387V1922.25C294.387 1921.99 294.31 1921.79 294.157 1921.64C294.004 1921.48 293.804 1921.41 293.557 1921.41C293.322 1921.41 293.13 1921.49 292.98 1921.64C292.831 1921.8 292.756 1922 292.756 1922.25V1925.12H289.885C289.631 1925.12 289.427 1925.2 289.274 1925.35C289.121 1925.5 289.045 1925.7 289.045 1925.95Z" fill="black"/> +</g> +<g id="Group_3"> +<path id="Vector_5" d="M320.617 1938.67C322.01 1938.67 323.34 1938.45 324.606 1938.02C325.872 1937.58 327.036 1936.98 328.097 1936.2C329.158 1935.41 330.081 1934.49 330.866 1933.43C331.65 1932.37 332.259 1931.21 332.692 1929.94C333.125 1928.67 333.341 1927.34 333.341 1925.95C333.341 1924.56 333.125 1923.23 332.692 1921.96C332.259 1920.7 331.65 1919.53 330.866 1918.47C330.081 1917.41 329.158 1916.49 328.097 1915.7C327.036 1914.92 325.871 1914.31 324.601 1913.88C323.332 1913.44 322 1913.23 320.607 1913.23C319.214 1913.23 317.884 1913.44 316.618 1913.88C315.351 1914.31 314.189 1914.92 313.131 1915.7C312.073 1916.49 311.152 1917.41 310.368 1918.47C309.583 1919.53 308.976 1920.7 308.546 1921.96C308.117 1923.23 307.902 1924.56 307.902 1925.95C307.902 1927.34 308.118 1928.67 308.551 1929.94C308.984 1931.21 309.591 1932.37 310.373 1933.43C311.154 1934.49 312.075 1935.41 313.136 1936.2C314.197 1936.98 315.361 1937.58 316.627 1938.02C317.894 1938.45 319.223 1938.67 320.617 1938.67ZM320.617 1936.85C319.412 1936.85 318.265 1936.67 317.174 1936.3C316.084 1935.93 315.086 1935.41 314.181 1934.75C313.276 1934.09 312.49 1933.3 311.823 1932.39C311.155 1931.48 310.639 1930.48 310.275 1929.39C309.91 1928.3 309.728 1927.16 309.728 1925.95C309.728 1924.74 309.91 1923.59 310.275 1922.5C310.639 1921.41 311.154 1920.41 311.818 1919.5C312.482 1918.59 313.266 1917.81 314.171 1917.14C315.076 1916.48 316.074 1915.96 317.165 1915.6C318.255 1915.24 319.402 1915.05 320.607 1915.05C321.818 1915.05 322.969 1915.24 324.059 1915.6C325.15 1915.96 326.149 1916.48 327.057 1917.14C327.965 1917.81 328.751 1918.59 329.415 1919.5C330.08 1920.41 330.596 1921.41 330.963 1922.5C331.331 1923.59 331.515 1924.74 331.515 1925.95C331.522 1927.16 331.343 1928.3 330.978 1929.39C330.613 1930.48 330.098 1931.48 329.43 1932.39C328.763 1933.3 327.975 1934.09 327.067 1934.75C326.159 1935.41 325.159 1935.93 324.069 1936.3C322.978 1936.67 321.828 1936.85 320.617 1936.85ZM314.845 1925.95C314.845 1926.21 314.931 1926.42 315.104 1926.58C315.277 1926.75 315.496 1926.83 315.763 1926.83H319.708V1930.79C319.708 1931.05 319.791 1931.27 319.957 1931.44C320.123 1931.62 320.337 1931.7 320.597 1931.7C320.864 1931.7 321.084 1931.62 321.256 1931.45C321.429 1931.28 321.515 1931.06 321.515 1930.79V1926.83H325.47C325.737 1926.83 325.955 1926.75 326.124 1926.58C326.294 1926.42 326.378 1926.21 326.378 1925.95C326.378 1925.68 326.294 1925.46 326.124 1925.29C325.955 1925.12 325.737 1925.03 325.47 1925.03H321.515V1921.09C321.515 1920.81 321.429 1920.59 321.256 1920.42C321.084 1920.25 320.864 1920.16 320.597 1920.16C320.337 1920.16 320.123 1920.25 319.957 1920.42C319.791 1920.59 319.708 1920.81 319.708 1921.09V1925.03H315.763C315.49 1925.03 315.268 1925.12 315.099 1925.29C314.93 1925.46 314.845 1925.68 314.845 1925.95Z" fill="black"/> +</g> +<text id="Design Variations" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" font-weight="bold" letter-spacing="0em"><tspan x="263" y="1952.73">Design Variations</tspan></text> +<text id="Symbols are supported in up to nine weights and three scales." fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="263" y="1970.73">Symbols are supported in up to nine weights and three scales.</tspan></text> +<text id="For optimal layout with text and other symbols, vertically align" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="263" y="1988.73">For optimal layout with text and other symbols, vertically align</tspan></text> +<text id="symbols with the adjacent text." fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="263" y="2006.73">symbols with the adjacent text.</tspan></text> +<path id="Vector_6" d="M776 1919V1933" stroke="#00AEEF" stroke-width="0.5"/> +<g id="Group_4"> +<path id="Vector_7" d="M779.311 1933.16C779.571 1933.16 779.773 1933.1 779.916 1932.99C780.059 1932.88 780.176 1932.69 780.268 1932.42L781.527 1928.97H787.289L788.549 1932.42C788.64 1932.69 788.757 1932.88 788.9 1932.99C789.044 1933.1 789.242 1933.16 789.496 1933.16C789.757 1933.16 789.963 1933.09 790.116 1932.94C790.269 1932.8 790.346 1932.6 790.346 1932.36C790.346 1932.21 790.31 1932.03 790.238 1931.83L785.658 1919.63C785.541 1919.33 785.382 1919.11 785.18 1918.96C784.978 1918.81 784.721 1918.73 784.408 1918.73C783.803 1918.73 783.393 1919.03 783.178 1919.62L778.598 1931.84C778.526 1932.04 778.49 1932.22 778.49 1932.37C778.49 1932.61 778.563 1932.81 778.71 1932.95C778.856 1933.09 779.057 1933.16 779.311 1933.16ZM782.006 1927.48L784.379 1920.91H784.428L786.801 1927.48H782.006Z" fill="black"/> +</g> +<path id="Vector_8" d="M793.197 1919V1933" stroke="#00AEEF" stroke-width="0.5"/> +<text id="Margins" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" font-weight="bold" letter-spacing="0em"><tspan x="776" y="1952.73">Margins</tspan></text> +<text id="Leading and trailing margins on the left and right side of each symbol" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="776" y="1970.73">Leading and trailing margins on the left and right side of each symbol</tspan></text> +<text id="can be adjusted by modifying the x-location of the margin guidelines." fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="776" y="1988.73">can be adjusted by modifying the x-location of the margin guidelines.</tspan></text> +<text id="Modifications are automatically applied proportionally to all" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="776" y="2006.73">Modifications are automatically applied proportionally to all</tspan></text> +<text id="scales and weights." fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="776" y="2024.73">scales and weights.</tspan></text> +<g id="Group_5"> +<path id="Vector_9" d="M1291.84 1934.86L1293.54 1936.57C1293.97 1937.01 1294.42 1937.21 1294.9 1937.18C1295.38 1937.15 1295.85 1936.87 1296.31 1936.36L1307.01 1924.57L1306.04 1923.59L1295.43 1935.27C1295.25 1935.48 1295.07 1935.59 1294.89 1935.62C1294.71 1935.64 1294.51 1935.54 1294.27 1935.3L1293.1 1934.14C1292.87 1933.91 1292.76 1933.7 1292.79 1933.52C1292.82 1933.34 1292.94 1933.16 1293.14 1932.98L1304.62 1922.18L1303.64 1921.21L1292.05 1932.1C1291.55 1932.56 1291.29 1933.02 1291.25 1933.5C1291.22 1933.97 1291.41 1934.43 1291.84 1934.86ZM1298.26 1916.67C1298.05 1916.87 1297.93 1917.1 1297.91 1917.36C1297.88 1917.62 1297.93 1917.85 1298.04 1918.05C1298.16 1918.23 1298.33 1918.37 1298.56 1918.46C1298.78 1918.55 1299.06 1918.55 1299.38 1918.48C1300.11 1918.31 1300.85 1918.24 1301.6 1918.27C1302.35 1918.3 1303.08 1918.54 1303.79 1919.01L1303.21 1920.47C1303.04 1920.89 1302.99 1921.25 1303.07 1921.56C1303.14 1921.87 1303.31 1922.16 1303.58 1922.43L1305.87 1924.75C1306.12 1924.99 1306.35 1925.14 1306.58 1925.18C1306.81 1925.21 1307.06 1925.21 1307.34 1925.16L1308.4 1924.96L1309.07 1925.63L1309.03 1926.19C1309.01 1926.44 1309.04 1926.67 1309.12 1926.88C1309.2 1927.08 1309.36 1927.31 1309.61 1927.55L1310.37 1928.29C1310.61 1928.53 1310.87 1928.66 1311.15 1928.67C1311.44 1928.68 1311.7 1928.56 1311.93 1928.33L1314.84 1925.41C1315.07 1925.18 1315.19 1924.92 1315.18 1924.64C1315.18 1924.37 1315.05 1924.11 1314.81 1923.87L1314.04 1923.11C1313.8 1922.86 1313.58 1922.7 1313.38 1922.61C1313.17 1922.52 1312.95 1922.49 1312.71 1922.51L1312.13 1922.56L1311.49 1921.92L1311.73 1920.8C1311.8 1920.52 1311.79 1920.26 1311.7 1920.01C1311.6 1919.77 1311.41 1919.5 1311.12 1919.21L1308.92 1917.02C1308.09 1916.19 1307.2 1915.57 1306.26 1915.16C1305.32 1914.75 1304.37 1914.53 1303.42 1914.52C1302.47 1914.5 1301.55 1914.67 1300.66 1915.04C1299.78 1915.4 1298.98 1915.95 1298.26 1916.67ZM1299.75 1917.04C1300.36 1916.6 1301.01 1916.28 1301.7 1916.09C1302.39 1915.9 1303.1 1915.84 1303.8 1915.91C1304.51 1915.98 1305.2 1916.17 1305.87 1916.48C1306.54 1916.8 1307.15 1917.23 1307.7 1917.79L1310.13 1920.21C1310.25 1920.32 1310.32 1920.44 1310.35 1920.55C1310.38 1920.66 1310.38 1920.8 1310.34 1920.97L1310.02 1922.45L1311.52 1923.94L1312.51 1923.88C1312.63 1923.87 1312.72 1923.88 1312.79 1923.9C1312.85 1923.92 1312.94 1923.98 1313.03 1924.08L1313.61 1924.66L1311.17 1927.1L1310.59 1926.52C1310.49 1926.43 1310.43 1926.34 1310.41 1926.28C1310.38 1926.21 1310.37 1926.12 1310.38 1925.99L1310.45 1925.01L1308.95 1923.53L1307.43 1923.78C1307.26 1923.81 1307.14 1923.82 1307.04 1923.79C1306.95 1923.77 1306.84 1923.7 1306.71 1923.58L1304.71 1921.58C1304.58 1921.46 1304.51 1921.35 1304.49 1921.25C1304.48 1921.14 1304.51 1920.99 1304.59 1920.81L1305.46 1918.72C1304.68 1917.99 1303.8 1917.49 1302.83 1917.21C1301.85 1916.93 1300.86 1916.94 1299.84 1917.24C1299.76 1917.26 1299.71 1917.24 1299.69 1917.19C1299.67 1917.14 1299.69 1917.09 1299.75 1917.04Z" fill="black"/> +</g> +<text id="Exporting" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" font-weight="bold" letter-spacing="0em"><tspan x="1289" y="1952.73">Exporting</tspan></text> +<text id="Symbols should be outlined when exporting to ensure the" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="1289" y="1970.73">Symbols should be outlined when exporting to ensure the</tspan></text> +<text id="design is preserved when submitting to Xcode." fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="1289" y="1988.73">design is preserved when submitting to Xcode.</tspan></text> +<text id="template-version" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="2946" y="1932.73">Template v.3.0</tspan></text> +<text id="Requires Xcode 13 or greater" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="2857" y="1950.73">Requires Xcode 13 or greater</tspan></text> +<text id="descriptive-name" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="2889" y="1968.73">Generated from camera</tspan></text> +<text id="Typeset at 100 points" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="2903" y="1986.73">Typeset at 100 points</tspan></text> +<text id="Small" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="263" y="725.727">Small</tspan></text> +<text id="Medium_2" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="263" y="1155.73">Medium</tspan></text> +<text id="Large" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="13" letter-spacing="0em"><tspan x="263" y="1585.73">Large</tspan></text> +</g> +<g id="Guides"> +<g id="H-reference"> +<path id="Vector_10" d="M339.977 695.998H342.662L368.346 628.859H369.029V625.539H367.125L339.977 695.998ZM350.67 671.535H385.973L385.24 669.289H351.451L350.67 671.535ZM394.127 695.998H396.764L369.615 625.539H368.443V628.859L394.127 695.998Z" fill="#27AAE1"/> +</g> +<path id="Baseline-S" d="M263 696H3036" stroke="#27AAE1" stroke-width="0.5"/> +<path id="Capline-S" d="M263 625.539H3036" stroke="#27AAE1" stroke-width="0.5"/> +<g id="H-reference_2"> +<path id="Vector_11" d="M339.977 1126H342.662L368.346 1058.86H369.029V1055.54H367.125L339.977 1126ZM350.67 1101.54H385.973L385.24 1099.29H351.451L350.67 1101.54ZM394.127 1126H396.764L369.615 1055.54H368.443V1058.86L394.127 1126Z" fill="#27AAE1"/> +</g> +<path id="Baseline-M" d="M263 1126H3036" stroke="#27AAE1" stroke-width="0.5"/> +<path id="Capline-M" d="M263 1055.54H3036" stroke="#27AAE1" stroke-width="0.5"/> +<g id="H-reference_3"> +<path id="Vector_12" d="M339.977 1556H342.662L368.346 1488.86H369.029V1485.54H367.125L339.977 1556ZM350.67 1531.54H385.973L385.24 1529.29H351.451L350.67 1531.54ZM394.127 1556H396.764L369.615 1485.54H368.443V1488.86L394.127 1556Z" fill="#27AAE1"/> +</g> +<path id="Baseline-L" d="M263 1556H3036" stroke="#27AAE1" stroke-width="0.5"/> +<path id="Capline-L" d="M263 1485.54H3036" stroke="#27AAE1" stroke-width="0.5"/> +<path id="left-margin-Regular-M" d="M1377.43 1030.79V1150.12" stroke="#00AEEF" stroke-width="0.5"/> +<path id="right-margin-Regular-M" d="M1522.26 1030.79V1150.12" stroke="#00AEEF" stroke-width="0.5"/> +</g> +<g id="Symbols"> +<g id="Black-L"> +<path id="Union" fill-rule="evenodd" clip-rule="evenodd" d="M2916.98 1452.3C2913.03 1452.3 2909.31 1454.09 2906.84 1457.17L2900.59 1464.97C2900.29 1465.34 2900.1 1465.74 2899.99 1466.15C2890.28 1466.38 2884.12 1467.17 2879.05 1469.75C2872.65 1473.01 2867.45 1478.21 2864.19 1484.61C2860.48 1491.88 2860.48 1501.4 2860.48 1520.44V1527.9C2860.48 1546.94 2860.48 1556.46 2864.19 1563.73C2867.45 1570.13 2872.65 1575.33 2879.05 1578.59C2886.32 1582.3 2895.84 1582.3 2914.88 1582.3H2951.91C2970.95 1582.3 2980.47 1582.3 2987.74 1578.59C2994.14 1575.33 2999.34 1570.13 3002.6 1563.73C3006.31 1556.46 3006.31 1546.94 3006.31 1527.9V1520.44C3006.31 1501.4 3006.31 1491.88 3002.6 1484.61C2999.34 1478.21 2994.14 1473.01 2987.74 1469.75C2982.73 1467.2 2976.66 1466.4 2967.15 1466.16L2959.95 1457.17C2957.49 1454.09 2953.75 1452.3 2949.81 1452.3H2916.98ZM2914.88 1486.04H2951.91C2961.76 1486.04 2967.94 1486.06 2972.61 1486.44C2977.04 1486.8 2978.31 1487.39 2978.66 1487.57C2981.3 1488.91 2983.44 1491.05 2984.78 1493.69C2984.96 1494.03 2985.55 1495.31 2985.91 1499.74C2986.29 1504.41 2986.31 1510.59 2986.31 1520.44V1527.9C2986.31 1537.75 2986.29 1543.93 2985.91 1548.6C2985.55 1553.03 2984.96 1554.31 2984.78 1554.65C2983.44 1557.29 2981.3 1559.43 2978.66 1560.77C2978.31 1560.95 2977.04 1561.54 2972.61 1561.9C2967.94 1562.28 2961.76 1562.3 2951.91 1562.3H2914.88C2905.03 1562.3 2898.85 1562.28 2894.18 1561.9C2889.75 1561.54 2888.48 1560.95 2888.13 1560.77C2885.49 1559.43 2883.35 1557.29 2882.01 1554.65C2881.83 1554.31 2881.24 1553.03 2880.88 1548.6C2880.5 1543.93 2880.48 1537.75 2880.48 1527.9V1520.44C2880.48 1510.59 2880.5 1504.41 2880.88 1499.74C2881.24 1495.31 2881.83 1494.03 2882.01 1493.69C2883.35 1491.05 2885.49 1488.91 2888.13 1487.57C2888.48 1487.39 2889.75 1486.8 2894.18 1486.44C2898.85 1486.06 2905.03 1486.04 2914.88 1486.04Z" fill="black"/> +<path id="Rectangle 11906" d="M2907.57 1524.17C2907.57 1509.91 2919.13 1498.35 2933.4 1498.35V1498.35C2947.66 1498.35 2959.22 1509.91 2959.22 1524.17V1524.17C2959.22 1538.43 2947.66 1549.99 2933.4 1549.99V1549.99C2919.13 1549.99 2907.57 1538.43 2907.57 1524.17V1524.17Z" fill="black"/> +</g> +<g id="Heavy-L"> +<path id="Union_2" fill-rule="evenodd" clip-rule="evenodd" d="M2620.27 1452.5C2616.33 1452.5 2612.6 1454.29 2610.13 1457.37L2603.88 1465.17C2603.59 1465.53 2603.4 1465.92 2603.29 1466.32C2593.18 1466.51 2586.92 1467.23 2581.8 1469.84C2575.59 1473 2570.54 1478.05 2567.37 1484.26C2563.78 1491.32 2563.78 1500.56 2563.78 1519.04V1529.7C2563.78 1548.18 2563.78 1557.42 2567.37 1564.48C2570.54 1570.69 2575.59 1575.74 2581.8 1578.9C2588.86 1582.5 2598.1 1582.5 2616.58 1582.5H2656.8C2675.28 1582.5 2684.52 1582.5 2691.58 1578.9C2697.79 1575.74 2702.84 1570.69 2706 1564.48C2709.6 1557.42 2709.6 1548.18 2709.6 1529.7V1519.04C2709.6 1500.56 2709.6 1491.32 2706 1484.26C2702.84 1478.05 2697.79 1473 2691.58 1469.84C2686.52 1467.26 2680.33 1466.53 2670.42 1466.32L2663.25 1457.37C2660.78 1454.29 2657.05 1452.5 2653.1 1452.5H2620.27ZM2616.58 1483.99H2656.8C2666.33 1483.99 2672.42 1484.01 2677.03 1484.38C2681.43 1484.74 2682.91 1485.34 2683.52 1485.65C2686.39 1487.12 2688.72 1489.45 2690.19 1492.32C2690.5 1492.93 2691.1 1494.41 2691.46 1498.81C2691.84 1503.43 2691.85 1509.51 2691.85 1519.04V1529.7C2691.85 1539.23 2691.84 1545.31 2691.46 1549.93C2691.1 1554.33 2690.5 1555.81 2690.19 1556.42C2688.72 1559.29 2686.39 1561.62 2683.52 1563.08C2682.91 1563.4 2681.43 1564 2677.03 1564.36C2672.42 1564.73 2666.33 1564.75 2656.8 1564.75H2616.58C2607.04 1564.75 2600.96 1564.73 2596.35 1564.36C2591.94 1564 2590.46 1563.4 2589.85 1563.08C2586.99 1561.62 2584.65 1559.29 2583.19 1556.42C2582.88 1555.81 2582.28 1554.33 2581.92 1549.93C2581.54 1545.31 2581.53 1539.23 2581.53 1529.7V1519.04C2581.53 1509.51 2581.54 1503.43 2581.92 1498.81C2582.28 1494.41 2582.88 1492.93 2583.19 1492.32C2584.65 1489.45 2586.99 1487.12 2589.85 1485.65C2590.46 1485.34 2591.94 1484.74 2596.35 1484.38C2600.96 1484.01 2607.04 1483.99 2616.58 1483.99Z" fill="black"/> +<path id="Rectangle 11906_2" d="M2610.87 1524.37C2610.87 1510.11 2622.43 1498.55 2636.69 1498.55V1498.55C2650.95 1498.55 2662.51 1510.11 2662.51 1524.37V1524.37C2662.51 1538.63 2650.95 1550.19 2636.69 1550.19V1550.19C2622.43 1550.19 2610.87 1538.63 2610.87 1524.37V1524.37Z" fill="black"/> +</g> +<g id="Bold-L"> +<path id="Union_3" fill-rule="evenodd" clip-rule="evenodd" d="M2323.55 1453.87C2319.61 1453.87 2315.88 1455.66 2313.42 1458.73L2307.17 1466.54C2306.88 1466.89 2306.69 1467.27 2306.58 1467.66C2296.07 1467.82 2289.7 1468.47 2284.54 1471.1C2278.51 1474.17 2273.62 1479.06 2270.55 1485.08C2267.06 1491.93 2267.06 1500.89 2267.06 1518.81V1532.66C2267.06 1550.59 2267.06 1559.55 2270.55 1566.39C2273.62 1572.41 2278.51 1577.31 2284.54 1580.38C2291.38 1583.86 2300.34 1583.86 2318.26 1583.86H2361.68C2379.61 1583.86 2388.57 1583.86 2395.41 1580.38C2401.43 1577.31 2406.33 1572.41 2409.4 1566.39C2412.88 1559.55 2412.88 1550.59 2412.88 1532.66V1518.81C2412.88 1500.89 2412.88 1491.93 2409.4 1485.08C2406.33 1479.06 2401.43 1474.17 2395.41 1471.1C2390.3 1468.49 2384.01 1467.83 2373.69 1467.67L2366.53 1458.74C2364.06 1455.66 2360.33 1453.87 2356.39 1453.87H2323.55ZM2318.26 1482.11H2361.68C2370.88 1482.11 2376.91 1482.12 2381.52 1482.5C2385.96 1482.86 2387.79 1483.49 2388.83 1484.02C2392.12 1485.69 2394.8 1488.37 2396.48 1491.66C2397.01 1492.7 2397.63 1494.53 2398 1498.97C2398.37 1503.58 2398.38 1509.61 2398.38 1518.81V1532.66C2398.38 1541.86 2398.37 1547.89 2398 1552.5C2397.63 1556.94 2397.01 1558.77 2396.48 1559.81C2394.8 1563.1 2392.12 1565.78 2388.83 1567.46C2387.79 1567.99 2385.96 1568.61 2381.52 1568.98C2376.91 1569.35 2370.88 1569.36 2361.68 1569.36H2318.26C2309.06 1569.36 2303.04 1569.35 2298.43 1568.98C2293.99 1568.61 2292.16 1567.99 2291.12 1567.46C2287.83 1565.78 2285.15 1563.1 2283.47 1559.81C2282.94 1558.77 2282.31 1556.94 2281.95 1552.5C2281.57 1547.89 2281.56 1541.86 2281.56 1532.66V1518.81C2281.56 1509.61 2281.57 1503.58 2281.95 1498.97C2282.31 1494.53 2282.94 1492.7 2283.47 1491.66C2285.15 1488.37 2287.83 1485.69 2291.12 1484.02C2292.16 1483.49 2293.99 1482.86 2298.43 1482.5C2303.04 1482.12 2309.06 1482.11 2318.26 1482.11Z" fill="black"/> +<path id="Rectangle 11906_3" d="M2314.15 1525.73C2314.15 1511.47 2325.71 1499.91 2339.97 1499.91V1499.91C2354.23 1499.91 2365.79 1511.47 2365.79 1525.73V1525.73C2365.79 1539.99 2354.23 1551.55 2339.97 1551.55V1551.55C2325.71 1551.55 2314.15 1539.99 2314.15 1525.73V1525.73Z" fill="black"/> +</g> +<g id="Semibold-L"> +<path id="Union_4" fill-rule="evenodd" clip-rule="evenodd" d="M2026.85 1453.87C2022.91 1453.87 2019.18 1455.66 2016.71 1458.74L2010.46 1466.54C2010.18 1466.89 2009.99 1467.26 2009.88 1467.65C1998.95 1467.77 1992.49 1468.34 1987.28 1470.99C1981.45 1473.96 1976.71 1478.71 1973.74 1484.54C1970.36 1491.17 1970.36 1499.85 1970.36 1517.21V1534.27C1970.36 1551.63 1970.36 1560.31 1973.74 1566.94C1976.71 1572.77 1981.45 1577.52 1987.28 1580.49C1993.91 1583.87 2002.6 1583.87 2019.96 1583.87H2066.58C2083.94 1583.87 2092.62 1583.87 2099.25 1580.49C2105.09 1577.52 2109.83 1572.77 2112.8 1566.94C2116.18 1560.31 2116.18 1551.63 2116.18 1534.27V1517.21C2116.18 1499.85 2116.18 1491.17 2112.8 1484.54C2109.83 1478.71 2105.09 1473.96 2099.25 1470.99C2094.1 1468.37 2087.71 1467.78 2076.96 1467.65L2069.83 1458.74C2067.36 1455.66 2063.63 1453.87 2059.68 1453.87H2026.85ZM2019.96 1479.86H2066.58C2075.46 1479.86 2081.39 1479.87 2085.94 1480.24C2090.35 1480.61 2092.39 1481.24 2093.69 1481.91C2097.22 1483.7 2100.09 1486.57 2101.88 1490.1C2102.55 1491.4 2103.19 1493.44 2103.55 1497.85C2103.92 1502.4 2103.93 1508.33 2103.93 1517.21V1534.27C2103.93 1543.15 2103.92 1549.08 2103.55 1553.63C2103.19 1558.04 2102.55 1560.08 2101.88 1561.38C2100.09 1564.91 2097.22 1567.78 2093.69 1569.57C2092.39 1570.24 2090.35 1570.88 2085.94 1571.24C2081.39 1571.61 2075.46 1571.62 2066.58 1571.62H2019.96C2011.07 1571.62 2005.15 1571.61 2000.59 1571.24C1996.18 1570.88 1994.15 1570.24 1992.85 1569.57C1989.32 1567.78 1986.45 1564.91 1984.65 1561.38C1983.99 1560.08 1983.35 1558.04 1982.99 1553.63C1982.62 1549.08 1982.61 1543.15 1982.61 1534.27V1517.21C1982.61 1508.33 1982.62 1502.4 1982.99 1497.85C1983.35 1493.44 1983.99 1491.4 1984.65 1490.1C1986.45 1486.57 1989.32 1483.7 1992.85 1481.91C1994.15 1481.24 1996.18 1480.61 2000.59 1480.24C2005.15 1479.87 2011.07 1479.86 2019.96 1479.86Z" fill="black"/> +<path id="Rectangle 11906_4" d="M2017.45 1525.74C2017.45 1511.48 2029.01 1499.92 2043.27 1499.92V1499.92C2057.53 1499.92 2069.09 1511.48 2069.09 1525.74V1525.74C2069.09 1540 2057.53 1551.56 2043.27 1551.56V1551.56C2029.01 1551.56 2017.45 1540 2017.45 1525.74V1525.74Z" fill="black"/> +</g> +<g id="Medium-L"> +<path id="Union_5" fill-rule="evenodd" clip-rule="evenodd" d="M1730.14 1453.84C1726.2 1453.84 1722.47 1455.63 1720 1458.71L1713.75 1466.52C1713.48 1466.86 1713.29 1467.23 1713.17 1467.61C1701.82 1467.7 1695.26 1468.19 1690.03 1470.86C1684.38 1473.73 1679.79 1478.32 1676.92 1483.97C1673.65 1490.38 1673.65 1498.78 1673.65 1515.59V1535.84C1673.65 1552.64 1673.65 1561.04 1676.92 1567.46C1679.79 1573.11 1684.38 1577.69 1690.03 1580.57C1696.45 1583.84 1704.85 1583.84 1721.65 1583.84H1771.47C1788.27 1583.84 1796.67 1583.84 1803.09 1580.57C1808.73 1577.69 1813.32 1573.11 1816.2 1567.46C1819.47 1561.04 1819.47 1552.64 1819.47 1535.84V1515.59C1819.47 1498.78 1819.47 1490.38 1816.2 1483.97C1813.32 1478.32 1808.73 1473.73 1803.09 1470.86C1797.9 1468.21 1791.42 1467.71 1780.24 1467.61L1773.12 1458.72C1770.65 1455.64 1766.92 1453.84 1762.97 1453.84H1730.14ZM1721.65 1478.34H1771.47C1780.05 1478.34 1785.83 1478.34 1790.3 1478.71C1794.64 1479.06 1796.77 1479.7 1798.21 1480.43C1801.83 1482.28 1804.78 1485.22 1806.62 1488.85C1807.35 1490.29 1807.99 1492.42 1808.35 1496.76C1808.71 1501.22 1808.72 1507.01 1808.72 1515.59V1535.84C1808.72 1544.42 1808.71 1550.21 1808.35 1554.67C1807.99 1559.01 1807.35 1561.14 1806.62 1562.58C1804.78 1566.2 1801.83 1569.15 1798.21 1570.99C1796.77 1571.73 1794.64 1572.36 1790.3 1572.72C1785.83 1573.08 1780.05 1573.09 1771.47 1573.09H1721.65C1713.07 1573.09 1707.28 1573.08 1702.82 1572.72C1698.48 1572.36 1696.35 1571.73 1694.91 1570.99C1691.29 1569.15 1688.34 1566.2 1686.5 1562.58C1685.76 1561.14 1685.13 1559.01 1684.77 1554.67C1684.41 1550.21 1684.4 1544.42 1684.4 1535.84V1515.59C1684.4 1507.01 1684.41 1501.22 1684.77 1496.76C1685.13 1492.42 1685.76 1490.29 1686.5 1488.85C1688.34 1485.22 1691.29 1482.28 1694.91 1480.43C1696.35 1479.7 1698.48 1479.06 1702.82 1478.71C1707.28 1478.34 1713.07 1478.34 1721.65 1478.34Z" fill="black"/> +<path id="Rectangle 11906_5" d="M1720.74 1525.71C1720.74 1511.45 1732.3 1499.89 1746.56 1499.89V1499.89C1760.82 1499.89 1772.38 1511.45 1772.38 1525.71V1525.71C1772.38 1539.97 1760.82 1551.53 1746.56 1551.53V1551.53C1732.3 1551.53 1720.74 1539.97 1720.74 1525.71V1525.71Z" fill="black"/> +</g> +<g id="Regular-L"> +<path id="Union_6" fill-rule="evenodd" clip-rule="evenodd" d="M1433.49 1453.82C1429.55 1453.82 1425.82 1455.61 1423.36 1458.68L1417.1 1466.49C1416.83 1466.83 1416.64 1467.19 1416.53 1467.56C1404.28 1467.6 1397.57 1467.92 1392.29 1470.61C1387.02 1473.29 1382.74 1477.58 1380.05 1482.85C1377 1488.84 1377 1496.68 1377 1512.36V1539.01C1377 1554.69 1377 1562.54 1380.05 1568.53C1382.74 1573.79 1387.02 1578.08 1392.29 1580.76C1398.28 1583.81 1406.12 1583.81 1421.8 1583.81H1478.02C1493.7 1583.81 1501.54 1583.81 1507.53 1580.76C1512.8 1578.08 1517.09 1573.79 1519.77 1568.53C1522.82 1562.54 1522.82 1554.69 1522.82 1539.01V1512.36C1522.82 1496.68 1522.82 1488.84 1519.77 1482.85C1517.09 1477.58 1512.8 1473.29 1507.53 1470.61C1502.3 1467.94 1495.65 1467.61 1483.58 1467.56L1476.47 1458.69C1474 1455.61 1470.27 1453.82 1466.32 1453.82H1433.49ZM1421.8 1476.06H1478.02C1486 1476.06 1491.48 1476.07 1495.72 1476.41C1499.86 1476.75 1502.08 1477.37 1503.67 1478.18C1507.34 1480.05 1510.33 1483.04 1512.2 1486.71C1513.01 1488.3 1513.63 1490.52 1513.97 1494.66C1514.32 1498.9 1514.32 1504.38 1514.32 1512.36V1539.01C1514.32 1546.99 1514.32 1552.47 1513.97 1556.71C1513.63 1560.85 1513.01 1563.07 1512.2 1564.67C1510.33 1568.34 1507.34 1571.32 1503.67 1573.19C1502.08 1574 1499.86 1574.62 1495.72 1574.96C1491.48 1575.31 1486 1575.31 1478.02 1575.31H1421.8C1413.82 1575.31 1408.35 1575.31 1404.1 1574.96C1399.96 1574.62 1397.74 1574 1396.15 1573.19C1392.48 1571.32 1389.5 1568.34 1387.63 1564.67C1386.81 1563.07 1386.19 1560.85 1385.85 1556.71C1385.51 1552.47 1385.5 1546.99 1385.5 1539.01V1512.36C1385.5 1504.38 1385.51 1498.9 1385.85 1494.66C1386.19 1490.52 1386.81 1488.3 1387.63 1486.71C1389.5 1483.04 1392.48 1480.05 1396.15 1478.18C1397.74 1477.37 1399.96 1476.75 1404.1 1476.41C1408.35 1476.07 1413.82 1476.06 1421.8 1476.06Z" fill="black"/> +<path id="Rectangle 11906_6" d="M1424.09 1525.68C1424.09 1511.42 1435.65 1499.86 1449.91 1499.86V1499.86C1464.17 1499.86 1475.73 1511.42 1475.73 1525.68V1525.68C1475.73 1539.94 1464.17 1551.5 1449.91 1551.5V1551.5C1435.65 1551.5 1424.09 1539.94 1424.09 1525.68V1525.68Z" fill="black"/> +</g> +<g id="Light-L"> +<path id="Union_7" fill-rule="evenodd" clip-rule="evenodd" d="M1136.71 1453.92C1132.77 1453.92 1129.04 1455.71 1126.58 1458.78L1120.32 1466.59C1120.06 1466.93 1119.87 1467.29 1119.75 1467.66C1106.56 1467.67 1099.71 1467.8 1094.42 1470.49C1089.53 1472.99 1085.55 1476.96 1083.06 1481.86C1080.22 1487.42 1080.22 1494.7 1080.22 1509.26V1542.31C1080.22 1556.88 1080.22 1564.16 1083.06 1569.72C1085.55 1574.61 1089.53 1578.59 1094.42 1581.08C1099.98 1583.91 1107.26 1583.91 1121.82 1583.91H1184.44C1199.01 1583.91 1206.29 1583.91 1211.85 1581.08C1216.74 1578.59 1220.72 1574.61 1223.21 1569.72C1226.04 1564.16 1226.04 1556.88 1226.04 1542.31V1509.26C1226.04 1494.7 1226.04 1487.42 1223.21 1481.86C1220.72 1476.96 1216.74 1472.99 1211.85 1470.49C1206.59 1467.82 1199.81 1467.67 1186.8 1467.66L1179.69 1458.79C1177.22 1455.71 1173.49 1453.92 1169.55 1453.92H1136.71ZM1121.82 1474.91H1184.44C1191.84 1474.91 1196.96 1474.92 1200.93 1475.24C1204.82 1475.56 1206.97 1476.14 1208.56 1476.95C1212.08 1478.75 1214.95 1481.62 1216.75 1485.15C1217.56 1486.74 1218.15 1488.89 1218.46 1492.77C1218.79 1496.75 1218.79 1501.86 1218.79 1509.26V1542.31C1218.79 1549.72 1218.79 1554.83 1218.46 1558.8C1218.15 1562.69 1217.56 1564.84 1216.75 1566.43C1214.95 1569.96 1212.08 1572.82 1208.56 1574.62C1206.97 1575.43 1204.82 1576.02 1200.93 1576.33C1196.96 1576.66 1191.84 1576.66 1184.44 1576.66H1121.82C1114.42 1576.66 1109.31 1576.66 1105.34 1576.33C1101.45 1576.02 1099.3 1575.43 1097.71 1574.62C1094.18 1572.82 1091.31 1569.96 1089.52 1566.43C1088.71 1564.84 1088.12 1562.69 1087.8 1558.8C1087.48 1554.83 1087.47 1549.72 1087.47 1542.31V1509.26C1087.47 1501.86 1087.48 1496.75 1087.8 1492.77C1088.12 1488.89 1088.71 1486.74 1089.52 1485.15C1091.31 1481.62 1094.18 1478.75 1097.71 1476.95C1099.3 1476.14 1101.45 1475.56 1105.34 1475.24C1109.31 1474.92 1114.42 1474.91 1121.82 1474.91Z" fill="black"/> +<path id="Rectangle 11906_7" d="M1127.31 1525.79C1127.31 1511.53 1138.87 1499.96 1153.13 1499.96V1499.96C1167.39 1499.96 1178.95 1511.53 1178.95 1525.79V1525.79C1178.95 1540.05 1167.39 1551.61 1153.13 1551.61V1551.61C1138.87 1551.61 1127.31 1540.05 1127.31 1525.79V1525.79Z" fill="black"/> +</g> +<g id="Thin-L"> +<path id="Union_8" fill-rule="evenodd" clip-rule="evenodd" d="M840.003 1454.01C836.062 1454.01 832.333 1455.8 829.868 1458.88L823.614 1466.68C823.225 1467.17 823.007 1467.71 822.935 1468.25C809.811 1468.26 802.986 1468.39 797.708 1471.08C792.816 1473.58 788.839 1477.55 786.346 1482.45C783.512 1488.01 783.512 1495.29 783.512 1509.85V1541.9C783.512 1556.46 783.512 1563.74 786.346 1569.3C788.839 1574.2 792.816 1578.17 797.708 1580.67C803.27 1583.5 810.551 1583.5 825.112 1583.5H887.733C902.295 1583.5 909.575 1583.5 915.137 1580.67C920.029 1578.17 924.007 1574.2 926.499 1569.3C929.333 1563.74 929.333 1556.46 929.333 1541.9V1509.85C929.333 1495.29 929.333 1488.01 926.499 1482.45C924.007 1477.55 920.029 1473.58 915.137 1471.08C909.937 1468.43 903.236 1468.26 890.487 1468.25L882.981 1458.88C880.514 1455.8 876.781 1454.01 872.836 1454.01H840.003ZM825.112 1472.25H887.733C895.08 1472.25 900.349 1472.25 904.484 1472.59C908.572 1472.92 911.198 1473.57 913.321 1474.65C917.461 1476.76 920.826 1480.12 922.935 1484.26C924.017 1486.39 924.658 1489.01 924.992 1493.1C925.33 1497.23 925.333 1502.5 925.333 1509.85V1541.9C925.333 1549.25 925.33 1554.52 924.992 1558.65C924.658 1562.74 924.017 1565.36 922.935 1567.49C920.826 1571.63 917.461 1574.99 913.321 1577.1C911.198 1578.18 908.572 1578.83 904.484 1579.16C900.349 1579.5 895.08 1579.5 887.733 1579.5H825.112C817.766 1579.5 812.496 1579.5 808.361 1579.16C804.273 1578.83 801.647 1578.18 799.524 1577.1C795.385 1574.99 792.019 1571.63 789.91 1567.49C788.828 1565.36 788.187 1562.74 787.853 1558.65C787.515 1554.52 787.512 1549.25 787.512 1541.9V1509.85C787.512 1502.5 787.515 1497.23 787.853 1493.1C788.187 1489.01 788.828 1486.39 789.91 1484.26C792.019 1480.12 795.385 1476.76 799.524 1474.65C801.647 1473.57 804.273 1472.92 808.361 1472.59C812.496 1472.25 817.766 1472.25 825.112 1472.25Z" fill="black"/> +<path id="Rectangle 11906_8" d="M830.602 1525.88C830.602 1511.62 842.162 1500.06 856.422 1500.06V1500.06C870.683 1500.06 882.243 1511.62 882.243 1525.88V1525.88C882.243 1540.14 870.683 1551.7 856.422 1551.7V1551.7C842.162 1551.7 830.602 1540.14 830.602 1525.88V1525.88Z" fill="black"/> +</g> +<g id="Ultralight-L"> +<path id="Union_9" fill-rule="evenodd" clip-rule="evenodd" d="M543.01 1454.09C539.064 1454.09 535.332 1455.88 532.865 1458.96L524.956 1468.83H523.312C510.431 1468.83 503.99 1468.83 499.07 1471.33C494.743 1473.54 491.224 1477.06 489.019 1481.39C486.512 1486.31 486.512 1492.75 486.512 1505.63V1546.28C486.512 1559.16 486.512 1565.6 489.019 1570.52C491.224 1574.85 494.743 1578.37 499.07 1580.57C503.99 1583.08 510.431 1583.08 523.312 1583.08H595.533C608.414 1583.08 614.855 1583.08 619.775 1580.57C624.103 1578.37 627.621 1574.85 629.826 1570.52C632.333 1565.6 632.333 1559.16 632.333 1546.28V1505.63C632.333 1492.75 632.333 1486.31 629.826 1481.39C627.621 1477.06 624.103 1473.54 619.775 1471.33C614.855 1468.83 608.414 1468.83 595.533 1468.83H593.89L585.981 1458.96C583.514 1455.88 579.782 1454.09 575.836 1454.09H543.01ZM523.312 1471.33H595.533C602.015 1471.33 606.726 1471.33 610.436 1471.63C614.117 1471.93 616.591 1472.52 618.64 1473.56C622.497 1475.53 625.633 1478.66 627.599 1482.52C628.643 1484.57 629.227 1487.04 629.528 1490.73C629.831 1494.44 629.833 1499.15 629.833 1505.63V1546.28C629.833 1552.76 629.831 1557.47 629.528 1561.18C629.227 1564.86 628.643 1567.34 627.599 1569.38C625.633 1573.24 622.497 1576.38 618.64 1578.34C616.591 1579.39 614.117 1579.97 610.436 1580.27C606.726 1580.58 602.015 1580.58 595.533 1580.58H523.312C516.83 1580.58 512.119 1580.58 508.409 1580.27C504.729 1579.97 502.254 1579.39 500.205 1578.34C496.348 1576.38 493.212 1573.24 491.247 1569.38C490.203 1567.34 489.618 1564.86 489.317 1561.18C489.014 1557.47 489.012 1552.76 489.012 1546.28V1505.63C489.012 1499.15 489.014 1494.44 489.317 1490.73C489.618 1487.04 490.203 1484.57 491.247 1482.52C493.212 1478.66 496.348 1475.53 500.205 1473.56C502.254 1472.52 504.729 1471.93 508.409 1471.63C512.119 1471.33 516.83 1471.33 523.312 1471.33Z" fill="black"/> +<path id="Rectangle 11906_9" d="M533.602 1525.95C533.602 1511.69 545.162 1500.13 559.422 1500.13V1500.13C573.683 1500.13 585.243 1511.69 585.243 1525.95V1525.95C585.243 1540.21 573.683 1551.77 559.422 1551.77V1551.77C545.162 1551.77 533.602 1540.21 533.602 1525.95V1525.95Z" fill="black"/> +</g> +<g id="Black-M"> +<path id="Union_10" fill-rule="evenodd" clip-rule="evenodd" d="M2920.33 1039.53C2917.91 1039.53 2915.61 1040.63 2914.09 1042.53L2908.27 1049.79C2905.23 1049.8 2903.38 1049.86 2901.77 1050.12C2890.22 1051.95 2881.16 1061.01 2879.33 1072.56C2879 1074.66 2879 1077.17 2879 1082.19V1104.13C2879 1109.14 2879 1111.65 2879.33 1113.75C2881.16 1125.3 2890.22 1134.36 2901.77 1136.19C2903.87 1136.53 2906.38 1136.53 2911.4 1136.53H2955.4C2960.41 1136.53 2962.92 1136.53 2965.02 1136.19C2976.57 1134.36 2985.63 1125.3 2987.46 1113.75C2987.8 1111.65 2987.8 1109.14 2987.8 1104.13V1082.19C2987.8 1077.17 2987.8 1074.66 2987.46 1072.56C2985.63 1061.01 2976.57 1051.95 2965.02 1050.12C2963.41 1049.86 2961.56 1049.8 2958.52 1049.79L2952.7 1042.53C2951.18 1040.63 2948.89 1039.53 2946.46 1039.53H2920.33ZM2911.4 1067.04H2955.4C2961.07 1067.04 2961.9 1067.09 2962.32 1067.16C2966.49 1067.82 2969.77 1071.09 2970.43 1075.26C2970.49 1075.68 2970.55 1076.51 2970.55 1082.19V1104.13C2970.55 1109.8 2970.49 1110.63 2970.43 1111.05C2969.77 1115.22 2966.49 1118.49 2962.32 1119.16C2961.9 1119.22 2961.07 1119.28 2955.4 1119.28H2911.4C2905.72 1119.28 2904.89 1119.22 2904.47 1119.16C2900.3 1118.49 2897.03 1115.22 2896.37 1111.05C2896.3 1110.63 2896.25 1109.8 2896.25 1104.13V1082.19C2896.25 1076.51 2896.3 1075.68 2896.37 1075.26C2897.03 1071.09 2900.3 1067.82 2904.47 1067.16C2904.89 1067.09 2905.72 1067.04 2911.4 1067.04Z" fill="black"/> +<path id="Rectangle 11906_10" d="M2914.13 1093.15C2914.13 1082.51 2922.76 1073.89 2933.4 1073.89V1073.89C2944.04 1073.89 2952.66 1082.51 2952.66 1093.15V1093.15C2952.66 1103.79 2944.04 1112.42 2933.4 1112.42V1112.42C2922.76 1112.42 2914.13 1103.79 2914.13 1093.15V1093.15Z" fill="black"/> +</g> +<g id="Heavy-M"> +<path id="Union_11" fill-rule="evenodd" clip-rule="evenodd" d="M2623.63 1040.53C2621.2 1040.53 2618.91 1041.63 2617.39 1043.53L2611.57 1050.79C2607.4 1050.79 2605.22 1050.8 2603.38 1051.09C2592.69 1052.79 2584.3 1061.18 2582.6 1071.87C2582.29 1073.82 2582.29 1076.14 2582.29 1080.79V1107.53C2582.29 1112.17 2582.29 1114.49 2582.6 1116.44C2584.3 1127.13 2592.69 1135.52 2603.38 1137.22C2605.33 1137.53 2607.65 1137.53 2612.29 1137.53H2661.09C2665.74 1137.53 2668.06 1137.53 2670 1137.22C2680.7 1135.52 2689.09 1127.13 2690.79 1116.44C2691.09 1114.49 2691.09 1112.17 2691.09 1107.53V1080.79C2691.09 1076.14 2691.09 1073.82 2690.79 1071.87C2689.09 1061.18 2680.7 1052.79 2670 1051.09C2668.16 1050.8 2665.98 1050.79 2661.81 1050.79L2656 1043.53C2654.48 1041.63 2652.18 1040.53 2649.76 1040.53H2623.63ZM2612.29 1065.79H2661.09C2666.31 1065.79 2667.17 1065.83 2667.66 1065.91C2671.94 1066.59 2675.29 1069.94 2675.97 1074.22C2676.05 1074.7 2676.09 1075.57 2676.09 1080.79V1107.53C2676.09 1112.74 2676.05 1113.61 2675.97 1114.09C2675.29 1118.37 2671.94 1121.72 2667.66 1122.4C2667.17 1122.48 2666.31 1122.53 2661.09 1122.53H2612.29C2607.08 1122.53 2606.21 1122.48 2605.73 1122.4C2601.45 1121.72 2598.09 1118.37 2597.42 1114.09C2597.34 1113.61 2597.29 1112.74 2597.29 1107.53V1080.79C2597.29 1075.57 2597.34 1074.7 2597.42 1074.22C2598.09 1069.94 2601.45 1066.59 2605.73 1065.91C2606.21 1065.83 2607.08 1065.79 2612.29 1065.79Z" fill="black"/> +<path id="Rectangle 11906_11" d="M2617.43 1094.15C2617.43 1083.51 2626.05 1074.89 2636.69 1074.89V1074.89C2647.33 1074.89 2655.96 1083.51 2655.96 1094.15V1094.15C2655.96 1104.79 2647.33 1113.42 2636.69 1113.42V1113.42C2626.05 1113.42 2617.43 1104.79 2617.43 1094.15V1094.15Z" fill="black"/> +</g> +<g id="Bold-M"> +<path id="Union_12" fill-rule="evenodd" clip-rule="evenodd" d="M2326.91 1040.53C2324.49 1040.53 2322.19 1041.63 2320.67 1043.53L2314.86 1050.78H2314.38C2309.92 1050.78 2307.69 1050.78 2305.82 1051.08C2295.55 1052.7 2287.5 1060.76 2285.87 1071.03C2285.58 1072.89 2285.58 1075.12 2285.58 1079.58V1108.72C2285.58 1113.18 2285.58 1115.41 2285.87 1117.28C2287.5 1127.55 2295.55 1135.6 2305.82 1137.23C2307.69 1137.52 2309.92 1137.52 2314.38 1137.52H2365.58C2370.04 1137.52 2372.27 1137.52 2374.13 1137.23C2384.4 1135.6 2392.45 1127.55 2394.08 1117.28C2394.38 1115.41 2394.38 1113.18 2394.38 1108.72V1079.58C2394.38 1075.12 2394.38 1072.89 2394.08 1071.03C2392.45 1060.76 2384.4 1052.7 2374.13 1051.08C2372.27 1050.78 2370.04 1050.78 2365.58 1050.78H2365.1L2359.28 1043.53C2357.76 1041.63 2355.47 1040.53 2353.04 1040.53H2326.91ZM2314.38 1063.28H2365.58C2370.51 1063.28 2371.53 1063.32 2372.18 1063.42C2377.1 1064.2 2380.96 1068.06 2381.73 1072.98C2381.84 1073.63 2381.88 1074.64 2381.88 1079.58V1108.72C2381.88 1113.66 2381.84 1114.67 2381.73 1115.32C2380.96 1120.24 2377.1 1124.1 2372.18 1124.88C2371.53 1124.98 2370.51 1125.02 2365.58 1125.02H2314.38C2309.44 1125.02 2308.43 1124.98 2307.78 1124.88C2302.86 1124.1 2299 1120.24 2298.22 1115.32C2298.11 1114.67 2298.08 1113.66 2298.08 1108.72V1079.58C2298.08 1074.64 2298.11 1073.63 2298.22 1072.98C2299 1068.06 2302.86 1064.2 2307.78 1063.42C2308.43 1063.32 2309.44 1063.28 2314.38 1063.28Z" fill="black"/> +<path id="Rectangle 11906_12" d="M2320.71 1094.15C2320.71 1083.51 2329.34 1074.88 2339.98 1074.88V1074.88C2350.62 1074.88 2359.24 1083.51 2359.24 1094.15V1094.15C2359.24 1104.79 2350.62 1113.41 2339.98 1113.41V1113.41C2329.34 1113.41 2320.71 1104.79 2320.71 1094.15V1094.15Z" fill="black"/> +</g> +<g id="Semibold-M"> +<path id="Union_13" fill-rule="evenodd" clip-rule="evenodd" d="M2030.2 1039.89C2027.78 1039.89 2025.48 1040.99 2023.96 1042.89L2018.15 1050.14H2016.47C2012.19 1050.14 2010.06 1050.14 2008.27 1050.43C1998.43 1051.99 1990.71 1059.71 1989.15 1069.55C1988.87 1071.33 1988.87 1073.47 1988.87 1077.74V1109.28C1988.87 1113.56 1988.87 1115.69 1989.15 1117.48C1990.71 1127.32 1998.43 1135.04 2008.27 1136.6C2010.06 1136.88 2012.19 1136.88 2016.47 1136.88H2070.07C2074.34 1136.88 2076.48 1136.88 2078.26 1136.6C2088.11 1135.04 2095.82 1127.32 2097.38 1117.48C2097.67 1115.69 2097.67 1113.56 2097.67 1109.28V1077.74C2097.67 1073.47 2097.67 1071.33 2097.38 1069.55C2095.82 1059.71 2088.11 1051.99 2078.26 1050.43C2076.48 1050.14 2074.34 1050.14 2070.07 1050.14H2068.39L2062.57 1042.89C2061.05 1040.99 2058.76 1039.89 2056.33 1039.89H2030.2ZM2016.47 1060.89H2070.07C2074.75 1060.89 2075.84 1060.93 2076.58 1061.05C2081.82 1061.88 2085.93 1065.99 2086.76 1071.23C2086.88 1071.97 2086.92 1073.06 2086.92 1077.74V1109.28C2086.92 1113.97 2086.88 1115.06 2086.76 1115.8C2085.93 1121.04 2081.82 1125.15 2076.58 1125.98C2075.84 1126.1 2074.75 1126.13 2070.07 1126.13H2016.47C2011.78 1126.13 2010.69 1126.1 2009.95 1125.98C2004.71 1125.15 2000.6 1121.04 1999.77 1115.8C1999.65 1115.06 1999.62 1113.97 1999.62 1109.28V1077.74C1999.62 1073.06 1999.65 1071.97 1999.77 1071.23C2000.6 1065.99 2004.71 1061.88 2009.95 1061.05C2010.69 1060.93 2011.78 1060.89 2016.47 1060.89Z" fill="black"/> +<path id="Rectangle 11906_13" d="M2024 1093.51C2024 1082.87 2032.63 1074.25 2043.27 1074.25V1074.25C2053.91 1074.25 2062.53 1082.87 2062.53 1093.51V1093.51C2062.53 1104.15 2053.91 1112.78 2043.27 1112.78V1112.78C2032.63 1112.78 2024 1104.15 2024 1093.51V1093.51Z" fill="black"/> +</g> +<g id="Medium-M"> +<path id="Union_14" fill-rule="evenodd" clip-rule="evenodd" d="M1733.49 1039.76C1731.06 1039.76 1728.77 1040.86 1727.25 1042.76L1721.43 1050.01H1717.35C1713.45 1050.01 1711.5 1050.01 1709.87 1050.27C1700.88 1051.69 1693.83 1058.74 1692.41 1067.73C1692.15 1069.36 1692.15 1071.31 1692.15 1075.21V1111.55C1692.15 1115.45 1692.15 1117.4 1692.41 1119.04C1693.83 1128.02 1700.88 1135.07 1709.87 1136.49C1711.5 1136.75 1713.45 1136.75 1717.35 1136.75H1775.75C1779.65 1136.75 1781.61 1136.75 1783.24 1136.49C1792.22 1135.07 1799.27 1128.02 1800.69 1119.04C1800.95 1117.4 1800.95 1115.45 1800.95 1111.55V1075.21C1800.95 1071.31 1800.95 1069.36 1800.69 1067.73C1799.27 1058.74 1792.22 1051.69 1783.24 1050.27C1781.61 1050.01 1779.65 1050.01 1775.75 1050.01H1771.67L1765.86 1042.76C1764.34 1040.86 1762.04 1039.76 1759.62 1039.76H1733.49ZM1717.35 1059.51H1775.75C1780.02 1059.51 1781.04 1059.54 1781.75 1059.65C1786.67 1060.43 1790.53 1064.29 1791.31 1069.21C1791.42 1069.92 1791.45 1070.95 1791.45 1075.21V1111.55C1791.45 1115.82 1791.42 1116.84 1791.31 1117.55C1790.53 1122.47 1786.67 1126.33 1781.75 1127.11C1781.04 1127.22 1780.02 1127.25 1775.75 1127.25H1717.35C1713.09 1127.25 1712.06 1127.22 1711.35 1127.11C1706.43 1126.33 1702.57 1122.47 1701.79 1117.55C1701.68 1116.84 1701.65 1115.82 1701.65 1111.55V1075.21C1701.65 1070.95 1701.68 1069.92 1701.79 1069.21C1702.57 1064.29 1706.43 1060.43 1711.35 1059.65C1712.06 1059.54 1713.09 1059.51 1717.35 1059.51Z" fill="black"/> +<path id="Rectangle 11906_14" d="M1727.29 1093.38C1727.29 1082.74 1735.91 1074.11 1746.55 1074.11V1074.11C1757.19 1074.11 1765.82 1082.74 1765.82 1093.38V1093.38C1765.82 1104.02 1757.19 1112.64 1746.55 1112.64V1112.64C1735.91 1112.64 1727.29 1104.02 1727.29 1093.38V1093.38Z" fill="black"/> +</g> +<g id="Regular-M"> +<path id="Union_15" fill-rule="evenodd" clip-rule="evenodd" d="M1436.78 1039.77C1434.35 1039.77 1432.06 1040.87 1430.54 1042.77L1424.72 1050.02H1418.24C1414.71 1050.02 1412.95 1050.02 1411.47 1050.26C1403.34 1051.55 1396.96 1057.92 1395.68 1066.05C1395.44 1067.53 1395.44 1069.29 1395.44 1072.82V1113.96C1395.44 1117.49 1395.44 1119.26 1395.68 1120.74C1396.96 1128.87 1403.34 1135.24 1411.47 1136.53C1412.95 1136.76 1414.71 1136.76 1418.24 1136.76H1481.44C1484.97 1136.76 1486.74 1136.76 1488.21 1136.53C1496.34 1135.24 1502.72 1128.87 1504.01 1120.74C1504.24 1119.26 1504.24 1117.49 1504.24 1113.96V1072.82C1504.24 1069.29 1504.24 1067.53 1504.01 1066.05C1502.72 1057.92 1496.34 1051.55 1488.21 1050.26C1486.74 1050.02 1484.97 1050.02 1481.44 1050.02H1474.96L1469.15 1042.77C1467.63 1040.87 1465.33 1039.77 1462.9 1039.77H1436.78ZM1418.24 1058.02H1481.44C1485.28 1058.02 1486.26 1058.05 1486.96 1058.16C1491.67 1058.9 1495.36 1062.6 1496.11 1067.3C1496.22 1068 1496.24 1068.99 1496.24 1072.82V1113.96C1496.24 1117.8 1496.22 1118.79 1496.11 1119.48C1495.36 1124.19 1491.67 1127.88 1486.96 1128.63C1486.26 1128.74 1485.28 1128.76 1481.44 1128.76H1418.24C1414.41 1128.76 1413.42 1128.74 1412.72 1128.63C1408.01 1127.88 1404.32 1124.19 1403.58 1119.48C1403.47 1118.79 1403.44 1117.8 1403.44 1113.96V1072.82C1403.44 1068.99 1403.47 1068 1403.58 1067.3C1404.32 1062.6 1408.01 1058.9 1412.72 1058.16C1413.42 1058.05 1414.41 1058.02 1418.24 1058.02Z" fill="black"/> +<path id="Rectangle 11906_15" d="M1430.58 1093.39C1430.58 1082.75 1439.2 1074.12 1449.84 1074.12V1074.12C1460.48 1074.12 1469.11 1082.75 1469.11 1093.39V1093.39C1469.11 1104.03 1460.48 1112.66 1449.84 1112.66V1112.66C1439.2 1112.66 1430.58 1104.03 1430.58 1093.39V1093.39Z" fill="black"/> +</g> +<g id="Light-M"> +<path id="Union_16" fill-rule="evenodd" clip-rule="evenodd" d="M1140.07 1040.96C1137.64 1040.96 1135.34 1042.06 1133.83 1043.95L1128.01 1051.21H1119.13C1115.97 1051.21 1114.39 1051.21 1113.07 1051.42C1105.8 1052.57 1100.09 1058.28 1098.94 1065.55C1098.73 1066.87 1098.73 1068.45 1098.73 1071.61V1117.55C1098.73 1120.71 1098.73 1122.29 1098.94 1123.61C1100.09 1130.88 1105.8 1136.59 1113.07 1137.74C1114.39 1137.95 1115.97 1137.95 1119.13 1137.95H1187.13C1190.29 1137.95 1191.87 1137.95 1193.19 1137.74C1200.47 1136.59 1206.17 1130.88 1207.32 1123.61C1207.53 1122.29 1207.53 1120.71 1207.53 1117.55V1071.61C1207.53 1068.45 1207.53 1066.87 1207.32 1065.55C1206.17 1058.28 1200.47 1052.57 1193.19 1051.42C1191.87 1051.21 1190.29 1051.21 1187.13 1051.21H1178.25L1172.44 1043.95C1170.92 1042.06 1168.62 1040.96 1166.19 1040.96H1140.07ZM1119.13 1057.21H1187.13C1190.52 1057.21 1191.51 1057.23 1192.25 1057.35C1196.96 1058.09 1200.65 1061.78 1201.4 1066.49C1201.51 1067.23 1201.53 1068.22 1201.53 1071.61V1117.55C1201.53 1120.94 1201.51 1121.93 1201.4 1122.67C1200.65 1127.38 1196.96 1131.07 1192.25 1131.82C1191.51 1131.93 1190.52 1131.95 1187.13 1131.95H1119.13C1115.74 1131.95 1114.75 1131.93 1114.01 1131.82C1109.3 1131.07 1105.61 1127.38 1104.87 1122.67C1104.75 1121.93 1104.73 1120.94 1104.73 1117.55V1071.61C1104.73 1068.22 1104.75 1067.23 1104.87 1066.49C1105.61 1061.78 1109.3 1058.09 1114.01 1057.35C1114.75 1057.23 1115.74 1057.21 1119.13 1057.21Z" fill="black"/> +<path id="Rectangle 11906_16" d="M1133.87 1094.58C1133.87 1083.94 1142.49 1075.31 1153.13 1075.31V1075.31C1163.77 1075.31 1172.4 1083.94 1172.4 1094.58V1094.58C1172.4 1105.22 1163.77 1113.84 1153.13 1113.84V1113.84C1142.49 1113.84 1133.87 1105.22 1133.87 1094.58V1094.58Z" fill="black"/> +</g> +<g id="Thin-M"> +<path id="Union_17" fill-rule="evenodd" clip-rule="evenodd" d="M843.36 1040.88C840.932 1040.88 838.635 1041.99 837.117 1043.88L830.899 1051.64H821.222C818.249 1051.64 816.763 1051.64 815.519 1051.84C808.673 1052.92 803.303 1058.29 802.219 1065.14C802.022 1066.38 802.022 1067.87 802.022 1070.84V1118.18C802.022 1121.15 802.022 1122.64 802.219 1123.88C803.303 1130.73 808.673 1136.1 815.519 1137.18C816.763 1137.38 818.249 1137.38 821.222 1137.38H891.622C894.595 1137.38 896.081 1137.38 897.325 1137.18C904.171 1136.1 909.541 1130.73 910.625 1123.88C910.822 1122.64 910.822 1121.15 910.822 1118.18V1070.84C910.822 1067.87 910.822 1066.38 910.625 1065.14C909.541 1058.29 904.171 1052.92 897.325 1051.84C896.081 1051.64 894.595 1051.64 891.622 1051.64H881.945L875.727 1043.88C874.209 1041.99 871.912 1040.88 869.484 1040.88H843.36ZM821.222 1055.64H891.622C894.748 1055.64 895.845 1055.65 896.699 1055.79C901.834 1056.6 905.861 1060.63 906.674 1065.76C906.81 1066.62 906.822 1067.71 906.822 1070.84V1118.18C906.822 1121.31 906.81 1122.4 906.674 1123.26C905.861 1128.39 901.834 1132.42 896.699 1133.23C895.845 1133.37 894.748 1133.38 891.622 1133.38H821.222C818.096 1133.38 816.999 1133.37 816.145 1133.23C811.01 1132.42 806.983 1128.39 806.17 1123.26C806.034 1122.4 806.022 1121.31 806.022 1118.18V1070.84C806.022 1067.71 806.034 1066.62 806.17 1065.76C806.983 1060.63 811.01 1056.6 816.145 1055.79C816.999 1055.65 818.096 1055.64 821.222 1055.64Z" fill="black"/> +<path id="Rectangle 11906_17" d="M837.157 1094.5C837.157 1083.86 845.782 1075.24 856.422 1075.24V1075.24C867.062 1075.24 875.687 1083.86 875.687 1094.5V1094.5C875.687 1105.14 867.062 1113.77 856.422 1113.77V1113.77C845.782 1113.77 837.157 1105.14 837.157 1094.5V1094.5Z" fill="black"/> +</g> +<g id="Ultralight-M"> +<path id="Union_18" fill-rule="evenodd" clip-rule="evenodd" d="M546.649 1040.88C544.221 1040.88 541.924 1041.99 540.406 1043.88L533.788 1052.14H523.312C520.525 1052.14 519.131 1052.14 517.965 1052.33C511.547 1053.34 506.513 1058.38 505.496 1064.79C505.312 1065.96 505.312 1067.35 505.312 1070.14V1118.88C505.312 1121.67 505.312 1123.06 505.496 1124.23C506.513 1130.65 511.547 1135.68 517.965 1136.7C519.131 1136.88 520.525 1136.88 523.312 1136.88H596.112C598.899 1136.88 600.292 1136.88 601.458 1136.7C607.876 1135.68 612.91 1130.65 613.927 1124.23C614.112 1123.06 614.112 1121.67 614.112 1118.88V1070.14C614.112 1067.35 614.112 1065.96 613.927 1064.79C612.91 1058.38 607.876 1053.34 601.458 1052.33C600.292 1052.14 598.899 1052.14 596.112 1052.14H585.635L579.017 1043.88C577.499 1041.99 575.202 1040.88 572.774 1040.88H546.649ZM523.312 1054.39H596.112C598.985 1054.39 600.159 1054.4 601.106 1054.55C606.562 1055.41 610.84 1059.69 611.705 1065.15C611.855 1066.09 611.862 1067.27 611.862 1070.14V1118.88C611.862 1121.75 611.855 1122.93 611.705 1123.88C610.84 1129.33 606.562 1133.61 601.106 1134.47C600.159 1134.62 598.985 1134.63 596.112 1134.63H523.312C520.439 1134.63 519.264 1134.62 518.317 1134.47C512.861 1133.61 508.583 1129.33 507.718 1123.88C507.569 1122.93 507.562 1121.75 507.562 1118.88V1070.14C507.562 1067.27 507.569 1066.09 507.718 1065.15C508.583 1059.69 512.861 1055.41 518.317 1054.55C519.264 1054.4 520.439 1054.39 523.312 1054.39Z" fill="black"/> +<path id="Rectangle 11906_18" d="M540.446 1094.5C540.446 1083.86 549.072 1075.24 559.711 1075.24V1075.24C570.351 1075.24 578.977 1083.86 578.977 1094.5V1094.5C578.977 1105.14 570.351 1113.77 559.711 1113.77V1113.77C549.072 1113.77 540.446 1105.14 540.446 1094.5V1094.5Z" fill="black"/> +</g> +<g id="Black-S"> +<path id="Union_19" fill-rule="evenodd" clip-rule="evenodd" d="M2923.67 619.23C2921.24 619.23 2918.94 620.333 2917.42 622.228L2913.23 627.461H2909.72C2898.68 627.461 2889.72 636.415 2889.72 647.461V677.097C2889.72 688.143 2898.68 697.097 2909.72 697.097H2957.07C2968.12 697.097 2977.07 688.143 2977.07 677.097V647.461C2977.07 636.415 2968.12 627.461 2957.07 627.461H2953.56L2949.37 622.228C2947.85 620.333 2945.55 619.23 2943.13 619.23H2923.67ZM2909.72 641.461H2957.07C2960.38 641.461 2963.07 644.147 2963.07 647.461V677.097C2963.07 680.411 2960.38 683.097 2957.07 683.097H2909.72C2906.41 683.097 2903.72 680.411 2903.72 677.097V647.461C2903.72 644.147 2906.41 641.461 2909.72 641.461Z" fill="black"/> +<path id="Rectangle 11906_19" d="M2917.93 662.279C2917.93 653.737 2924.85 646.812 2933.4 646.812V646.812C2941.94 646.812 2948.86 653.737 2948.86 662.279V662.279C2948.86 670.821 2941.94 677.745 2933.4 677.745V677.745C2924.85 677.745 2917.93 670.821 2917.93 662.279V662.279Z" fill="black"/> +</g> +<g id="Heavy-S"> +<path id="Union_20" fill-rule="evenodd" clip-rule="evenodd" d="M2626.96 619.668C2624.54 619.668 2622.24 620.771 2620.72 622.666L2616.53 627.898H2612.02C2601.53 627.898 2593.02 636.405 2593.02 646.898V678.535C2593.02 689.028 2601.53 697.535 2612.02 697.535H2661.37C2671.86 697.535 2680.37 689.028 2680.37 678.535V646.898C2680.37 636.405 2671.86 627.898 2661.37 627.898H2656.86L2652.67 622.666C2651.15 620.771 2648.85 619.668 2646.42 619.668H2626.96ZM2612.02 640.398H2661.37C2664.96 640.398 2667.87 643.309 2667.87 646.898V678.535C2667.87 682.124 2664.96 685.035 2661.37 685.035H2612.02C2608.43 685.035 2605.52 682.124 2605.52 678.535V646.898C2605.52 643.309 2608.43 640.398 2612.02 640.398Z" fill="black"/> +<path id="Rectangle 11906_20" d="M2621.23 662.716C2621.23 654.174 2628.15 647.25 2636.69 647.25V647.25C2645.24 647.25 2652.16 654.174 2652.16 662.716V662.716C2652.16 671.258 2645.24 678.183 2636.69 678.183V678.183C2628.15 678.183 2621.23 671.258 2621.23 662.716V662.716Z" fill="black"/> +</g> +<g id="Bold-S"> +<path id="Union_21" fill-rule="evenodd" clip-rule="evenodd" d="M2330.25 619.688C2327.82 619.688 2325.53 620.79 2324.01 622.685L2319.82 627.918H2314.31C2304.37 627.918 2296.31 635.977 2296.31 645.918V679.554C2296.31 689.495 2304.37 697.554 2314.31 697.554H2365.65C2375.6 697.554 2383.65 689.495 2383.65 679.554V645.918C2383.65 635.977 2375.6 627.918 2365.65 627.918H2360.15L2355.95 622.685C2354.44 620.79 2352.14 619.688 2349.71 619.688H2330.25ZM2314.31 638.418H2365.65C2369.8 638.418 2373.15 641.776 2373.15 645.918V679.554C2373.15 683.696 2369.8 687.054 2365.65 687.054H2314.31C2310.17 687.054 2306.81 683.696 2306.81 679.554V645.918C2306.81 641.776 2310.17 638.418 2314.31 638.418Z" fill="black"/> +<path id="Rectangle 11906_21" d="M2324.52 662.736C2324.52 654.194 2331.44 647.27 2339.98 647.27V647.27C2348.52 647.27 2355.45 654.194 2355.45 662.736V662.736C2355.45 671.278 2348.52 678.202 2339.98 678.202V678.202C2331.44 678.202 2324.52 671.278 2324.52 662.736V662.736Z" fill="black"/> +</g> +<g id="Semibold-S"> +<path id="Union_22" fill-rule="evenodd" clip-rule="evenodd" d="M2033.54 620.664C2031.11 620.664 2028.82 621.767 2027.3 623.662L2023.11 628.895H2016.6C2007.21 628.895 1999.6 636.506 1999.6 645.895V681.531C1999.6 690.919 2007.21 698.531 2016.6 698.531H2069.95C2079.33 698.531 2086.95 690.919 2086.95 681.531V645.895C2086.95 636.506 2079.33 628.895 2069.95 628.895H2063.44L2059.24 623.662C2057.73 621.767 2055.43 620.664 2053 620.664H2033.54ZM2016.6 638.145H2069.95C2074.23 638.145 2077.7 641.614 2077.7 645.895V681.531C2077.7 685.811 2074.23 689.281 2069.95 689.281H2016.6C2012.32 689.281 2008.85 685.811 2008.85 681.531V645.895C2008.85 641.614 2012.32 638.145 2016.6 638.145Z" fill="black"/> +<path id="Rectangle 11906_22" d="M2027.81 663.712C2027.81 655.171 2034.73 648.246 2043.27 648.246V648.246C2051.81 648.246 2058.74 655.171 2058.74 663.712V663.712C2058.74 672.254 2051.81 679.179 2043.27 679.179V679.179C2034.73 679.179 2027.81 672.254 2027.81 663.712V663.712Z" fill="black"/> +</g> +<g id="Medium-S"> +<path id="Union_23" fill-rule="evenodd" clip-rule="evenodd" d="M1736.83 620.617C1734.4 620.617 1732.1 621.72 1730.58 623.615L1726.39 628.848H1718.88C1710.05 628.848 1702.88 636.011 1702.88 644.848V682.484C1702.88 691.32 1710.05 698.484 1718.88 698.484H1774.23C1783.07 698.484 1790.23 691.32 1790.23 682.484V644.848C1790.23 636.011 1783.07 628.848 1774.23 628.848H1766.72L1762.53 623.615C1761.01 621.72 1758.71 620.617 1756.29 620.617H1736.83ZM1718.88 637.098H1774.23C1778.51 637.098 1781.98 640.567 1781.98 644.848V682.484C1781.98 686.764 1778.51 690.234 1774.23 690.234H1718.88C1714.6 690.234 1711.13 686.764 1711.13 682.484V644.848C1711.13 640.567 1714.6 637.098 1718.88 637.098Z" fill="black"/> +<path id="Rectangle 11906_23" d="M1731.09 663.666C1731.09 655.124 1738.01 648.199 1746.56 648.199V648.199C1755.1 648.199 1762.02 655.124 1762.02 663.666V663.666C1762.02 672.207 1755.1 679.132 1746.56 679.132V679.132C1738.01 679.132 1731.09 672.207 1731.09 663.666V663.666Z" fill="black"/> +</g> +<g id="Regular-S"> +<path id="Union_24" fill-rule="evenodd" clip-rule="evenodd" d="M1440.12 620.77C1437.69 620.77 1435.39 621.872 1433.87 623.767L1429.68 629H1421.17C1412.89 629 1406.17 635.716 1406.17 644V683.636C1406.17 691.92 1412.89 698.636 1421.17 698.636H1478.52C1486.8 698.636 1493.52 691.92 1493.52 683.636V644C1493.52 635.716 1486.8 629 1478.52 629H1470.01L1465.82 623.767C1464.3 621.872 1462 620.77 1459.58 620.77H1440.12ZM1421.17 636.15H1478.52C1482.86 636.15 1486.37 639.665 1486.37 644V683.636C1486.37 687.972 1482.86 691.486 1478.52 691.486H1421.17C1416.84 691.486 1413.32 687.972 1413.32 683.636V644C1413.32 639.665 1416.84 636.15 1421.17 636.15Z" fill="black"/> +<path id="Rectangle 11906_24" d="M1434.38 663.818C1434.38 655.276 1441.31 648.352 1449.85 648.352V648.352C1458.39 648.352 1465.31 655.276 1465.31 663.818V663.818C1465.31 672.36 1458.39 679.284 1449.85 679.284V679.284C1441.31 679.284 1434.38 672.36 1434.38 663.818V663.818Z" fill="black"/> +</g> +<g id="Light-S"> +<path id="Union_25" fill-rule="evenodd" clip-rule="evenodd" d="M1143.41 620.668C1140.98 620.668 1138.68 621.771 1137.17 623.666L1132.97 628.898H1123.46C1115.73 628.898 1109.46 635.166 1109.46 642.898V684.535C1109.46 692.267 1115.73 698.535 1123.46 698.535H1182.81C1190.54 698.535 1196.81 692.267 1196.81 684.535V642.898C1196.81 635.166 1190.54 628.898 1182.81 628.898H1173.3L1169.11 623.666C1167.59 621.771 1165.3 620.668 1162.87 620.668H1143.41ZM1123.46 634.398H1182.81C1187.51 634.398 1191.31 638.204 1191.31 642.898V684.535C1191.31 689.229 1187.51 693.035 1182.81 693.035H1123.46C1118.77 693.035 1114.96 689.229 1114.96 684.535V642.898C1114.96 638.204 1118.77 634.398 1123.46 634.398Z" fill="black"/> +<path id="Rectangle 11906_25" d="M1137.67 663.716C1137.67 655.174 1144.6 648.25 1153.14 648.25V648.25C1161.68 648.25 1168.6 655.174 1168.6 663.716V663.716C1168.6 672.258 1161.68 679.183 1153.14 679.183V679.183C1144.6 679.183 1137.67 672.258 1137.67 663.716V663.716Z" fill="black"/> +</g> +<g id="Thin-S"> +<path id="Union_26" fill-rule="evenodd" clip-rule="evenodd" d="M846.693 620.742C844.265 620.742 841.968 621.845 840.45 623.74L836.257 628.973H825.749C818.569 628.973 812.749 634.793 812.749 641.973V685.609C812.749 692.788 818.569 698.609 825.749 698.609H887.095C894.275 698.609 900.095 692.788 900.095 685.609V641.973C900.095 634.793 894.275 628.973 887.095 628.973H876.587L872.394 623.74C870.876 621.845 868.579 620.742 866.151 620.742H846.693ZM825.749 632.223H887.095C892.48 632.223 896.845 636.588 896.845 641.973V685.609C896.845 690.994 892.48 695.359 887.095 695.359H825.749C820.364 695.359 815.999 690.994 815.999 685.609V641.973C815.999 636.588 820.364 632.223 825.749 632.223Z" fill="black"/> +<path id="Rectangle 11906_26" d="M840.956 663.791C840.956 655.249 847.88 648.324 856.422 648.324V648.324C864.964 648.324 871.888 655.249 871.888 663.791V663.791C871.888 672.332 864.964 679.257 856.422 679.257V679.257C847.88 679.257 840.956 672.332 840.956 663.791V663.791Z" fill="black"/> +</g> +<g id="Ultralight-S"> +<path id="Union_27" fill-rule="evenodd" clip-rule="evenodd" d="M549.983 620.762C547.555 620.762 545.258 621.865 543.74 623.759L539.14 629.5H528.039C521.411 629.5 516.039 634.873 516.039 641.5V685.14C516.039 691.767 521.411 697.14 528.039 697.14H591.385C598.012 697.14 603.385 691.767 603.385 685.14V641.5C603.385 634.873 598.012 629.5 591.385 629.5H580.284L575.684 623.759C574.166 621.865 571.869 620.762 569.441 620.762H549.983ZM528.039 631.5H591.385C596.908 631.5 601.385 635.977 601.385 641.5V685.14C601.385 690.663 596.908 695.14 591.385 695.14H528.039C522.516 695.14 518.039 690.663 518.039 685.14V641.5C518.039 635.977 522.516 631.5 528.039 631.5Z" fill="black"/> +<path id="Rectangle 11906_27" d="M544.245 663.81C544.245 655.268 551.17 648.344 559.711 648.344V648.344C568.253 648.344 575.178 655.268 575.178 663.81V663.81C575.178 672.352 568.253 679.276 559.711 679.276V679.276C551.17 679.276 544.245 672.352 544.245 663.81V663.81Z" fill="black"/> +</g> +</g> +</g> +</svg>
diff --git a/ios/chrome/widget_kit_extension/resources/widget_qr_icon.imageset/Contents.json b/ios/chrome/widget_kit_extension/resources/widget_qr_icon.imageset/Contents.json deleted file mode 100644 index 0a0d559..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_qr_icon.imageset/Contents.json +++ /dev/null
@@ -1,56 +0,0 @@ -{ - "images" : [ - { - "filename" : "widget_qr_icon_light.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "filename" : "widget_qr_icon_dark.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "widget_qr_icon_light@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "filename" : "widget_qr_icon_dark@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "widget_qr_icon_light@3x.png", - "idiom" : "universal", - "scale" : "3x" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "filename" : "widget_qr_icon_dark@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -}
diff --git a/ios/chrome/widget_kit_extension/resources/widget_qr_icon.imageset/widget_qr_icon_dark.png b/ios/chrome/widget_kit_extension/resources/widget_qr_icon.imageset/widget_qr_icon_dark.png deleted file mode 100644 index c4b8a34..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_qr_icon.imageset/widget_qr_icon_dark.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/widget_kit_extension/resources/widget_qr_icon.imageset/widget_qr_icon_dark@2x.png b/ios/chrome/widget_kit_extension/resources/widget_qr_icon.imageset/widget_qr_icon_dark@2x.png deleted file mode 100644 index 3acea2c..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_qr_icon.imageset/widget_qr_icon_dark@2x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/widget_kit_extension/resources/widget_qr_icon.imageset/widget_qr_icon_dark@3x.png b/ios/chrome/widget_kit_extension/resources/widget_qr_icon.imageset/widget_qr_icon_dark@3x.png deleted file mode 100644 index f7488402..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_qr_icon.imageset/widget_qr_icon_dark@3x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/widget_kit_extension/resources/widget_qr_icon.imageset/widget_qr_icon_light.png b/ios/chrome/widget_kit_extension/resources/widget_qr_icon.imageset/widget_qr_icon_light.png deleted file mode 100644 index 11105149a..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_qr_icon.imageset/widget_qr_icon_light.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/widget_kit_extension/resources/widget_qr_icon.imageset/widget_qr_icon_light@2x.png b/ios/chrome/widget_kit_extension/resources/widget_qr_icon.imageset/widget_qr_icon_light@2x.png deleted file mode 100644 index 185b28c..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_qr_icon.imageset/widget_qr_icon_light@2x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/widget_kit_extension/resources/widget_qr_icon.imageset/widget_qr_icon_light@3x.png b/ios/chrome/widget_kit_extension/resources/widget_qr_icon.imageset/widget_qr_icon_light@3x.png deleted file mode 100644 index d4fdd10b..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_qr_icon.imageset/widget_qr_icon_light@3x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/widget_kit_extension/resources/widget_search_bar_color.colorset/Contents.json b/ios/chrome/widget_kit_extension/resources/widget_search_bar_color.colorset/Contents.json index 9396a08..e63c78aa 100644 --- a/ios/chrome/widget_kit_extension/resources/widget_search_bar_color.colorset/Contents.json +++ b/ios/chrome/widget_kit_extension/resources/widget_search_bar_color.colorset/Contents.json
@@ -5,27 +5,9 @@ "color-space" : "display-p3", "components" : { "alpha" : "1.000", - "red" : "0.946", - "green" : "0.953", - "blue" : "0.957" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "light" - } - ], - "color" : { - "color-space" : "display-p3", - "components" : { - "alpha" : "1.000", - "red" : "0.946", - "green" : "0.953", - "blue" : "0.957" + "red" : "0xF1", + "green" : "0xF3", + "blue" : "0xF4" } }, "idiom" : "universal" @@ -41,9 +23,9 @@ "color-space" : "display-p3", "components" : { "alpha" : "1.000", - "red" : "0.238", - "green" : "0.250", - "blue" : "0.262" + "red" : "0x3C", + "green" : "0x40", + "blue" : "0x43" } }, "idiom" : "universal" @@ -59,31 +41,9 @@ "color-space" : "display-p3", "components" : { "alpha" : "1.000", - "red" : "0.856", - "green" : "0.863", - "blue" : "0.877" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "light" - }, - { - "appearance" : "contrast", - "value" : "high" - } - ], - "color" : { - "color-space" : "display-p3", - "components" : { - "alpha" : "1.000", - "red" : "0.856", - "green" : "0.863", - "blue" : "0.877" + "red" : "0xDA", + "green" : "0xDC", + "blue" : "0xE0" } }, "idiom" : "universal" @@ -103,9 +63,9 @@ "color-space" : "display-p3", "components" : { "alpha" : "1.000", - "red" : "0.238", - "green" : "0.250", - "blue" : "0.262" + "red" : "0x3C", + "green" : "0x40", + "blue" : "0x43" } }, "idiom" : "universal"
diff --git a/ios/chrome/widget_kit_extension/resources/widget_separator_color.colorset/Contents.json b/ios/chrome/widget_kit_extension/resources/widget_separator_color.colorset/Contents.json index a6f8546..e7ddcfa3 100644 --- a/ios/chrome/widget_kit_extension/resources/widget_separator_color.colorset/Contents.json +++ b/ios/chrome/widget_kit_extension/resources/widget_separator_color.colorset/Contents.json
@@ -1,36 +1,23 @@ { + "info" : { + "version" : 1, + "author" : "xcode" + }, "colors" : [ { + "idiom" : "universal", "color" : { "color-space" : "display-p3", "components" : { "alpha" : "1.000", - "red" : "0.911", - "green" : "0.918", - "blue" : "0.928" + "red" : "0xE8", + "green" : "0xEA", + "blue" : "0xED" } - }, - "idiom" : "universal" + } }, { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "light" - } - ], - "color" : { - "color-space" : "display-p3", - "components" : { - "alpha" : "1.000", - "red" : "0.911", - "green" : "0.918", - "blue" : "0.928" - } - }, - "idiom" : "universal" - }, - { + "idiom" : "universal", "appearances" : [ { "appearance" : "luminosity", @@ -41,16 +28,11 @@ "color-space" : "display-p3", "components" : { "alpha" : "1.000", - "red" : "0.376", - "green" : "0.387", - "blue" : "0.406" + "red" : "0x5F", + "green" : "0x63", + "blue" : "0x68" } - }, - "idiom" : "universal" + } } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } + ] }
diff --git a/ios/chrome/widget_kit_extension/resources/widget_text_color.colorset/Contents.json b/ios/chrome/widget_kit_extension/resources/widget_text_color.colorset/Contents.json index 1c46897..644d2097 100644 --- a/ios/chrome/widget_kit_extension/resources/widget_text_color.colorset/Contents.json +++ b/ios/chrome/widget_kit_extension/resources/widget_text_color.colorset/Contents.json
@@ -5,27 +5,9 @@ "color-space" : "display-p3", "components" : { "alpha" : "1.000", - "red" : "0.376", - "green" : "0.387", - "blue" : "0.406" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "light" - } - ], - "color" : { - "color-space" : "display-p3", - "components" : { - "alpha" : "1.000", - "red" : "0.376", - "green" : "0.387", - "blue" : "0.406" + "red" : "0x5F", + "green" : "0x63", + "blue" : "0x68" } }, "idiom" : "universal" @@ -41,9 +23,9 @@ "color-space" : "display-p3", "components" : { "alpha" : "1.000", - "red" : "0.744", - "green" : "0.756", - "blue" : "0.774" + "red" : "0xBD", + "green" : "0xC1", + "blue" : "0xC6" } }, "idiom" : "universal" @@ -59,31 +41,9 @@ "color-space" : "display-p3", "components" : { "alpha" : "1.000", - "red" : "0.000", - "green" : "0.000", - "blue" : "0.000" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "light" - }, - { - "appearance" : "contrast", - "value" : "high" - } - ], - "color" : { - "color-space" : "display-p3", - "components" : { - "alpha" : "1.000", - "red" : "0.000", - "green" : "0.000", - "blue" : "0.000" + "red" : "0x00", + "green" : "0x00", + "blue" : "0x00" } }, "idiom" : "universal" @@ -103,9 +63,9 @@ "color-space" : "display-p3", "components" : { "alpha" : "1.000", - "red" : "1.000", - "green" : "1.000", - "blue" : "1.000" + "red" : "0xFF", + "green" : "0xFF", + "blue" : "0xFF" } }, "idiom" : "universal"
diff --git a/ios/chrome/widget_kit_extension/resources/widget_voice_search_icon.imageset/Contents.json b/ios/chrome/widget_kit_extension/resources/widget_voice_search_icon.imageset/Contents.json deleted file mode 100644 index d62d773..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_voice_search_icon.imageset/Contents.json +++ /dev/null
@@ -1,56 +0,0 @@ -{ - "images" : [ - { - "filename" : "widget_voice_search_icon_light.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "filename" : "widget_voice_search_icon_dark.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "widget_voice_search_icon_light@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "filename" : "widget_voice_search_icon_dark@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "widget_voice_search_icon_light@3x.png", - "idiom" : "universal", - "scale" : "3x" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "filename" : "widget_voice_search_icon_dark@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -}
diff --git a/ios/chrome/widget_kit_extension/resources/widget_voice_search_icon.imageset/widget_voice_search_icon_dark.png b/ios/chrome/widget_kit_extension/resources/widget_voice_search_icon.imageset/widget_voice_search_icon_dark.png deleted file mode 100644 index d1b9e673..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_voice_search_icon.imageset/widget_voice_search_icon_dark.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/widget_kit_extension/resources/widget_voice_search_icon.imageset/widget_voice_search_icon_dark@2x.png b/ios/chrome/widget_kit_extension/resources/widget_voice_search_icon.imageset/widget_voice_search_icon_dark@2x.png deleted file mode 100644 index 05b368c9..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_voice_search_icon.imageset/widget_voice_search_icon_dark@2x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/widget_kit_extension/resources/widget_voice_search_icon.imageset/widget_voice_search_icon_dark@3x.png b/ios/chrome/widget_kit_extension/resources/widget_voice_search_icon.imageset/widget_voice_search_icon_dark@3x.png deleted file mode 100644 index 10e7ffb..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_voice_search_icon.imageset/widget_voice_search_icon_dark@3x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/widget_kit_extension/resources/widget_voice_search_icon.imageset/widget_voice_search_icon_light.png b/ios/chrome/widget_kit_extension/resources/widget_voice_search_icon.imageset/widget_voice_search_icon_light.png deleted file mode 100644 index ed4594cf..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_voice_search_icon.imageset/widget_voice_search_icon_light.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/widget_kit_extension/resources/widget_voice_search_icon.imageset/widget_voice_search_icon_light@2x.png b/ios/chrome/widget_kit_extension/resources/widget_voice_search_icon.imageset/widget_voice_search_icon_light@2x.png deleted file mode 100644 index 1ab00fee..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_voice_search_icon.imageset/widget_voice_search_icon_light@2x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/widget_kit_extension/resources/widget_voice_search_icon.imageset/widget_voice_search_icon_light@3x.png b/ios/chrome/widget_kit_extension/resources/widget_voice_search_icon.imageset/widget_voice_search_icon_light@3x.png deleted file mode 100644 index 9e1ec2da..0000000 --- a/ios/chrome/widget_kit_extension/resources/widget_voice_search_icon.imageset/widget_voice_search_icon_light@3x.png +++ /dev/null Binary files differ
diff --git a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1 b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1 index 3713e16..d89b0b0 100644 --- a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1
@@ -1 +1 @@ -9026b4bc84f009dd87ec6e569c1d0bd81e0507cf \ No newline at end of file +2927d663d43183f8fe7a7c1ed8d5f699919e97d7 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1 b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1 index 4e0a6bc6..b9bdba1 100644 --- a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1
@@ -1 +1 @@ -a9ff99e86c073e63e04249717b9c43c06ed28046 \ No newline at end of file +788e10456abdbfcca7cc770312175396f83b0d77 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 index 787380cd..720ac23 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -94578d76b59f657c6630d7c70c83f93e1a7f37db \ No newline at end of file +75535de53ad7edb746ccab6649204eeab72b6697 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 index 9799eac..224caaad 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -646ca6fff43c8f7815535cccf4dac0093f45adaa \ No newline at end of file +3a5df09bfc55290ebae7ef0d08bdf012aa23e88f \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 index d2fbfb79..9820cf8 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -9163cafbdfe5b74f3d72983d25e763e8c4bb94e7 \ No newline at end of file +134df1a2b0d0c6369e08ee3450ec5c3181aa7a2e \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 index 4d8bcc3c..e29d94c 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -e958abb9253cc7afb167da552bde77dbe129a3ba \ No newline at end of file +73cf385a5c2f9c846b1710deda083bec96b7e6a0 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1 index 49f1690a..8e14938 100644 --- a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -133a6467a924c392c7f33ede6226296df85b6916 \ No newline at end of file +fbd4ce6701fe846d703ade2810196e9105ee69af \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1 index a5fd61b2..3030eea 100644 --- a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -a31a86539dbea2a3a767bcf56b523050759685ae \ No newline at end of file +289cff85e4b8608092423563dbab3863ff5b1d0d \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 index 09573ed..99343a7 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -e868ba64fb03ae4646785ce8b3bef6346d736338 \ No newline at end of file +1990651279be0ddd1ce9c6c1e1cf1875b10c5e5a \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 index d0b461a9..3dd410d 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -76e5aa6bde270589f31b123f159cc98b8bd395e3 \ No newline at end of file +6ff086cb59d06cf5a9ad4f3df17bced361bffbef \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 index a56cdf5..ae66654c 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -e6bf9486c9c07c0c3ecbd280f14cb12f42ed6dba \ No newline at end of file +3debbb18440d29b60eab298b7ebf96898c321b0d \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 index 8400eef..f51ef78 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -a98261ad3500b7e9ec49801f2b027a590b17b039 \ No newline at end of file +0dd604dbe0e4af7e210f36efb85c27deeb400939 \ No newline at end of file
diff --git a/ios/showcase/credential_provider/sc_credential_list_coordinator.mm b/ios/showcase/credential_provider/sc_credential_list_coordinator.mm index 4ac200e..7139c72 100644 --- a/ios/showcase/credential_provider/sc_credential_list_coordinator.mm +++ b/ios/showcase/credential_provider/sc_credential_list_coordinator.mm
@@ -28,6 +28,7 @@ @synthesize serviceName = _serviceName; @synthesize user = _user; @synthesize validationIdentifier = _validationIdentifier; +@synthesize note = _note; - (instancetype)initWithServiceName:(NSString*)serviceName serviceIdentifier:(NSString*)serviceIdentifier
diff --git a/media/audio/audio_output_device.cc b/media/audio/audio_output_device.cc index 0f077dd1..18c5fa1 100644 --- a/media/audio/audio_output_device.cc +++ b/media/audio/audio_output_device.cc
@@ -445,11 +445,14 @@ OutputDeviceInfo AudioOutputDevice::GetOutputDeviceInfo_Signaled() { DCHECK(did_receive_auth_.IsSignaled()); - return OutputDeviceInfo(AudioDeviceDescription::UseSessionIdToSelectDevice( - session_id_, device_id_) - ? matched_device_id_ - : device_id_, - device_status_, output_params_); + OutputDeviceInfo info(AudioDeviceDescription::UseSessionIdToSelectDevice( + session_id_, device_id_) + ? matched_device_id_ + : device_id_, + device_status_, output_params_); + TRACE_EVENT1("audio", "AudioOutputDevice::GetOutputDeviceInfo_Signaled", + "info", info.AsHumanReadableString()); + return info; } void AudioOutputDevice::OnAuthSignal() {
diff --git a/media/capture/video/chromeos/camera_hal_dispatcher_impl.cc b/media/capture/video/chromeos/camera_hal_dispatcher_impl.cc index 6b5d6ed..02afefb 100644 --- a/media/capture/video/chromeos/camera_hal_dispatcher_impl.cc +++ b/media/capture/video/chromeos/camera_hal_dispatcher_impl.cc
@@ -52,10 +52,6 @@ "/run/camera/force_enable_face_ae"; const base::FilePath::CharType kForceDisableAePath[] = "/run/camera/force_disable_face_ae"; -const base::FilePath::CharType kForceEnableHdrNetPath[] = - "/run/camera/force_enable_hdrnet"; -const base::FilePath::CharType kForceDisableHdrNetPath[] = - "/run/camera/force_disable_hdrnet"; const base::FilePath::CharType kForceEnableAutoFramingPath[] = "/run/camera/force_enable_auto_framing"; const base::FilePath::CharType kForceDisableAutoFramingPath[] = @@ -220,32 +216,6 @@ } { - base::FilePath enable_file_path(kForceEnableHdrNetPath); - base::FilePath disable_file_path(kForceDisableHdrNetPath); - if (!base::DeleteFile(enable_file_path)) { - LOG(WARNING) << "Could not delete " << kForceEnableHdrNetPath; - } - if (!base::DeleteFile(disable_file_path)) { - LOG(WARNING) << "Could not delete " << kForceDisableHdrNetPath; - } - const base::CommandLine* command_line = - base::CommandLine::ForCurrentProcess(); - if (command_line->HasSwitch(media::switches::kHdrNetOverride)) { - std::string value = - command_line->GetSwitchValueASCII(switches::kHdrNetOverride); - if (value == switches::kHdrNetForceEnabled) { - base::File file(enable_file_path, base::File::FLAG_CREATE_ALWAYS | - base::File::FLAG_WRITE); - file.Close(); - } else if (value == switches::kHdrNetForceDisabled) { - base::File file(disable_file_path, base::File::FLAG_CREATE_ALWAYS | - base::File::FLAG_WRITE); - file.Close(); - } - } - } - - { base::FilePath enable_file_path(kForceEnableAutoFramingPath); base::FilePath disable_file_path(kForceDisableAutoFramingPath); if (!base::DeleteFile(enable_file_path)) {
diff --git a/media/capture/video/chromeos/video_capture_features_chromeos.cc b/media/capture/video/chromeos/video_capture_features_chromeos.cc index 6daf0cdd..86f6fdea 100644 --- a/media/capture/video/chromeos/video_capture_features_chromeos.cc +++ b/media/capture/video/chromeos/video_capture_features_chromeos.cc
@@ -11,7 +11,6 @@ namespace switches { const char kForceControlFaceAe[] = "force-control-face-ae"; -const char kHdrNetOverride[] = "hdrnet-override"; const char kAutoFramingOverride[] = "auto-framing-override"; } // namespace switches
diff --git a/media/capture/video/chromeos/video_capture_features_chromeos.h b/media/capture/video/chromeos/video_capture_features_chromeos.h index d7c2a96..1f2a89e5 100644 --- a/media/capture/video/chromeos/video_capture_features_chromeos.h +++ b/media/capture/video/chromeos/video_capture_features_chromeos.h
@@ -14,10 +14,6 @@ CAPTURE_EXPORT extern const char kForceControlFaceAe[]; -CAPTURE_EXPORT extern const char kHdrNetOverride[]; -constexpr char kHdrNetForceEnabled[] = "force-enabled"; -constexpr char kHdrNetForceDisabled[] = "force-disabled"; - CAPTURE_EXPORT extern const char kAutoFramingOverride[]; constexpr char kAutoFramingForceEnabled[] = "force-enabled"; constexpr char kAutoFramingForceDisabled[] = "force-disabled";
diff --git a/media/gpu/chromeos/platform_video_frame_pool.cc b/media/gpu/chromeos/platform_video_frame_pool.cc index ff1b1da..6d274fd 100644 --- a/media/gpu/chromeos/platform_video_frame_pool.cc +++ b/media/gpu/chromeos/platform_video_frame_pool.cc
@@ -8,6 +8,7 @@ #include "base/logging.h" #include "base/task/sequenced_task_runner.h" +#include "base/trace_event/trace_event.h" #include "media/base/video_util.h" #include "media/gpu/chromeos/gpu_buffer_layout.h" #include "media/gpu/chromeos/platform_video_frame_utils.h" @@ -300,6 +301,9 @@ absl::optional<base::WeakPtr<PlatformVideoFramePool>> pool, scoped_refptr<base::SequencedTaskRunner> task_runner, scoped_refptr<VideoFrame> origin_frame) { + TRACE_EVENT2("media", "PlatformVideoFramePool::OnFrameReleasedThunk", + "frame_id", origin_frame->unique_id(), "frame", + origin_frame->AsHumanReadableString()); DCHECK(pool); DVLOGF(4); @@ -310,6 +314,9 @@ void PlatformVideoFramePool::OnFrameReleased( scoped_refptr<VideoFrame> origin_frame) { + TRACE_EVENT2("media", "PlatformVideoFramePool::OnFrameReleased", "frame_id", + origin_frame->unique_id(), "frame", + origin_frame->AsHumanReadableString()); DCHECK(parent_task_runner_->RunsTasksInCurrentSequence()); DVLOGF(4); base::AutoLock auto_lock(lock_);
diff --git a/media/gpu/vaapi/vaapi_video_decoder.cc b/media/gpu/vaapi/vaapi_video_decoder.cc index c9e1ca4..097c4784 100644 --- a/media/gpu/vaapi/vaapi_video_decoder.cc +++ b/media/gpu/vaapi/vaapi_video_decoder.cc
@@ -371,6 +371,7 @@ void VaapiVideoDecoder::ScheduleNextDecodeTask() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + TRACE_EVENT0("media", "VaapiVideoDecoder::ScheduleNextDecodeTask"); DCHECK_EQ(state_, State::kDecoding); DCHECK(!current_decode_task_); DCHECK(!decode_task_queue_.empty()); @@ -391,6 +392,7 @@ void VaapiVideoDecoder::HandleDecodeTask() { DVLOGF(4); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + TRACE_EVENT0("media", "VaapiVideoDecoder::HandleDecodeTask"); if (state_ != State::kDecoding) return; @@ -999,6 +1001,7 @@ void VaapiVideoDecoder::NotifyFrameAvailable() { DVLOGF(4); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + TRACE_EVENT0("media", "VaapiVideoDecoder::NotifyFrameAvailable"); // If we were waiting for output buffers, retry the current decode task. if (state_ == State::kWaitingForOutput) {
diff --git a/media/mojo/clients/mojo_video_decoder.cc b/media/mojo/clients/mojo_video_decoder.cc index e0149a8..b1d0f2c 100644 --- a/media/mojo/clients/mojo_video_decoder.cc +++ b/media/mojo/clients/mojo_video_decoder.cc
@@ -14,6 +14,7 @@ #include "base/metrics/histogram_macros.h" #include "base/task/bind_post_task.h" #include "base/task/sequenced_task_runner.h" +#include "base/trace_event/trace_event.h" #include "base/unguessable_token.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" @@ -60,6 +61,8 @@ void ReleaseVideoFrame(const base::UnguessableToken& release_token, const gpu::SyncToken& release_sync_token) { + TRACE_EVENT1("media", "MojoVideoFrameHandleReleaser::ReleaseVideoFrame", + "release_token", release_token.ToString()); DVLOG(3) << __func__ << "(" << release_token << ")"; video_frame_handle_releaser_->ReleaseVideoFrame(release_token, release_sync_token); @@ -260,7 +263,9 @@ const absl::optional<base::UnguessableToken>& release_token) { DVLOG(3) << __func__; DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - + TRACE_EVENT2("media", "MojoVideoDecoder::OnVideoFrameDecoded", "frame", + frame->AsHumanReadableString(), "release_token", + release_token ? release_token->ToString() : "null"); // TODO(sandersd): Prove that all paths read this value again after running // |output_cb_|. In practice this isn't very important, since all decoders // running via MojoVideoDecoder currently use a static value.
diff --git a/media/mojo/services/mojo_video_decoder_service.cc b/media/mojo/services/mojo_video_decoder_service.cc index 9655b01..3aba153 100644 --- a/media/mojo/services/mojo_video_decoder_service.cc +++ b/media/mojo/services/mojo_video_decoder_service.cc
@@ -13,6 +13,7 @@ #include "base/metrics/histogram_functions.h" #include "base/strings/stringprintf.h" #include "base/task/single_thread_task_runner.h" +#include "base/trace_event/trace_event.h" #include "base/types/optional_util.h" #include "media/base/decoder_buffer.h" #include "media/base/media_util.h" @@ -84,6 +85,13 @@ const base::UnguessableToken& release_token, const absl::optional<gpu::SyncToken>& release_sync_token) final { DVLOG(3) << __func__ << "(" << release_token.ToString() << ")"; + TRACE_EVENT2("media", "VideoFrameHandleReleaserImpl::ReleaseVideoFrame", + "release_token", release_token.ToString(), + "release_sync_token", + release_sync_token + ? (release_sync_token->ToDebugString() + ", has_data: " + + (release_sync_token->HasData() ? "true" : "false")) + : "null"); auto it = video_frames_.find(release_token); if (it == video_frames_.end()) { mojo::ReportBadMessage("Unknown |release_token|.");
diff --git a/net/dns/public/host_resolver_source.h b/net/dns/public/host_resolver_source.h index 4c3a30b..de761d5d 100644 --- a/net/dns/public/host_resolver_source.h +++ b/net/dns/public/host_resolver_source.h
@@ -5,6 +5,8 @@ #ifndef NET_DNS_PUBLIC_HOST_RESOLVER_SOURCE_H_ #define NET_DNS_PUBLIC_HOST_RESOLVER_SOURCE_H_ +#include <iterator> + namespace net { // Enumeration to specify the allowed results source for HostResolver
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 6070592..88bb4ae 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -8881,21 +8881,6 @@ ] } ], - "PageInfoAboutThisSitePFINGS": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled_230303", - "enable_features": [ - "PageInfoAboutThisSiteNonEn" - ] - } - ] - } - ], "PageInfoHistory": [ { "platforms": [ @@ -10853,22 +10838,6 @@ ] } ], - "SaveUpdatePasswordEditDialogStudy": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "PasswordEditDialogWithDetails", - "UnifiedPasswordManagerAndroidBranding" - ] - } - ] - } - ], "ScaleScrollbarAnimationTiming": [ { "platforms": [
diff --git a/third_party/blink/PRESUBMIT.py b/third_party/blink/PRESUBMIT.py index caee178d..11c5cd2 100644 --- a/third_party/blink/PRESUBMIT.py +++ b/third_party/blink/PRESUBMIT.py
@@ -81,16 +81,8 @@ 'third_party/blink/public/mojom/worker/subresource_loader_updater', 'third_party/blink/public/mojom/loader/transferrable_url_loader', 'third_party/blink/public/mojom/loader/code_cache', - # The `shared_storage_worklet_service` and `private_aggregation_host` - # are tentatively included here when shared storage is migrating to - # the blink-style worklet infrastructure. - # TODO(crbug.com/1414951): Remove once the migration completes. - 'third_party/blink/public/mojom/shared_storage/shared_storage_worklet_service', - 'third_party/blink/public/mojom/private_aggregation/private_aggregation_host', - 'media/mojo/mojom/interface_factory', - 'media/mojo/mojom/audio_decoder', - 'media/mojo/mojom/audio_encoder', - 'media/mojo/mojom/video_decoder', + 'media/mojo/mojom/interface_factory', 'media/mojo/mojom/audio_decoder', + 'media/mojo/mojom/audio_encoder', 'media/mojo/mojom/video_decoder', 'media/mojo/mojom/media_metrics_provider') for f in input_api.AffectedFiles(file_filter=source_file_filter):
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc index 0f9ea7e..cbc2c0d0a 100644 --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc
@@ -305,15 +305,6 @@ kSharedStorageMaxAllowedFencedFrameDepthForSelectURL = { &kSharedStorageAPI, "SharedStorageMaxAllowedFencedFrameDepthForSelectURL", 1}; -const base::FeatureParam<SharedStorageWorkletImplementationType>::Option - shared_storage_worklet_implementation_types[] = { - {SharedStorageWorkletImplementationType::kLegacy, "legacy"}, - {SharedStorageWorkletImplementationType::kBlinkStyle, "blink_style"}}; -const base::FeatureParam<SharedStorageWorkletImplementationType> - kSharedStorageWorkletImplementationType = { - &kSharedStorageAPI, "SharedStorageWorkletImplementationType", - SharedStorageWorkletImplementationType::kLegacy, - &shared_storage_worklet_implementation_types}; BASE_FEATURE(kSharedStorageSelectURLLimit, "SharedStorageSelectURLLimit", @@ -1714,5 +1705,17 @@ "URLSetPortCheckOverflow", base::FEATURE_DISABLED_BY_DEFAULT); +BASE_FEATURE(kMemoryCacheStrongReference, + "MemoryCacheStrongReference", + base::FEATURE_DISABLED_BY_DEFAULT); + +BASE_FEATURE(kMemoryCacheStrongReferenceSingleUnload, + "MemoryCacheStrongReferenceSingleUnload", + base::FEATURE_DISABLED_BY_DEFAULT); + +BASE_FEATURE(kMemoryCacheStrongReferenceFilterImages, + "MemoryCacheStrongReferenceFilterImages", + base::FEATURE_DISABLED_BY_DEFAULT); + } // namespace features } // namespace blink
diff --git a/third_party/blink/common/tokens/tokens_mojom_traits.cc b/third_party/blink/common/tokens/tokens_mojom_traits.cc index 04824ad..7d2d4ae 100644 --- a/third_party/blink/common/tokens/tokens_mojom_traits.cc +++ b/third_party/blink/common/tokens/tokens_mojom_traits.cc
@@ -103,12 +103,6 @@ *output = token; return ret; } - case DataView::Tag::kSharedStorageWorkletToken: { - blink::SharedStorageWorkletToken token; - bool ret = input.ReadSharedStorageWorkletToken(&token); - *output = token; - return ret; - } } return false; } @@ -179,12 +173,6 @@ *output = token; return ret; } - case DataView::Tag::kSharedStorageWorkletToken: { - blink::SharedStorageWorkletToken token; - bool ret = input.ReadSharedStorageWorkletToken(&token); - *output = token; - return ret; - } case DataView::Tag::kShadowRealmToken: { blink::ShadowRealmToken token; bool ret = input.ReadShadowRealmToken(&token);
diff --git a/third_party/blink/public/BUILD.gn b/third_party/blink/public/BUILD.gn index 5e3e76c..66a4fd6 100644 --- a/third_party/blink/public/BUILD.gn +++ b/third_party/blink/public/BUILD.gn
@@ -383,7 +383,6 @@ "web/web_serialized_script_value.h", "web/web_serialized_script_value_version.h", "web/web_settings.h", - "web/web_shared_storage_worklet_thread.h", "web/web_shared_worker.h", "web/web_shared_worker_client.h", "web/web_testing_support.h",
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h index eea5638d..65bccfd 100644 --- a/third_party/blink/public/common/features.h +++ b/third_party/blink/public/common/features.h
@@ -76,16 +76,6 @@ BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kPath2DPaintCache); BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kPrivacySandboxAdsAPIs); -enum class SharedStorageWorkletImplementationType { - // The worklet thread is created via base::SequenceBound, and JS bindings are - // added with native v8 and/or Gin library. - kLegacy, - - // Use the blink worklet pattern (i.e. blink::ThreadedWorkletMessagingProxy, - // blink::WorkerThread, IDL, etc.) to create the thread and add JS bindings. - kBlinkStyle, -}; - BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kSharedStorageAPI); // Maximum number of URLs allowed to be included in the input parameter for // runURLSelectionOperation(). @@ -140,10 +130,6 @@ // main frame has fenced frame depth 1, etc). BLINK_COMMON_EXPORT extern const base::FeatureParam<int> kSharedStorageMaxAllowedFencedFrameDepthForSelectURL; -// The implementation type of the worklet. -BLINK_COMMON_EXPORT extern const base::FeatureParam< - SharedStorageWorkletImplementationType> - kSharedStorageWorkletImplementationType; // If enabled, limits the number of times per origin per pageload that // `sharedStorage.selectURL()` is allowed to be invoked. @@ -1048,6 +1034,20 @@ // See https://crbug.com/1416017 BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kURLSetPortCheckOverflow); +// Keep strong references in the blink memory cache to maximize resource reuse. +// See https://crbug.com/1409349. +BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kMemoryCacheStrongReference); + +// Save only one unloaded page's resources in the memory cache. +// See https://crbug.com/1409349. +BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE( + kMemoryCacheStrongReferenceSingleUnload); + +// Save strong references only for fonts, stylesheets and scripts +// See https://crbug.com/1409349. +BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE( + kMemoryCacheStrongReferenceFilterImages); + } // namespace features } // namespace blink
diff --git a/third_party/blink/public/common/tokens/tokens.h b/third_party/blink/public/common/tokens/tokens.h index 10bf0dd..dfd62f44b 100644 --- a/third_party/blink/public/common/tokens/tokens.h +++ b/third_party/blink/public/common/tokens/tokens.h
@@ -79,16 +79,11 @@ // Identifies a paint worklet. using PaintWorkletToken = base::TokenType<class PaintWorkletTokenTypeMarker>; -// Identifies a shared storage worklet. -using SharedStorageWorkletToken = - base::TokenType<class SharedStorageWorkletTokenTypeMarker>; - // Can represent any type of WorkletToken. using WorkletToken = MultiToken<AnimationWorkletToken, AudioWorkletToken, LayoutWorkletToken, - PaintWorkletToken, - SharedStorageWorkletToken>; + PaintWorkletToken>; //////////////////////////////////////////////////////////////////////////////// // SHADOW REALM TOKENS @@ -120,7 +115,6 @@ AudioWorkletToken, LayoutWorkletToken, PaintWorkletToken, - SharedStorageWorkletToken, ShadowRealmToken>; // Identifies a blink::PortalContents / blink::HTMLPortalElement in the
diff --git a/third_party/blink/public/common/tokens/tokens_mojom_traits.h b/third_party/blink/public/common/tokens/tokens_mojom_traits.h index c0323f965..c4a1376 100644 --- a/third_party/blink/public/common/tokens/tokens_mojom_traits.h +++ b/third_party/blink/public/common/tokens/tokens_mojom_traits.h
@@ -161,13 +161,6 @@ blink::PaintWorkletToken> {}; template <> -struct StructTraits<blink::mojom::SharedStorageWorkletTokenDataView, - blink::SharedStorageWorkletToken> - : public blink::TokenMojomTraitsHelper< - blink::mojom::SharedStorageWorkletTokenDataView, - blink::SharedStorageWorkletToken> {}; - -template <> struct BLINK_COMMON_EXPORT UnionTraits<blink::mojom::WorkletTokenDataView, blink::WorkletToken> { private: @@ -187,8 +180,6 @@ return DataView::Tag::kLayoutWorkletToken; case blink::WorkletToken::IndexOf<blink::PaintWorkletToken>(): return DataView::Tag::kPaintWorkletToken; - case blink::WorkletToken::IndexOf<blink::SharedStorageWorkletToken>(): - return DataView::Tag::kSharedStorageWorkletToken; } base::ImmediateCrash(); } @@ -209,10 +200,6 @@ const blink::WorkletToken& token) { return token.GetAs<blink::PaintWorkletToken>(); } - static const blink::SharedStorageWorkletToken& shared_storage_worklet_token( - const blink::WorkletToken& token) { - return token.GetAs<blink::SharedStorageWorkletToken>(); - } }; //////////////////////////////////////////////////////////////////////////////// @@ -278,9 +265,6 @@ return DataView::Tag::kLayoutWorkletToken; case blink::ExecutionContextToken::IndexOf<blink::PaintWorkletToken>(): return DataView::Tag::kPaintWorkletToken; - case blink::ExecutionContextToken::IndexOf< - blink::SharedStorageWorkletToken>(): - return DataView::Tag::kSharedStorageWorkletToken; case blink::ExecutionContextToken::IndexOf<blink::ShadowRealmToken>(): return DataView::Tag::kShadowRealmToken; } @@ -319,10 +303,6 @@ const blink::ExecutionContextToken& token) { return token.GetAs<blink::PaintWorkletToken>(); } - static const blink::SharedStorageWorkletToken& shared_storage_worklet_token( - const blink::ExecutionContextToken& token) { - return token.GetAs<blink::SharedStorageWorkletToken>(); - } static const blink::ShadowRealmToken& shadow_realm_token( const blink::ExecutionContextToken& token) { return token.GetAs<blink::ShadowRealmToken>();
diff --git a/third_party/blink/public/mojom/smart_card/smart_card.mojom b/third_party/blink/public/mojom/smart_card/smart_card.mojom index 4565924..2857cca8 100644 --- a/third_party/blink/public/mojom/smart_card/smart_card.mojom +++ b/third_party/blink/public/mojom/smart_card/smart_card.mojom
@@ -4,9 +4,10 @@ module blink.mojom; -// Maps to the namesake enum in -// https://github.com/WICG/web-smart-card/blob/main/README.md#web-idl +// Errors that can arise from PC/SC requests. enum SmartCardResponseCode { + // SmartCardError: + // https://github.com/WICG/web-smart-card/blob/main/README.md#web-idl kNoService, kNoSmartCard, kNotReady, @@ -15,12 +16,26 @@ kReaderUnavailable, kRemovedCard, kResetCard, + kServerTooBusy, kSharingViolation, kSystemCancelled, kUnpoweredCard, kUnresponsiveCard, kUnsupportedCard, - kUnsupportedFeature + kUnsupportedFeature, + + // DOMException: + // "InvalidStateError" + kInvalidConnection, // Derived from SCARD_E_INVALID_HANDLE in winscard.h + kServiceStopped, // SCARD_E_SERVICE_STOPPED in winscard.h + // "AbortError" + kShutdown, // SCARD_P_SHUTDOWN in winscard.h + // "UnknownError" + kCommError, // SCARD_F_COMM_ERROR in winscard.h + kInternalError, // SCARD_F_INTERNAL_ERROR in winscard.h + kNoMemory, // SCARD_E_NO_MEMORY in winscard.h + kUnexpected, // SCARD_E_UNEXPECTED in winscard.h + kUnknownError, // SCARD_F_UNKNOWN_ERROR in winscard.h }; // Information about a smart card reader.
diff --git a/third_party/blink/public/mojom/tokens/tokens.mojom b/third_party/blink/public/mojom/tokens/tokens.mojom index b1e04e842..293c410 100644 --- a/third_party/blink/public/mojom/tokens/tokens.mojom +++ b/third_party/blink/public/mojom/tokens/tokens.mojom
@@ -78,16 +78,11 @@ mojo_base.mojom.UnguessableToken value; }; -struct SharedStorageWorkletToken { - mojo_base.mojom.UnguessableToken value; -}; - union WorkletToken { AnimationWorkletToken animation_worklet_token; AudioWorkletToken audio_worklet_token; LayoutWorkletToken layout_worklet_token; PaintWorkletToken paint_worklet_token; - SharedStorageWorkletToken shared_storage_worklet_token; }; //////////////////////////////////////////////////////////////////////////////// @@ -123,7 +118,6 @@ AudioWorkletToken audio_worklet_token; LayoutWorkletToken layout_worklet_token; PaintWorkletToken paint_worklet_token; - SharedStorageWorkletToken shared_storage_worklet_token; ShadowRealmToken shadow_realm_token; };
diff --git a/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom b/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom index 4477820..2588dd9e 100644 --- a/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom +++ b/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
@@ -3662,7 +3662,7 @@ kFlexboxAbsPosJustifyContent = 4330, kMultipleFetchHandlersInServiceWorker = 4331, - kStorageAccessAPI_requestStorageAccessForOrigin_Method = 4332, + kStorageAccessAPI_requestStorageAccessFor_Method = 4332, kPrivateAggregationApiAll = 4333, kPrivateAggregationApiFledge = 4334, kPrivateAggregationApiSharedStorage = 4335,
diff --git a/third_party/blink/public/web/DEPS b/third_party/blink/public/web/DEPS index 2f23f7c8..2a47463 100644 --- a/third_party/blink/public/web/DEPS +++ b/third_party/blink/public/web/DEPS
@@ -10,7 +10,6 @@ "+base/strings", "+base/time/time.h", "+base/threading/thread_checker.h", - "+base/task/single_thread_task_runner.h", "+build/build_config.h", "+build/buildflag.h", "+cc/input/browser_controls_state.h",
diff --git a/third_party/blink/public/web/web_local_frame_client.h b/third_party/blink/public/web/web_local_frame_client.h index 246d2ff..082e8ec 100644 --- a/third_party/blink/public/web/web_local_frame_client.h +++ b/third_party/blink/public/web/web_local_frame_client.h
@@ -271,8 +271,12 @@ // from outside of the browsing instance. virtual WebFrame* FindFrame(const WebString& name) { return nullptr; } - // Notifies observers that the frame is being detached and sends the current - // frame's navigation state to the browser. + // Notification that the frame will be swapped out and replaced by another + // frame. + virtual void WillSwap() {} + + // Notification that the frame is being detached and sends the current frame's + // navigation state to the browser. virtual void WillDetach() {} // This frame has been detached. Embedders should release any resources
diff --git a/third_party/blink/public/web/web_shared_storage_worklet_thread.h b/third_party/blink/public/web/web_shared_storage_worklet_thread.h deleted file mode 100644 index 5831369..0000000 --- a/third_party/blink/public/web/web_shared_storage_worklet_thread.h +++ /dev/null
@@ -1,28 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_SHARED_STORAGE_WORKLET_THREAD_H_ -#define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_SHARED_STORAGE_WORKLET_THREAD_H_ - -#include "base/memory/scoped_refptr.h" -#include "base/task/single_thread_task_runner.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" -#include "third_party/blink/public/mojom/shared_storage/shared_storage_worklet_service.mojom-forward.h" -#include "third_party/blink/public/platform/web_common.h" - -namespace blink { - -// An interface to start a self-owned shared storage worklet thread. -class BLINK_EXPORT WebSharedStorageWorkletThread { - public: - static void Start( - scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner, - mojo::PendingReceiver<mojom::SharedStorageWorkletService> receiver); - - virtual ~WebSharedStorageWorkletThread() = default; -}; - -} // namespace blink - -#endif // THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_SHARED_STORAGE_WORKLET_THREAD_H_
diff --git a/third_party/blink/renderer/bindings/core/v8/script_evaluation_result.cc b/third_party/blink/renderer/bindings/core/v8/script_evaluation_result.cc index f9f1ae5..f5530f0a 100644 --- a/third_party/blink/renderer/bindings/core/v8/script_evaluation_result.cc +++ b/third_party/blink/renderer/bindings/core/v8/script_evaluation_result.cc
@@ -111,16 +111,6 @@ return value_; } -v8::Local<v8::Value> ScriptEvaluationResult::GetExceptionForWorklet() const { -#if DCHECK_IS_ON() - DCHECK_EQ(script_type_, mojom::blink::ScriptType::kClassic); -#endif - DCHECK_EQ(result_type_, ResultType::kException); - DCHECK(!value_.IsEmpty()); - - return value_; -} - v8::Local<v8::Value> ScriptEvaluationResult::GetExceptionForClassicForTesting() const { DCHECK_EQ(result_type_, ResultType::kException);
diff --git a/third_party/blink/renderer/bindings/core/v8/script_evaluation_result.h b/third_party/blink/renderer/bindings/core/v8/script_evaluation_result.h index 59f8ef50..6eb64866 100644 --- a/third_party/blink/renderer/bindings/core/v8/script_evaluation_result.h +++ b/third_party/blink/renderer/bindings/core/v8/script_evaluation_result.h
@@ -119,15 +119,6 @@ // Can be called only when GetResultType() == kException. v8::Local<v8::Value> GetExceptionForModule() const; - // Returns the exception thrown for classic scripts for a worklet. - // Can be called only when GetResultType() == kException. - // - // TODO(crbug.com/1419253): Shared storage worklet is using a ClassicScript - // and relies on this method to get the exception. This is tentative. - // Eventually, this method should be removed once shared storage migrates to - // the blink-worklet's script loading infrastructure. - v8::Local<v8::Value> GetExceptionForWorklet() const; - // Returns the exception thrown for both module and classic scripts. // Can be called only when GetResultType() == kException. v8::Local<v8::Value> GetExceptionForClassicForTesting() const;
diff --git a/third_party/blink/renderer/core/css/css_timing_function_value.cc b/third_party/blink/renderer/core/css/css_timing_function_value.cc index 10be97cc..7f4125d 100644 --- a/third_party/blink/renderer/core/css/css_timing_function_value.cc +++ b/third_party/blink/renderer/core/css/css_timing_function_value.cc
@@ -24,6 +24,7 @@ */ #include "third_party/blink/renderer/core/css/css_timing_function_value.h" +#include "base/ranges/algorithm.h" #include "third_party/blink/renderer/platform/wtf/text/string_builder.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" @@ -47,15 +48,7 @@ bool CSSLinearTimingFunctionValue::Equals( const CSSLinearTimingFunctionValue& other) const { - if (points_.size() != other.points_.size()) { - return false; - } - for (wtf_size_t i = 0; i < points_.size(); ++i) { - if (points_[i] != other.points_[i]) { - return false; - } - } - return true; + return base::ranges::equal(points_, other.points_); } String CSSCubicBezierTimingFunctionValue::CustomCSSText() const {
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc index 2346bcf..63be35d 100644 --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc
@@ -395,9 +395,9 @@ result); } -void FireRequestStorageAccessForOriginHistogram(RequestStorageResult result) { +void FireRequestStorageAccessForHistogram(RequestStorageResult result) { base::UmaHistogramEnumeration( - "API.TopLevelStorageAccess.RequestStorageAccessForOrigin", result); + "API.TopLevelStorageAccess.RequestStorageAccessFor", result); } class IntrinsicSizeResizeObserverDelegate : public ResizeObserver::Delegate { @@ -6157,19 +6157,17 @@ return promise; } -ScriptPromise Document::requestStorageAccessForOrigin( - ScriptState* script_state, - const AtomicString& origin) { +ScriptPromise Document::requestStorageAccessFor(ScriptState* script_state, + const AtomicString& origin) { if (!GetFrame()) { - FireRequestStorageAccessForOriginHistogram( + FireRequestStorageAccessForHistogram( RequestStorageResult::REJECTED_NO_ORIGIN); // Note that in detached frames, resolvers are not able to return a promise. return ScriptPromise::RejectWithDOMException( - script_state, - MakeGarbageCollected<DOMException>( - DOMExceptionCode::kInvalidStateError, - "requestStorageAccessForOrigin: Cannot be used unless " - "the document is fully active.")); + script_state, MakeGarbageCollected<DOMException>( + DOMExceptionCode::kInvalidStateError, + "requestStorageAccessFor: Cannot be used unless " + "the document is fully active.")); } ScriptPromiseResolver* resolver = @@ -6185,14 +6183,14 @@ AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>( mojom::blink::ConsoleMessageSource::kSecurity, mojom::blink::ConsoleMessageLevel::kError, - "requestStorageAccessForOrigin: Must be handling a user gesture to " + "requestStorageAccessFor: Must be handling a user gesture to " "use.")); - FireRequestStorageAccessForOriginHistogram( + FireRequestStorageAccessForHistogram( RequestStorageResult::REJECTED_NO_USER_GESTURE); resolver->Reject(V8ThrowDOMException::CreateOrEmpty( script_state->GetIsolate(), DOMExceptionCode::kNotAllowedError, - "requestStorageAccessForOrigin not allowed")); + "requestStorageAccessFor not allowed")); return promise; } @@ -6200,13 +6198,13 @@ AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>( mojom::blink::ConsoleMessageSource::kSecurity, mojom::blink::ConsoleMessageLevel::kError, - "requestStorageAccessForOrigin: Only supported in primary top-level " + "requestStorageAccessFor: Only supported in primary top-level " "browsing contexts.")); - FireRequestStorageAccessForOriginHistogram( + FireRequestStorageAccessForHistogram( RequestStorageResult::REJECTED_INCORRECT_FRAME); resolver->Reject(V8ThrowDOMException::CreateOrEmpty( script_state->GetIsolate(), DOMExceptionCode::kNotAllowedError, - "requestStorageAccessForOrigin not allowed")); + "requestStorageAccessFor not allowed")); return promise; } @@ -6214,13 +6212,13 @@ AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>( mojom::blink::ConsoleMessageSource::kSecurity, mojom::blink::ConsoleMessageLevel::kError, - "requestStorageAccessForOrigin: Cannot be used by opaque origins.")); + "requestStorageAccessFor: Cannot be used by opaque origins.")); - FireRequestStorageAccessForOriginHistogram( + FireRequestStorageAccessForHistogram( RequestStorageResult::REJECTED_OPAQUE_ORIGIN); resolver->Reject(V8ThrowDOMException::CreateOrEmpty( script_state->GetIsolate(), DOMExceptionCode::kNotAllowedError, - "requestStorageAccessForOrigin not allowed")); + "requestStorageAccessFor not allowed")); return promise; } @@ -6228,14 +6226,14 @@ AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>( mojom::blink::ConsoleMessageSource::kSecurity, mojom::blink::ConsoleMessageLevel::kError, - "requestStorageAccessForOrigin: May not be used in an insecure " + "requestStorageAccessFor: May not be used in an insecure " "context.")); - FireRequestStorageAccessForOriginHistogram( + FireRequestStorageAccessForHistogram( RequestStorageResult::REJECTED_INSECURE_CONTEXT); resolver->Reject(V8ThrowDOMException::CreateOrEmpty( script_state->GetIsolate(), DOMExceptionCode::kNotAllowedError, - "requestStorageAccessForOrigin not allowed")); + "requestStorageAccessFor not allowed")); return promise; } @@ -6246,19 +6244,19 @@ AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>( mojom::blink::ConsoleMessageSource::kSecurity, mojom::blink::ConsoleMessageLevel::kError, - "requestStorageAccessForOrigin: Invalid origin parameter.")); - FireRequestStorageAccessForOriginHistogram( + "requestStorageAccessFor: Invalid origin parameter.")); + FireRequestStorageAccessForHistogram( RequestStorageResult::REJECTED_OPAQUE_ORIGIN); resolver->Reject(V8ThrowDOMException::CreateOrEmpty( script_state->GetIsolate(), DOMExceptionCode::kNotAllowedError, - "requestStorageAccessForOrigin not allowed")); + "requestStorageAccessFor not allowed")); return promise; } if (dom_window_->GetSecurityOrigin()->IsSameSiteWith(supplied_origin.get())) { // Access is not actually disabled, so accept the request. resolver->Resolve(); - FireRequestStorageAccessForOriginHistogram( + FireRequestStorageAccessForHistogram( RequestStorageResult::APPROVED_EXISTING_ACCESS); return promise; } @@ -6283,7 +6281,7 @@ switch (status) { case mojom::blink::PermissionStatus::GRANTED: - FireRequestStorageAccessForOriginHistogram( + FireRequestStorageAccessForHistogram( RequestStorageResult::APPROVED_NEW_GRANT); resolver->Resolve(); break; @@ -6293,14 +6291,14 @@ [[fallthrough]]; case mojom::blink::PermissionStatus::ASK: default: - FireRequestStorageAccessForOriginHistogram( + FireRequestStorageAccessForHistogram( RequestStorageResult::REJECTED_GRANT_DENIED); ScriptState* state = resolver->GetScriptState(); DCHECK(state->ContextIsValid()); ScriptState::Scope scope(state); resolver->Reject(V8ThrowDOMException::CreateOrEmpty( state->GetIsolate(), DOMExceptionCode::kNotAllowedError, - "requestStorageAccessForOrigin not allowed")); + "requestStorageAccessFor not allowed")); } }, WrapPersistent(resolver), WrapPersistent(this)));
diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/renderer/core/dom/document.h index f4f369d..12ab12e 100644 --- a/third_party/blink/renderer/core/dom/document.h +++ b/third_party/blink/renderer/core/dom/document.h
@@ -1197,8 +1197,8 @@ // may otherwise be blocked. ScriptPromise hasStorageAccess(ScriptState* script_state); ScriptPromise requestStorageAccess(ScriptState* script_state); - ScriptPromise requestStorageAccessForOrigin(ScriptState* script_state, - const AtomicString& site); + ScriptPromise requestStorageAccessFor(ScriptState* script_state, + const AtomicString& site); // Fragment directive API, currently used to feature detect text-fragments. // https://wicg.github.io/scroll-to-text-fragment/#feature-detectability
diff --git a/third_party/blink/renderer/core/dom/document.idl b/third_party/blink/renderer/core/dom/document.idl index 85ef13f5..5bcd619 100644 --- a/third_party/blink/renderer/core/dom/document.idl +++ b/third_party/blink/renderer/core/dom/document.idl
@@ -183,7 +183,7 @@ // Storage Access API [CallWith=ScriptState, NewObject, RuntimeEnabled=StorageAccessAPI, MeasureAs=StorageAccessAPI_HasStorageAccess_Method] Promise<boolean> hasStorageAccess(); [CallWith=ScriptState, NewObject, RuntimeEnabled=StorageAccessAPI, MeasureAs=StorageAccessAPI_requestStorageAccess_Method] Promise<void> requestStorageAccess(); - [CallWith=ScriptState, NewObject, RuntimeEnabled=StorageAccessAPIForOriginExtension, MeasureAs=StorageAccessAPI_requestStorageAccessForOrigin_Method] Promise<void> requestStorageAccessForOrigin(USVString origin); + [CallWith=ScriptState, NewObject, RuntimeEnabled=StorageAccessAPIForOriginExtension, MeasureAs=StorageAccessAPI_requestStorageAccessFor_Method] Promise<void> requestStorageAccessFor(USVString requestedOrigin); // Text fragment directive API // https://wicg.github.io/scroll-to-text-fragment/#feature-detectability
diff --git a/third_party/blink/renderer/core/execution_context/execution_context.h b/third_party/blink/renderer/core/execution_context/execution_context.h index b0504264..b7da575 100644 --- a/third_party/blink/renderer/core/execution_context/execution_context.h +++ b/third_party/blink/renderer/core/execution_context/execution_context.h
@@ -174,7 +174,6 @@ virtual bool IsPaintWorkletGlobalScope() const { return false; } virtual bool IsThreadedWorkletGlobalScope() const { return false; } virtual bool IsShadowRealmGlobalScope() const { return false; } - virtual bool IsSharedStorageWorkletGlobalScope() const { return false; } virtual bool IsJSExecutionForbidden() const { return false; } // TODO(crbug.com/1335924) Change this method to be pure-virtual and each
diff --git a/third_party/blink/renderer/core/frame/frame.cc b/third_party/blink/renderer/core/frame/frame.cc index 22bf66c..d6927a7 100644 --- a/third_party/blink/renderer/core/frame/frame.cc +++ b/third_party/blink/renderer/core/frame/frame.cc
@@ -65,6 +65,7 @@ #include "third_party/blink/renderer/platform/instrumentation/instance_counters.h" #include "third_party/blink/renderer/platform/instrumentation/use_counter.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_error.h" +#include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h" #include "third_party/blink/renderer/platform/wtf/assertions.h" namespace blink { @@ -866,4 +867,27 @@ Parent()->RemoveChild(this); } +HeapVector<Member<Resource>> Frame::AllResourcesUnderFrame() { + DCHECK(base::FeatureList::IsEnabled(features::kMemoryCacheStrongReference)); + + HeapVector<Member<Resource>> resources; + if (IsLocalFrame()) { + if (auto* this_local_frame = DynamicTo<LocalFrame>(this)) { + HeapHashSet<Member<Resource>> local_frame_resources = + this_local_frame->GetDocument() + ->Fetcher() + ->MoveResourceStrongReferences(); + for (Resource* resource : local_frame_resources) { + resources.push_back(resource); + } + } + } + + for (Frame* child = Tree().FirstChild(); child; + child = child->Tree().NextSibling()) { + resources.AppendVector(child->AllResourcesUnderFrame()); + } + return resources; +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/frame/frame.h b/third_party/blink/renderer/core/frame/frame.h index 5cfb8cd..f3b6bf4 100644 --- a/third_party/blink/renderer/core/frame/frame.h +++ b/third_party/blink/renderer/core/frame/frame.h
@@ -57,6 +57,7 @@ #include "third_party/blink/renderer/core/loader/frame_loader_types.h" #include "third_party/blink/renderer/core/page/frame_tree.h" #include "third_party/blink/renderer/platform/graphics/touch_action.h" +#include "third_party/blink/renderer/platform/heap/collection_support/heap_vector.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/scheduler/public/post_cancellable_task.h" #include "third_party/blink/renderer/platform/wtf/forward.h" @@ -79,6 +80,7 @@ class LayoutEmbeddedContent; class LocalFrame; class Page; +class Resource; class SecurityContext; class Settings; class WindowProxy; @@ -441,6 +443,9 @@ // on a detached frame. absl::optional<mojom::blink::FencedFrameMode> GetFencedFrameMode() const; + // Returns all the resources under the frame tree of this node. + HeapVector<Member<Resource>> AllResourcesUnderFrame(); + protected: // |inheriting_agent_factory| should basically be set to the parent frame or // opener's WindowAgentFactory. Pass nullptr if the frame is isolated from
diff --git a/third_party/blink/renderer/core/frame/local_frame_client_impl.cc b/third_party/blink/renderer/core/frame/local_frame_client_impl.cc index 3e43e9d7..2508c036 100644 --- a/third_party/blink/renderer/core/frame/local_frame_client_impl.cc +++ b/third_party/blink/renderer/core/frame/local_frame_client_impl.cc
@@ -343,6 +343,9 @@ // place at this point since we are no longer associated with the Page. web_frame_->SetClient(nullptr); + if (type == FrameDetachType::kSwap) { + client->WillSwap(); + } client->WillDetach(); // We only notify the browser process when the frame is being detached for
diff --git a/third_party/blink/renderer/core/layout/build.gni b/third_party/blink/renderer/core/layout/build.gni index 8369f75..d222019 100644 --- a/third_party/blink/renderer/core/layout/build.gni +++ b/third_party/blink/renderer/core/layout/build.gni
@@ -414,6 +414,7 @@ "ng/inline/ng_inline_item_segment.cc", "ng/inline/ng_inline_item_segment.h", "ng/inline/ng_inline_item_span.h", + "ng/inline/ng_inline_item_text_index.h", "ng/inline/ng_inline_items_builder.cc", "ng/inline/ng_inline_items_builder.h", "ng/inline/ng_inline_items_data.cc",
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_break_token.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_break_token.cc index a6ce40f..9846a772 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_break_token.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_break_token.cc
@@ -52,8 +52,7 @@ NGInlineBreakToken* NGInlineBreakToken::Create( NGInlineNode node, const ComputedStyle* style, - unsigned item_index, - unsigned text_offset, + const NGInlineItemTextIndex& index, unsigned flags /* NGInlineBreakTokenFlags */, const NGBreakToken* sub_break_token) { // We store the children list inline in the break token as a flexible @@ -68,23 +67,21 @@ flags |= kHasSubBreakToken; } - return MakeGarbageCollected<NGInlineBreakToken>( - AdditionalBytes(size), PassKey(), node, style, item_index, text_offset, - flags, sub_break_token); + return MakeGarbageCollected<NGInlineBreakToken>(AdditionalBytes(size), + PassKey(), node, style, index, + flags, sub_break_token); } NGInlineBreakToken::NGInlineBreakToken( PassKey key, NGInlineNode node, const ComputedStyle* style, - unsigned item_index, - unsigned text_offset, + const NGInlineItemTextIndex& index, unsigned flags /* NGInlineBreakTokenFlags */, const NGBreakToken* sub_break_token) : NGBreakToken(kInlineBreakToken, node, flags), style_(style), - item_index_(item_index), - text_offset_(text_offset) { + index_(index) { if (UNLIKELY(sub_break_token)) { #if DCHECK_IS_ON() // Only one level of inline break token nesting is expected.
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_break_token.h b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_break_token.h index 4c8de83..346760b 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_break_token.h +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_break_token.h
@@ -7,6 +7,7 @@ #include "base/dcheck_is_on.h" #include "third_party/blink/renderer/core/core_export.h" +#include "third_party/blink/renderer/core/layout/ng/inline/ng_inline_item_text_index.h" #include "third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.h" #include "third_party/blink/renderer/core/layout/ng/ng_break_token.h" #include "third_party/blink/renderer/platform/wtf/casting.h" @@ -33,28 +34,31 @@ static NGInlineBreakToken* Create( NGInlineNode node, const ComputedStyle* style, + const NGInlineItemTextIndex& index, + unsigned flags /* NGInlineBreakTokenFlags */, + const NGBreakToken* sub_break_token = nullptr); + static NGInlineBreakToken* Create( + NGInlineNode node, + const ComputedStyle* style, unsigned item_index, unsigned text_offset, unsigned flags /* NGInlineBreakTokenFlags */, - const NGBreakToken* sub_break_token = nullptr); + const NGBreakToken* sub_break_token = nullptr) { + return Create(node, style, NGInlineItemTextIndex{item_index, text_offset}, + flags, sub_break_token); + } // The style at the end of this break token. The next line should start with // this style. const ComputedStyle* Style() const { return style_.get(); } - unsigned ItemIndex() const { - return item_index_; - } - - unsigned TextOffset() const { - return text_offset_; - } + const NGInlineItemTextIndex& ItemTextIndex() const { return index_; } + wtf_size_t ItemIndex() const { return index_.item_index; } + wtf_size_t TextOffset() const { return index_.text_offset; } // True if the offset of `this` is equal to or after `other`. bool IsAtEqualOrAfter(const NGInlineBreakToken& other) const { - return text_offset_ > other.text_offset_ || - (text_offset_ == other.text_offset_ && - item_index_ >= other.item_index_); + return index_.IsEqualOrAfter(other.index_); } bool UseFirstLineStyle() const { @@ -89,8 +93,7 @@ NGInlineBreakToken(PassKey, NGInlineNode node, const ComputedStyle*, - unsigned item_index, - unsigned text_offset, + const NGInlineItemTextIndex& index, unsigned flags /* NGInlineBreakTokenFlags */, const NGBreakToken* sub_break_token); @@ -106,8 +109,7 @@ const Member<const NGBreakToken>* SubBreakTokenAddress() const; scoped_refptr<const ComputedStyle> style_; - unsigned item_index_; - unsigned text_offset_; + NGInlineItemTextIndex index_; // This is an array of one item if |kHasSubBreakToken|, or zero. Member<const NGBreakToken> sub_break_token_[];
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_item_text_index.h b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_item_text_index.h new file mode 100644 index 0000000..6827d460 --- /dev/null +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_item_text_index.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 THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_INLINE_NG_INLINE_ITEM_TEXT_INDEX_H_ +#define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_INLINE_NG_INLINE_ITEM_TEXT_INDEX_H_ + +#include "third_party/blink/renderer/core/core_export.h" +#include "third_party/blink/renderer/platform/wtf/wtf_size_t.h" + +namespace blink { + +// Represents an index of `NGInlineItem`, along with the text offset. +struct CORE_EXPORT NGInlineItemTextIndex { + // True if `this` is equal to or after `other`. + bool IsEqualOrAfter(const NGInlineItemTextIndex& other) const { + return text_offset > other.text_offset || + (text_offset == other.text_offset && item_index >= other.item_index); + } + + // The index of `NGInlineItemsData::items`. + wtf_size_t item_index = 0; + // The offset of `NGInlineItemsData::text_content`. + wtf_size_t text_offset = 0; +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_INLINE_NG_INLINE_ITEM_TEXT_INDEX_H_
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc index 5ac1acc..ac55368 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc
@@ -1491,7 +1491,7 @@ } // Success! - container_builder_.SetBreakToken(line_breaker.CreateBreakToken(line_info)); + container_builder_.SetBreakToken(line_info.BreakToken()); container_builder_.SetBaseDirection(line_info.BaseDirection()); // Propagate any break tokens for floats that we fragmented before or inside
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc index 6f00399..26425351 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc
@@ -697,6 +697,9 @@ line_info->SetHasTrailingSpaces(); ComputeLineLocation(line_info); + if (mode_ == NGLineBreakerMode::kContent) { + line_info->SetBreakToken(CreateBreakToken(*line_info)); + } } void NGLineBreaker::BreakLine(NGLineInfo* line_info) { @@ -3052,20 +3055,29 @@ #endif DCHECK(current_style_); - const NGBreakToken* sub_break_token = line_info.BlockInInlineBreakToken(); const HeapVector<NGInlineItem>& items = Items(); DCHECK_LE(item_index_, items.size()); // If we have reached the end, create no break token. if (item_index_ >= items.size()) return nullptr; + // If we've resumed a block-in-inline in a parallel flow, and didn't break // again, we're done. A break token will be created in the main flow (if // there's any left of it). + const NGBreakToken* sub_break_token = nullptr; + const NGLayoutResult* block_in_inline = line_info.BlockInInlineLayoutResult(); + if (UNLIKELY(block_in_inline)) { + if (UNLIKELY(block_in_inline->Status() != NGLayoutResult::kSuccess)) { + return nullptr; + } + sub_break_token = block_in_inline->PhysicalFragment().BreakToken(); + } if (UNLIKELY(break_token_ && break_token_->BlockInInlineBreakToken())) { if (break_token_->BlockInInlineBreakToken()->IsAtBlockEnd() && !sub_break_token) return nullptr; } + DCHECK_EQ(line_info.HasForcedBreak(), is_after_forced_break_); unsigned flags = (is_after_forced_break_ ? NGInlineBreakToken::kIsForcedBreak : 0) |
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h index 624b5e3c..9b7e2b0e 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h
@@ -60,10 +60,6 @@ bool IsFinished() const { return item_index_ >= Items().size(); } - // Create an NGInlineBreakToken for the last line returned by NextLine(). - // Only call once per instance. - const NGInlineBreakToken* CreateBreakToken(const NGLineInfo&); - void PropagateBreakToken(const NGBlockBreakToken*); HeapVector<Member<const NGBlockBreakToken>>& PropagatedBreakTokens() { return propagated_break_tokens_; @@ -244,6 +240,10 @@ void RestoreLastHyphen(NGInlineItemResults* item_results); void FinalizeHyphen(NGInlineItemResults* item_results); + // Create an NGInlineBreakToken for the last line returned by NextLine(). + // Only call once per instance. + const NGInlineBreakToken* CreateBreakToken(const NGLineInfo&); + // Represents the current offset of the input. LineBreakState state_; unsigned item_index_ = 0;
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker_test.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker_test.cc index 8d41fefa..4ec7f1f 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker_test.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker_test.cc
@@ -81,7 +81,7 @@ if (line_info.Results().empty()) break; - break_token = line_breaker.CreateBreakToken(line_info); + break_token = line_info.BreakToken(); if (fill_first_space_ && lines.empty()) { first_should_hang_trailing_space_ = line_info.ShouldHangTrailingSpaces();
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_line_info.h b/third_party/blink/renderer/core/layout/ng/inline/ng_line_info.h index 83c213c5..0a065140 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_line_info.h +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_line_info.h
@@ -17,6 +17,7 @@ namespace blink { class ComputedStyle; +class NGInlineBreakToken; class NGInlineNode; struct NGInlineItemsData; @@ -86,6 +87,11 @@ NGInlineItemResults* MutableResults() { return &results_; } const NGInlineItemResults& Results() const { return results_; } + const NGInlineBreakToken* BreakToken() const { return break_token_; } + void SetBreakToken(const NGInlineBreakToken* break_token) { + break_token_ = break_token; + } + void SetTextIndent(LayoutUnit indent) { text_indent_ = indent; } LayoutUnit TextIndent() const { return text_indent_; } @@ -228,6 +234,8 @@ NGBfcOffset bfc_offset_; + const NGInlineBreakToken* break_token_ = nullptr; + const NGLayoutResult* block_in_inline_layout_result_ = nullptr; LayoutUnit available_width_;
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_paragraph_line_breaker.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_paragraph_line_breaker.cc index e31d4f2..9c33f18 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_paragraph_line_breaker.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_paragraph_line_breaker.cc
@@ -70,7 +70,7 @@ if (line_info.HasOverflow()) { return Status::kNotApplicable; } - break_token_ = line_breaker.CreateBreakToken(line_info); + break_token_ = line_info.BreakToken(); lines_.push_back(LineBreakResult{line_info.Width()}); DCHECK_LE(lines_.size(), kMaxLinesToBalance); if (!break_token_ ||
diff --git a/third_party/blink/renderer/core/loader/frame_loader.cc b/third_party/blink/renderer/core/loader/frame_loader.cc index cbebb4dc..c924edb 100644 --- a/third_party/blink/renderer/core/loader/frame_loader.cc +++ b/third_party/blink/renderer/core/loader/frame_loader.cc
@@ -116,6 +116,7 @@ #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/instrumentation/instance_counters.h" #include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h" +#include "third_party/blink/renderer/platform/loader/fetch/memory_cache.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher_properties.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_request.h" @@ -1004,6 +1005,7 @@ DCHECK(document_loader_); DCHECK(frame_->GetDocument()); DCHECK(Client()->HasWebView()); + if (!frame_->IsNavigationAllowed() || frame_->GetDocument()->PageDismissalEventBeingDispatched() != Document::kNoDismissal) { @@ -1568,6 +1570,12 @@ descendant_frame->GetDocument()->BeforeUnloadDoneWillUnload(); } + if (!frame_->IsDetached() && frame_->IsOutermostMainFrame() && + base::FeatureList::IsEnabled(features::kMemoryCacheStrongReference)) { + MemoryCache::Get()->SavePageResourceStrongReferences( + frame_->AllResourcesUnderFrame()); + } + if (!is_reload) { // Records only when a non-reload navigation occurs. base::UmaHistogramMediumTimes(
diff --git a/third_party/blink/renderer/core/loader/resource/font_resource_test.cc b/third_party/blink/renderer/core/loader/resource/font_resource_test.cc index a833cb9..c8b7f69 100644 --- a/third_party/blink/renderer/core/loader/resource/font_resource_test.cc +++ b/third_party/blink/renderer/core/loader/resource/font_resource_test.cc
@@ -26,6 +26,7 @@ #include "third_party/blink/renderer/platform/loader/testing/test_resource_fetcher_properties.h" #include "third_party/blink/renderer/platform/testing/histogram_tester.h" #include "third_party/blink/renderer/platform/testing/mock_context_lifecycle_notifier.h" +#include "third_party/blink/renderer/platform/testing/testing_platform_support_with_mock_scheduler.h" #include "third_party/blink/renderer/platform/testing/url_loader_mock_factory.h" #include "third_party/blink/renderer/platform/testing/url_test_helpers.h" #include "third_party/blink/renderer/platform/weborigin/kurl.h" @@ -51,7 +52,19 @@ base::test::ScopedFeatureList scoped_feature_list_; }; -// Tests if ResourceFetcher works fine with FontResource that requires defered +class FontResourceStrongReferenceTest : public FontResourceTest { + public: + void SetUp() override { + scoped_feature_list_.InitAndEnableFeature( + features::kMemoryCacheStrongReference); + FontResourceTest::SetUp(); + } + + private: + base::test::ScopedFeatureList scoped_feature_list_; +}; + +// Tests if ResourceFetcher works fine with FontResource that requires deferred // loading supports. TEST_F(FontResourceTest, ResourceFetcherRevalidateDeferedResourceFromTwoInitiators) { @@ -279,4 +292,67 @@ MemoryCache::Get()->Remove(&resource); } +TEST_F(FontResourceStrongReferenceTest, FontResourceStrongReference) { + auto* properties = MakeGarbageCollected<TestResourceFetcherProperties>(); + MockFetchContext* context = MakeGarbageCollected<MockFetchContext>(); + auto* fetcher = MakeGarbageCollected<ResourceFetcher>( + ResourceFetcherInit(properties->MakeDetachable(), context, + base::MakeRefCounted<scheduler::FakeTaskRunner>(), + base::MakeRefCounted<scheduler::FakeTaskRunner>(), + MakeGarbageCollected<TestLoaderFactory>(), + MakeGarbageCollected<MockContextLifecycleNotifier>(), + nullptr /* back_forward_cache_loader_helper */)); + + KURL url_font("http://127.0.0.1:8000/font.ttf"); + ResourceResponse response_font(url_font); + response_font.SetHttpStatusCode(200); + response_font.SetHttpHeaderField(http_names::kCacheControl, "max-age=3600"); + url_test_helpers::RegisterMockedURLLoadWithCustomResponse( + url_font, "", WrappedResourceResponse(response_font)); + + FetchParameters fetch_params = + FetchParameters::CreateForTest(ResourceRequest(url_font)); + Resource* resource = FontResource::Fetch(fetch_params, fetcher, nullptr); + fetcher->StartLoad(resource); + url_test_helpers::ServeAsynchronousRequests(); + ASSERT_TRUE(resource); + + auto strong_referenced_resources = fetcher->MoveResourceStrongReferences(); + ASSERT_EQ(strong_referenced_resources.size(), 1u); + + strong_referenced_resources = fetcher->MoveResourceStrongReferences(); + ASSERT_EQ(strong_referenced_resources.size(), 0u); +} + +TEST_F(FontResourceStrongReferenceTest, FollowCacheControl) { + auto* properties = MakeGarbageCollected<TestResourceFetcherProperties>(); + MockFetchContext* context = MakeGarbageCollected<MockFetchContext>(); + auto* fetcher = MakeGarbageCollected<ResourceFetcher>( + ResourceFetcherInit(properties->MakeDetachable(), context, + base::MakeRefCounted<scheduler::FakeTaskRunner>(), + base::MakeRefCounted<scheduler::FakeTaskRunner>(), + MakeGarbageCollected<TestLoaderFactory>(), + MakeGarbageCollected<MockContextLifecycleNotifier>(), + nullptr /* back_forward_cache_loader_helper */)); + + KURL url_font_no_store("http://127.0.0.1:8000/font_no_store.ttf"); + ResourceResponse response_font_no_store(url_font_no_store); + response_font_no_store.SetHttpStatusCode(200); + response_font_no_store.SetHttpHeaderField(http_names::kCacheControl, + "no-cache, no-store"); + url_test_helpers::RegisterMockedURLLoadWithCustomResponse( + url_font_no_store, "", WrappedResourceResponse(response_font_no_store)); + + FetchParameters fetch_params_no_store = + FetchParameters::CreateForTest(ResourceRequest(url_font_no_store)); + Resource* resource_no_store = + FontResource::Fetch(fetch_params_no_store, fetcher, nullptr); + fetcher->StartLoad(resource_no_store); + url_test_helpers::ServeAsynchronousRequests(); + ASSERT_TRUE(resource_no_store); + + auto strong_referenced_resources = fetcher->MoveResourceStrongReferences(); + ASSERT_EQ(strong_referenced_resources.size(), 0u); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_object_proxy.cc b/third_party/blink/renderer/core/workers/dedicated_worker_object_proxy.cc index 0b77240..6956f13 100644 --- a/third_party/blink/renderer/core/workers/dedicated_worker_object_proxy.cc +++ b/third_party/blink/renderer/core/workers/dedicated_worker_object_proxy.cc
@@ -122,8 +122,7 @@ DedicatedWorkerMessagingProxy* messaging_proxy_weak_ptr, ParentExecutionContextTaskRunners* parent_execution_context_task_runners, const DedicatedWorkerToken& token) - : ThreadedObjectProxyBase(parent_execution_context_task_runners, - /*parent_agent_group_task_runner=*/nullptr), + : ThreadedObjectProxyBase(parent_execution_context_task_runners), token_(token), messaging_proxy_weak_ptr_(messaging_proxy_weak_ptr) {}
diff --git a/third_party/blink/renderer/core/workers/global_scope_creation_params.cc b/third_party/blink/renderer/core/workers/global_scope_creation_params.cc index 1295577..932c97f 100644 --- a/third_party/blink/renderer/core/workers/global_scope_creation_params.cc +++ b/third_party/blink/renderer/core/workers/global_scope_creation_params.cc
@@ -77,15 +77,10 @@ begin_frame_provider_params(std::move(begin_frame_provider_params)), // At the moment, workers do not support their container policy being set, // so it will just be an empty ParsedPermissionsPolicy for now. - // Shared storage worklets have a null `parent_permissions_policy` and - // `starter_origin`. - // TODO(crbug.com/1419253): Pass non-null `parent_permissions_policy` and - // `starter_origin`. Also, we could ensure `starter_origin` is never null - // after that. worker_permissions_policy(PermissionsPolicy::CreateFromParentPolicy( parent_permissions_policy, ParsedPermissionsPolicy() /* container_policy */, - starter_origin ? starter_origin->ToUrlOrigin() : url::Origin())), + starter_origin->ToUrlOrigin())), agent_cluster_id(agent_cluster_id), ukm_source_id(ukm_source_id), parent_context_token(parent_context_token),
diff --git a/third_party/blink/renderer/core/workers/threaded_messaging_proxy_base.cc b/third_party/blink/renderer/core/workers/threaded_messaging_proxy_base.cc index dc2e088..9bca728 100644 --- a/third_party/blink/renderer/core/workers/threaded_messaging_proxy_base.cc +++ b/third_party/blink/renderer/core/workers/threaded_messaging_proxy_base.cc
@@ -29,29 +29,20 @@ } // namespace ThreadedMessagingProxyBase::ThreadedMessagingProxyBase( - ExecutionContext* execution_context, - scoped_refptr<base::SingleThreadTaskRunner> parent_agent_group_task_runner) + ExecutionContext* execution_context) : execution_context_(execution_context), parent_execution_context_task_runners_( - execution_context - ? ParentExecutionContextTaskRunners::Create(*execution_context) - : nullptr), - parent_agent_group_task_runner_(parent_agent_group_task_runner), + ParentExecutionContextTaskRunners::Create(*execution_context)), terminate_sync_load_event_( base::WaitableEvent::ResetPolicy::MANUAL, base::WaitableEvent::InitialState::NOT_SIGNALED), feature_handle_for_scheduler_( - (base::FeatureList::IsEnabled( - features::kBackForwardCacheDedicatedWorker) || - !execution_context) + base::FeatureList::IsEnabled( + features::kBackForwardCacheDedicatedWorker) ? FrameOrWorkerScheduler::SchedulingAffectingFeatureHandle() : execution_context->GetScheduler()->RegisterFeature( SchedulingPolicy::Feature::kDedicatedWorkerOrWorklet, {SchedulingPolicy::DisableBackForwardCache()})) { - DCHECK((parent_execution_context_task_runners_ && - !parent_agent_group_task_runner_) || - (!parent_execution_context_task_runners_ && - parent_agent_group_task_runner_)); DCHECK(IsParentContextThread()); g_live_messaging_proxy_count++; } @@ -91,11 +82,8 @@ worker_thread_->Start(std::move(global_scope_creation_params), thread_startup_data, std::move(devtools_params)); - if (execution_context_) { - if (auto* scope = DynamicTo<WorkerGlobalScope>(*execution_context_)) { - scope->GetThread()->ChildThreadStartedOnWorkerThread( - worker_thread_.get()); - } + if (auto* scope = DynamicTo<WorkerGlobalScope>(*execution_context_)) { + scope->GetThread()->ChildThreadStartedOnWorkerThread(worker_thread_.get()); } } @@ -136,17 +124,12 @@ // exists, too. asked_to_terminate_ = true; WorkerThread* parent_thread = nullptr; - std::unique_ptr<WorkerThread> child_thread; - - if (execution_context_) { - if (auto* scope = DynamicTo<WorkerGlobalScope>(*execution_context_)) { - parent_thread = scope->GetThread(); - } - child_thread = std::move(worker_thread_); - if (child_thread) { - DevToolsAgent::WorkerThreadTerminated(execution_context_.Get(), - child_thread.get()); - } + if (auto* scope = DynamicTo<WorkerGlobalScope>(*execution_context_)) + parent_thread = scope->GetThread(); + std::unique_ptr<WorkerThread> child_thread = std::move(worker_thread_); + if (child_thread) { + DevToolsAgent::WorkerThreadTerminated(execution_context_.Get(), + child_thread.get()); } // If the parent Worker/Worklet object was already destroyed, this will @@ -190,26 +173,12 @@ return parent_execution_context_task_runners_; } -scoped_refptr<base::SingleThreadTaskRunner> -ThreadedMessagingProxyBase::GetParentAgentGroupTaskRunner() const { - DCHECK(IsParentContextThread()); - return parent_agent_group_task_runner_; -} - WorkerThread* ThreadedMessagingProxyBase::GetWorkerThread() const { DCHECK(IsParentContextThread()); return worker_thread_.get(); } bool ThreadedMessagingProxyBase::IsParentContextThread() const { - // `execution_context_` can be nullptr for the main thread for shared stoarge - // worklet. We'd still consider it a parent context thread, though it's not - // associated with an `ExecutionContext`. - if (!execution_context_) { - DCHECK(parent_agent_group_task_runner_); - return parent_agent_group_task_runner_->BelongsToCurrentThread(); - } - return execution_context_->IsContextThread(); }
diff --git a/third_party/blink/renderer/core/workers/threaded_messaging_proxy_base.h b/third_party/blink/renderer/core/workers/threaded_messaging_proxy_base.h index 0744840..637bd41 100644 --- a/third_party/blink/renderer/core/workers/threaded_messaging_proxy_base.h +++ b/third_party/blink/renderer/core/workers/threaded_messaging_proxy_base.h
@@ -61,7 +61,7 @@ const String& message, std::unique_ptr<SourceLocation>); - virtual void WorkerThreadTerminated(); + void WorkerThreadTerminated(); // Number of live messaging proxies, used by leak detection. static int ProxyCount(); @@ -69,10 +69,7 @@ virtual void Trace(Visitor*) const; protected: - explicit ThreadedMessagingProxyBase( - ExecutionContext*, - scoped_refptr<base::SingleThreadTaskRunner> - parent_agent_group_task_runner = nullptr); + explicit ThreadedMessagingProxyBase(ExecutionContext*); void InitializeWorkerThread( std::unique_ptr<GlobalScopeCreationParams>, @@ -83,9 +80,6 @@ ParentExecutionContextTaskRunners* GetParentExecutionContextTaskRunners() const; - scoped_refptr<base::SingleThreadTaskRunner> GetParentAgentGroupTaskRunner() - const; - // May return nullptr after termination is requested. WorkerThread* GetWorkerThread() const; @@ -99,12 +93,9 @@ Member<ExecutionContext> execution_context_; - // Accessed cross-thread when worker thread posts tasks to the parent. Only - // one of `parent_execution_context_task_runners_` and - // `parent_agent_group_task_runner_` will be set. + // Accessed cross-thread when worker thread posts tasks to the parent. CrossThreadPersistent<ParentExecutionContextTaskRunners> parent_execution_context_task_runners_; - scoped_refptr<base::SingleThreadTaskRunner> parent_agent_group_task_runner_; std::unique_ptr<WorkerThread> worker_thread_;
diff --git a/third_party/blink/renderer/core/workers/threaded_object_proxy_base.cc b/third_party/blink/renderer/core/workers/threaded_object_proxy_base.cc index 8699134b..2c11de68 100644 --- a/third_party/blink/renderer/core/workers/threaded_object_proxy_base.cc +++ b/third_party/blink/renderer/core/workers/threaded_object_proxy_base.cc
@@ -18,11 +18,6 @@ namespace blink { void ThreadedObjectProxyBase::CountFeature(WebFeature feature) { - if (!GetParentExecutionContextTaskRunners()) { - DCHECK(GetParentAgentGroupTaskRunner()); - return; - } - PostCrossThreadTask( *GetParentExecutionContextTaskRunners()->Get(TaskType::kInternalDefault), FROM_HERE, @@ -35,11 +30,6 @@ mojom::ConsoleMessageLevel level, const String& message, SourceLocation* location) { - if (!GetParentExecutionContextTaskRunners()) { - DCHECK(GetParentAgentGroupTaskRunner()); - return; - } - PostCrossThreadTask( *GetParentExecutionContextTaskRunners()->Get(TaskType::kInternalDefault), FROM_HERE, @@ -49,17 +39,6 @@ } void ThreadedObjectProxyBase::DidCloseWorkerGlobalScope() { - if (!GetParentExecutionContextTaskRunners()) { - DCHECK(GetParentAgentGroupTaskRunner()); - - PostCrossThreadTask( - *GetParentAgentGroupTaskRunner(), FROM_HERE, - CrossThreadBindOnce(&ThreadedMessagingProxyBase::TerminateGlobalScope, - MessagingProxyWeakPtr())); - - return; - } - PostCrossThreadTask( *GetParentExecutionContextTaskRunners()->Get(TaskType::kInternalDefault), FROM_HERE, @@ -68,17 +47,6 @@ } void ThreadedObjectProxyBase::DidTerminateWorkerThread() { - if (!GetParentExecutionContextTaskRunners()) { - DCHECK(GetParentAgentGroupTaskRunner()); - - PostCrossThreadTask( - *GetParentAgentGroupTaskRunner(), FROM_HERE, - CrossThreadBindOnce(&ThreadedMessagingProxyBase::WorkerThreadTerminated, - MessagingProxyWeakPtr())); - - return; - } - // This will terminate the MessagingProxy. PostCrossThreadTask( *GetParentExecutionContextTaskRunners()->Get(TaskType::kInternalDefault), @@ -92,16 +60,9 @@ return parent_execution_context_task_runners_.Get(); } -scoped_refptr<base::SingleThreadTaskRunner> -ThreadedObjectProxyBase::GetParentAgentGroupTaskRunner() { - return parent_agent_group_task_runner_; -} - ThreadedObjectProxyBase::ThreadedObjectProxyBase( - ParentExecutionContextTaskRunners* parent_execution_context_task_runners, - scoped_refptr<base::SingleThreadTaskRunner> parent_agent_group_task_runner) + ParentExecutionContextTaskRunners* parent_execution_context_task_runners) : parent_execution_context_task_runners_( - parent_execution_context_task_runners), - parent_agent_group_task_runner_(parent_agent_group_task_runner) {} + parent_execution_context_task_runners) {} } // namespace blink
diff --git a/third_party/blink/renderer/core/workers/threaded_object_proxy_base.h b/third_party/blink/renderer/core/workers/threaded_object_proxy_base.h index 589ce26..2b4dd2f4 100644 --- a/third_party/blink/renderer/core/workers/threaded_object_proxy_base.h +++ b/third_party/blink/renderer/core/workers/threaded_object_proxy_base.h
@@ -39,26 +39,16 @@ void DidTerminateWorkerThread() override; protected: - explicit ThreadedObjectProxyBase(ParentExecutionContextTaskRunners*, - scoped_refptr<base::SingleThreadTaskRunner> - parent_agent_group_task_runner); + explicit ThreadedObjectProxyBase(ParentExecutionContextTaskRunners*); virtual CrossThreadWeakPersistent<ThreadedMessagingProxyBase> MessagingProxyWeakPtr() = 0; ParentExecutionContextTaskRunners* GetParentExecutionContextTaskRunners(); - scoped_refptr<base::SingleThreadTaskRunner> GetParentAgentGroupTaskRunner(); private: - // Note: Only one of `parent_execution_context_task_runners_` and - // `parent_agent_group_task_runner_` will be set. - // Used to post a task to ThreadedMessagingProxyBase on the parent context // thread. CrossThreadPersistent<ParentExecutionContextTaskRunners> parent_execution_context_task_runners_; - - // Used to post a task to ThreadedMessagingProxyBase on the parent agent group - // thread. - scoped_refptr<base::SingleThreadTaskRunner> parent_agent_group_task_runner_; }; } // namespace blink
diff --git a/third_party/blink/renderer/core/workers/threaded_worklet_messaging_proxy.cc b/third_party/blink/renderer/core/workers/threaded_worklet_messaging_proxy.cc index ab72aa33..49a3d82 100644 --- a/third_party/blink/renderer/core/workers/threaded_worklet_messaging_proxy.cc +++ b/third_party/blink/renderer/core/workers/threaded_worklet_messaging_proxy.cc
@@ -37,10 +37,8 @@ namespace blink { ThreadedWorkletMessagingProxy::ThreadedWorkletMessagingProxy( - ExecutionContext* execution_context, - scoped_refptr<base::SingleThreadTaskRunner> parent_agent_group_task_runner) - : ThreadedMessagingProxyBase(execution_context, - parent_agent_group_task_runner) {} + ExecutionContext* execution_context) + : ThreadedMessagingProxyBase(execution_context) {} void ThreadedWorkletMessagingProxy::Initialize( WorkerClients* worker_clients, @@ -51,8 +49,7 @@ return; worklet_object_proxy_ = - CreateObjectProxy(this, GetParentExecutionContextTaskRunners(), - GetParentAgentGroupTaskRunner()); + CreateObjectProxy(this, GetParentExecutionContextTaskRunners()); // For now we don't use global scope name for threaded worklets. // TODO(nhiroki): Threaded worklets may want to have the global scope name to @@ -60,39 +57,6 @@ // LayoutWorklet and PaintWorklet. const String global_scope_name = g_empty_string; - // TODO(crbug.com/1419253): ExecutionContext can be null for a worklet that is - // not spawned from the original renderer (e.g. shared storage worklet). This - // is acceptable from the scope of shared storage. Longer term, it'd be good - // to support an out-of-process worklet architecture where the - // GlobalScopeCreationParams is reasonably filled in. - if (!GetExecutionContext()) { - auto creation_params = std::make_unique<GlobalScopeCreationParams>( - /*script_url=*/KURL(), - /*script_type=*/mojom::blink::ScriptType::kModule, global_scope_name, - /*user_agent=*/String(), - /*ua_metadata=*/absl::optional<UserAgentMetadata>(), - /*web_worker_fetch_context=*/nullptr, - /*outside_content_security_policies=*/ - Vector<network::mojom::blink::ContentSecurityPolicyPtr>(), - /*response_content_security_policies=*/ - Vector<network::mojom::blink::ContentSecurityPolicyPtr>(), - /*referrer_policy=*/network::mojom::ReferrerPolicy::kDefault, - /*starter_origin=*/nullptr, - /*starter_secure_context=*/false, - /*starter_https_state=*/HttpsState::kNone, - /*worker_clients=*/nullptr, - /*content_settings_client=*/nullptr, - /*inherited_trial_features=*/nullptr, - /*parent_devtools_token=*/base::UnguessableToken::Create(), - /*worker_settings=*/nullptr, - /*v8_cache_options=*/mojom::blink::V8CacheOptions::kDefault, - /*module_responses_map=*/nullptr); - - InitializeWorkerThread(std::move(creation_params), thread_startup_data, - absl::nullopt); - return; - } - LocalDOMWindow* window = To<LocalDOMWindow>(GetExecutionContext()); ContentSecurityPolicy* csp = window->GetContentSecurityPolicy(); DCHECK(csp); @@ -172,12 +136,9 @@ std::unique_ptr<ThreadedWorkletObjectProxy> ThreadedWorkletMessagingProxy::CreateObjectProxy( ThreadedWorkletMessagingProxy* messaging_proxy, - ParentExecutionContextTaskRunners* parent_execution_context_task_runners, - scoped_refptr<base::SingleThreadTaskRunner> - parent_agent_group_task_runner) { + ParentExecutionContextTaskRunners* parent_execution_context_task_runners) { return ThreadedWorkletObjectProxy::Create( - messaging_proxy, parent_execution_context_task_runners, - std::move(parent_agent_group_task_runner)); + messaging_proxy, parent_execution_context_task_runners); } ThreadedWorkletObjectProxy&
diff --git a/third_party/blink/renderer/core/workers/threaded_worklet_messaging_proxy.h b/third_party/blink/renderer/core/workers/threaded_worklet_messaging_proxy.h index 1e53bc34..1c89eda5 100644 --- a/third_party/blink/renderer/core/workers/threaded_worklet_messaging_proxy.h +++ b/third_party/blink/renderer/core/workers/threaded_worklet_messaging_proxy.h
@@ -39,10 +39,7 @@ void Trace(Visitor*) const override; protected: - explicit ThreadedWorkletMessagingProxy( - ExecutionContext*, - scoped_refptr<base::SingleThreadTaskRunner> - parent_agent_group_task_runner = nullptr); + explicit ThreadedWorkletMessagingProxy(ExecutionContext*); ThreadedWorkletObjectProxy& WorkletObjectProxy(); @@ -51,9 +48,7 @@ virtual std::unique_ptr<ThreadedWorkletObjectProxy> CreateObjectProxy( ThreadedWorkletMessagingProxy*, - ParentExecutionContextTaskRunners*, - scoped_refptr<base::SingleThreadTaskRunner> - parent_agent_group_task_runner); + ParentExecutionContextTaskRunners*); std::unique_ptr<ThreadedWorkletObjectProxy> worklet_object_proxy_; };
diff --git a/third_party/blink/renderer/core/workers/threaded_worklet_object_proxy.cc b/third_party/blink/renderer/core/workers/threaded_worklet_object_proxy.cc index 16d7afb3..243fcd26 100644 --- a/third_party/blink/renderer/core/workers/threaded_worklet_object_proxy.cc +++ b/third_party/blink/renderer/core/workers/threaded_worklet_object_proxy.cc
@@ -18,13 +18,10 @@ std::unique_ptr<ThreadedWorkletObjectProxy> ThreadedWorkletObjectProxy::Create( ThreadedWorkletMessagingProxy* messaging_proxy_weak_ptr, - ParentExecutionContextTaskRunners* parent_execution_context_task_runners, - scoped_refptr<base::SingleThreadTaskRunner> - parent_agent_group_task_runner) { + ParentExecutionContextTaskRunners* parent_execution_context_task_runners) { DCHECK(messaging_proxy_weak_ptr); return base::WrapUnique(new ThreadedWorkletObjectProxy( - messaging_proxy_weak_ptr, parent_execution_context_task_runners, - std::move(parent_agent_group_task_runner))); + messaging_proxy_weak_ptr, parent_execution_context_task_runners)); } ThreadedWorkletObjectProxy::~ThreadedWorkletObjectProxy() = default; @@ -50,10 +47,8 @@ ThreadedWorkletObjectProxy::ThreadedWorkletObjectProxy( ThreadedWorkletMessagingProxy* messaging_proxy_weak_ptr, - ParentExecutionContextTaskRunners* parent_execution_context_task_runners, - scoped_refptr<base::SingleThreadTaskRunner> parent_agent_group_task_runner) - : ThreadedObjectProxyBase(parent_execution_context_task_runners, - std::move(parent_agent_group_task_runner)), + ParentExecutionContextTaskRunners* parent_execution_context_task_runners) + : ThreadedObjectProxyBase(parent_execution_context_task_runners), messaging_proxy_weak_ptr_(messaging_proxy_weak_ptr) {} CrossThreadWeakPersistent<ThreadedMessagingProxyBase>
diff --git a/third_party/blink/renderer/core/workers/threaded_worklet_object_proxy.h b/third_party/blink/renderer/core/workers/threaded_worklet_object_proxy.h index 4f7678a..81ff467 100644 --- a/third_party/blink/renderer/core/workers/threaded_worklet_object_proxy.h +++ b/third_party/blink/renderer/core/workers/threaded_worklet_object_proxy.h
@@ -32,9 +32,7 @@ public: static std::unique_ptr<ThreadedWorkletObjectProxy> Create( ThreadedWorkletMessagingProxy*, - ParentExecutionContextTaskRunners*, - scoped_refptr<base::SingleThreadTaskRunner> - parent_agent_group_task_runner); + ParentExecutionContextTaskRunners*); ThreadedWorkletObjectProxy(const ThreadedWorkletObjectProxy&) = delete; ThreadedWorkletObjectProxy& operator=(const ThreadedWorkletObjectProxy&) = @@ -53,9 +51,7 @@ protected: ThreadedWorkletObjectProxy(ThreadedWorkletMessagingProxy*, - ParentExecutionContextTaskRunners*, - scoped_refptr<base::SingleThreadTaskRunner> - parent_agent_group_task_runner); + ParentExecutionContextTaskRunners*); CrossThreadWeakPersistent<ThreadedMessagingProxyBase> MessagingProxyWeakPtr() final;
diff --git a/third_party/blink/renderer/core/workers/threaded_worklet_test.cc b/third_party/blink/renderer/core/workers/threaded_worklet_test.cc index f40d761e..b6fc9b7 100644 --- a/third_party/blink/renderer/core/workers/threaded_worklet_test.cc +++ b/third_party/blink/renderer/core/workers/threaded_worklet_test.cc
@@ -37,9 +37,7 @@ ThreadedWorkletMessagingProxy* messaging_proxy, ParentExecutionContextTaskRunners* parent_execution_context_task_runners) : ThreadedWorkletObjectProxy(messaging_proxy, - parent_execution_context_task_runners, - /*parent_agent_group_task_runner=*/nullptr) { - } + parent_execution_context_task_runners) {} protected: void CountFeature(WebFeature feature) override {
diff --git a/third_party/blink/renderer/core/workers/worker_thread.cc b/third_party/blink/renderer/core/workers/worker_thread.cc index b52cbc1f..1073865 100644 --- a/third_party/blink/renderer/core/workers/worker_thread.cc +++ b/third_party/blink/renderer/core/workers/worker_thread.cc
@@ -626,16 +626,9 @@ worker_scheduler_->InitializeOnWorkerThread(global_scope_); worker_reporting_proxy_.DidCreateWorkerGlobalScope(GlobalScope()); - // `url_for_debugger` can be null for out-of-process worklet (e.g. shared - // storage worklet). Tentatively skip creating the - // `WorkerInspectorController`. - // TODO(crbug.com/1419253): support inspector for out-of-process worklet and - // remove this if-check. - if (!url_for_debugger.IsNull()) { - worker_inspector_controller_ = WorkerInspectorController::Create( - this, url_for_debugger, inspector_task_runner_, - std::move(devtools_params)); - } + worker_inspector_controller_ = WorkerInspectorController::Create( + this, url_for_debugger, inspector_task_runner_, + std::move(devtools_params)); // Since context initialization below may fail, we should notify debugger // about the new worker thread separately, so that it can resolve it by id @@ -670,21 +663,15 @@ WorkerThreads().insert(this); } - // `worker_inspector_controller_` can be null for out-of-process worklet (e.g. - // shared storage worklet). - // TODO(crbug.com/1419253): support inspector for out-of-process worklet and - // remove this if-check. - if (worker_inspector_controller_) { - // It is important that no code is run on the Isolate between - // initializing InspectorTaskRunner and pausing on start. - // Otherwise, InspectorTaskRunner might interrupt isolate execution - // from another thread and try to resume "pause on start" before - // we even paused. - worker_inspector_controller_->WaitForDebuggerIfNeeded(); - // Note the above call runs nested message loop which may result in - // worker thread being torn down by request from the parent thread, - // while waiting for debugger. - } + // It is important that no code is run on the Isolate between + // initializing InspectorTaskRunner and pausing on start. + // Otherwise, InspectorTaskRunner might interrupt isolate execution + // from another thread and try to resume "pause on start" before + // we even paused. + worker_inspector_controller_->WaitForDebuggerIfNeeded(); + // Note the above call runs nested message loop which may result in + // worker thread being torn down by request from the parent thread, + // while waiting for debugger. } void WorkerThread::EvaluateClassicScriptOnWorkerThread(
diff --git a/third_party/blink/renderer/core/workers/worklet_global_scope.cc b/third_party/blink/renderer/core/workers/worklet_global_scope.cc index 571e8a7..7af884e 100644 --- a/third_party/blink/renderer/core/workers/worklet_global_scope.cc +++ b/third_party/blink/renderer/core/workers/worklet_global_scope.cc
@@ -102,12 +102,9 @@ thread_type_(thread_type), frame_(frame), worker_thread_(worker_thread), - // Worklets should often have a parent LocalFrameToken. Only shared - // storage worklet does not have it. + // Worklets should always have a parent LocalFrameToken. frame_token_( - creation_params->parent_context_token - ? creation_params->parent_context_token->GetAs<LocalFrameToken>() - : blink::LocalFrameToken()), + creation_params->parent_context_token->GetAs<LocalFrameToken>()), parent_cross_origin_isolated_capability_( creation_params->parent_cross_origin_isolated_capability), parent_is_isolated_context_(creation_params->parent_is_isolated_context) { @@ -116,8 +113,7 @@ // Worklet should be in the owner's agent cluster. // https://html.spec.whatwg.org/C/#obtain-a-worklet-agent - DCHECK(creation_params->agent_cluster_id || - !creation_params->parent_context_token); + DCHECK(creation_params->agent_cluster_id); // Step 2: "Let inheritedAPIBaseURL be outsideSettings's API base URL." // |url_| is the inheritedAPIBaseURL passed from the parent Document.
diff --git a/third_party/blink/renderer/modules/BUILD.gn b/third_party/blink/renderer/modules/BUILD.gn index 2b3cb9fe..1ccbec87 100644 --- a/third_party/blink/renderer/modules/BUILD.gn +++ b/third_party/blink/renderer/modules/BUILD.gn
@@ -143,7 +143,6 @@ "//third_party/blink/renderer/modules/service_worker", "//third_party/blink/renderer/modules/shapedetection", "//third_party/blink/renderer/modules/shared_storage", - "//third_party/blink/renderer/modules/shared_storage/services", "//third_party/blink/renderer/modules/smart_card", "//third_party/blink/renderer/modules/speech", "//third_party/blink/renderer/modules/srcobject", @@ -600,7 +599,6 @@ "service_worker/thread_safe_script_container_test.cc", "service_worker/web_embedded_worker_impl_test.cc", "service_worker/web_service_worker_fetch_context_impl_test.cc", - "shared_storage/services/shared_storage_worklet_unittest.cc", "video_rvfc/video_frame_callback_requester_impl_test.cc", "video_rvfc/video_frame_request_callback_collection_test.cc", "wake_lock/wake_lock_manager_test.cc", @@ -666,7 +664,6 @@ "//net:test_support", "//services/device/public/cpp:test_support", "//services/metrics/public/cpp:ukm_builders", - "//services/network:test_support", "//skia", "//testing/gmock", "//testing/gtest",
diff --git a/third_party/blink/renderer/modules/exported/BUILD.gn b/third_party/blink/renderer/modules/exported/BUILD.gn index fa4c68d..c1ef9e1 100644 --- a/third_party/blink/renderer/modules/exported/BUILD.gn +++ b/third_party/blink/renderer/modules/exported/BUILD.gn
@@ -12,8 +12,6 @@ "web_dom_media_stream_track.cc", "web_embedded_worker_impl.cc", "web_embedded_worker_impl.h", - "web_shared_storage_worklet_thread_impl.cc", - "web_shared_storage_worklet_thread_impl.h", ] defines = [ "BLINK_MODULES_IMPLEMENTATION=1" ] @@ -23,7 +21,6 @@ "//third_party/blink/renderer/modules/crypto", "//third_party/blink/renderer/modules/filesystem", "//third_party/blink/renderer/modules/mediastream", - "//third_party/blink/renderer/modules/shared_storage/services", "//ui/accessibility:ax_enums_mojo_blink", ] }
diff --git a/third_party/blink/renderer/modules/exported/web_shared_storage_worklet_thread_impl.cc b/third_party/blink/renderer/modules/exported/web_shared_storage_worklet_thread_impl.cc deleted file mode 100644 index bafb788..0000000 --- a/third_party/blink/renderer/modules/exported/web_shared_storage_worklet_thread_impl.cc +++ /dev/null
@@ -1,46 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "third_party/blink/renderer/modules/exported/web_shared_storage_worklet_thread_impl.h" - -#include "third_party/blink/public/mojom/shared_storage/shared_storage_worklet_service.mojom.h" -#include "third_party/blink/renderer/platform/heap/garbage_collected.h" - -namespace blink { - -// static -void WebSharedStorageWorkletThread::Start( - scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner, - mojo::PendingReceiver<mojom::SharedStorageWorkletService> receiver) { - MakeGarbageCollected<WebSharedStorageWorkletThreadImpl>(main_thread_runner, - std::move(receiver)); -} - -WebSharedStorageWorkletThreadImpl::WebSharedStorageWorkletThreadImpl( - scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner, - mojo::PendingReceiver<mojom::SharedStorageWorkletService> receiver) - : main_thread_runner_(std::move(main_thread_runner)) { - DCHECK(main_thread_runner_->BelongsToCurrentThread()); - - messaging_proxy_ = MakeGarbageCollected<SharedStorageWorkletMessagingProxy>( - main_thread_runner_, std::move(receiver), - /*worklet_terminated_callback=*/ - WTF::BindOnce(&WebSharedStorageWorkletThreadImpl::DeleteSelf, - WrapPersistent(this))); -} - -WebSharedStorageWorkletThreadImpl::~WebSharedStorageWorkletThreadImpl() = - default; - -void WebSharedStorageWorkletThreadImpl::Trace(Visitor* visitor) const { - visitor->Trace(messaging_proxy_); -} - -void WebSharedStorageWorkletThreadImpl::DeleteSelf() { - DCHECK(main_thread_runner_->BelongsToCurrentThread()); - - keep_alive_.Clear(); -} - -} // namespace blink
diff --git a/third_party/blink/renderer/modules/exported/web_shared_storage_worklet_thread_impl.h b/third_party/blink/renderer/modules/exported/web_shared_storage_worklet_thread_impl.h deleted file mode 100644 index b29092f..0000000 --- a/third_party/blink/renderer/modules/exported/web_shared_storage_worklet_thread_impl.h +++ /dev/null
@@ -1,44 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_EXPORTED_WEB_SHARED_STORAGE_WORKLET_THREAD_IMPL_H_ -#define THIRD_PARTY_BLINK_RENDERER_MODULES_EXPORTED_WEB_SHARED_STORAGE_WORKLET_THREAD_IMPL_H_ - -#include "third_party/blink/public/mojom/shared_storage/shared_storage_worklet_service.mojom-forward.h" -#include "third_party/blink/public/web/web_shared_storage_worklet_thread.h" -#include "third_party/blink/renderer/modules/modules_export.h" -#include "third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_messaging_proxy.h" -#include "third_party/blink/renderer/platform/heap/self_keep_alive.h" - -namespace blink { - -// A thread container for running shared storage worklet operations. This object -// lives on the main thread, and posts the task to the worklet thread to -// initialize the worklet environment belonging to one Document. The object owns -// itself, cleaning up when the worklet has shut down. -class MODULES_EXPORT WebSharedStorageWorkletThreadImpl final - : public GarbageCollected<WebSharedStorageWorkletThreadImpl>, - public WebSharedStorageWorkletThread { - public: - WebSharedStorageWorkletThreadImpl( - scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner, - mojo::PendingReceiver<mojom::SharedStorageWorkletService> receiver); - - ~WebSharedStorageWorkletThreadImpl() override; - - void Trace(Visitor*) const; - - private: - void DeleteSelf(); - - scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner_; - - Member<SharedStorageWorkletMessagingProxy> messaging_proxy_; - - SelfKeepAlive<WebSharedStorageWorkletThreadImpl> keep_alive_{this}; -}; - -} // namespace blink - -#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_EXPORTED_WEB_SHARED_STORAGE_WORKLET_THREAD_IMPL_H_
diff --git a/third_party/blink/renderer/modules/permissions/permission_utils.cc b/third_party/blink/renderer/modules/permissions/permission_utils.cc index 4ab0764..7ecbe43 100644 --- a/third_party/blink/renderer/modules/permissions/permission_utils.cc +++ b/third_party/blink/renderer/modules/permissions/permission_utils.cc
@@ -314,7 +314,7 @@ if (!RuntimeEnabledFeatures::StorageAccessAPIEnabled() || !RuntimeEnabledFeatures::StorageAccessAPIForOriginExtensionEnabled()) { exception_state.ThrowTypeError( - "The requestStorageAccessForOrigin API is not enabled."); + "The requestStorageAccessFor API is not enabled."); return nullptr; } TopLevelStorageAccessPermissionDescriptor*
diff --git a/third_party/blink/renderer/modules/shared_storage/BUILD.gn b/third_party/blink/renderer/modules/shared_storage/BUILD.gn index 2e22ab16..55a7da0 100644 --- a/third_party/blink/renderer/modules/shared_storage/BUILD.gn +++ b/third_party/blink/renderer/modules/shared_storage/BUILD.gn
@@ -15,4 +15,6 @@ "window_shared_storage.cc", "window_shared_storage.h", ] + + public_deps = [ "//third_party/blink/public/mojom:mojom_modules_blink" ] }
diff --git a/third_party/blink/renderer/modules/shared_storage/services/BUILD.gn b/third_party/blink/renderer/modules/shared_storage/services/BUILD.gn deleted file mode 100644 index eae2946..0000000 --- a/third_party/blink/renderer/modules/shared_storage/services/BUILD.gn +++ /dev/null
@@ -1,21 +0,0 @@ -# Copyright 2023 The Chromium Authors -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import("//third_party/blink/renderer/modules/modules.gni") - -blink_modules_sources("services") { - visibility = [ - "//third_party/blink/renderer/modules", - "//third_party/blink/renderer/modules/exported", - ] - - sources = [ - "shared_storage_worklet_global_scope.cc", - "shared_storage_worklet_global_scope.h", - "shared_storage_worklet_messaging_proxy.cc", - "shared_storage_worklet_messaging_proxy.h", - "shared_storage_worklet_thread.cc", - "shared_storage_worklet_thread.h", - ] -}
diff --git a/third_party/blink/renderer/modules/shared_storage/services/DEPS b/third_party/blink/renderer/modules/shared_storage/services/DEPS deleted file mode 100644 index 2ed5e4f..0000000 --- a/third_party/blink/renderer/modules/shared_storage/services/DEPS +++ /dev/null
@@ -1,15 +0,0 @@ -include_rules = [ - "-third_party/blink/renderer/modules", - "+third_party/blink/renderer/core", - "+third_party/blink/renderer/modules/modules_export.h", - "+third_party/blink/renderer/modules/shared_storage/services", - "+third_party/blink/renderer/modules/v8", - "+gin/converter.h", -] - -specific_include_rules = { - ".*_(unit)?test\.cc": [ - "+base/task/bind_post_task.h", - "+services/network/test/test_url_loader_factory.h", - ], -}
diff --git a/third_party/blink/renderer/modules/shared_storage/services/OWNERS b/third_party/blink/renderer/modules/shared_storage/services/OWNERS deleted file mode 100644 index 2051ea7c..0000000 --- a/third_party/blink/renderer/modules/shared_storage/services/OWNERS +++ /dev/null
@@ -1,2 +0,0 @@ -yaoxia@chromium.org -cammie@chromium.org
diff --git a/third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_global_scope.cc b/third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_global_scope.cc deleted file mode 100644 index 0ba142612..0000000 --- a/third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_global_scope.cc +++ /dev/null
@@ -1,175 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_global_scope.h" - -#include <memory> -#include <utility> - -#include "base/check.h" -#include "gin/converter.h" -#include "mojo/public/cpp/bindings/pending_remote.h" -#include "mojo/public/cpp/bindings/remote.h" -#include "third_party/blink/public/common/shared_storage/module_script_downloader.h" -#include "third_party/blink/renderer/bindings/core/v8/idl_types.h" -#include "third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h" -#include "third_party/blink/renderer/bindings/core/v8/script_function.h" -#include "third_party/blink/renderer/bindings/core/v8/worker_or_worklet_script_controller.h" -#include "third_party/blink/renderer/core/script/classic_script.h" -#include "third_party/blink/renderer/core/workers/global_scope_creation_params.h" -#include "third_party/blink/renderer/core/workers/threaded_messaging_proxy_base.h" -#include "third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_thread.h" - -namespace blink { - -// We try to use .stack property so that the error message contains a stack -// trace, but otherwise fallback to .toString(). -std::string ExceptionToString(ScriptState* script_state, - v8::Local<v8::Value> exception) { - v8::Isolate* isolate = script_state->GetIsolate(); - - if (!exception.IsEmpty()) { - v8::Local<v8::Context> context = script_state->GetContext(); - v8::Local<v8::Value> value = - v8::TryCatch::StackTrace(context, exception).FromMaybe(exception); - v8::Local<v8::String> value_string; - if (value->ToString(context).ToLocal(&value_string)) { - return gin::V8ToString(isolate, value_string); - } - } - - return "Unknown Failure"; -} - -SharedStorageWorkletGlobalScope::SharedStorageWorkletGlobalScope( - std::unique_ptr<GlobalScopeCreationParams> creation_params, - WorkerThread* thread) - : WorkletGlobalScope(std::move(creation_params), - thread->GetWorkerReportingProxy(), - thread, - /*create_microtask_queue=*/true) {} - -SharedStorageWorkletGlobalScope::~SharedStorageWorkletGlobalScope() = default; - -void SharedStorageWorkletGlobalScope::BindSharedStorageWorkletService( - mojo::PendingReceiver<mojom::SharedStorageWorkletService> receiver, - base::OnceClosure disconnect_handler) { - receiver_.Bind(std::move(receiver), - GetTaskRunner(blink::TaskType::kMiscPlatformAPI)); - - // When `SharedStorageWorkletHost` is destroyed, the disconnect handler will - // be called, and we rely on this explicit signal to clean up the worklet - // environment. - receiver_.set_disconnect_handler(std::move(disconnect_handler)); -} - -void SharedStorageWorkletGlobalScope::Trace(Visitor* visitor) const { - visitor->Trace(receiver_); - visitor->Trace(client_); - visitor->Trace(private_aggregation_host_); - WorkletGlobalScope::Trace(visitor); -} - -void SharedStorageWorkletGlobalScope::Initialize( - mojo::PendingAssociatedRemote<mojom::SharedStorageWorkletServiceClient> - client, - bool private_aggregation_permissions_policy_allowed, - mojo::PendingRemote<mojom::PrivateAggregationHost> private_aggregation_host, - const absl::optional<std::u16string>& embedder_context) { - client_.Bind(std::move(client), - GetTaskRunner(blink::TaskType::kMiscPlatformAPI)); - private_aggregation_permissions_policy_allowed_ = - private_aggregation_permissions_policy_allowed; - if (private_aggregation_host) { - private_aggregation_host_.Bind( - std::move(private_aggregation_host), - GetTaskRunner(blink::TaskType::kMiscPlatformAPI)); - } -} - -void SharedStorageWorkletGlobalScope::AddModule( - mojo::PendingRemote<network::mojom::URLLoaderFactory> - pending_url_loader_factory, - const GURL& script_source_url, - AddModuleCallback callback) { - mojo::Remote<network::mojom::URLLoaderFactory> url_loader_factory( - std::move(pending_url_loader_factory)); - - module_script_downloader_ = std::make_unique<ModuleScriptDownloader>( - url_loader_factory.get(), script_source_url, - WTF::BindOnce(&SharedStorageWorkletGlobalScope::OnModuleScriptDownloaded, - WrapWeakPersistent(this), script_source_url, - std::move(callback))); -} - -void SharedStorageWorkletGlobalScope::RunURLSelectionOperation( - const std::string& name, - const std::vector<GURL>& urls, - const std::vector<uint8_t>& serialized_data, - RunURLSelectionOperationCallback callback) { - NOTIMPLEMENTED(); - - std::move(callback).Run( - /*success=*/false, - /*error_message=*/"Not implemented", - /*length=*/0); -} - -void SharedStorageWorkletGlobalScope::RunOperation( - const std::string& name, - const std::vector<uint8_t>& serialized_data, - RunOperationCallback callback) { - NOTIMPLEMENTED(); - - std::move(callback).Run( - /*success=*/false, - /*error_message=*/"Not implemented"); -} - -void SharedStorageWorkletGlobalScope::OnModuleScriptDownloaded( - const GURL& script_source_url, - mojom::SharedStorageWorkletService::AddModuleCallback callback, - std::unique_ptr<std::string> response_body, - std::string error_message) { - module_script_downloader_.reset(); - - if (!response_body) { - std::move(callback).Run(false, std::string(error_message)); - return; - } - - DCHECK(error_message.empty()); - - ScriptState* script_state = ScriptController()->GetScriptState(); - DCHECK(script_state); - - // TODO(crbug.com/1419253): Using a classic script with the custom script - // loader is tentative. Eventually, this should migrate to the blink-worklet's - // script loading infrastructure. - ClassicScript* worker_script = ClassicScript::Create( - String(*response_body), - /*source_url=*/KURL(String(script_source_url.spec().c_str())), - /*base_url=*/KURL(), ScriptFetchOptions()); - - v8::HandleScope handle_scope(script_state->GetIsolate()); - ScriptEvaluationResult result = - worker_script->RunScriptOnScriptStateAndReturnValue(script_state); - - if (result.GetResultType() == - ScriptEvaluationResult::ResultType::kException) { - v8::Local<v8::Value> exception = result.GetExceptionForWorklet(); - - std::move(callback).Run( - false, /*error_message=*/ExceptionToString(script_state, exception)); - return; - } else if (result.GetResultType() != - ScriptEvaluationResult::ResultType::kSuccess) { - std::move(callback).Run(false, /*error_message=*/"Internal Failure"); - return; - } - - std::move(callback).Run(true, /*error_message=*/{}); -} - -} // namespace blink
diff --git a/third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_global_scope.h b/third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_global_scope.h deleted file mode 100644 index 0e75e7f..0000000 --- a/third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_global_scope.h +++ /dev/null
@@ -1,144 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_SHARED_STORAGE_SERVICES_SHARED_STORAGE_WORKLET_GLOBAL_SCOPE_H_ -#define THIRD_PARTY_BLINK_RENDERER_MODULES_SHARED_STORAGE_SERVICES_SHARED_STORAGE_WORKLET_GLOBAL_SCOPE_H_ - -#include "mojo/public/cpp/bindings/associated_remote.h" -#include "mojo/public/cpp/bindings/pending_associated_remote.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/pending_remote.h" -#include "mojo/public/cpp/bindings/receiver.h" -#include "mojo/public/cpp/bindings/remote.h" -#include "services/network/public/mojom/url_loader_factory.mojom.h" -#include "third_party/blink/public/common/tokens/tokens.h" -#include "third_party/blink/public/mojom/private_aggregation/private_aggregation_host.mojom.h" -#include "third_party/blink/public/mojom/shared_storage/shared_storage_worklet_service.mojom.h" -#include "third_party/blink/renderer/core/execution_context/execution_context.h" -#include "third_party/blink/renderer/core/workers/worklet_global_scope.h" -#include "third_party/blink/renderer/modules/modules_export.h" -#include "third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_global_scope.h" -#include "third_party/blink/renderer/platform/bindings/script_wrappable.h" -#include "third_party/blink/renderer/platform/heap/garbage_collected.h" -#include "third_party/blink/renderer/platform/heap/persistent.h" -#include "third_party/blink/renderer/platform/mojo/heap_mojo_associated_remote.h" -#include "third_party/blink/renderer/platform/mojo/heap_mojo_receiver.h" -#include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h" -#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" -#include "third_party/blink/renderer/platform/wtf/casting.h" - -namespace blink { - -struct GlobalScopeCreationParams; -class ModuleScriptDownloader; - -// mojom::SharedStorageWorkletService implementation. Responsible for -// handling worklet operations. This object lives on the worklet thread. -class MODULES_EXPORT SharedStorageWorkletGlobalScope final - : public WorkletGlobalScope, - public mojom::SharedStorageWorkletService { - public: - SharedStorageWorkletGlobalScope( - std::unique_ptr<GlobalScopeCreationParams> creation_params, - WorkerThread* thread); - ~SharedStorageWorkletGlobalScope() override; - - void BindSharedStorageWorkletService( - mojo::PendingReceiver<mojom::SharedStorageWorkletService> receiver, - base::OnceClosure disconnect_handler); - - // WorkletGlobalScope implementation: - bool IsSharedStorageWorkletGlobalScope() const override { return true; } - - WorkletToken GetWorkletToken() const override { return token_; } - ExecutionContextToken GetExecutionContextToken() const override { - return token_; - } - - void Trace(Visitor*) const override; - - // mojom::SharedStorageWorkletService implementation: - void Initialize( - mojo::PendingAssociatedRemote<mojom::SharedStorageWorkletServiceClient> - client, - bool private_aggregation_permissions_policy_allowed, - mojo::PendingRemote<mojom::PrivateAggregationHost> - private_aggregation_host, - const absl::optional<std::u16string>& embedder_context) override; - void AddModule(mojo::PendingRemote<network::mojom::URLLoaderFactory> - pending_url_loader_factory, - const GURL& script_source_url, - AddModuleCallback callback) override; - void RunURLSelectionOperation( - const std::string& name, - const std::vector<GURL>& urls, - const std::vector<uint8_t>& serialized_data, - RunURLSelectionOperationCallback callback) override; - void RunOperation(const std::string& name, - const std::vector<uint8_t>& serialized_data, - RunOperationCallback callback) override; - - private: - void OnModuleScriptDownloaded( - const GURL& script_source_url, - mojom::SharedStorageWorkletService::AddModuleCallback callback, - std::unique_ptr<std::string> response_body, - std::string error_message); - - network::mojom::RequestDestination GetDestination() const override { - // Not called as the current implementation uses the custom module script - // loader. - NOTREACHED(); - - // Once we migrate to the blink-worklet's script loading infra, this needs - // to return a valid destination defined in the Fetch standard: - // https://fetch.spec.whatwg.org/#concept-request-destination - return network::mojom::RequestDestination::kEmpty; - } - - // `receiver_`'s disconnect handler explicitly deletes the worklet thread - // object that owns this service, thus deleting `this` upon disconnect. To - // ensure that the worklet thread object and this service are not leaked, - // `receiver_` must be cut off from the remote side when the worklet is - // supposed to be destroyed. - HeapMojoReceiver<mojom::SharedStorageWorkletService, - SharedStorageWorkletGlobalScope> - receiver_{this, this}; - - std::unique_ptr<ModuleScriptDownloader> module_script_downloader_; - - // This is associated because on the client side (i.e. worklet host), we want - // the call-in methods (e.g. storage access) and the callback methods - // (e.g. finish of a run-operation) to preserve their invocation order. This - // guarantee is desirable, as the client may shut down the service immediately - // after it gets the callback and sees no more outstanding operations, thus we - // want it to be more likely for the worklet to finish its intended work. - // - // In contrast, the `receiver_` doesn't need to be associated. This is a - // standalone service, so the starting of a worklet operation doesn't have to - // depend on / preserve the order with messages of other types. - HeapMojoAssociatedRemote<mojom::SharedStorageWorkletServiceClient> client_{ - this}; - - // Whether the "private-aggregation" permissions policy is enabled in the - // worklet. - bool private_aggregation_permissions_policy_allowed_ = false; - - // No need to be associated as message ordering (relative to shared storage - // operations) is unimportant. - HeapMojoRemote<mojom::PrivateAggregationHost> private_aggregation_host_{this}; - - const SharedStorageWorkletToken token_; -}; - -template <> -struct DowncastTraits<SharedStorageWorkletGlobalScope> { - static bool AllowFrom(const ExecutionContext& context) { - return context.IsSharedStorageWorkletGlobalScope(); - } -}; - -} // namespace blink - -#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_SHARED_STORAGE_SERVICES_SHARED_STORAGE_WORKLET_GLOBAL_SCOPE_H_
diff --git a/third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_messaging_proxy.cc b/third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_messaging_proxy.cc deleted file mode 100644 index 38b8912..0000000 --- a/third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_messaging_proxy.cc +++ /dev/null
@@ -1,91 +0,0 @@ -// Copyright 2023 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_messaging_proxy.h" - -#include <utility> - -#include "mojo/public/cpp/bindings/pending_remote.h" -#include "mojo/public/cpp/bindings/remote.h" -#include "third_party/blink/public/mojom/shared_storage/shared_storage_worklet_service.mojom.h" -#include "third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h" -#include "third_party/blink/renderer/core/workers/threaded_worklet_object_proxy.h" -#include "third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_thread.h" -#include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h" -#include "third_party/blink/renderer/platform/wtf/cross_thread_copier.h" -#include "third_party/blink/renderer/platform/wtf/cross_thread_copier_base.h" -#include "third_party/blink/renderer/platform/wtf/cross_thread_copier_mojo.h" -#include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h" - -namespace blink { - -SharedStorageWorkletMessagingProxy::SharedStorageWorkletMessagingProxy( - scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner, - mojo::PendingReceiver<mojom::SharedStorageWorkletService> receiver, - base::OnceClosure worklet_terminated_callback) - : ThreadedWorkletMessagingProxy( - /*execution_context=*/nullptr, - /*parent_agent_group_task_runner=*/main_thread_runner), - main_thread_runner_(main_thread_runner), - worklet_terminated_callback_(std::move(worklet_terminated_callback)) { - DCHECK(IsMainThread()); - - Initialize(/*worker_clients=*/nullptr, /*module_responses_map=*/nullptr); - - PostCrossThreadTask( - *GetWorkerThread()->GetTaskRunner(TaskType::kMiscPlatformAPI), FROM_HERE, - CrossThreadBindOnce( - &SharedStorageWorkletMessagingProxy:: - InitializeSharedStorageWorkletServiceOnWorkletThread, - WrapCrossThreadPersistent(this), - CrossThreadUnretained(GetWorkerThread()), std::move(receiver))); -} - -void SharedStorageWorkletMessagingProxy:: - InitializeSharedStorageWorkletServiceOnWorkletThread( - WorkerThread* worker_thread, - mojo::PendingReceiver<mojom::SharedStorageWorkletService> receiver) { - DCHECK(worker_thread->IsCurrentThread()); - - auto disconnect_handler = WTF::BindOnce( - &SharedStorageWorkletMessagingProxy:: - OnSharedStorageWorkletServiceDisconnectedOnWorkletThread, - WrapPersistent(this)); - - static_cast<SharedStorageWorkletThread*>(worker_thread) - ->InitializeSharedStorageWorkletService(std::move(receiver), - std::move(disconnect_handler)); -} - -void SharedStorageWorkletMessagingProxy:: - OnSharedStorageWorkletServiceDisconnectedOnWorkletThread() { - // Initiate worklet termination from the main thread. This will eventually - // trigger `WorkerThreadTerminated()`. - PostCrossThreadTask( - *main_thread_runner_, FROM_HERE, - CrossThreadBindOnce(&ThreadedMessagingProxyBase::ParentObjectDestroyed, - WrapCrossThreadPersistent(this))); -} - -void SharedStorageWorkletMessagingProxy::WorkerThreadTerminated() { - DCHECK(IsMainThread()); - - ThreadedWorkletMessagingProxy::WorkerThreadTerminated(); - - // This will destroy the `WebSharedStorageWorkletThreadImpl` that owns `this`. - std::move(worklet_terminated_callback_).Run(); -} - -void SharedStorageWorkletMessagingProxy::Trace(Visitor* visitor) const { - ThreadedWorkletMessagingProxy::Trace(visitor); -} - -std::unique_ptr<WorkerThread> -SharedStorageWorkletMessagingProxy::CreateWorkerThread() { - DCHECK(IsMainThread()); - - return std::make_unique<SharedStorageWorkletThread>(WorkletObjectProxy()); -} - -} // namespace blink
diff --git a/third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_messaging_proxy.h b/third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_messaging_proxy.h deleted file mode 100644 index ab48cde7..0000000 --- a/third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_messaging_proxy.h +++ /dev/null
@@ -1,58 +0,0 @@ -// Copyright 2023 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_SHARED_STORAGE_SERVICES_SHARED_STORAGE_WORKLET_MESSAGING_PROXY_H_ -#define THIRD_PARTY_BLINK_RENDERER_MODULES_SHARED_STORAGE_SERVICES_SHARED_STORAGE_WORKLET_MESSAGING_PROXY_H_ - -#include <memory> - -#include "third_party/blink/public/common/browser_interface_broker_proxy.h" -#include "third_party/blink/public/mojom/shared_storage/shared_storage_worklet_service.mojom-forward.h" -#include "third_party/blink/renderer/core/workers/threaded_worklet_messaging_proxy.h" -#include "third_party/blink/renderer/modules/modules_export.h" - -namespace blink { - -class WorkerThread; - -// Acts as a proxy for the shared storage worklet global scope. Upon creation on -// the main thread, this will post a task to the worklet thread to initialize -// the `SharedStorageWorkletGlobalScope`. When the service is disconnected on -// the worklet thread (triggering -// `OnSharedStorageWorkletServiceDisconnectedOnWorkletThread`), a task will be -// posted to the main thread, and the main thread will in turn invoke -// `ThreadedMessagingProxyBase::ParentObjectDestroyed` to terminate the worklet -// thread gracefully. Eventually, this proxy will be destroyed on the main -// thread. -class MODULES_EXPORT SharedStorageWorkletMessagingProxy final - : public ThreadedWorkletMessagingProxy { - public: - SharedStorageWorkletMessagingProxy( - scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner, - mojo::PendingReceiver<mojom::SharedStorageWorkletService> receiver, - base::OnceClosure worklet_terminated_callback); - - void WorkerThreadTerminated() override; - - void Trace(Visitor*) const override; - - private: - friend class SharedStorageWorkletTest; - - void InitializeSharedStorageWorkletServiceOnWorkletThread( - WorkerThread* worker_thread, - mojo::PendingReceiver<mojom::SharedStorageWorkletService> receiver); - - void OnSharedStorageWorkletServiceDisconnectedOnWorkletThread(); - - std::unique_ptr<WorkerThread> CreateWorkerThread() override; - - scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner_; - - base::OnceClosure worklet_terminated_callback_; -}; - -} // namespace blink - -#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_SHARED_STORAGE_SERVICES_SHARED_STORAGE_WORKLET_MESSAGING_PROXY_H_
diff --git a/third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_thread.cc b/third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_thread.cc deleted file mode 100644 index 01f2c06..0000000 --- a/third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_thread.cc +++ /dev/null
@@ -1,79 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_thread.h" - -#include "third_party/blink/public/mojom/shared_storage/shared_storage_worklet_service.mojom.h" -#include "third_party/blink/renderer/core/workers/global_scope_creation_params.h" -#include "third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_global_scope.h" -#include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h" - -namespace blink { - -namespace { - -// Use for ref-counting of all SharedStorageWorkletThread instances in a -// process. Incremented by the constructor and decremented by destructor. -int ref_count = 0; - -void EnsureSharedBackingThread(const ThreadCreationParams& params) { - DCHECK(IsMainThread()); - DCHECK_EQ(ref_count, 1); - WorkletThreadHolder<SharedStorageWorkletThread>::EnsureInstance(params); -} - -} // namespace - -template class WorkletThreadHolder<SharedStorageWorkletThread>; - -SharedStorageWorkletThread::SharedStorageWorkletThread( - WorkerReportingProxy& worker_reporting_proxy) - : WorkerThread(worker_reporting_proxy) { - DCHECK(IsMainThread()); - - // TODO(crbug.com/1414951): Specify a correct type. - ThreadCreationParams params = - ThreadCreationParams(ThreadType::kUnspecifiedWorkerThread); - - if (++ref_count == 1) { - EnsureSharedBackingThread(params); - } -} - -SharedStorageWorkletThread::~SharedStorageWorkletThread() { - DCHECK(IsMainThread()); - if (--ref_count == 0) { - ClearSharedBackingThread(); - } -} - -WorkerBackingThread& SharedStorageWorkletThread::GetWorkerBackingThread() { - return *WorkletThreadHolder<SharedStorageWorkletThread>::GetInstance() - ->GetThread(); -} - -void SharedStorageWorkletThread::ClearSharedBackingThread() { - DCHECK(IsMainThread()); - CHECK_EQ(ref_count, 0); - WorkletThreadHolder<SharedStorageWorkletThread>::ClearInstance(); -} - -void SharedStorageWorkletThread::InitializeSharedStorageWorkletService( - mojo::PendingReceiver<mojom::SharedStorageWorkletService> receiver, - base::OnceClosure disconnect_handler) { - DCHECK(!IsMainThread()); - SharedStorageWorkletGlobalScope* global_scope = - To<SharedStorageWorkletGlobalScope>(GlobalScope()); - - global_scope->BindSharedStorageWorkletService(std::move(receiver), - std::move(disconnect_handler)); -} - -WorkerOrWorkletGlobalScope* SharedStorageWorkletThread::CreateWorkerGlobalScope( - std::unique_ptr<GlobalScopeCreationParams> creation_params) { - return MakeGarbageCollected<SharedStorageWorkletGlobalScope>( - std::move(creation_params), this); -} - -} // namespace blink
diff --git a/third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_thread.h b/third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_thread.h deleted file mode 100644 index e7dc1194..0000000 --- a/third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_thread.h +++ /dev/null
@@ -1,52 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_SHARED_STORAGE_SERVICES_SHARED_STORAGE_WORKLET_THREAD_H_ -#define THIRD_PARTY_BLINK_RENDERER_MODULES_SHARED_STORAGE_SERVICES_SHARED_STORAGE_WORKLET_THREAD_H_ - -#include "mojo/public/cpp/bindings/pending_remote.h" -#include "third_party/blink/public/mojom/shared_storage/shared_storage_worklet_service.mojom-forward.h" -#include "third_party/blink/renderer/core/workers/worker_thread.h" -#include "third_party/blink/renderer/core/workers/worklet_thread_holder.h" -#include "third_party/blink/renderer/modules/modules_export.h" -#include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h" -#include "third_party/blink/renderer/platform/wtf/casting.h" - -namespace blink { - -class WorkerReportingProxy; -class SharedStorageWorkletServiceImpl; - -// SharedStorageWorkletThread is a per-SharedStorageWorkletGlobalScope object -// that has a reference count to the backing thread that performs -// SharedStorageWorklet tasks. -class MODULES_EXPORT SharedStorageWorkletThread final : public WorkerThread { - public: - explicit SharedStorageWorkletThread(WorkerReportingProxy&); - ~SharedStorageWorkletThread() final; - - void SharedStorageWorkletServiceConnectionError(); - - WorkerBackingThread& GetWorkerBackingThread() final; - void ClearWorkerBackingThread() final {} - - static void ClearSharedBackingThread(); - - void InitializeSharedStorageWorkletService( - mojo::PendingReceiver<mojom::SharedStorageWorkletService> receiver, - base::OnceClosure disconnect_handler); - - private: - WorkerOrWorkletGlobalScope* CreateWorkerGlobalScope( - std::unique_ptr<GlobalScopeCreationParams>) final; - bool IsOwningBackingThread() const final { return false; } - ThreadType GetThreadType() const final { - // TODO(crbug.com/1414951): Specify a correct type. - return ThreadType::kUnspecifiedWorkerThread; - } -}; - -} // namespace blink - -#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_SHARED_STORAGE_SERVICES_SHARED_STORAGE_WORKLET_THREAD_H_
diff --git a/third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_unittest.cc b/third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_unittest.cc deleted file mode 100644 index 95b7f3f..0000000 --- a/third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_unittest.cc +++ /dev/null
@@ -1,197 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "third_party/blink/renderer/modules/shared_storage/services/shared_storage_worklet_messaging_proxy.h" - -#include "base/task/bind_post_task.h" -#include "base/task/single_thread_task_runner.h" -#include "base/test/bind.h" -#include "base/test/test_future.h" -#include "mojo/public/cpp/bindings/associated_receiver.h" -#include "services/network/test/test_url_loader_factory.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "third_party/blink/public/mojom/shared_storage/shared_storage_worklet_service.mojom.h" -#include "third_party/blink/renderer/core/testing/page_test_base.h" -#include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h" - -namespace blink { - -namespace { - -constexpr char kModuleScriptSource[] = "https://foo.com/module_script.js"; - -struct AddModuleResult { - bool success = false; - std::string error_message; -}; - -class TestClient : public blink::mojom::SharedStorageWorkletServiceClient { - public: - explicit TestClient(mojo::PendingAssociatedReceiver< - blink::mojom::SharedStorageWorkletServiceClient> receiver) - : receiver_(this, std::move(receiver)) {} - - void SharedStorageSet(const std::u16string& key, - const std::u16string& value, - bool ignore_if_present, - SharedStorageSetCallback callback) override { - NOTREACHED(); - } - - void SharedStorageAppend(const std::u16string& key, - const std::u16string& value, - SharedStorageAppendCallback callback) override { - NOTREACHED(); - } - - void SharedStorageDelete(const std::u16string& key, - SharedStorageDeleteCallback callback) override { - NOTREACHED(); - } - - void SharedStorageClear(SharedStorageClearCallback callback) override { - NOTREACHED(); - } - - void SharedStorageGet(const std::u16string& key, - SharedStorageGetCallback callback) override { - NOTREACHED(); - } - - void SharedStorageKeys( - mojo::PendingRemote<blink::mojom::SharedStorageEntriesListener> - pending_listener) override { - NOTREACHED(); - } - - void SharedStorageEntries( - mojo::PendingRemote<blink::mojom::SharedStorageEntriesListener> - pending_listener) override { - NOTREACHED(); - } - - void SharedStorageLength(SharedStorageLengthCallback callback) override { - NOTREACHED(); - } - - void SharedStorageRemainingBudget( - SharedStorageRemainingBudgetCallback callback) override { - NOTREACHED(); - } - - void ConsoleLog(const std::string& message) override { NOTREACHED(); } - - void RecordUseCounters( - const std::vector<blink::mojom::WebFeature>& features) override { - NOTREACHED(); - } - - private: - mojo::AssociatedReceiver<blink::mojom::SharedStorageWorkletServiceClient> - receiver_{this}; -}; - -} // namespace - -class SharedStorageWorkletTest : public testing::Test { - public: - SharedStorageWorkletTest() = default; - - void SetUp() override { - mojo::PendingReceiver<mojom::SharedStorageWorkletService> receiver = - shared_storage_worklet_service_.BindNewPipeAndPassReceiver(); - - messaging_proxy_ = MakeGarbageCollected<SharedStorageWorkletMessagingProxy>( - base::SingleThreadTaskRunner::GetCurrentDefault(), std::move(receiver), - worklet_terminated_future_.GetCallback()); - - mojo::PendingAssociatedRemote<mojom::SharedStorageWorkletServiceClient> - pending_remote; - mojo::PendingAssociatedReceiver<mojom::SharedStorageWorkletServiceClient> - pending_receiver = pending_remote.InitWithNewEndpointAndPassReceiver(); - - test_client_ = std::make_unique<TestClient>(std::move(pending_receiver)); - - absl::optional<std::u16string> embedder_context; - - shared_storage_worklet_service_->Initialize( - std::move(pending_remote), - /*private_aggregation_permissions_policy_allowed=*/true, - mojo::PendingRemote<mojom::PrivateAggregationHost>(), embedder_context); - } - - AddModuleResult AddModule(const std::string& script_content, - std::string mime_type = "application/javascript") { - mojo::Remote<network::mojom::URLLoaderFactory> factory; - - network::TestURLLoaderFactory proxied_url_loader_factory; - - auto head = network::mojom::URLResponseHead::New(); - head->mime_type = mime_type; - head->charset = "us-ascii"; - - proxied_url_loader_factory.AddResponse( - GURL(kModuleScriptSource), std::move(head), - /*content=*/script_content, network::URLLoaderCompletionStatus()); - - proxied_url_loader_factory.Clone(factory.BindNewPipeAndPassReceiver()); - - base::test::TestFuture<bool, const std::string&> future; - shared_storage_worklet_service_->AddModule( - factory.Unbind(), GURL(kModuleScriptSource), future.GetCallback()); - - return {future.Get<0>(), future.Get<1>()}; - } - - protected: - mojo::Remote<mojom::SharedStorageWorkletService> - shared_storage_worklet_service_; - - Persistent<SharedStorageWorkletMessagingProxy> messaging_proxy_; - - base::test::TestFuture<void> worklet_terminated_future_; - - std::unique_ptr<TestClient> test_client_; -}; - -TEST_F(SharedStorageWorkletTest, AddModule_EmptyScriptSuccess) { - AddModuleResult result = AddModule(/*script_content=*/""); - EXPECT_TRUE(result.success); - EXPECT_TRUE(result.error_message.empty()); -} - -TEST_F(SharedStorageWorkletTest, AddModule_SimpleScriptSuccess) { - AddModuleResult result = AddModule(/*script_content=*/"let a = 1;"); - EXPECT_TRUE(result.success); - EXPECT_TRUE(result.error_message.empty()); -} - -TEST_F(SharedStorageWorkletTest, AddModule_SimpleScriptError) { - AddModuleResult result = AddModule(/*script_content=*/"a;"); - EXPECT_FALSE(result.success); - EXPECT_THAT(result.error_message, - testing::HasSubstr("ReferenceError: a is not defined")); -} - -TEST_F(SharedStorageWorkletTest, AddModule_ScriptDownloadError) { - AddModuleResult result = AddModule(/*script_content=*/"", - /*mime_type=*/"unsupported_mime_type"); - EXPECT_FALSE(result.success); - EXPECT_EQ(result.error_message, - "Rejecting load of https://foo.com/module_script.js due to " - "unexpected MIME type."); -} - -TEST_F(SharedStorageWorkletTest, WorkletTerminationDueToDisconnect) { - AddModuleResult result = AddModule(/*script_content=*/""); - - // Trigger the disconnect handler. - shared_storage_worklet_service_.reset(); - - // Callback called means the worklet has terminated successfully. - EXPECT_TRUE(worklet_terminated_future_.Wait()); -} - -} // namespace blink
diff --git a/third_party/blink/renderer/modules/smart_card/smart_card_error.cc b/third_party/blink/renderer/modules/smart_card/smart_card_error.cc index eac2694..5e628473 100644 --- a/third_party/blink/renderer/modules/smart_card/smart_card_error.cc +++ b/third_party/blink/renderer/modules/smart_card/smart_card_error.cc
@@ -9,88 +9,6 @@ #include "third_party/blink/renderer/platform/heap/garbage_collected.h" namespace blink { -namespace { - -// The response code messages are mostly from -// https://learn.microsoft.com/en-us/windows/win32/secauthn/authentication-return-values, -// which are also used by PCSC lite. -String MojomResponseCodeToMessage( - mojom::SmartCardResponseCode mojom_response_code) { - switch (mojom_response_code) { - case mojom::SmartCardResponseCode::kNoService: - return "No smart card service available in the system."; - case mojom::SmartCardResponseCode::kNoSmartCard: - return "The operation requires a smart card, but no smart card is " - "currently in the device."; - case mojom::SmartCardResponseCode::kNotReady: - return "The reader or smart card is not ready to accept commands."; - case mojom::SmartCardResponseCode::kNotTransacted: - return "An attempt was made to end a non-existent transaction."; - case mojom::SmartCardResponseCode::kProtoMismatch: - return "The requested protocols are incompatible with the protocol " - "currently in use with the smart card."; - case mojom::SmartCardResponseCode::kReaderUnavailable: - return "The specified reader is not currently available for use."; - case mojom::SmartCardResponseCode::kRemovedCard: - return "The smart card has been removed, so further communication is not " - "possible."; - case mojom::SmartCardResponseCode::kResetCard: - return "The smart card has been reset, so any shared state information " - "is invalid."; - case mojom::SmartCardResponseCode::kSharingViolation: - return "The smart card cannot be accessed because of other connections " - "outstanding."; - case mojom::SmartCardResponseCode::kSystemCancelled: - return "The action was cancelled by the system, presumably to log off or " - "shut down."; - case mojom::SmartCardResponseCode::kUnpoweredCard: - return "Power has been removed from the smart card, so that further " - "communication is not possible."; - case mojom::SmartCardResponseCode::kUnresponsiveCard: - return "The smart card is not responding to a reset."; - case mojom::SmartCardResponseCode::kUnsupportedCard: - return "The reader cannot communicate with the card, due to ATR string " - "configuration conflicts."; - case mojom::SmartCardResponseCode::kUnsupportedFeature: - return "This smart card does not support the requested feature."; - } -} - -V8SmartCardResponseCode::Enum MojomToV8ResponseCode( - mojom::SmartCardResponseCode mojom_response_code) { - switch (mojom_response_code) { - case mojom::SmartCardResponseCode::kNoService: - return V8SmartCardResponseCode::Enum::kNoService; - case mojom::SmartCardResponseCode::kNoSmartCard: - return V8SmartCardResponseCode::Enum::kNoSmartcard; - case mojom::SmartCardResponseCode::kNotReady: - return V8SmartCardResponseCode::Enum::kNotReady; - case mojom::SmartCardResponseCode::kNotTransacted: - return V8SmartCardResponseCode::Enum::kNotTransacted; - case mojom::SmartCardResponseCode::kProtoMismatch: - return V8SmartCardResponseCode::Enum::kProtoMismatch; - case mojom::SmartCardResponseCode::kReaderUnavailable: - return V8SmartCardResponseCode::Enum::kReaderUnavailable; - case mojom::SmartCardResponseCode::kRemovedCard: - return V8SmartCardResponseCode::Enum::kRemovedCard; - case mojom::SmartCardResponseCode::kResetCard: - return V8SmartCardResponseCode::Enum::kResetCard; - case mojom::SmartCardResponseCode::kSharingViolation: - return V8SmartCardResponseCode::Enum::kSharingViolation; - case mojom::SmartCardResponseCode::kSystemCancelled: - return V8SmartCardResponseCode::Enum::kSystemCancelled; - case mojom::SmartCardResponseCode::kUnpoweredCard: - return V8SmartCardResponseCode::Enum::kUnpoweredCard; - case mojom::SmartCardResponseCode::kUnresponsiveCard: - return V8SmartCardResponseCode::Enum::kUnresponsiveCard; - case mojom::SmartCardResponseCode::kUnsupportedCard: - return V8SmartCardResponseCode::Enum::kUnsupportedCard; - case mojom::SmartCardResponseCode::kUnsupportedFeature: - return V8SmartCardResponseCode::Enum::kUnsupportedFeature; - } -} - -} // namespace // static SmartCardError* SmartCardError::Create(String message, @@ -99,13 +17,129 @@ options->responseCode()); } -SmartCardError::SmartCardError(mojom::SmartCardResponseCode mojom_response_code) - : SmartCardError( - MojomResponseCodeToMessage(mojom_response_code), - V8SmartCardResponseCode(MojomToV8ResponseCode(mojom_response_code))) { +// static +DOMException* SmartCardError::Create( + mojom::blink::SmartCardResponseCode mojom_response_code) { + switch (mojom_response_code) { + // SmartCardError: + // The response code messages are mostly from + // https://learn.microsoft.com/en-us/windows/win32/secauthn/authentication-return-values, + // which are also used by PCSC lite. + case mojom::blink::SmartCardResponseCode::kNoService: + return MakeGarbageCollected<SmartCardError>( + "No smart card service available in the system.", + V8SmartCardResponseCode::Enum::kNoService); + case mojom::blink::SmartCardResponseCode::kNoSmartCard: + return MakeGarbageCollected<SmartCardError>( + "The operation requires a smart card, but no smart card is " + "currently in the device.", + V8SmartCardResponseCode::Enum::kNoSmartcard); + case mojom::blink::SmartCardResponseCode::kNotReady: + return MakeGarbageCollected<SmartCardError>( + "The reader or smart card is not ready to accept commands.", + V8SmartCardResponseCode::Enum::kNotReady); + case mojom::blink::SmartCardResponseCode::kNotTransacted: + return MakeGarbageCollected<SmartCardError>( + "An attempt was made to end a non-existent transaction.", + V8SmartCardResponseCode::Enum::kNotTransacted); + case mojom::blink::SmartCardResponseCode::kProtoMismatch: + return MakeGarbageCollected<SmartCardError>( + "The requested protocols are incompatible with the protocol " + "currently in use with the smart card.", + V8SmartCardResponseCode::Enum::kProtoMismatch); + case mojom::blink::SmartCardResponseCode::kReaderUnavailable: + return MakeGarbageCollected<SmartCardError>( + "The specified reader is not currently available for use.", + V8SmartCardResponseCode::Enum::kReaderUnavailable); + case mojom::blink::SmartCardResponseCode::kRemovedCard: + return MakeGarbageCollected<SmartCardError>( + "The smart card has been removed, so further communication is not " + "possible.", + V8SmartCardResponseCode::Enum::kRemovedCard); + case mojom::blink::SmartCardResponseCode::kResetCard: + return MakeGarbageCollected<SmartCardError>( + "The smart card has been reset, so any shared state information " + "is invalid.", + V8SmartCardResponseCode::Enum::kResetCard); + case mojom::blink::SmartCardResponseCode::kServerTooBusy: + return MakeGarbageCollected<SmartCardError>( + "The smart card resource manager is too busy to complete this " + "operation.", + V8SmartCardResponseCode::Enum::kServerTooBusy); + case mojom::blink::SmartCardResponseCode::kSharingViolation: + return MakeGarbageCollected<SmartCardError>( + "The smart card cannot be accessed because of other connections " + "outstanding.", + V8SmartCardResponseCode::Enum::kSharingViolation); + case mojom::blink::SmartCardResponseCode::kSystemCancelled: + return MakeGarbageCollected<SmartCardError>( + "The action was cancelled by the system, presumably to log off or " + "shut down.", + V8SmartCardResponseCode::Enum::kSystemCancelled); + case mojom::blink::SmartCardResponseCode::kUnpoweredCard: + return MakeGarbageCollected<SmartCardError>( + "Power has been removed from the smart card, so that further " + "communication is not possible.", + V8SmartCardResponseCode::Enum::kUnpoweredCard); + case mojom::blink::SmartCardResponseCode::kUnresponsiveCard: + return MakeGarbageCollected<SmartCardError>( + "The smart card is not responding to a reset.", + V8SmartCardResponseCode::Enum::kUnresponsiveCard); + case mojom::blink::SmartCardResponseCode::kUnsupportedCard: + return MakeGarbageCollected<SmartCardError>( + "The reader cannot communicate with the card, due to ATR string " + "configuration conflicts.", + V8SmartCardResponseCode::Enum::kUnsupportedCard); + case mojom::blink::SmartCardResponseCode::kUnsupportedFeature: + return MakeGarbageCollected<SmartCardError>( + "This smart card does not support the requested feature.", + V8SmartCardResponseCode::Enum::kUnsupportedFeature); + + // DOMException: + // "InvalidStateError" + case mojom::blink::SmartCardResponseCode::kInvalidConnection: + return MakeGarbageCollected<DOMException>( + DOMExceptionCode::kInvalidStateError, "Connection is invalid."); + case mojom::blink::SmartCardResponseCode::kServiceStopped: + return MakeGarbageCollected<DOMException>( + DOMExceptionCode::kInvalidStateError, + "The smart card resource manager has shut down."); + // "AbortError" + case mojom::blink::SmartCardResponseCode::kShutdown: + return MakeGarbageCollected<DOMException>( + DOMExceptionCode::kAbortError, + "The operation has been aborted to allow the server application to " + "exit."); + // "UnknownError" + case mojom::blink::SmartCardResponseCode::kCommError: + return MakeGarbageCollected<DOMException>( + DOMExceptionCode::kUnknownError, + "An internal communications error has been detected."); + case mojom::blink::SmartCardResponseCode::kInternalError: + return MakeGarbageCollected<DOMException>( + DOMExceptionCode::kUnknownError, + "An internal consistency check failed."); + case mojom::blink::SmartCardResponseCode::kNoMemory: + return MakeGarbageCollected<DOMException>( + DOMExceptionCode::kUnknownError, + "Not enough memory available to complete this command."); + case mojom::blink::SmartCardResponseCode::kUnexpected: + return MakeGarbageCollected<DOMException>( + DOMExceptionCode::kUnknownError, + "An unexpected card error has occurred."); + case mojom::blink::SmartCardResponseCode::kUnknownError: + return MakeGarbageCollected<DOMException>( + DOMExceptionCode::kUnknownError, + "An internal error has been detected, but the source is unknown."); + } } SmartCardError::SmartCardError(String message, + V8SmartCardResponseCode::Enum response_code_enum) + : SmartCardError(std::move(message), + V8SmartCardResponseCode(response_code_enum)) {} + +SmartCardError::SmartCardError(String message, V8SmartCardResponseCode response_code) : DOMException(DOMExceptionCode::kSmartCardError, std::move(message)), response_code_(std::move(response_code)) {}
diff --git a/third_party/blink/renderer/modules/smart_card/smart_card_error.h b/third_party/blink/renderer/modules/smart_card/smart_card_error.h index 6444cab3..8375b05 100644 --- a/third_party/blink/renderer/modules/smart_card/smart_card_error.h +++ b/third_party/blink/renderer/modules/smart_card/smart_card_error.h
@@ -5,7 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_SMART_CARD_SMART_CARD_ERROR_H_ #define THIRD_PARTY_BLINK_RENDERER_MODULES_SMART_CARD_SMART_CARD_ERROR_H_ -#include "third_party/blink/public/mojom/smart_card/smart_card.mojom-shared.h" +#include "third_party/blink/public/mojom/smart_card/smart_card.mojom-blink.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_smart_card_response_code.h" #include "third_party/blink/renderer/core/dom/dom_exception.h" #include "third_party/blink/renderer/modules/modules_export.h" @@ -22,7 +22,12 @@ // Constructor exposed to script. Called by the V8 bindings. static SmartCardError* Create(String message, const SmartCardErrorOptions*); - explicit SmartCardError(mojom::SmartCardResponseCode mojom_response_code); + // Depending on the particular mojo response code, creates either a + // SmartCardError or a plain DOMException. + static DOMException* Create( + mojom::blink::SmartCardResponseCode mojom_response_code); + + SmartCardError(String message, V8SmartCardResponseCode::Enum); SmartCardError(String message, V8SmartCardResponseCode); ~SmartCardError() override;
diff --git a/third_party/blink/renderer/modules/smart_card/smart_card_error.idl b/third_party/blink/renderer/modules/smart_card/smart_card_error.idl index 10a4de5..d40f729 100644 --- a/third_party/blink/renderer/modules/smart_card/smart_card_error.idl +++ b/third_party/blink/renderer/modules/smart_card/smart_card_error.idl
@@ -13,6 +13,7 @@ "reader-unavailable", "removed-card", "reset-card", + "server-too-busy", "sharing-violation", "system-cancelled", "unpowered-card",
diff --git a/third_party/blink/renderer/modules/smart_card/smart_card_resource_manager.cc b/third_party/blink/renderer/modules/smart_card/smart_card_resource_manager.cc index 0e939279..5a19424 100644 --- a/third_party/blink/renderer/modules/smart_card/smart_card_resource_manager.cc +++ b/third_party/blink/renderer/modules/smart_card/smart_card_resource_manager.cc
@@ -162,8 +162,7 @@ get_readers_promises_.erase(resolver); if (result->is_response_code()) { - auto* error = - MakeGarbageCollected<SmartCardError>(result->get_response_code()); + auto* error = SmartCardError::Create(result->get_response_code()); resolver->Reject(error); return; }
diff --git a/third_party/blink/renderer/modules/webaudio/audio_worklet_messaging_proxy.cc b/third_party/blink/renderer/modules/webaudio/audio_worklet_messaging_proxy.cc index a42548f..ac973912 100644 --- a/third_party/blink/renderer/modules/webaudio/audio_worklet_messaging_proxy.cc +++ b/third_party/blink/renderer/modules/webaudio/audio_worklet_messaging_proxy.cc
@@ -91,9 +91,7 @@ std::unique_ptr<ThreadedWorkletObjectProxy> AudioWorkletMessagingProxy::CreateObjectProxy( ThreadedWorkletMessagingProxy* messaging_proxy, - ParentExecutionContextTaskRunners* parent_execution_context_task_runners, - scoped_refptr<base::SingleThreadTaskRunner> - parent_agent_group_task_runner) { + ParentExecutionContextTaskRunners* parent_execution_context_task_runners) { return std::make_unique<AudioWorkletObjectProxy>( static_cast<AudioWorkletMessagingProxy*>(messaging_proxy), parent_execution_context_task_runners,
diff --git a/third_party/blink/renderer/modules/webaudio/audio_worklet_messaging_proxy.h b/third_party/blink/renderer/modules/webaudio/audio_worklet_messaging_proxy.h index 526066f8..2d3e14c 100644 --- a/third_party/blink/renderer/modules/webaudio/audio_worklet_messaging_proxy.h +++ b/third_party/blink/renderer/modules/webaudio/audio_worklet_messaging_proxy.h
@@ -78,9 +78,7 @@ // Implements ThreadedWorkletMessagingProxy. std::unique_ptr<ThreadedWorkletObjectProxy> CreateObjectProxy( ThreadedWorkletMessagingProxy*, - ParentExecutionContextTaskRunners*, - scoped_refptr<base::SingleThreadTaskRunner> - parent_agent_group_task_runner) override; + ParentExecutionContextTaskRunners*) override; std::unique_ptr<WorkerThread> CreateWorkerThread() override;
diff --git a/third_party/blink/renderer/modules/webaudio/audio_worklet_object_proxy.cc b/third_party/blink/renderer/modules/webaudio/audio_worklet_object_proxy.cc index 3320de0..eafb68f 100644 --- a/third_party/blink/renderer/modules/webaudio/audio_worklet_object_proxy.cc +++ b/third_party/blink/renderer/modules/webaudio/audio_worklet_object_proxy.cc
@@ -22,8 +22,7 @@ float context_sample_rate) : ThreadedWorkletObjectProxy( static_cast<ThreadedWorkletMessagingProxy*>(messaging_proxy_weak_ptr), - parent_execution_context_task_runners, - /*parent_agent_group_task_runner=*/nullptr), + parent_execution_context_task_runners), context_sample_rate_(context_sample_rate) {} void AudioWorkletObjectProxy::DidCreateWorkerGlobalScope(
diff --git a/third_party/blink/renderer/platform/animation/timing_function.cc b/third_party/blink/renderer/platform/animation/timing_function.cc index 17c4bca..6aba547 100644 --- a/third_party/blink/renderer/platform/animation/timing_function.cc +++ b/third_party/blink/renderer/platform/animation/timing_function.cc
@@ -255,7 +255,10 @@ // Equals operators bool operator==(const LinearTimingFunction& lhs, const TimingFunction& rhs) { - return rhs.GetType() == TimingFunction::Type::LINEAR; + if (auto* rhs_func = DynamicTo<LinearTimingFunction>(rhs)) { + return lhs == *rhs_func; + } + return false; } bool operator==(const CubicBezierTimingFunction& lhs,
diff --git a/third_party/blink/renderer/platform/animation/timing_function.h b/third_party/blink/renderer/platform/animation/timing_function.h index afd89b76..e302721 100644 --- a/third_party/blink/renderer/platform/animation/timing_function.h +++ b/third_party/blink/renderer/platform/animation/timing_function.h
@@ -29,6 +29,7 @@ #include "base/check_op.h" #include "base/memory/scoped_refptr.h" #include "base/notreached.h" +#include "base/ranges/algorithm.h" #include "third_party/blink/renderer/platform/platform_export.h" #include "third_party/blink/renderer/platform/wtf/casting.h" #include "third_party/blink/renderer/platform/wtf/std_lib_extras.h" @@ -108,6 +109,10 @@ } bool IsTrivial() const { return linear_->IsTrivial(); } + bool operator==(const LinearTimingFunction& other) const { + return base::ranges::equal(Points(), other.Points()); + } + private: LinearTimingFunction() : TimingFunction(Type::LINEAR),
diff --git a/third_party/blink/renderer/platform/animation/timing_function_test.cc b/third_party/blink/renderer/platform/animation/timing_function_test.cc index 80aabda..8d5f5b2 100644 --- a/third_party/blink/renderer/platform/animation/timing_function_test.cc +++ b/third_party/blink/renderer/platform/animation/timing_function_test.cc
@@ -138,9 +138,17 @@ scoped_refptr<TimingFunction> linear_timing2 = LinearTimingFunction::Shared(); EXPECT_EQ(*linear_timing1, *linear_timing1); EXPECT_EQ(*linear_timing1, *linear_timing2); - std::vector<gfx::LinearEasingPoint> points{{0, 1}, {100, 1}}; - const auto& linear_timing3 = LinearTimingFunction::Create(std::move(points)); - EXPECT_EQ(*linear_timing1, *linear_timing3); + std::vector<gfx::LinearEasingPoint> points3{{0, 1}, {100, 1}}; + const auto& linear_timing3 = LinearTimingFunction::Create(points3); + const auto& linear_timing4 = LinearTimingFunction::Create(std::move(points3)); + std::vector<gfx::LinearEasingPoint> points5{{0, 1.1}, {100, 1}}; + const auto& linear_timing5 = LinearTimingFunction::Create(std::move(points5)); + std::vector<gfx::LinearEasingPoint> points6{{0, 1}, {50, .5}, {100, 1}}; + const auto& linear_timing6 = LinearTimingFunction::Create(std::move(points6)); + EXPECT_NE(*linear_timing1, *linear_timing3); + EXPECT_EQ(*linear_timing3, *linear_timing4); + EXPECT_NE(*linear_timing4, *linear_timing5); + EXPECT_NE(*linear_timing5, *linear_timing6); } TEST_F(TimingFunctionTest, CubicOperatorEq) {
diff --git a/third_party/blink/renderer/platform/loader/fetch/memory_cache.cc b/third_party/blink/renderer/platform/loader/fetch/memory_cache.cc index 9ba75034..28ea287 100644 --- a/third_party/blink/renderer/platform/loader/fetch/memory_cache.cc +++ b/third_party/blink/renderer/platform/loader/fetch/memory_cache.cc
@@ -25,9 +25,12 @@ #include <utility> #include "base/auto_reset.h" +#include "base/feature_list.h" #include "base/functional/bind.h" #include "base/logging.h" +#include "base/metrics/histogram_functions.h" #include "base/task/single_thread_task_runner.h" +#include "third_party/blink/public/common/features.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/heap/visitor.h" @@ -46,7 +49,10 @@ static const base::TimeDelta kCMinDelayBeforeLiveDecodedPrune = base::Seconds(1); static const base::TimeDelta kCMaxPruneDeferralDelay = base::Milliseconds(500); +static const base::TimeDelta kCUnloadPageResourceSaveTime = base::Minutes(5); +static constexpr char kPageSavedResourceStrongReferenceSize[] = + "Blink.MemoryCache.PageSavedResourceStrongReferenceSize"; // Percentage of capacity toward which we prune, to avoid immediately pruning // again. static const float kCTargetPrunePercentage = .95f; @@ -84,9 +90,7 @@ MemoryCache::MemoryCache( scoped_refptr<base::SingleThreadTaskRunner> task_runner) - : in_prune_resources_(false), - prune_pending_(false), - capacity_(kCDefaultCacheCapacity), + : capacity_(kCDefaultCacheCapacity), delay_before_live_decoded_prune_(kCMinDelayBeforeLiveDecodedPrune), size_(0), task_runner_(std::move(task_runner)) { @@ -99,6 +103,7 @@ void MemoryCache::Trace(Visitor* visitor) const { visitor->Trace(resource_maps_); + visitor->Trace(saved_page_resources_); MemoryCacheDumpClient::Trace(visitor); MemoryPressureListener::Trace(visitor); } @@ -265,6 +270,12 @@ size_t target_size = static_cast<size_t>(size_limit * kCTargetPrunePercentage); + // Release the strong referenced cached objects + // TODO(crbug.com/1409349): Filter page loading metrics when prune happens. + if (base::FeatureList::IsEnabled( + blink::features::kMemoryCacheStrongReference)) { + saved_page_resources_.clear(); + } for (const auto& resource_map_iter : resource_maps_) { for (const auto& resource_iter : *resource_map_iter.value) { Resource* resource = resource_iter.value->GetResource(); @@ -273,11 +284,13 @@ // Check to see if the remaining resources are too new to prune. if (strategy == kAutomaticPrune && prune_frame_time_stamp_.since_origin() < - delay_before_live_decoded_prune_) + delay_before_live_decoded_prune_) { continue; + } resource->Prune(); - if (size_ <= target_size) + if (size_ <= target_size) { return; + } } } } @@ -468,4 +481,30 @@ PruneAll(); } +void MemoryCache::SavePageResourceStrongReferences( + HeapVector<Member<Resource>> resources) { + DCHECK(base::FeatureList::IsEnabled(features::kMemoryCacheStrongReference)); + if (base::FeatureList::IsEnabled( + features::kMemoryCacheStrongReferenceSingleUnload)) { + saved_page_resources_.clear(); + } + base::UmaHistogramCustomCounts(kPageSavedResourceStrongReferenceSize, + resources.size(), 0, 200, 50); + saved_page_token_++; + saved_page_resources_.insert( + saved_page_token_, + MakeGarbageCollected<HeapVector<Member<Resource>>>(std::move(resources))); + task_runner_->PostDelayedTask( + FROM_HERE, + base::BindOnce(&MemoryCache::RemovePageResourceStrongReference, + WrapWeakPersistent(this), saved_page_token_), + kCUnloadPageResourceSaveTime); +} + +void MemoryCache::RemovePageResourceStrongReference(uint32_t saved_page_token) { + DCHECK(base::FeatureList::IsEnabled(features::kMemoryCacheStrongReference)); + + saved_page_resources_.erase(saved_page_token); +} + } // namespace blink
diff --git a/third_party/blink/renderer/platform/loader/fetch/memory_cache.h b/third_party/blink/renderer/platform/loader/fetch/memory_cache.h index 6b7c4b8..a363cb6 100644 --- a/third_party/blink/renderer/platform/loader/fetch/memory_cache.h +++ b/third_party/blink/renderer/platform/loader/fetch/memory_cache.h
@@ -157,6 +157,11 @@ void UpdateFramePaintTimestamp(); + // Called by the loader to notify that a new page is being loaded. + // The strong references the memory cache is holding for the current page + // will be moved to the previous generation. + void SavePageResourceStrongReferences(HeapVector<Member<Resource>> resources); + // Take memory usage snapshot for tracing. bool OnMemoryDump(WebMemoryDumpLevelOfDetail, WebProcessMemoryDump*) override; @@ -186,8 +191,10 @@ void PruneResources(PruneStrategy); void PruneNow(PruneStrategy); - bool in_prune_resources_; - bool prune_pending_; + void RemovePageResourceStrongReference(uint32_t saved_page_token); + + bool in_prune_resources_ = false; + bool prune_pending_ = false; base::TimeDelta max_prune_deferral_delay_; base::TimeTicks prune_time_stamp_; base::TimeTicks prune_frame_time_stamp_; @@ -200,9 +207,17 @@ // The number of bytes currently consumed by resources in the cache. size_t size_; + // The size of strong reference to resources is not limited. + // The strong references will be removed when memory pressure is signaled. + HeapHashMap<uint32_t, Member<HeapVector<Member<Resource>>>> + saved_page_resources_; + uint32_t saved_page_token_ = 0; + scoped_refptr<base::SingleThreadTaskRunner> task_runner_; friend class MemoryCacheTest; + FRIEND_TEST_ALL_PREFIXES(MemoryCacheStrongReferenceTest, ResourceTimeout); + FRIEND_TEST_ALL_PREFIXES(MemoryCacheStrongReferenceTest, SaveSinglePage); }; // Sets the global cache, used to swap in a test instance. Returns the old
diff --git a/third_party/blink/renderer/platform/loader/fetch/memory_cache_test.cc b/third_party/blink/renderer/platform/loader/fetch/memory_cache_test.cc index 8a8315f..7101605 100644 --- a/third_party/blink/renderer/platform/loader/fetch/memory_cache_test.cc +++ b/third_party/blink/renderer/platform/loader/fetch/memory_cache_test.cc
@@ -30,8 +30,10 @@ #include "third_party/blink/renderer/platform/loader/fetch/memory_cache.h" +#include "base/test/scoped_feature_list.h" #include "base/test/task_environment.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/blink/public/common/features.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/heap/thread_state.h" @@ -436,4 +438,63 @@ EXPECT_FALSE(MemoryCache::Get()->Contains(resource2)); } +class MemoryCacheStrongReferenceTest + : public MemoryCacheTest, + public testing::WithParamInterface<bool> { + public: + void SetUp() override { + std::vector<base::test::FeatureRef> enable_features = { + features::kMemoryCacheStrongReference + }; + if (GetParam()) { + enable_features.push_back(features::kMemoryCacheStrongReferenceSingleUnload); + } + scoped_feature_list_.InitWithFeatures(enable_features, {}); + MemoryCacheTest::SetUp(); + } + + private: + base::test::ScopedFeatureList scoped_feature_list_; +}; + +INSTANTIATE_TEST_SUITE_P(MemoryCacheStrongReferenceTest, + MemoryCacheStrongReferenceTest, + testing::Bool()); + +TEST_P(MemoryCacheStrongReferenceTest, ResourceTimeout) { + const KURL url = KURL("http://test/resource1"); + Member<FakeResource> resource = + MakeGarbageCollected<FakeResource>(url, ResourceType::kRaw); + + ASSERT_EQ(MemoryCache::Get()->saved_page_resources_.size(), 0u); + MemoryCache::Get()->SavePageResourceStrongReferences( + HeapVector<Member<Resource>>{resource}); + ASSERT_EQ(MemoryCache::Get()->saved_page_resources_.size(), 1u); + platform_->test_task_runner()->FastForwardBy(base::Minutes(5) + + base::Seconds(1)); + ASSERT_EQ(MemoryCache::Get()->saved_page_resources_.size(), 0u); +} + +TEST_P(MemoryCacheStrongReferenceTest, SaveSinglePage) { + const KURL url1 = KURL("http://test/resource1"); + const KURL url2 = KURL("http://test/resource1"); + Member<FakeResource> resource1 = + MakeGarbageCollected<FakeResource>(url1, ResourceType::kRaw); + Member<FakeResource> resource2 = + MakeGarbageCollected<FakeResource>(url2, ResourceType::kRaw); + + MemoryCache::Get()->SavePageResourceStrongReferences( + HeapVector<Member<Resource>>{resource1}); + ASSERT_EQ(MemoryCache::Get()->saved_page_resources_.size(), 1u); + + MemoryCache::Get()->SavePageResourceStrongReferences( + HeapVector<Member<Resource>>{resource2}); + if (base::FeatureList::IsEnabled( + features::kMemoryCacheStrongReferenceSingleUnload)) { + ASSERT_EQ(MemoryCache::Get()->saved_page_resources_.size(), 1u); + } else { + ASSERT_EQ(MemoryCache::Get()->saved_page_resources_.size(), 2u); + } +} + } // namespace blink
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource.cc b/third_party/blink/renderer/platform/loader/fetch/resource.cc index b72f0f5..8207141 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource.cc +++ b/third_party/blink/renderer/platform/loader/fetch/resource.cc
@@ -438,6 +438,17 @@ return base::TimeDelta(); } +base::TimeDelta Resource::FreshnessLifetime() const { + base::TimeDelta lifetime = + blink::FreshnessLifetime(GetResponse(), response_timestamp_); + for (const auto& redirect : redirect_chain_) { + base::TimeDelta redirect_lifetime = blink::FreshnessLifetime( + redirect.redirect_response_, response_timestamp_); + lifetime = std::min(lifetime, redirect_lifetime); + } + return lifetime; +} + static bool CanUseResponse(const ResourceResponse& response, bool allow_stale, base::Time response_timestamp) {
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource.h b/third_party/blink/renderer/platform/loader/fetch/resource.h index e9f5d5c9..711f1cb 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource.h +++ b/third_party/blink/renderer/platform/loader/fetch/resource.h
@@ -301,6 +301,7 @@ bool MustRevalidateDueToCacheHeaders(bool allow_stale) const; bool ShouldRevalidateStaleResponse() const; virtual bool CanUseCacheValidator() const; + base::TimeDelta FreshnessLifetime() const; bool IsCacheValidator() const { return is_revalidating_; } bool HasCacheControlNoStoreHeader() const; bool MustReloadDueToVaryHeader(const ResourceRequest& new_request) const;
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc index ee083e5..430bab3 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc +++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc
@@ -186,6 +186,31 @@ !IsRawResource(*resource); } +bool ShouldResourceBeKeptStrongReferenceByType(Resource* resource) { + // Image, fonts, stylesheets and scripts are the most commonly reused scripts. + return (resource->GetType() == ResourceType::kImage || + resource->GetType() == ResourceType::kFont || + resource->GetType() == ResourceType::kCSSStyleSheet || + resource->GetType() == ResourceType::kScript); +} + +bool ShouldResourceBeKeptStrongReference(Resource* resource) { + return IsMainThread() && resource->IsLoaded() && + resource->GetResourceRequest().HttpMethod() == http_names::kGET && + resource->Options().data_buffering_policy != kDoNotBufferData && + ShouldResourceBeKeptStrongReferenceByType(resource) && + !resource->GetResponse().CacheControlContainsNoCache() && + !resource->GetResponse().CacheControlContainsNoStore(); +} + +base::TimeDelta GetResourceStrongReferenceTimeout(Resource* resource) { + base::TimeDelta lifetime = resource->FreshnessLifetime(); + if (resource->GetResponse().ResponseTime() + lifetime < base::Time::Now()) { + return base::TimeDelta(); + } + return resource->GetResponse().ResponseTime() + lifetime - base::Time::Now(); +} + static ResourceFetcher::ResourceFetcherSet& MainThreadFetchersSet() { DEFINE_STATIC_LOCAL( Persistent<ResourceFetcher::ResourceFetcherSet>, fetchers, @@ -586,8 +611,12 @@ image_fetched_(false) { InstanceCounters::IncrementCounter(InstanceCounters::kResourceFetcherCounter); - if (IsMainThread()) + if (IsMainThread()) { MainThreadFetchersSet().insert(this); + if (MemoryPressureListenerRegistry::IsLowEndDevice()) { + MemoryPressureListenerRegistry::Instance().RegisterClient(this); + } + } } ResourceFetcher::~ResourceFetcher() { @@ -1274,6 +1303,7 @@ String resource_url = MemoryCache::RemoveFragmentIdentifierIfNeeded(params.Url()); cached_resources_map_.Set(resource_url, resource); + MaybeSaveResourceToStrongReference(resource); if (PriorityObserverMapCreated() && PriorityObservers()->Contains(resource_url)) { // Resolve the promise. @@ -1325,6 +1355,10 @@ return resource; } +void ResourceFetcher::RemoveImageStrongReference(Resource* image_resource) { + document_resource_strong_refs_.erase(image_resource); +} + void ResourceFetcher::ResourceTimingReportTimerFired(TimerBase* timer) { DCHECK_EQ(timer, &resource_timing_report_timer_); Vector<ScheduledResourceTimingInfo> timing_reports; @@ -2137,6 +2171,7 @@ resource->GetResponse().DecodedBodyLength(), should_report_corb_blocking); } + MaybeSaveResourceToStrongReference(resource); } void ResourceFetcher::HandleLoaderError(Resource* resource, @@ -2622,6 +2657,27 @@ } } +void ResourceFetcher::MaybeSaveResourceToStrongReference(Resource* resource) { + if (base::FeatureList::IsEnabled(features::kMemoryCacheStrongReference) && + ShouldResourceBeKeptStrongReference(resource)) { + if (resource->GetType() != ResourceType::kImage || + !base::FeatureList::IsEnabled( + features::kMemoryCacheStrongReferenceFilterImages)) { + document_resource_strong_refs_.insert(resource); + freezable_task_runner_->PostDelayedTask( + FROM_HERE, + WTF::BindOnce(&ResourceFetcher::RemoveImageStrongReference, + WrapWeakPersistent(this), WrapWeakPersistent(resource)), + GetResourceStrongReferenceTimeout(resource)); + } + } +} + +void ResourceFetcher::OnMemoryPressure( + base::MemoryPressureListener::MemoryPressureLevel level) { + document_resource_strong_refs_.clear(); +} + void ResourceFetcher::Trace(Visitor* visitor) const { visitor->Trace(context_); visitor->Trace(properties_); @@ -2643,6 +2699,8 @@ visitor->Trace(resource_timing_info_map_); visitor->Trace(blob_registry_remote_); visitor->Trace(subresource_web_bundles_); + visitor->Trace(document_resource_strong_refs_); + MemoryPressureListener::Trace(visitor); } // static
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h index aa55a87f..9f767a8 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h +++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h
@@ -92,7 +92,8 @@ // keep a ResourceFetcher alive past detach if scripts still reference the // Document. class PLATFORM_EXPORT ResourceFetcher - : public GarbageCollected<ResourceFetcher> { + : public GarbageCollected<ResourceFetcher>, + public MemoryPressureListener { USING_PRE_FINALIZER(ResourceFetcher, ClearPreloads); public: @@ -122,8 +123,8 @@ explicit ResourceFetcher(const ResourceFetcherInit&); ResourceFetcher(const ResourceFetcher&) = delete; ResourceFetcher& operator=(const ResourceFetcher&) = delete; - virtual ~ResourceFetcher(); - virtual void Trace(Visitor*) const; + ~ResourceFetcher() override; + void Trace(Visitor*) const override; // - This function returns the same object throughout this fetcher's // entire life. @@ -185,6 +186,10 @@ return cached_resources_map_; } + const HeapHashSet<Member<Resource>> MoveResourceStrongReferences() { + return std::move(document_resource_strong_refs_); + } + enum class ImageLoadBlockingPolicy { kDefault, kForceNonBlockingLoad, @@ -339,6 +344,9 @@ void CancelWebBundleSubresourceLoadersFor( const base::UnguessableToken& web_bundle_token); + void OnMemoryPressure( + base::MemoryPressureListener::MemoryPressureLevel) override; + private: friend class ResourceCacheValidationSuppressor; enum class StopFetchingTarget { @@ -399,6 +407,8 @@ void StopFetchingInternal(StopFetchingTarget); void StopFetchingIncludingKeepaliveLoaders(); + void MaybeSaveResourceToStrongReference(Resource* resource); + enum class RevalidationPolicy { kUse, kRevalidate, @@ -482,6 +492,8 @@ void WarnUnusedPreloads(); + void RemoveImageStrongReference(Resource* image_resource); + // Information about a resource fetch that had started but not completed yet. // Would be added to the response data when the response arrives. struct PendingResourceTimingInfo { @@ -519,8 +531,13 @@ const Member<ResourceLoadScheduler> scheduler_; Member<BackForwardCacheLoaderHelper> back_forward_cache_loader_helper_; + // Weak reference to all the fetched resources. DocumentResourceMap cached_resources_map_; + // document_resource_strong_refs_ keeps strong references for fonts, images, + // scripts and stylesheets within their freshness lifetime. + HeapHashSet<Member<Resource>> document_resource_strong_refs_; + // |image_resources_| is the subset of all image resources for the document. HeapHashSet<WeakMember<Resource>> image_resources_;
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_test.cc b/third_party/blink/renderer/platform/loader/fetch/resource_test.cc index 1cfcaa4..225b3e95 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_test.cc +++ b/third_party/blink/renderer/platform/loader/fetch/resource_test.cc
@@ -433,6 +433,36 @@ EXPECT_TRUE(resource->StaleRevalidationRequested()); } +TEST_F(ResourceTest, FreshnessLifetime) { + const KURL url("http://127.0.0.1:8000/foo.html"); + const KURL redirect_target_url("http://127.0.0.1:8000/food.html"); + ResourceResponse response(url); + response.SetHttpHeaderField(http_names::kCacheControl, "max-age=50"); + response.SetHttpStatusCode(200); + + auto* resource = MakeGarbageCollected<MockResource>(url); + resource->ResponseReceived(response); + resource->FinishForTest(); + EXPECT_EQ(resource->FreshnessLifetime(), base::Seconds(50)); + + // The revalidating request is redirected. + ResourceResponse redirect_response(url); + redirect_response.SetHttpHeaderField( + "location", AtomicString(redirect_target_url.GetString())); + redirect_response.SetHttpStatusCode(302); + redirect_response.SetHttpHeaderField(http_names::kCacheControl, "max-age=10"); + redirect_response.SetAsyncRevalidationRequested(true); + ResourceRequest redirected_revalidating_request(redirect_target_url); + + auto* resource_redirected = MakeGarbageCollected<MockResource>(url); + resource_redirected->WillFollowRedirect(redirected_revalidating_request, + redirect_response); + resource_redirected->ResponseReceived(response); + resource_redirected->FinishForTest(); + + EXPECT_EQ(resource_redirected->FreshnessLifetime(), base::Seconds(10)); +} + // This is a regression test for https://crbug.com/1062837. TEST_F(ResourceTest, DefaultOverheadSize) { const KURL url("http://127.0.0.1:8000/foo.html");
diff --git a/third_party/blink/renderer/platform/peerconnection/video_codec_factory.cc b/third_party/blink/renderer/platform/peerconnection/video_codec_factory.cc index 498188f9..5e56b9d 100644 --- a/third_party/blink/renderer/platform/peerconnection/video_codec_factory.cc +++ b/third_party/blink/renderer/platform/peerconnection/video_codec_factory.cc
@@ -18,7 +18,6 @@ #include "third_party/webrtc/api/video_codecs/video_decoder_software_fallback_wrapper.h" #include "third_party/webrtc/api/video_codecs/video_encoder_software_fallback_wrapper.h" #include "third_party/webrtc/media/base/codec.h" -#include "third_party/webrtc/media/engine/encoder_simulcast_proxy.h" #include "third_party/webrtc/media/engine/internal_decoder_factory.h" #include "third_party/webrtc/media/engine/internal_encoder_factory.h" #include "third_party/webrtc/media/engine/simulcast_encoder_adapter.h" @@ -31,10 +30,6 @@ namespace blink { namespace { -// Kill switch to disable WebRTC Media Capabilities stats collection. -BASE_FEATURE(kWebrtcMediaCapabilitiesStatsCollection, - "WebrtcMediaCapabilitiesStatsCollection", - base::FEATURE_ENABLED_BY_DEFAULT); template <typename Factory> bool IsFormatSupported(const Factory* factory, @@ -73,17 +68,6 @@ : std::move(software_decoder); } -std::unique_ptr<webrtc::VideoEncoder> Wrap( - std::unique_ptr<webrtc::VideoEncoder> software_encoder, - std::unique_ptr<webrtc::VideoEncoder> hardware_encoder) { - if (software_encoder && hardware_encoder) { - return webrtc::CreateVideoEncoderSoftwareFallbackWrapper( - std::move(software_encoder), std::move(hardware_encoder)); - } - return hardware_encoder ? std::move(hardware_encoder) - : std::move(software_encoder); -} - // This class combines a hardware factory with the internal factory and adds // internal SW codecs, simulcast, and SW fallback wrappers. class EncoderAdapter : public webrtc::VideoEncoderFactory { @@ -120,41 +104,19 @@ if (!supported_in_software && !supported_in_hardware) return nullptr; - std::unique_ptr<webrtc::VideoEncoder> encoder; - if (base::EqualsCaseInsensitiveASCII(format.name.c_str(), - cricket::kVp9CodecName) || - base::EqualsCaseInsensitiveASCII(format.name.c_str(), - cricket::kAv1CodecName)) { - // For VP9 and AV1 we don't use simulcast. - std::unique_ptr<webrtc::VideoEncoder> software_encoder = - supported_in_software - ? software_encoder_factory_.CreateVideoEncoder(format) - : nullptr; - std::unique_ptr<webrtc::VideoEncoder> hardware_encoder = - supported_in_hardware - ? hardware_encoder_factory_->CreateVideoEncoder(format) - : nullptr; + VideoEncoderFactory* primary_factory = supported_in_hardware + ? hardware_encoder_factory_.get() + : &software_encoder_factory_; + VideoEncoderFactory* fallback_factory = + supported_in_hardware && supported_in_software + ? &software_encoder_factory_ + : nullptr; + std::unique_ptr<webrtc::VideoEncoder> encoder = + std::make_unique<webrtc::SimulcastEncoderAdapter>( + primary_factory, fallback_factory, format); - encoder = Wrap(std::move(software_encoder), std::move(hardware_encoder)); - } else { - VideoEncoderFactory* primary_factory = - supported_in_hardware ? hardware_encoder_factory_.get() - : &software_encoder_factory_; - VideoEncoderFactory* fallback_factory = - supported_in_hardware && supported_in_software - ? &software_encoder_factory_ - : nullptr; - encoder = std::make_unique<webrtc::SimulcastEncoderAdapter>( - primary_factory, fallback_factory, format); - } - - if (encoder && - base::FeatureList::IsEnabled(kWebrtcMediaCapabilitiesStatsCollection)) { - return std::make_unique<StatsCollectingEncoder>( - format, std::move(encoder), stats_callback_); - } else { - return encoder; - } + return std::make_unique<StatsCollectingEncoder>(format, std::move(encoder), + stats_callback_); } std::vector<webrtc::SdpVideoFormat> GetSupportedFormats() const override { @@ -208,14 +170,9 @@ if (!software_decoder && !hardware_decoder) return nullptr; - if (base::FeatureList::IsEnabled(kWebrtcMediaCapabilitiesStatsCollection)) { - return std::make_unique<StatsCollectingDecoder>( - format, - Wrap(std::move(software_decoder), std::move(hardware_decoder)), - stats_callback_); - } else { - return Wrap(std::move(software_decoder), std::move(hardware_decoder)); - } + return std::make_unique<StatsCollectingDecoder>( + format, Wrap(std::move(software_decoder), std::move(hardware_decoder)), + stats_callback_); } std::vector<webrtc::SdpVideoFormat> GetSupportedFormats() const override {
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index 4f9a550..c307378d 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -877,7 +877,7 @@ }, { name: "CSSLinearTimingFunction", - status: "experimental" + status: "stable" }, { name: "CSSLogical", @@ -962,7 +962,7 @@ }, { name: "CSSOverflowMediaFeatures", - status: "experimental", + status: "stable", }, { name: "CSSPaintAPIArguments", @@ -1104,7 +1104,7 @@ }, { name: "CSSUpdateMediaFeature", - status: "experimental", + status: "stable", }, // Support for `user-select:contain`. {
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 60d48d3..d7396e3 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -2902,13 +2902,6 @@ # unblock roll wpt crbug.com/626703 external/wpt/service-workers/service-worker/worker-interception.https.html [ Failure ] -# Renaming a DevTools tab requires a 3-way change -crbug.com/1423684 http/tests/devtools/application-panel/resources-panel-iframe-idb.js [ Failure Pass ] -crbug.com/1423684 http/tests/devtools/application-panel/resources-panel-on-navigation.js [ Failure Pass ] -crbug.com/1423684 http/tests/devtools/application-panel/resources-panel-resource-preview.js [ Failure Pass ] -crbug.com/1423684 http/tests/devtools/application-panel/resources-panel-selection-on-reload.js [ Failure Pass ] -crbug.com/1423684 http/tests/devtools/application-panel/resources-panel-websql.js [ Failure Pass ] - # ====== Test expectations added to unblock wpt-importer ====== crbug.com/626703 external/wpt/fetch/metadata/generated/worker-dedicated-constructor.sub.html [ Failure ] crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/fetch/metadata/generated/worker-dedicated-constructor.sub.html [ Failure ] @@ -2924,6 +2917,8 @@ crbug.com/626703 [ Win ] virtual/partitioned-cookies/http/tests/inspector-protocol/network/disabled-cache-navigation.js [ Failure ] # ====== New tests from wpt-importer added here ====== +crbug.com/626703 external/wpt/css/css-writing-modes/forms/range-input-appearance-native-vertical-rtl.optional.html [ Failure ] +crbug.com/626703 external/wpt/css/css-writing-modes/forms/range-input-appearance-none-vertical-rtl.optional.html [ Failure ] crbug.com/626703 [ Linux ] external/wpt/long-animation-frame/tentative/loaf-script-block.html [ Skip Timeout ] crbug.com/626703 [ Win10.20h2 ] external/wpt/long-animation-frame/tentative/loaf-script-block.html [ Skip Timeout ] crbug.com/626703 [ Linux ] virtual/lna-allow-potentially-trustworthy-same-origin/external/wpt/fetch/local-network-access/iframe.tentative.https.window.html [ Timeout ] @@ -2932,10 +2927,6 @@ crbug.com/626703 [ Mac12 ] virtual/lna-permission/external/wpt/fetch/local-network-access/iframe.tentative.https.window.html [ Timeout ] crbug.com/626703 [ Linux ] virtual/lna-workers-disabled/external/wpt/fetch/local-network-access/iframe.tentative.https.window.html [ Timeout ] crbug.com/626703 [ Mac12 ] virtual/lna-workers-disabled/external/wpt/fetch/local-network-access/iframe.tentative.https.window.html [ Timeout ] -crbug.com/626703 [ Linux ] virtual/threaded/external/wpt/long-animation-frame/tentative/loaf-script-block.html [ Skip Timeout ] -crbug.com/626703 [ Mac11-arm64 ] virtual/threaded/external/wpt/long-animation-frame/tentative/loaf-script-block.html [ Skip Timeout ] -crbug.com/626703 [ Mac12-arm64 ] virtual/threaded/external/wpt/long-animation-frame/tentative/loaf-script-block.html [ Skip Timeout ] -crbug.com/626703 [ Mac13 ] virtual/threaded/external/wpt/long-animation-frame/tentative/loaf-script-block.html [ Skip Timeout ] crbug.com/626703 [ Mac13 ] external/wpt/html/semantics/links/hyperlink-auditing/headers.optional.html [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/font-access/font_access_sorted.tentative.https.window.html [ Timeout ] crbug.com/626703 [ Mac11 ] external/wpt/font-access/font_access_sorted.tentative.https.window.html [ Timeout ] @@ -2977,7 +2968,6 @@ crbug.com/626703 [ Linux ] virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/source-registration.sub.https.html?method=open&eligible [ Failure Timeout ] crbug.com/626703 [ Mac12 ] virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/source-registration.sub.https.html?method=open&eligible [ Failure Timeout ] crbug.com/626703 external/wpt/html/semantics/interactive-elements/the-dialog-element/modal-dialog-backdrop-opacity.html [ Failure ] -crbug.com/626703 external/wpt/css/css-backgrounds/background-clip/clip-text-multi-line-002.html [ Failure ] crbug.com/626703 virtual/threaded/external/wpt/css/css-backgrounds/background-clip/clip-text-multi-line-002.html [ Failure ] crbug.com/626703 external/wpt/css/css-pseudo/svg-text-selection-002.html [ Failure ] crbug.com/626703 virtual/css-highlight-inheritance/external/wpt/css/css-pseudo/svg-text-selection-002.html [ Failure ] @@ -6892,10 +6882,6 @@ crbug.com/1409713 virtual/view-transition-wide-gamut/external/wpt/css/css-view-transitions/content-with-clip-max-texture-size.html [ Failure ] # Sheriff 2023-03-13 -crbug.com/1422630 external/wpt/long-animation-frame/tentative/loaf-promise.html [ Failure Pass ] -crbug.com/1422630 [ Fuchsia ] external/wpt/long-animation-frame/tentative/loaf-script-block.html [ Failure Pass ] -crbug.com/1422630 [ Mac ] external/wpt/long-animation-frame/tentative/loaf-script-block.html [ Failure Pass Timeout ] -crbug.com/1422630 [ Win11 ] external/wpt/long-animation-frame/tentative/loaf-script-block.html [ Failure Pass ] crbug.com/1422630 external/wpt/long-animation-frame/tentative/loaf-desired-exec-time.html [ Failure Pass Timeout ] # Flaky timeout on mac.
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 7d2bf89..023f01b3 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
@@ -76065,21 +76065,8 @@ {} ] ], - "clip-text-multi-line-002.html": [ - "ff34ca0aaa681db5ef33cf0371194c6cc462f37c", - [ - null, - [ - [ - "/css/css-backgrounds/background-clip/clip-text-multi-line-002-ref.html", - "==" - ] - ], - {} - ] - ], "clip-text-multi-line.html": [ - "cd51b2ea0779e2a3cf7807f7f0eee5cb6a938acc", + "e85a4f974bdea7063215654f2f1aeb9f12967a36", [ null, [ @@ -86995,6 +86982,97 @@ {} ] ], + "multi-line-row-flex-fragmentation-065.html": [ + "10ae8ca41d7d1bb68b9ad3d2f1b400f61c8e2238", + [ + null, + [ + [ + "/css/css-break/flexbox/multi-line-row-flex-fragmentation-065-ref.html", + "==" + ] + ], + {} + ] + ], + "multi-line-row-flex-fragmentation-066.html": [ + "b4c7fcd12f33f94cb22747e192b4d53f06dd3bb8", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "multi-line-row-flex-fragmentation-067.html": [ + "797089cabed144bc46ff8317cf0931c6beeb3143", + [ + null, + [ + [ + "/css/css-break/flexbox/multi-line-row-flex-fragmentation-067-ref.html", + "==" + ] + ], + {} + ] + ], + "multi-line-row-flex-fragmentation-068.html": [ + "809f0c9a3a43436924ba81bb742b2d4d41b5bbe2", + [ + null, + [ + [ + "/css/css-break/flexbox/multi-line-row-flex-fragmentation-068-ref.html", + "==" + ] + ], + {} + ] + ], + "multi-line-row-flex-fragmentation-069.html": [ + "3c3ee17bb48762489bf1328400b1c2b8b1de7d65", + [ + null, + [ + [ + "/css/css-break/flexbox/multi-line-row-flex-fragmentation-069-ref.html", + "==" + ] + ], + {} + ] + ], + "multi-line-row-flex-fragmentation-070.html": [ + "ea301c33b20e26969e69a294af293031ff90c9b2", + [ + null, + [ + [ + "/css/css-break/flexbox/multi-line-row-flex-fragmentation-070-ref.html", + "==" + ] + ], + {} + ] + ], + "multi-line-row-flex-fragmentation-071.html": [ + "4a855f7fcec8bef0a04520131cc0d56a6f5f2ebe", + [ + null, + [ + [ + "/css/css-break/flexbox/multi-line-row-flex-fragmentation-071-ref.html", + "==" + ] + ], + {} + ] + ], "nested-flex-item-expansion-in-mulicol.html": [ "56aa3ec5c26878e4b12be7fe09e2700021e6b19c", [ @@ -231566,7 +231644,7 @@ ] ], "range-input-appearance-native-vertical-rtl.optional.html": [ - "74b24b56af9afc4f8b0ef02e67952783b921bd0c", + "095ca96ea580b0dfed5a130f5edc7cdd0d87eb01", [ null, [ @@ -231577,6 +231655,10 @@ [ "/css/css-writing-modes/forms/range-input-appearance-none-vertical.optional.html", "!=" + ], + [ + "/css/css-writing-modes/forms/range-input-appearance-native-horizontal-rtl.optional.html", + "!=" ] ], {} @@ -231634,7 +231716,7 @@ ] ], "range-input-appearance-none-vertical-rtl.optional.html": [ - "a4696e40c97d680fe10cfd7efbae2717df0aaa3a", + "527038ea84ae338da79c3b4b6be548973cf7b545", [ null, [ @@ -231645,6 +231727,10 @@ [ "/css/css-writing-modes/forms/range-input-appearance-native-vertical.optional.html", "!=" + ], + [ + "/css/css-writing-modes/forms/range-input-appearance-none-horizontal-rtl.optional.html", + "!=" ] ], {} @@ -242304,6 +242390,19 @@ {} ] ], + "nth-child-of-class-prefix.html": [ + "ac7757db3eb03bbc11e01911d857baca63b1b4a8", + [ + null, + [ + [ + "/css/selectors/invalidation/nth-child-of-class-ref.html", + "==" + ] + ], + {} + ] + ], "nth-child-of-class.html": [ "dc1e8cec82ed334d75c51351775fa001b3cddb4e", [ @@ -242330,6 +242429,32 @@ {} ] ], + "nth-child-of-id-prefix.html": [ + "fadb8f38514e1cf2c143a5bdd586687a28c64537", + [ + null, + [ + [ + "/css/selectors/invalidation/nth-child-of-class-ref.html", + "==" + ] + ], + {} + ] + ], + "nth-child-of-ids.html": [ + "033205283c46d43bc1f6f7f8f3dd79991e1a8b82", + [ + null, + [ + [ + "/css/selectors/invalidation/nth-child-of-class-ref.html", + "==" + ] + ], + {} + ] + ], "nth-child-of-in-ancestor.html": [ "7311c3e301155620b05cde7ffecd9d829d20618a", [ @@ -242343,6 +242468,19 @@ {} ] ], + "nth-child-of-in-is.html": [ + "31276e6ef9eb0bf9990d548d576ab30b82b14e48", + [ + null, + [ + [ + "/css/selectors/invalidation/nth-child-of-class-ref.html", + "==" + ] + ], + {} + ] + ], "nth-child-of-in-shadow-root.html": [ "1e949a3bd0e991d97d3ae87fc7420c81047477e6", [ @@ -242356,6 +242494,32 @@ {} ] ], + "nth-child-of-is.html": [ + "e230a30d177627139a327f09f93c3e66319f5fc8", + [ + null, + [ + [ + "/css/selectors/invalidation/nth-child-of-class-ref.html", + "==" + ] + ], + {} + ] + ], + "nth-child-of-pseudo-class.html": [ + "2a0b071b93b05cbea5e67fad3d8dcd1ba35ed020", + [ + null, + [ + [ + "/css/selectors/invalidation/nth-child-of-pseudo-class-ref.html", + "==" + ] + ], + {} + ] + ], "nth-child-of-sibling.html": [ "5beaad6a58108dde8607e9940c4fb017e4056ab2", [ @@ -242434,6 +242598,19 @@ {} ] ], + "nth-last-child-of-class-prefix.html": [ + "f9fc196c2136e600e84c0116aa58ffa3938ea316", + [ + null, + [ + [ + "/css/selectors/invalidation/nth-last-child-of-class-ref.html", + "==" + ] + ], + {} + ] + ], "nth-last-child-of-class.html": [ "2026796bb927c48782946fbf3e0d215d9e343534", [ @@ -242460,6 +242637,32 @@ {} ] ], + "nth-last-child-of-id-prefix.html": [ + "1a9e6a9aa319b6d690771e1b9fae96fa3db9bb37", + [ + null, + [ + [ + "/css/selectors/invalidation/nth-last-child-of-class-ref.html", + "==" + ] + ], + {} + ] + ], + "nth-last-child-of-ids.html": [ + "cd682ed5fb547b2238b1eaa591b67d103f60999b", + [ + null, + [ + [ + "/css/selectors/invalidation/nth-last-child-of-class-ref.html", + "==" + ] + ], + {} + ] + ], "nth-last-child-of-in-ancestor.html": [ "b4e0e6f4f6bec9584a7469d04266899f859e56ca", [ @@ -242473,6 +242676,19 @@ {} ] ], + "nth-last-child-of-in-is.html": [ + "90c8860c87f5028cf5f5cea5988dd66cc6ef147d", + [ + null, + [ + [ + "/css/selectors/invalidation/nth-last-child-of-class-ref.html", + "==" + ] + ], + {} + ] + ], "nth-last-child-of-in-shadow-root.html": [ "d403111785723ce4e96d4273c224a8d9d5e7b108", [ @@ -242486,6 +242702,32 @@ {} ] ], + "nth-last-child-of-is.html": [ + "ac1ec316c74c8bea13f668804c290e7a1548f91f", + [ + null, + [ + [ + "/css/selectors/invalidation/nth-last-child-of-class-ref.html", + "==" + ] + ], + {} + ] + ], + "nth-last-child-of-pseudo-class.html": [ + "1907532065c39af008a9294d5484a5ff513eaf06", + [ + null, + [ + [ + "/css/selectors/invalidation/nth-last-child-of-pseudo-class-ref.html", + "==" + ] + ], + {} + ] + ], "nth-last-child-of-sibling.html": [ "b7b9bd70ab8e3f3a2c95613709d26e501e5671aa", [ @@ -265785,6 +266027,16 @@ } }, "support": { + ".cache": { + "gitignore2.json": [ + "e2b379f293f03e2d883232d486b9dede9cebb117", + [] + ], + "mtime.json": [ + "e5e170b237f002c898a0e2e3adda01f990ed3368", + [] + ] + }, ".gitignore": [ "d93e645d547894b50149d3726de2654957b6e06f", [] @@ -265852,7 +266104,7 @@ [] ], "cross-partition.tentative.https.html.ini": [ - "2762f14cb4894c5bd7f7ec8ba06bc2795afcbf8b", + "eb7eb82c1ad85fcff850c80bf9f81a55b8b7d523", [] ], "support": { @@ -265888,7 +266140,7 @@ [] ], "Blob-stream.any.js.ini": [ - "78f50edbbb2ed63068ab2e008dfe1c0d237d30eb", + "39510c308130cc24b70a181f0ace30a262403e39", [] ], "Blob-stream.any.worker-expected.txt": [ @@ -265930,7 +266182,7 @@ [] ], "filereader_events.any.js.ini": [ - "36bd2f9e2e51cff3211aa338f584811db6b5a5a1", + "eac4a462136061f0edde2324eb79cf91c2f19209", [] ], "filereader_events.any.worker-expected.txt": [ @@ -266014,7 +266266,7 @@ [] ], "sandboxed-iframe.html.ini": [ - "19732b3c16a8f3a47c2cae40cc2e2f8b74b74d8b", + "be63ebf737645efb9e25e1f51d187ac063f81d0b", [] ], "url-lifetime.html.ini": [ @@ -266061,7 +266313,7 @@ [] ], "idbobjectstore_batchGetAll_largeValue.tentative.any.js.ini": [ - "f6a390770ddd21589be83393a773882b27f9c683", + "534d44774aa3e03be6014b7ba91a3d3c14130344", [] ], "resources": { @@ -266150,7 +266402,7 @@ [] ], "cfrg_curves_bits.https.any.js.ini": [ - "0559b4b9098af7f9cd5783b7343a33144fa2b335", + "06d87a2a665c6fc20430f9899019f7647e9ba092", [] ], "cfrg_curves_bits.https.any.worker-expected.txt": [ @@ -266166,7 +266418,7 @@ [] ], "cfrg_curves_keys.https.any.js.ini": [ - "2389e8690535bc0ad69cfd2719dfef22de5cfc45", + "cf546032303897fc6117d44d5641fd838a39a56e", [] ], "cfrg_curves_keys.https.any.worker-expected.txt": [ @@ -266182,7 +266434,7 @@ [] ], "ecdh_bits.https.any.js.ini": [ - "05e685c79c0a3547383790270f756e7a847910b3", + "eef087a80656abeb8ef2be82bfcb0ecd71f82e52", [] ], "ecdh_bits.https.any.worker-expected.txt": [ @@ -266202,7 +266454,7 @@ [] ], "hkdf.https.any.js.ini": [ - "27737981628f7071a9dfce4b3214c7743fa07752", + "7b03b66ba1e4dcffcfee8ee351661418b2beee49", [] ], "hkdf.https.any.worker_1-1000-expected.txt": [ @@ -266250,7 +266502,7 @@ [] ], "pbkdf2.https.any.js.ini": [ - "d3022377616f917fcbf4285e97ba77d8c3677bce", + "69d6a2cf43616bf950bd7ca50a86c4b0d01fa0e1", [] ], "pbkdf2.https.any.worker_1-1000-expected.txt": [ @@ -266348,7 +266600,7 @@ [] ], "aes_cbc.https.any.js.ini": [ - "cdbe6edc64d858d438a31450f6c0825d366a34ac", + "1300c884eaf5d7828e4d8e347407d5df51726b32", [] ], "aes_cbc.https.any.worker-expected.txt": [ @@ -266368,7 +266620,7 @@ [] ], "aes_ctr.https.any.js.ini": [ - "b3ca1dc6f3bf78df365c59b1849ab5430a0c116f", + "6f7ae4f5178bf2c3ba6d41e028189fa6ed9437f6", [] ], "aes_ctr.https.any.worker-expected.txt": [ @@ -266502,7 +266754,7 @@ [] ], "failures_AES-KW.https.any.js.ini": [ - "7dc11cada2bca3c232da67f67e0ef77990ca3ad4", + "f4b586b3f29242bf3fab3a1177eca15781a06c00", [] ], "failures_AES-KW.https.any.worker-expected.txt": [ @@ -266518,7 +266770,7 @@ [] ], "failures_Ed448.https.any.js.ini": [ - "803265a92af0a288a5799c4cbac00bb902aaf769", + "83f957f51ced9bc6d3aa7b9b98ef4fab44fca7ea", [] ], "failures_Ed448.https.any.worker-expected.txt": [ @@ -266530,7 +266782,7 @@ [] ], "failures_X25519.https.any.js.ini": [ - "70be00274cbf94c5c005e4451cb281948f0b30a7", + "5a682d8cf88f1b80062d5c47f9ff589231b7a345", [] ], "failures_X25519.https.any.worker-expected.txt": [ @@ -266542,7 +266794,7 @@ [] ], "failures_X448.https.any.js.ini": [ - "1ccf5107b7815244cbbb9b40e3f79563b4d10425", + "3ce79fc0fb076769fc583489443bcb0981e593fc", [] ], "failures_X448.https.any.worker-expected.txt": [ @@ -266558,7 +266810,7 @@ [] ], "successes_AES-CBC.https.any.js.ini": [ - "ecee7dfdedbbc6e34e735ae7f13f22fc6b8416f7", + "57ed3a4bff459adef66511b3cf26efc6bd63b452", [] ], "successes_AES-CBC.https.any.worker-expected.txt": [ @@ -266574,7 +266826,7 @@ [] ], "successes_AES-CTR.https.any.js.ini": [ - "6d09f1bfcf5bd21507c37fb45fe428e9b8cb2dfd", + "6381646c467ac9481bce016c6d270445f8fb4637", [] ], "successes_AES-CTR.https.any.worker-expected.txt": [ @@ -266590,7 +266842,7 @@ [] ], "successes_AES-GCM.https.any.js.ini": [ - "514fbe7697b10f547cd29cab3257c92df0a53950", + "5c50d13a3094f47625440e53f8689aa937df850f", [] ], "successes_AES-GCM.https.any.worker-expected.txt": [ @@ -266606,7 +266858,7 @@ [] ], "successes_AES-KW.https.any.js.ini": [ - "2cf1bebb24ff21579a2adb1926f73fc1ecc7911a", + "5948d11a9fa9aab6febf012f99a276794bd8687c", [] ], "successes_AES-KW.https.any.worker-expected.txt": [ @@ -266622,7 +266874,7 @@ [] ], "successes_Ed448.https.any.js.ini": [ - "79ac3e2c945a940a9abda0abe5f8cad3500d9895", + "3e04bb258c532b892892b3c9ed40c46fad4c8b60", [] ], "successes_Ed448.https.any.worker-expected.txt": [ @@ -266634,7 +266886,7 @@ [] ], "successes_X25519.https.any.js.ini": [ - "20ea2b43fbc5dbb88fb8ab798cc53d0e0617bf29", + "484e0bd080ccc1cd3d0fbf7fd013e3f697d34acd", [] ], "successes_X25519.https.any.worker-expected.txt": [ @@ -266646,7 +266898,7 @@ [] ], "successes_X448.https.any.js.ini": [ - "172e82e1d6b4a56382b98abb0b77900f1d7dd40c", + "62942887beb2f9d4e298f95ae82b0e33b30ada3d", [] ], "successes_X448.https.any.worker-expected.txt": [ @@ -266664,7 +266916,7 @@ [] ], "okp_importKey.https.any.js.ini": [ - "397e70ce5c18c3554f9d5bf931c5085f026d7648", + "43f00a756555e17c24d1a021d8945ab10e79a4ad", [] ], "okp_importKey.https.any.worker-expected.txt": [ @@ -266680,7 +266932,7 @@ [] ], "okp_importKey_failures_Ed448.https.any.js.ini": [ - "ae0230558de402366d7db6eee4a4228f6d0e0847", + "9d28a09729c0d2a12ba78371cbff607262d1f956", [] ], "okp_importKey_failures_Ed448.https.any.worker-expected.txt": [ @@ -266692,7 +266944,7 @@ [] ], "okp_importKey_failures_X25519.https.any.js.ini": [ - "c88fd422cbc308e5ac8d2a8e02eef4b3e177f255", + "337b48891d2276385b4eb47440f4eae6f3eb5006", [] ], "okp_importKey_failures_X25519.https.any.worker-expected.txt": [ @@ -266704,7 +266956,7 @@ [] ], "okp_importKey_failures_X448.https.any.js.ini": [ - "bcd2fb7b3e56eac3e812e02367bfe12206328f78", + "3dc2630adbbeb8949c8f01ae557489368fa854b3", [] ], "okp_importKey_failures_X448.https.any.worker-expected.txt": [ @@ -266716,7 +266968,7 @@ [] ], "symmetric_importKey.https.any.js.ini": [ - "208704a582873abea638c7b3b9467424bc5f6744", + "5758e94cc0648cfc0b8bd3462cf0ecaee0fb9714", [] ], "symmetric_importKey.https.any.worker-expected.txt": [ @@ -266746,7 +266998,7 @@ [] ], "eddsa.https.any.js.ini": [ - "17a638fa95970160bd3b6bc9fee4d5e7ce6327eb", + "81e1feb9810f9f7c62cd2cafef057a6c05151e22", [] ], "eddsa.https.any.worker-expected.txt": [ @@ -267007,7 +267259,7 @@ [] ], "idlharness.any.js.ini": [ - "14fd4312cf40f2258d871e9445573d19eb88063e", + "ffa2e4b43d1cf84188880b580b867e20e49bd965", [] ], "idlharness.any.worker-expected.txt": [ @@ -267019,7 +267271,7 @@ [] ], "playback-rate.https.html.ini": [ - "6cc1e2702190aca88224f2b51bd060b15399ae45", + "95b3d38bfbbf8274b43d12052de9fff87d5482ed", [] ], "references": { @@ -267791,7 +268043,7 @@ [] ], "enumerateDevices-with-selectAudioOutput.https.html.ini": [ - "504e14b7ac65fdfd60f99821921eb5376b571d18", + "71ddba214ae7b2fe2f720ced5b918b1af7361366", [] ], "idlharness.https.window-expected.txt": [ @@ -267799,7 +268051,7 @@ [] ], "idlharness.https.window.js.ini": [ - "08d81777dac3c0fc2cd00c3c0e60c73b46aef908", + "be8177d9f0a5a208880f849523d0128742e24fe4", [] ], "removeTrack-after-setSinkId.https-expected.txt": [ @@ -267815,7 +268067,7 @@ [] ], "secure-context.html.ini": [ - "195c25ae7a687f6f29db667aa08eb21d3ff6ef4a", + "8fca97e407e8e722081a1aa1cf7455cb17beca55", [] ], "selectAudioOutput-permissions-policy.https.sub-expected.txt": [ @@ -267839,7 +268091,7 @@ [] ], "setSinkId-permissions-policy.https.sub.html.ini": [ - "38cfdea6b44d828baa16ef995d90b04f81ddac9f", + "6db9e5fff402074e7a55682bdc6d3187ecb1d323", [] ], "setSinkId-with-selectAudioOutput.https-expected.txt": [ @@ -267865,7 +268117,7 @@ [] ], "autoplaypolicy.html.ini": [ - "ff4943caa982f2368ac7c7a12a800c701255087b", + "06015e90cdd9bf7a1521b8a97a8dfc5f939e7197", [] ], "autoplaypolicy_media_element-expected.txt": [ @@ -267881,7 +268133,7 @@ [] ], "idlharness.window.js.ini": [ - "0328fbe4f07a0cd6287a444f9e0958485c7f74e8", + "b183f401f9e5c5a122d62882308bdc35299966dd", [] ] }, @@ -267913,7 +268165,7 @@ [] ], "abort.https.window.js.ini": [ - "1c66bbc4c88b02af34eec1ba9f5d09c6c0ff40ab", + "20dcf76dbd0dfdd0330a9203e68b244adf575467", [] ], "content-security-policy.https.window-expected.txt": [ @@ -267925,7 +268177,7 @@ [] ], "fetch-uploads.https.window.js.ini": [ - "be8bf018a84f9f5eb13afbdfbf9c9c3894a36a99", + "c138d31be1b2e5a43d96a9675a25b912e97a6218", [] ], "fetch.https.window-expected.txt": [ @@ -267933,11 +268185,11 @@ [] ], "fetch.https.window.js.ini": [ - "6b12244bc100806046385652375f9ca03aef70b0", + "698f4c34fa3be3252651d66e5eae6c78dbcfb7a9", [] ], "match.https.window.js.ini": [ - "5a952e586030c8483f53d88198c6eeca3f53e08a", + "d0294e5a5430e1303d10ae28b308c2704c873634", [] ], "resources": { @@ -267973,7 +268225,7 @@ ] }, "update-ui.https.window.js.ini": [ - "bc4e9933c4f4108ef7aa014f179722f6ed16f038", + "2e9acdeeae61cb07313c1a91b62219eea88f9692", [] ] }, @@ -267999,7 +268251,7 @@ [] ], "idlharness.https.any.js.ini": [ - "48fa68dca4003dc4fad1a57cd3d807fccf2c2aa4", + "4a0f5ca21690f1f2e73a67bf8788f7d9ae6753e0", [] ], "idlharness.https.any.worker-expected.txt": [ @@ -268061,7 +268313,7 @@ [] ], "battery-disabled-by-permissions-policy.https.sub.html.ini": [ - "70fa1fc8aed4f66ecf3391f30f0784414099d087", + "807ab3266314d0373f3ba74c189e7f419aaac1e6", [] ], "battery-disallowed-in-cross-origin-iframe.https.sub-expected.txt": [ @@ -268147,7 +268399,7 @@ [] ], "__dir__.ini": [ - "9f10f08bafd1fa1b28e88823365926eb2d7c3405", + "a056e75fa9afb0cf094c969a059da296b4e60eeb", [] ], "generate.py": [ @@ -268176,7 +268428,7 @@ [] ], "idlharness.tentative.https.window.js.ini": [ - "a64a4f102b655074d11bbe8475873b66909ddc97", + "1a16cd9c0d03ed83a6c67412865ae582cc2b4d59", [] ] }, @@ -268417,7 +268669,7 @@ }, "browsing-topics": { "browsing-topics-permissions-policy-default.tentative.https.sub.html.ini": [ - "09feb942fdec3cf0321b5b259fe60236b161e3e8", + "30461eb618bb9bacecfdfad04d184c3312e01956", [] ], "browsing-topics-permissions-policy-none.tentative.https.sub.html.headers": [ @@ -268425,7 +268677,7 @@ [] ], "browsing-topics-permissions-policy-none.tentative.https.sub.html.ini": [ - "fa09975dff4c1c1278b0c902098b3d074ed86b0d", + "a8ba62cdee7cfe5195744a9b05aa632c6f5370b1", [] ], "browsing-topics-permissions-policy-self.tentative.https.sub.html.headers": [ @@ -268433,7 +268685,7 @@ [] ], "browsing-topics-permissions-policy-self.tentative.https.sub.html.ini": [ - "2d025ecf12e62bddb8c40cb3d2cb4cbf4bf9e041", + "a057cadcf3518d7d3937f4613ee89dc7835d4f45", [] ], "document-api.tentative.https.html.ini": [ @@ -268501,7 +268753,7 @@ [] ], "executionContexts.sub.html.ini": [ - "702e81be200ea804f296b584cd762ba15ea0f8bb", + "7cdb009bc4d16a5817f87bcc0eab4ad3a0bac2d0", [] ], "storage.https.html.ini": [ @@ -268575,11 +268827,11 @@ [] ], "feature-policy.https.html.ini": [ - "bb9635cd664307d62fb00f4701b6484d566e6826", + "3facae2d2c876c256f660d1dc34c5a3f077b61b3", [] ], "no-feature-policy.https.html.ini": [ - "1516482a855af3194abdf96b05f724da1a2e6c20", + "99a86d68e3ccc67f0f848cabdb7dd4132f74f4bb", [] ] }, @@ -268781,7 +269033,7 @@ } }, "http-equiv-accept-ch-iframe.https.html.ini": [ - "8c2853bc113d8a4970a8d09c5db5bf382e77fd9a", + "3e485d1f9625d3f2836c8f2c3980454bf9acaadd", [] ], "http-equiv-accept-ch-merge.https.html.headers": [ @@ -268885,7 +269137,7 @@ } }, "meta-equiv-delegate-ch-iframe.https.html.ini": [ - "985ab620c1879ec1a286626ec31949b942a5afa0", + "6a5cdcb28ec81b1de364715dea562de516f8ca1c", [] ], "meta-equiv-delegate-ch-merge.https.html.headers": [ @@ -269067,7 +269319,7 @@ [] ], "sec-ch-ua.https.html.ini": [ - "1cd134926a80f4d3b46efaed9347921610771ee8", + "2ff87faa4546adb8bf3da47d77684e8d85c975ca", [] ], "service-workers": { @@ -269233,7 +269485,7 @@ [] ], "async-navigator-clipboard-basics.https.html.ini": [ - "2360a81fbeeec46e60da8e33fbd9bba415a90350", + "71aa47aca0b74604ff8ea329243b1486849d8d9d", [] ], "async-unsanitized-html-formats-write-read.tentative.https.html.ini": [ @@ -269249,7 +269501,7 @@ [] ], "clipboard-item.https.html.ini": [ - "9b3d662b9a419249d59813ccbe31f27dcd467d27", + "444d0a2854154c26aa62ea4d7426ec459dea0ca5", [] ], "feature-policy": { @@ -269327,7 +269579,7 @@ [] ], "abortsignal.html.ini": [ - "d47d283e57388b89e10a3b14b0d0069cf3984889", + "b4a956c5b41061bf578515c042e317578f715b52", [] ], "after-other-listeners-expected.txt": [ @@ -269343,7 +269595,7 @@ [] ], "basic.html.ini": [ - "1c51259014496f87fa3426f2c99f9327037d19fd", + "f9ad29aa230c671c5b57670c07fe71f56956e83d", [] ], "frame-removal-expected.txt": [ @@ -269351,7 +269603,7 @@ [] ], "frame-removal.html.ini": [ - "6c01792887b7246c96c54cb855636d6b8e364da7", + "76f9b5ddd27567a89d1f94fd6173401bb7a499dc", [] ], "resources": { @@ -269373,7 +269625,7 @@ [] ], "user-activation.html.ini": [ - "2eb34a2c68afab9e34ad17c72602708f5833b5ab", + "53264c7d2b3be5bde6c091d727d39c75e70aeb09", [] ] }, @@ -269837,7 +270089,7 @@ [] ], "idlharness.window.js.ini": [ - "374bafde95d1b6677e59bb660566985ab93d58b4", + "b534ec23f5abee5d41fd1be5cd4480767d4955ab", [] ], "webkit-background-origin-text-ref.html": [ @@ -271483,6 +271735,10 @@ "739a2ce175313740c217c68e56d865f622ea4c3b", [] ], + "anchor-navigation-always-allowed.html.ini": [ + "9d3c4634561e90a4740510d65161ee5b25ec11e9", + [] + ], "child-navigates-parent-allowed.html.headers": [ "aced1c6d058f814738121bfb0a7ca3a521837e4d", [] @@ -271689,6 +271945,10 @@ "23fb823730e667875c6f4b7c460543e6158bbc02", [] ], + "report-strips-fragment.html.ini": [ + "27af40da9865d0cb297a1b238c447100ed3b4ce0", + [] + ], "report-uri-effective-directive.html.sub.headers": [ "9b8c3d0fdbccff0066946c7511ea686c6050b711", [] @@ -271822,7 +272082,7 @@ [] ], "service-worker-sandbox.https.html.ini": [ - "3fe82aa3d9377b5e002d2bce4a53f986fdf65e5c", + "40fd4ae4bf46f11cbff8bf2d206851ba73855d06", [] ], "shared-worker-sandbox-expected.txt": [ @@ -272160,7 +272420,7 @@ [] ], "idlharness.window.js.ini": [ - "5db26da0f4df3f4b9cc528382ddeaf28d9f20fc6", + "afde612173290dbf2372e1d2c81ececb8f58bfce", [] ], "img-src-redirect-upgrade-reporting.https.html.headers": [ @@ -272230,7 +272490,7 @@ ] }, "targeting.html.ini": [ - "00d0c33faa858d147c797c1ab8708df3a40320ec", + "96aa0674b9d68c88df435539ff942cbf03c3d3d1", [] ], "upgrade-insecure-requests-reporting.https.html.headers": [ @@ -272634,7 +272894,7 @@ [] ], "attributes-ctl.sub.html.ini": [ - "225dfb998a297bcb8649657cd20ca27657eb2759", + "a7399011b244fc3397dd5a1fdb92ecb5010ac436", [] ], "resources": { @@ -272726,7 +272986,7 @@ [] ], "name-ctl.html.ini": [ - "f1ece0924e1786d7e902914c8544985aadf40b45", + "1fc7f371a375254f62dee30352f7b17161f3e5b8", [] ] }, @@ -272866,7 +273126,7 @@ [] ], "form-post-blank.https.html.ini": [ - "bd832bf21156a28b1665d46363dd12d92b1f06cc", + "a138f44af7ddee8539a19b6fa38d153962d6b3d0", [] ], "resources": { @@ -272924,7 +273184,7 @@ [] ], "value-ctl.html.ini": [ - "e92a55eefe73889915f00cd52b15849756682f57", + "e4607b68854f7edcd80262ecec21a10a4f8b1f1a", [] ] } @@ -273035,7 +273295,7 @@ [] ], "fedcm-iframe.https.html.ini": [ - "b6d5a050ec6e57299f9f4dea81cbe6ad0d3e1534", + "f59ebe48ad61025b11c607bb8f1168747151ebba", [] ], "fedcm-logout-rps.https.html.headers": [ @@ -273049,7 +273309,7 @@ ] }, "fedcm-network-requests.https.html.ini": [ - "546e4a8b0590d9962791efe8be6e6990fdb18673", + "d60a35a9644869a5d1f70bab1d6eb7389682bead", [] ], "federatedcredential-framed-get.sub.https-expected.txt": [ @@ -280991,7 +281251,7 @@ [] ], "background-blend-mode-computed.html.ini": [ - "0749db4d09575fd55150e662dd2c414c31b78dd9", + "ee0f62a45a5ebab042d9acd940ff0ff7722ddc93", [] ] }, @@ -281141,7 +281401,7 @@ [] ], "place-content-shorthand-002.html.ini": [ - "62f9bcd7072a64623d9821db8d91c89a73646a56", + "a3d57bb9127c544af7e2348fe6e7e2eca7026644", [] ], "place-content-shorthand-006-expected.txt": [ @@ -281149,7 +281409,7 @@ [] ], "place-content-shorthand-006.html.ini": [ - "1fe7b562d0d51c9070c57a6e31c3fff66ec508bf", + "b715838b6f1283b7fe334ddcef2e16d97830ad03", [] ], "place-content-shorthand-007-ref.html": [ @@ -281193,7 +281453,7 @@ [] ], "align-tracks-computed.html.ini": [ - "e63929a5b30c661a0e3a733f65dc0fb908bf9b0a", + "2357d80b3b1a2ae6cf6de2c344360e6501bbdbd8", [] ], "align-tracks-valid-expected.txt": [ @@ -281201,7 +281461,7 @@ [] ], "align-tracks-valid.html.ini": [ - "cbe763cc1513a353160d85bb7560fd4ddc5a6761", + "c538a1aebd654b21cd8b9e3d25e0d94a11a88789", [] ], "justify-tracks-computed-expected.txt": [ @@ -281209,7 +281469,7 @@ [] ], "justify-tracks-computed.html.ini": [ - "c5b835863d7d9c1669c1e684a3cbe531d5548d4d", + "d3e9ae3a30d51bff0ee62567fdb23ae8f1b5db14", [] ], "justify-tracks-valid-expected.txt": [ @@ -281217,7 +281477,7 @@ [] ], "justify-tracks-valid.html.ini": [ - "641b10fa7bddbfb9f4054ba0272017ffe475813c", + "b39bd02b956a1efe8bf57980c3708ca1b530c62a", [] ], "place-content-computed-expected.txt": [ @@ -281225,7 +281485,7 @@ [] ], "place-content-computed.html.ini": [ - "ea69725b408986f07b7180c4a8493096cd61480b", + "2fd908c41743b26243cb8915c9bf60a5df6c80dc", [] ], "place-content-shorthand-expected.txt": [ @@ -281233,7 +281493,7 @@ [] ], "place-content-shorthand.html.ini": [ - "aa952acf797565d3af655c720c5de71d3ddd8d90", + "a3c7c00831916b37355364b020f58608cf207b97", [] ], "place-content-valid-expected.txt": [ @@ -281241,7 +281501,7 @@ [] ], "place-content-valid.html.ini": [ - "e7c0b6f0634607c1198bd51298823ade1ced1d75", + "919c5e96b343310e2fd0ef714f251b740b570a45", [] ] }, @@ -281428,7 +281688,7 @@ [] ], "Element-getAnimations-dynamic-changes.tentative.html.ini": [ - "a2187116260d634fc0b41931222f7c582ecab501", + "6cd7454160acd6d7aeaed107a64617b77e1b676d", [] ], "KeyframeEffect-getKeyframes.tentative-expected.txt": [ @@ -281480,7 +281740,7 @@ [] ], "event-order.tentative.html.ini": [ - "1f29179e71abd5f68052e4f69d1664c0baa3428b", + "0175841fd1f05f853039f4707bc76ef60572dd64", [] ], "flip-running-animation-via-variable-ref.html": [ @@ -281492,7 +281752,7 @@ [] ], "idlharness.html.ini": [ - "6d341398b4046ed132f29181e4ef56d8b6750c0e", + "f0e36c8c55b0ea9a892f1d75547f2ca3b0ca8ad3", [] ], "inheritance-pseudo-element-ref.html": [ @@ -281525,7 +281785,7 @@ [] ], "animation-name-valid.html.ini": [ - "4f7fb451b9d3b6adc3bdb52d318b4c1c693c01d7", + "40b7a1f34ef1c664219ad1555012743acc8af36c", [] ], "animation-timing-function-linear.tentative-expected.txt": [ @@ -281537,7 +281797,7 @@ [] ], "keyframes-name-invalid.html.ini": [ - "ca87f7f6e8cf197dd41fb025cf957e083635f540", + "6f6dfaf4d08d0939a019c74221a0294239b2ac57", [] ], "keyframes-name-valid-expected.txt": [ @@ -281545,7 +281805,7 @@ [] ], "keyframes-name-valid.html.ini": [ - "73b97bef157e9874f311dac8ffcc6343be2111c6", + "8f8638168e676fb1946a2ca68f913fd49ab41c8e", [] ] }, @@ -281697,7 +281957,7 @@ [] ], "background-image-interpolation.html.ini": [ - "75c6f8dacb6f28de0940252cc6d522c730bc2e26", + "1c1983ae9a2c884abad9578c3c3796693b5aa19a", [] ], "background-size-interpolation.html.ini": [ @@ -281870,16 +282130,8 @@ "65dfd1f0596c3c816b74d13c62f8309b40fb48a7", [] ], - "clip-text-multi-line-002-ref.html": [ - "5cb77d5296fbc10515fe2bb51f5c5c05bf7fb6a4", - [] - ], - "clip-text-multi-line-002.html.ini": [ - "96410eccd2d7bd246e1a371242511373720551f7", - [] - ], "clip-text-multi-line-ref.html": [ - "3b45e919ad7295c0aef7d401325978cabb62298d", + "455daa7aeabc3fba876eda3d1807b4ddca98c4f9", [] ], "clip-text-multi-line.html.ini": [ @@ -282709,7 +282961,7 @@ [] ], "background-image-computed.sub.html.ini": [ - "beff9b827716c15b18cc548ae1194f78fc30bc15", + "d0664dace10fc6837c2769d0b04353d0f5b5edf5", [] ], "background-image-valid-expected.txt": [ @@ -282717,7 +282969,7 @@ [] ], "background-image-valid.html.ini": [ - "f172768ad6c4bac09349d503d2b514d88d98f73c", + "a1f450662587378348a2a720bf73461d219d9468", [] ], "background-position-computed-expected.txt": [ @@ -282725,7 +282977,7 @@ [] ], "background-position-computed.html.ini": [ - "a1bdb96637c7e9040a0a147fdee53da226d8653f", + "32149f65b70c52c3559ec70c5d412627ded942be", [] ], "background-position-x-computed-expected.txt": [ @@ -282733,7 +282985,7 @@ [] ], "background-position-x-computed.html.ini": [ - "ea1d927580859b9c7e1529addbec684ff3ed11c6", + "dd7811c0bacb450cac17234b19938a8b9109302a", [] ], "background-position-x-valid-expected.txt": [ @@ -282741,7 +282993,7 @@ [] ], "background-position-x-valid.html.ini": [ - "deba18872af31a770c7c0c58858db9957426abc2", + "d1a69c90431bb0d9eed9fa55cf33999c9479e7c0", [] ], "background-position-y-computed-expected.txt": [ @@ -282749,7 +283001,7 @@ [] ], "background-position-y-computed.html.ini": [ - "0efee5135b7d65dc34309f9424789f7621c63ac1", + "4d310e096525c16b5fa62709f5321a3dabd3da19", [] ], "background-position-y-valid-expected.txt": [ @@ -282757,7 +283009,7 @@ [] ], "background-position-y-valid.html.ini": [ - "9282726921c0b409ed77c7a5483e0f3fceb4e162", + "56528c9a1b4eeefa52a1ea302877c6f08bb68060", [] ], "background-shorthand-serialization-expected.txt": [ @@ -282765,7 +283017,7 @@ [] ], "background-shorthand-serialization.html.ini": [ - "0b65cea1fd50f37d60ec8f058f0da138cadb2374", + "fb3fda5eff78e1798ca611675b700be4e6ee2364", [] ], "background-size-computed-expected.txt": [ @@ -282773,7 +283025,7 @@ [] ], "background-size-computed.html.ini": [ - "2b9527286d74390b96ec004db0a51c437d590881", + "000e2711965f0a5f2991e9c6964cce2877db104a", [] ], "background-valid-expected.txt": [ @@ -282789,7 +283041,7 @@ [] ], "border-shorthand.html.ini": [ - "06f49b9066c03b9f330844e535772523e9510766", + "537148e277e95a9efcc033545d190a3ba0a9af0c", [] ], "webkit-border-radius-valid-expected.txt": [ @@ -283658,7 +283910,7 @@ [] ], "inheritance.html.ini": [ - "0fe2f41cd6b9a97058a4cb86f9de20e33baacf8c", + "72e13d250beb2cfde5e6d186719f2a7b4491ef04", [] ], "margin-trim": { @@ -283861,7 +284113,7 @@ [] ], "margin-trim-computed.html.ini": [ - "790872b29d04a04e2c1b2d15a84bdf5f6ff7313e", + "f3fabb5d916b20f76202d6d189506cb76ad0857d", [] ], "margin-trim-expected.txt": [ @@ -283869,7 +284121,7 @@ [] ], "margin-trim.html.ini": [ - "cd977b5320767ce200a0447e82bdbca171258bfb", + "f5c31530eaa3456266d70f929194a21d1e80dc31", [] ], "padding-valid-expected.txt": [ @@ -284144,6 +284396,30 @@ "bc659553eddd5c8ca529105e3dc8c6b96ac07d8a", [] ], + "multi-line-row-flex-fragmentation-065-ref.html": [ + "50cf3c34c6d5aca37cd406393e1afa58a9abccb2", + [] + ], + "multi-line-row-flex-fragmentation-067-ref.html": [ + "4d230d12d0b8a7aecd917bfc24d85c9abf0d0b22", + [] + ], + "multi-line-row-flex-fragmentation-068-ref.html": [ + "04263fb775b6f72c97271002d0a22784c9ef0463", + [] + ], + "multi-line-row-flex-fragmentation-069-ref.html": [ + "723b3dbc955e015323c3b82f06bdeaf9b1d9f39b", + [] + ], + "multi-line-row-flex-fragmentation-070-ref.html": [ + "ee511d287e730e793f68f610a35380bb45dfd95f", + [] + ], + "multi-line-row-flex-fragmentation-071-ref.html": [ + "cd7ca531900a89c2f0a823a8a7727f0bd914e164", + [] + ], "single-line-column-flex-fragmentation-017.html.ini": [ "718bf7e743ff6c1a34082681d14fe59f3010bcf8", [] @@ -284260,7 +284536,7 @@ [] ], "inheritance.html.ini": [ - "292380389b02c7ea1b53608d2d4a249ae04f4bb5", + "3e7031c42922e706583b97331114ab9cbeff392e", [] ], "line-after-unbreakable-float-after-padding-ref.html": [ @@ -284345,7 +284621,7 @@ [] ], "box-decoration-break-computed.html.ini": [ - "dac38329d0094c96cbefc3c2a1c730a0189a0e80", + "e4f963afbf5b30fa15c11192bd70b48435021145", [] ], "box-decoration-break-valid-expected.txt": [ @@ -284353,7 +284629,7 @@ [] ], "box-decoration-break-valid.html.ini": [ - "957a8bd5d612bf16a1efc38bc5db981311b9d566", + "a73d56cbb41b07b75fecbe70bb380714e973e2f6", [] ], "break-after-computed-expected.txt": [ @@ -284654,7 +284930,7 @@ [] ], "import-conditions.html.ini": [ - "81e4345f56b18d0a135e97049fcd731f3bf2d32f", + "f849a37e94532cb2c83104e2e8cefe1ac71000ae", [] ], "important-prop-ref.html": [ @@ -284993,7 +285269,7 @@ [] ], "color-computed-relative-color.html.ini": [ - "45682f1413df554446c91e6b3ea3dd351f07877e", + "4963d6a165e72c527b212f520538a8cc3182b650", [] ], "color-valid-relative-color-expected.txt": [ @@ -285001,7 +285277,7 @@ [] ], "color-valid-relative-color.html.ini": [ - "f9fb59c08d232050b804da31db626032aaec2a31", + "7f284781cf34b40d6609cf7a6eaec925da418719", [] ], "gamut-mapping-expected.txt": [ @@ -285009,7 +285285,7 @@ [] ], "gamut-mapping.html.ini": [ - "0db4646204d0464da17ac43e3ea97a804a15d051", + "167c8d0b8bb67a85092762eac612e4c7fabbbbde", [] ] }, @@ -285335,7 +285611,7 @@ [] ], "print-color-adjust.html.ini": [ - "19d91b966648b6e2636340473f2ae1f70c3ce1f9", + "887ce95ca4a41e6f08c2986ee656f76f7ec5a922", [] ] }, @@ -285461,7 +285737,7 @@ [] ], "CSS-supports-CSSStyleDeclaration.html.ini": [ - "c90e8e280b10d3a3a8c95bf16b386310df08ccb1", + "978aec3b05256925679e63093071bb88b00f5064", [] ], "supports-conditionText-expected.txt": [ @@ -285469,7 +285745,7 @@ [] ], "supports-conditionText.html.ini": [ - "f7cf2cf879ff836cf5267b725532e4bd825bddab", + "c04b8c1201c3f59b741500f57818efa886c1b6b7", [] ] }, @@ -285777,7 +286053,7 @@ [] ], "container-name-tree-scoped.html.ini": [ - "ae7572db59e1194b172da2605b8bac23aeb3338e", + "f9f72e81638944b2493d72423036e54d9fc2a124", [] ], "container-units-gradient-ref.html": [ @@ -285829,7 +286105,7 @@ [] ], "query-evaluation.html.ini": [ - "08a78209fbb4857eb98d02c5f7a76632cf9e7a77", + "778bb83d14c75857d2c27fef8dff13a0f891f482", [] ], "resize-while-content-visibility-hidden-ref.html": [ @@ -286622,7 +286898,7 @@ [] ], "inheritance.html.ini": [ - "e44a71b84c6108171b9c4083a4fed405e9293788", + "2d5a67c30a094145f06a1f9dd5bf9bfa432be7e8", [] ], "pseudo-element-inline-box-ref.html": [ @@ -287019,7 +287295,7 @@ [] ], "prefix-suffix-syntax.html.ini": [ - "e4156157a9793e0063156d7f8c5210d90dba8797", + "5b2319332dd203051968fed3cf80608915200327", [] ], "redefine-attr-mapping-ref.html": [ @@ -288051,7 +288327,7 @@ [] ], "display-valid.html.ini": [ - "d7907df7e163a6ef286fc7e5edee01edef475b3b", + "addd0ad804bd5c36e99e03f29f4450918058a005", [] ] }, @@ -288084,11 +288360,11 @@ [] ], "linear-timing-functions-output.tentative.html.ini": [ - "ee2255dd0aefea4492b9012a26726f1e640f4352", + "5586ab0ec1c7524464d98e6751d2d1ab73e1d3e4", [] ], "linear-timing-functions-syntax.tentative.html.ini": [ - "9de4381f98f666da3fd7503201e4d898c2c2f62e", + "bfd35e00fe886314ef7bf617106b3a926596457e", [] ], "step-timing-functions-syntax-expected.txt": [ @@ -288096,7 +288372,7 @@ [] ], "step-timing-functions-syntax.html.ini": [ - "a4bde85f696f23f469be058cd1bf66c3ad8686d2", + "a023fca80126287f0ee444dcc74c44fbdc5eb6ca", [] ], "testcommon.js": [ @@ -288384,7 +288660,7 @@ [] ], "flex-item-compressible-002.html.ini": [ - "a977140a8584dc067035adaf151e5254d1bc9270", + "6f3b43e1e4d97f67f3d87b44ae17d2450740a5d4", [] ], "flex-lines": { @@ -289941,7 +290217,7 @@ [] ], "row-008.html.ini": [ - "d52317fd30a6b864aaba2e7f7fd5b3c95babc886", + "1e4b39e6b9064eb35a8f8459d143002f3f32ebca", [] ], "row-wrap-001.html.ini": [ @@ -290622,7 +290898,7 @@ [] ], "idlharness.https.html.ini": [ - "c90c12494be3b7263088fe68899030e6101f12d8", + "eedab023d805a1be1a491ec05eb5353449b7e0f6", [] ], "resources": { @@ -291648,7 +291924,7 @@ [] ], "generic-family-keywords-001.html.ini": [ - "f69b14abc3c383ba0c12de50566259443d068a3e", + "3227c917a9e2530f17f0a82867ef5408b1e9906a", [] ], "generic-family-keywords-002.html.ini": [ @@ -291660,7 +291936,7 @@ [] ], "generic-family-keywords-003.html.ini": [ - "9c942626e6a5f0fd8ebdbbc883e53315f462e9a3", + "fac681b5b3e9531aabeb6173ae244ef7f248be29", [] ], "hiragana-katakana-kerning-notref.html": [ @@ -291672,7 +291948,7 @@ [] ], "idlharness.html.ini": [ - "5e34b46def65ffd00fa55909461df6d2303dde4f", + "9704f01a0bfb5bf29c7e1facd9c60e7ecdfefcd1", [] ], "inheritance-expected.txt": [ @@ -291779,7 +292055,7 @@ [] ], "font-face-src-format.html.ini": [ - "9709344ec6aeb87009f3a99c5cde515fc7964ead", + "02a33eb27a49db488d878a03774bfc4020942923", [] ], "font-face-src-list-expected.txt": [ @@ -291787,7 +292063,7 @@ [] ], "font-face-src-list.html.ini": [ - "952058c5e5974c01effa1bcf853fa441bb5fc008", + "9d9af0ca10308a092142a1620d6ed5c3f5aa1874", [] ], "font-face-src-tech-expected.txt": [ @@ -291795,7 +292071,7 @@ [] ], "font-face-src-tech.html.ini": [ - "a73a214614b7a8e8898aeedd22f0a0a3c8e2a210", + "801fe9a3906712ea3a71502fbebfe68b3dd37839", [] ], "font-feature-settings-computed-expected.txt": [ @@ -291803,7 +292079,7 @@ [] ], "font-feature-settings-computed.html.ini": [ - "fcc35e81702742f5e0226bea2a1ec8995b8b8603", + "54b5d72b0e211d7c0a6623db9dc4adeeafc65a3b", [] ], "font-language-override-computed-expected.txt": [ @@ -291811,7 +292087,7 @@ [] ], "font-language-override-computed.html.ini": [ - "f74df11360aebcfb9d656cf11c6386c912bd661d", + "9a2fb5c74cfd5f57f684977bdcb42b68c5e9f6f4", [] ], "font-language-override-valid-expected.txt": [ @@ -291819,7 +292095,7 @@ [] ], "font-language-override-valid.html.ini": [ - "64cd88234729c392653a93308af9d47e0ca9ef4b", + "896fc7137bc8053195935d129d2d972e80e5b8cf", [] ], "font-palette-values-valid-expected.txt": [ @@ -291835,7 +292111,7 @@ [] ], "font-size-adjust-computed.html.ini": [ - "03b2acea6d0f1729246608f24d1b38d77f2aadeb", + "3e887ec1dd3f4b8c43d5dfcd13751115e4864867", [] ], "font-size-adjust-valid-expected.txt": [ @@ -291843,7 +292119,7 @@ [] ], "font-size-adjust-valid.html.ini": [ - "460d888de7fa3f6a8f8fdbad269b28ee3fde7f6f", + "021055c9f9e9b17d2e5dca1c1b14efd37f7d7b0c", [] ], "font-style-computed-expected.txt": [ @@ -291859,7 +292135,7 @@ [] ], "font-variant-emoji-computed.html.ini": [ - "14ba523765c9c0824decfc2864886b4dbed62a78", + "cffe0d65e26136f723460cfee510ba392279fe9d", [] ], "font-variant-emoji-valid-expected.txt": [ @@ -291867,7 +292143,7 @@ [] ], "font-variant-emoji-valid.html.ini": [ - "250f8d0cf859d8f5131ab90f972b53744b46a1a2", + "0ae7704bff5ddab06c99e1ba20177c71dfc8e684", [] ], "font-variant-serialization-expected.txt": [ @@ -298242,7 +298518,7 @@ [] ], "test_font_feature_values_parsing.html.ini": [ - "480e8e8e5a98143a50671c5d85dbac8fc9036a60", + "d5caac21755c0bdc71982da8e96de85e617e65aa", [] ], "variations": { @@ -298255,11 +298531,11 @@ [] ], "at-font-face-descriptors.html.ini": [ - "b0c67cee26768c5f8ea08cd3abcc503328a92893", + "cd3db01a6896374fc09fde5ab3f0e040ee6e8bd8", [] ], "at-font-face-font-matching.html.ini": [ - "af08d566ae6b3718d9fc5a8f91480cd2cea4645c", + "04ee6d717df59123b3ac87a082455cef1b198287", [] ], "font-descriptor-range-reversed-ref.html": [ @@ -298279,7 +298555,7 @@ [] ], "font-shorthand.html.ini": [ - "ea4511491a368f55cd2c0862b614d122d8d72bdf", + "b20ba7aa394f0e5b49b8a5490aae52e593e67fc9", [] ], "font-slant-1-ref.html": [ @@ -298307,11 +298583,11 @@ [] ], "font-style-parsing.html.ini": [ - "8961f6f1202828ca706515d5fdcb53e9a3c922d7", + "e947b72ff705517faf8b64172e4bcf975d05a6a9", [] ], "font-weight-matching-installed-fonts.html.ini": [ - "1c8e860b72a6f15d1ab789071bf71a944e5fcbca", + "7e4a2f7c092ce47eb97760eea60ebfd6ce47feab", [] ], "font-weight-metrics-ref.html": [ @@ -299347,7 +299623,7 @@ [] ], "grid-inline-template-columns-rows-resolved-values-001.tentative.html.ini": [ - "4e5cf3aa0acfb786762f7126e70404081abd9433", + "c60e30df3ddd3878af4d6e33f56b52736710e21f", [] ], "grid-repeat-max-width-001.html.ini": [ @@ -299371,7 +299647,7 @@ [] ], "grid-template-columns-rows-resolved-values-001.tentative.html.ini": [ - "067c4fc6addaf53d370e892ef6ec3c0d16ee81c6", + "caa7a4f29081988e81bda39b1d61dcf8d51cf48c", [] ], "grid-template-rows-fit-content-001-ref.html": [ @@ -299498,7 +299774,7 @@ [] ], "grid-layout-properties.html.ini": [ - "2b385726b9736cd958c6fe70cbb513f6a1854e81", + "1bbafc4498c1719569dc511b41ca8c5ec7370c60", [] ], "grid-model": { @@ -299841,7 +300117,7 @@ [] ], "grid-area-computed.html.ini": [ - "1a1cb939dbae5d78347c64dbf51aebf36d9d22d9", + "ea1ea1f255c844a096554697e94d550073ba0818", [] ], "grid-area-valid-expected.txt": [ @@ -299849,7 +300125,7 @@ [] ], "grid-area-valid.html.ini": [ - "fe837a14aabcd460d81e9064ca0c574b9e9eee34", + "a5253c7d198fdd70c929075ef9faf884fe89d4dd", [] ], "grid-columns-rows-get-set-multiple-expected.txt": [ @@ -299865,7 +300141,7 @@ [] ], "grid-shorthand-serialization.html.ini": [ - "3fc028427f2476021b6ce9e67703e9ed47b12af6", + "15220d5da90a8b164b755e6a0e73579248f67cdb", [] ], "grid-shorthand-valid-expected.txt": [ @@ -299873,7 +300149,7 @@ [] ], "grid-shorthand-valid.html.ini": [ - "e646e741af42d89474d40b61105e6b5849255088", + "fbb70f4f4e4c61202dc25bd26281e5dc5456a0fd", [] ], "grid-template-shorthand-valid-expected.txt": [ @@ -299881,7 +300157,7 @@ [] ], "grid-template-shorthand-valid.html.ini": [ - "bfd59fd9f065692d888928d71dd18f1f3c5c44d0", + "f47ef9400ad562ebc846d0fb259bc8fa004e8915", [] ] }, @@ -300165,7 +300441,7 @@ [] ], "grid-template-computed-nogrid.html.ini": [ - "cdaa77417150e12a689564427c1c177599fe2850", + "a5e9ddd9b106d40a4ec0620627e7b588785e9955", [] ], "independent-formatting-context-ref.html": [ @@ -300885,7 +301161,7 @@ [] ], "image-set-parsing.html.ini": [ - "d4cd70d48b61a5aa06135bce26f973175415f553", + "7ab4fb4e4b6d43c4c3297387fd8dac590ccb4abb", [] ], "image-set-resolution-001-ref.html": [ @@ -301609,7 +301885,7 @@ [] ], "image-rendering-computed.html.ini": [ - "36993e94e4f109497c8017ba0ca403806d211a63", + "cba48f11a8df57ba6f317c5bff2ebff5bada2ac7", [] ], "image-rendering-valid-expected.txt": [ @@ -301617,7 +301893,7 @@ [] ], "image-rendering-valid.html.ini": [ - "9e68487bb3b4cb13fac2edbf1eae9743d0f6eb15", + "0556bed1306466f9b2f6611bb1d79b6a0e45ab75", [] ], "image-resolution-valid-expected.txt": [ @@ -301625,7 +301901,7 @@ [] ], "image-resolution-valid.html.ini": [ - "cbf6a89a0c1ca87c9c4e2fc3025270e5b04e1355", + "0f9c0fe85c3a314e58fe6d1b4e7efc6a62a7bf40", [] ], "object-fit-computed-expected.txt": [ @@ -302006,7 +302282,7 @@ [] ], "inheritance.html.ini": [ - "9d5c487c0ca22fc7df11164209ba61d430e40ae8", + "69ed642ce0e2eb5377b7c34b23af87acae267d6b", [] ], "initial-letter": { @@ -302385,7 +302661,7 @@ [] ], "alignment-baseline-computed.html.ini": [ - "533a2e97dc35b9bc379e68872e9ca7aefb819b91", + "a2e26b1b0d350084b0e76cb70e7e494215f0e2ea", [] ], "alignment-baseline-invalid-expected.txt": [ @@ -302401,7 +302677,7 @@ [] ], "alignment-baseline-valid.html.ini": [ - "0459d8dddeb91b76eba0a6a513c641be002df3b7", + "14fb1f9f69d41442454e144564206e767ef79543", [] ], "baseline-shift-invalid-expected.txt": [ @@ -302665,7 +302941,7 @@ [] ], "list-style-image-interpolation.html.ini": [ - "9587623887d28e22a94a53a9bedd1be52cf2ef51", + "762922e127f8a713deb16bea8df3d635301d689f", [] ] }, @@ -303153,7 +303429,7 @@ [] ], "content-invalid.html.ini": [ - "ab7b97f01127d68dc03f0ea6ad81cf7eb8a3c1ab", + "244742ea21453f878a337a9e4aa23d3d70756119", [] ], "counter-reset-valid-expected.txt": [ @@ -303161,7 +303437,7 @@ [] ], "counter-reset-valid.html.ini": [ - "96d33b0c56f563f8068193dd79eb029213cb03fa", + "82b36b4a1d0bbcfcfcb391618121654b3e753d71", [] ], "list-style-image-computed.sub-expected.txt": [ @@ -303177,7 +303453,7 @@ [] ], "list-style-type-computed.html.ini": [ - "1e0e5eea6da1fad716183d0bc453b0125a3d03f9", + "16effdb3ceee2041ecf5e7d0647fc40852991189", [] ], "list-style-type-valid-expected.txt": [ @@ -303185,7 +303461,7 @@ [] ], "list-style-type-valid.html.ini": [ - "a8986c7bccb0b22e94b4a023a78123b1c266238a", + "511a81ff213a0ff7c434b5ac9b3269db5bd2ae2c", [] ], "list-style-valid-expected.txt": [ @@ -303193,7 +303469,7 @@ [] ], "list-style-valid.html.ini": [ - "eb787363ffe10bf68d25b9e21d3ff735096963db", + "1d02edb22dc33715ceada83ecbf5638aa811e138", [] ] }, @@ -303248,7 +303524,7 @@ [] ], "logical-box-border-color.html.ini": [ - "a26413bf9e0e0e3d0ac7c18d5dade47c2f849540", + "c6f3787b6c8200e5d682ffbf75466d73c0c1b960", [] ], "logical-box-border-radius-expected.txt": [ @@ -303256,7 +303532,7 @@ [] ], "logical-box-border-radius.html.ini": [ - "41a0bc5a8fb69a4573c39423b7d1b10f407a5f6c", + "1adef7ab1f427ff748cfe34002df368c2455049b", [] ], "logical-box-border-shorthands-expected.txt": [ @@ -303264,7 +303540,7 @@ [] ], "logical-box-border-shorthands.html.ini": [ - "01bc7d70b8755e9873fb390da59b862a921625a3", + "07bd22b844adbc265b4a66aeb0809865dd5d2e32", [] ], "logical-box-border-style-expected.txt": [ @@ -303272,7 +303548,7 @@ [] ], "logical-box-border-style.html.ini": [ - "c897240c34f1adbec99b00844a3609dd2fe4fcaf", + "7b1a496442af5b7a463506708a74e7f57ec86f54", [] ], "logical-box-border-width-expected.txt": [ @@ -303280,7 +303556,7 @@ [] ], "logical-box-border-width.html.ini": [ - "f19f3cd5165afc1c851491533963fbb0ce9df298", + "b353e48f7139f9e28fcee0925e08803a97f2c963", [] ], "logical-box-inset-expected.txt": [ @@ -303288,7 +303564,7 @@ [] ], "logical-box-inset.html.ini": [ - "be4f0455f070d0da94d3d8bb314926123e346025", + "df8bd77ee1bd056e876f30a7cf1b56283d1ee99d", [] ], "logical-box-margin-expected.txt": [ @@ -303296,7 +303572,7 @@ [] ], "logical-box-margin.html.ini": [ - "703c7b159cc2c05ec78d5c5330beb88ed3925adb", + "759d22cadf91abed32d2680b9650a631b6f7b829", [] ], "logical-box-padding-expected.txt": [ @@ -303304,7 +303580,7 @@ [] ], "logical-box-padding.html.ini": [ - "5782ac7fff08e57fdb0d7845fa3598d3a37c02db", + "d4efd3df486475ab775697b18ce100fa7650640c", [] ], "logical-box-size-expected.txt": [ @@ -303312,7 +303588,7 @@ [] ], "logical-box-size.html.ini": [ - "54f9938793ebf7cb8577b4329efd49bbe9c77da4", + "df6fb5ad2516f170635e7b3676cfe048a019b0ab", [] ], "parsing": { @@ -303329,7 +303605,7 @@ [] ], "border-block-width-valid.html.ini": [ - "f5bb012d142cc87c2afd0b8d1c7f0e428ca37b9d", + "b1f2454dff33acc90720dd08f7d1a1eff727096f", [] ], "border-inline-valid-expected.txt": [ @@ -303345,7 +303621,7 @@ [] ], "border-inline-width-valid.html.ini": [ - "af7d146cb106cbaeda5ed5bfbb861c1033a6b400", + "f988cb35100fb31de62aa600e0778f90228c1fec", [] ], "inset-block-inline-valid-expected.txt": [ @@ -303353,7 +303629,7 @@ [] ], "inset-block-inline-valid.html.ini": [ - "4ca38ae7da7184e0cd88c9d022ac22eb3518f47d", + "2bfd8bc01044954571465416e808035d2c18d591", [] ] }, @@ -303437,7 +303713,7 @@ [] ], "mask-position-interpolation.html.ini": [ - "faf2d448dbc74873076e598c4ffdaa7eef945f06", + "69b013332dfe9ad9370f0448abe1fb1730d554c4", [] ] }, @@ -304204,7 +304480,7 @@ [] ], "idlharness.html.ini": [ - "2a2bc7edeffa86030fb09174a5d6d92698016efd", + "4be91993e6e6385bd555b72345b1127e136a76ea", [] ], "inheritance.sub-expected.txt": [ @@ -304212,7 +304488,7 @@ [] ], "inheritance.sub.html.ini": [ - "ae9ebb2af6e6ae6a50ba949515d9d7aa5d350aa7", + "bccd8438038b8178a743ae2d862e1010b6cdc158", [] ], "mask-image": { @@ -304771,7 +305047,7 @@ [] ], "clip-path-shape-parsing.html.ini": [ - "e77e45e8142bdeacca15594acaad499732d68659", + "1ad470a62cd54ef7c30b0946c9600aaa69ca7b36", [] ], "clip-path-valid-expected.txt": [ @@ -304779,7 +305055,7 @@ [] ], "clip-path-valid.html.ini": [ - "f9334ed7924c737837667b81dafdfed419d4ef3f", + "130466484ebfa42d1cd69d6cab1c19bc36716338", [] ], "mask-position-valid-expected.txt": [ @@ -304787,7 +305063,7 @@ [] ], "mask-position-valid.html.ini": [ - "58d5162399011ae60a19adef8c95354fe0ea7f1e", + "8687126ea5165232cc7452a8eea5befa91413de6", [] ], "mask-valid.sub-expected.txt": [ @@ -304795,7 +305071,7 @@ [] ], "mask-valid.sub.html.ini": [ - "0b8f033163b94d576090e6732b0ed48f46a31cac", + "2209bfa6509c60f66277a561577d18b4a6277bdd", [] ] }, @@ -306056,7 +306332,7 @@ [] ], "inheritance.html.ini": [ - "4e070786d07df0d868c5a969f759b616cae216d8", + "e5262e01d3cae5226b1d7f2d51e8d0df1b8a4126", [] ], "margin-block-end-scroll-area-001.html.ini": [ @@ -306249,7 +306525,7 @@ [] ], "block-ellipsis-valid.html.ini": [ - "d14bbb35385f35df3871709347cbc8ecd677cbdc", + "0d5ec9c1351dd8053ad538b8ff50b02f8f7aba1d", [] ], "continue-valid-expected.txt": [ @@ -306265,7 +306541,7 @@ [] ], "line-clamp-valid.html.ini": [ - "938b37e351f6cf978820ee31b34f64d35754353b", + "0cd13eba308ce9e0eddc03147f1df647eb288331", [] ], "max-lines-valid-expected.txt": [ @@ -306273,7 +306549,7 @@ [] ], "max-lines-valid.html.ini": [ - "312ede5e208931aebc994b9aee6c30f9d08885d0", + "5edf350eb3dc61ff9eaddafb634e8226740df510", [] ], "webkit-line-clamp-valid-expected.txt": [ @@ -306624,7 +306900,7 @@ [] ], "page-orientation.tentative.html.ini": [ - "2e980f67c85ca5a4c45e26f461cd11616cfc5eeb", + "8ec98239bc5d65b43b14f3f12f13ac49a9318cf5", [] ], "page-rule-declarations-003-expected.txt": [ @@ -306640,7 +306916,7 @@ [] ], "page-rule-declarations-004.html.ini": [ - "7e8d2a3aa9883a039f93ec38ebdbe5175216a186", + "090c0637e24d70310afb0b00246b557027788838", [] ], "parsing": { @@ -306649,7 +306925,7 @@ [] ], "page-orientation-invalid.tentative.html.ini": [ - "77335b04e3a49e28e6dd797a667edf64d24e182f", + "dbb838ca90e4aaa5aadb1f90752524733ba17420", [] ], "size-001-expected.txt": [ @@ -307064,7 +307340,7 @@ [] ], "idlharness.html.ini": [ - "328d435f830c583be1f4855602c60064f5a0cd89", + "347f0a72329f82d0ad191bbb2703e1aa0a1daf83", [] ] }, @@ -307689,7 +307965,7 @@ [] ], "custom-property-animation-transform-function.html.ini": [ - "3a82efceac4d9011c036dfcb255b1b2af5a52cc8", + "a057a44cab1e85addda1366f108245dc4ebd8922", [] ], "custom-property-animation-transform-list-multiple-values-expected.txt": [ @@ -307697,7 +307973,7 @@ [] ], "custom-property-animation-transform-list-multiple-values.html.ini": [ - "2904ea66e506f0d8dcc6840af9c75ada0d7a877a", + "b5b1b767d184c5e347dff28ae9760f71b41a622b", [] ], "custom-property-animation-transform-list-single-values-expected.txt": [ @@ -307705,7 +307981,7 @@ [] ], "custom-property-animation-transform-list-single-values.html.ini": [ - "f90f6bd4ef9987d9442cae8e04530edf29b9bc60", + "f73c1756f2117a5d9902db15328b19d70c5e3c02", [] ], "custom-property-transition-custom-ident.html.ini": [ @@ -307754,7 +308030,7 @@ [] ], "at-property-cssom.html.ini": [ - "f555f8de0832076fdfb5981e2c493ec7a74184a9", + "ed0f7acd316f89abeaa57b0fa22c8d5a869f0bcd", [] ], "at-property-shadow.html.ini": [ @@ -307830,7 +308106,7 @@ } }, "var-reference-registered-properties.html.ini": [ - "6228d1511f10ae4b65135acfe32f040049260133", + "aceb1369e4bc10c1d036d0b7aa3ad774d63c5ec8", [] ] }, @@ -308312,7 +308588,7 @@ [] ], "idlharness.html.ini": [ - "5f8c5a7ae707acd707b1ccca7c91d47de780a2d2", + "c8afce438b605fcbf2b34aea047230ebaf70cc19", [] ], "marker-and-other-pseudo-elements-ref.html": [ @@ -308937,7 +309213,7 @@ [] ], "ruby-align-valid.html.ini": [ - "9e8d5697e91f9c9128d1311e8e5c1b8fadc7161b", + "de469710c0ba831117d527ef98b74299af6bc9e7", [] ], "ruby-merge-valid-expected.txt": [ @@ -308945,7 +309221,7 @@ [] ], "ruby-merge-valid.html.ini": [ - "060b88ca2da21da68a234f0b13c7d5f1adf9494e", + "381a53f976be8c1ba0907096cb6fd7146e9b3269", [] ], "ruby-position-valid-expected.txt": [ @@ -309352,7 +309628,7 @@ [] ], "ruby-position-alternate.html.ini": [ - "41ec1c6d1b4e6bcf59c072d4f7d5addd7e4f3bd1", + "79943e478894994a9de18b2895898e800d9a2e82", [] ], "ruby-span-001-ref.html": [ @@ -309484,7 +309760,7 @@ [] ], "slotted-parsing.html.ini": [ - "78b2e6f8b94b6a9ce7528b0ccf14b8301b701168", + "097fcdaee17a6bf8c4da7560fd8632f6183cd8c4", [] ], "slotted-placeholder-ref.html": [ @@ -309521,6 +309797,10 @@ "79f47a216ccd31d1f9ce251ad911e53846b5f74d", [] ], + "fragment-scrolling-anchors.html.ini": [ + "2904bd76d997450788ff223adca813082b22e187", + [] + ], "fullscreen-crash.html.ini": [ "e3881f8789f15e8939fef4cfa9b1392ba773a235", [] @@ -309805,7 +310085,7 @@ [] ], "shape-outside-computed.html.ini": [ - "7ef531929d4c05e6c41a2747c1506da43577c6ab", + "e98d8829acc4189be4d46c6493ef39541fec4142", [] ], "shape-outside-valid-expected.txt": [ @@ -310606,7 +310886,7 @@ }, "values": { "shape-margin-001.html.ini": [ - "837925b02dd9183c736ae441b564aa25cf5b6790", + "e354a81363c280acadd37383990d66efa85ff601", [] ], "shape-margin-003-expected.txt": [ @@ -310614,15 +310894,15 @@ [] ], "shape-margin-003.html.ini": [ - "3c008a71626214c6c671f3472a8e2feb1ab7e20a", + "cd490849bfe3d3edcb90dd7cc0a586ee3bbae0e9", [] ], "shape-outside-circle-004.html.ini": [ - "17d1ddcfa92877ed4aac60b6aeb5c1a0de088e11", + "1ee78fe1865c3d9b9cf5ffdc219d9c2105604e99", [] ], "shape-outside-circle-005.html.ini": [ - "65c83a0df399850addf6fd731c83e8d975d80f93", + "ca54c62fe04cc90c95801cd1a6e04d5fcd12002b", [] ], "shape-outside-circle-010-expected.txt": [ @@ -310630,7 +310910,7 @@ [] ], "shape-outside-circle-010.html.ini": [ - "1a588ad1fcda141bd19f3ee9f6a2db9e76d2ccb6", + "1fd96b577b8030a085fc1e8a353529ad34bbdd8c", [] ], "shape-outside-circle-011-expected.txt": [ @@ -310638,7 +310918,7 @@ [] ], "shape-outside-circle-011.html.ini": [ - "1f04a55cda373238f4591be2164bc354c96334ac", + "2174e754ce38e33015de298c5c5f1cad9c4c62e4", [] ], "shape-outside-computed-shape-000.html.ini": [ @@ -310646,11 +310926,11 @@ [] ], "shape-outside-ellipse-004.html.ini": [ - "030796d228f2c8720b99af9bc37bdca5804c645d", + "694a2e2fe93aef7105b1c517ca0375f1e89ab80a", [] ], "shape-outside-ellipse-005.html.ini": [ - "d6d124af040a4e2f97a400e0accef9c625323bbf", + "7255d439a3faf6dcfc6000b09d502b362db9632d", [] ], "shape-outside-ellipse-010-expected.txt": [ @@ -310658,7 +310938,7 @@ [] ], "shape-outside-ellipse-010.html.ini": [ - "dcba745d98edfff97c027b35649798a35bf98033", + "a059f994ca7cd31e26c05d1dd97e7f02a69483f0", [] ], "shape-outside-ellipse-011-expected.txt": [ @@ -310666,11 +310946,11 @@ [] ], "shape-outside-ellipse-011.html.ini": [ - "9157adfa865315c932dc7b504778b644967cb763", + "c9aaf2545b1f0ef28b0ce61adbdf81436ed410c6", [] ], "shape-outside-inset-003.html.ini": [ - "912b9c7ce07ca4fe2a3a405e731197afe967550a", + "e3b9cfe97e9a11bdb600fbfa2e58b8c8ecb8af0f", [] ], "shape-outside-inset-008-expected.txt": [ @@ -310678,7 +310958,7 @@ [] ], "shape-outside-inset-008.html.ini": [ - "fd5992e50515609e592474ca661e9c9b4a58e6e0", + "349e9537ae3737e2ee312e3ddac8b955fe8f1d1e", [] ], "shape-outside-inset-009-expected.txt": [ @@ -310686,11 +310966,11 @@ [] ], "shape-outside-inset-009.html.ini": [ - "0a406fe2ab5b58c050cbd2e3e66e76458b4fcced", + "5fc6fe49873bfbf9e186e6a4df561816e1b59b5e", [] ], "shape-outside-polygon-004.html.ini": [ - "2c60fc1000721355df6bedc39bc5f02452ccf0d1", + "47bcbd6821c9decc13792b40d1695daaf07c62a2", [] ], "shape-outside-polygon-006-expected.txt": [ @@ -310698,7 +310978,7 @@ [] ], "shape-outside-polygon-006.html.ini": [ - "ea5567a50a4c692bb37e21ce5bcae0fd90b0f879", + "ca6c3e6b9bb15304a7bd0f6ff8ffb166c3d55a55", [] ], "shape-outside-shape-arguments-000.html.ini": [ @@ -310710,7 +310990,7 @@ [] ], "shape-outside-shape-box-pair-000.html.ini": [ - "5449d8de8d48d799e4021e46123b372446f60bbb", + "a981bda33a2ca87512ad099cb43ead24af1f4e98", [] ], "support": { @@ -311177,7 +311457,7 @@ [] ], "auto-006.html.ini": [ - "0072aad43b6506c4b44303ea987ecd1d76968ca1", + "e0fb61754fb4e702a3e3e2598c1e00d1c6823eb5", [] ], "auto-008-expected.txt": [ @@ -311193,7 +311473,7 @@ [] ], "auto-009.html.ini": [ - "0d8128ba60741c07bddf8a8b6c8a61374e95a501", + "8496754647129c94f7b6f4c32337e98d7a87e684", [] ], "auto-011-expected.txt": [ @@ -311209,7 +311489,7 @@ [] ], "auto-012.html.ini": [ - "f82a85cd4c56f583becee7b9d84ba5990ee1117f", + "60835b967f57c9937214efd73d579eb49b73bb93", [] ], "contain-intrinsic-size-001-ref.html": [ @@ -311491,13 +311771,17 @@ "a329e3b09595074f066a04f873920f82073c4b84", [] ], + "min-content-negative-margin-crash.html.ini": [ + "b223f7284d92b8ff2cc1c34e127710f7d536bc94", + [] + ], "parsing": { "height-valid-expected.txt": [ "3c9f48ce1a0517636e3a213312c404d03b437731", [] ], "height-valid.html.ini": [ - "6d7711beb8cfce3aabea41ba32bc1c5e36d32729", + "c3d0aa98cb59ea987f661b193265249046150712", [] ], "max-height-computed-expected.txt": [ @@ -311513,7 +311797,7 @@ [] ], "max-height-valid.html.ini": [ - "e6d91c7ad3c1d9d279aef48fc20bb796df6a426d", + "09dddb1257a27848b0ac38c39a840798cb228bbf", [] ], "max-width-computed-expected.txt": [ @@ -311529,7 +311813,7 @@ [] ], "max-width-valid.html.ini": [ - "827822e93968d40df8458f6fab802a04182f2039", + "1a6eda6f3dc4b6a8090cb68dcd19da0a8f3b2544", [] ], "min-height-computed-expected.txt": [ @@ -311545,7 +311829,7 @@ [] ], "min-height-valid.html.ini": [ - "4a673ae2cf10d18348243084c81c06d48410d91b", + "38ebb66cde73fadf141b94d063bdfdf3da9aef67", [] ], "min-width-computed-expected.txt": [ @@ -311561,7 +311845,7 @@ [] ], "min-width-valid.html.ini": [ - "bfb9555dadcdaca4dbf5d80edb0462de41bfd7c1", + "d744e9cc916851b6c6ae3b4ae1a47810cdd2ab49", [] ], "width-valid-expected.txt": [ @@ -311569,7 +311853,7 @@ [] ], "width-valid.html.ini": [ - "4538a8f7fce4db3644ea793dd0e1bb49ffa7ab47", + "226d5acf568d041d88d822e748d17153334ab09f", [] ] }, @@ -312018,7 +312302,7 @@ [] ], "input-preprocessing.html.ini": [ - "f4136a24837a7147d0d96c43ffdd70936de61a8c", + "1c7ecefcc0a17bcb007dcf8d714b7657f23dd533", [] ], "missing-semicolon-ref.html": [ @@ -312026,7 +312310,7 @@ [] ], "serialize-consecutive-tokens.html.ini": [ - "6f4b38c49a8626d047ba87d188dabe9c8fcb2802", + "703422f594b25b2f31a3705510c2d56342291770", [] ], "support": { @@ -312048,7 +312332,7 @@ [] ], "urange-parsing.html.ini": [ - "33367b79c9ed8dbf4fc04d9f29ff7f3a786e39bd", + "fcbe34f94ad977bdd3fea9044d018a04e8ad1ebc", [] ] }, @@ -312234,7 +312518,7 @@ [] ], "html-to-css-mapping-2.html.ini": [ - "406fdd54d806ab86dacaff57f8ed10955c7d1d1c", + "fc674f55e4f512ecb3917900f2ba700287f6a299", [] ], "html5-table-formatting-1-expected.txt": [ @@ -312330,7 +312614,7 @@ [] ], "table-model-fixup-2.html.ini": [ - "60ef364f3403eb96257f587f9640e89869e8eb6d", + "440efdfa2c825b261c58e1c87c6909e1bfc618fe", [] ], "table-model-fixup-expected.txt": [ @@ -312347,7 +312631,7 @@ ], "tentative": { "baseline-table.html.ini": [ - "f7983b953fd7a723ed9d041b56ba0e71a8b9dc2a", + "8bc8a6a2d24e6d89ac2c487b48b8e80ffeadcbba", [] ], "baseline-td.html.ini": [ @@ -312469,7 +312753,7 @@ [] ], "text-indent-composition.html.ini": [ - "70a5220306ef6a0baab0c4e9634f8e0d23d3e73e", + "b1d46323a952b6d30b571abf02d29761a31566b8", [] ], "text-indent-interpolation.html.ini": [ @@ -312911,7 +313195,7 @@ [] ], "css3-text-line-break-baspglwj-026.html.ini": [ - "5bc69c652c9d5b00cf19ceb9dc079cf94a8d17ab", + "a1420c1e62aa8f65c588b3253530536df3db3dea", [] ], "css3-text-line-break-baspglwj-094-expected.txt": [ @@ -314497,7 +314781,7 @@ [] ], "hanging-punctuation-valid.html.ini": [ - "64ad3efe73399099382115d317e3f0a931d8c877", + "650eab63285adaa09c25407f8c90842a2b9539cc", [] ], "text-align-all-valid-expected.txt": [ @@ -314505,7 +314789,7 @@ [] ], "text-align-all-valid.html.ini": [ - "26b2a31d21b7a8b3abb3bbeaee8357283af5c60c", + "ad06f7c6223c4dc25907e69295e4cb653b7b8887", [] ], "text-align-computed-expected.txt": [ @@ -314537,7 +314821,7 @@ [] ], "text-align-valid.html.ini": [ - "4ef079951d39f6811e8b2f0dd2978336af4655fa", + "08a8719d0c0ee09d97a55787b9fcc6435c852e6b", [] ], "text-group-align-valid-expected.txt": [ @@ -314545,7 +314829,7 @@ [] ], "text-group-align-valid.html.ini": [ - "d9aa679ed6c0af2634a7675bf5dc30128183389f", + "683d4ad5793538aaf1f344e3886a19955b884404", [] ], "text-indent-computed.html.ini": [ @@ -314553,7 +314837,7 @@ [] ], "text-indent-valid.html.ini": [ - "21d6ea4d0f848467a8d30025d5db6e253545ce3e", + "5b55838eca77e4c4fc71c35922d6b79ce1703c6a", [] ], "text-justify-computed-expected.txt": [ @@ -314569,7 +314853,7 @@ [] ], "text-justify-computed.html.ini": [ - "c71fa322ff78089ffd37d4f8167dfd5ebe047db1", + "ac23ed8a123bb66797e605ec81019813cc868c73", [] ], "text-justify-valid-expected.txt": [ @@ -314577,7 +314861,7 @@ [] ], "text-justify-valid.html.ini": [ - "21136318681bf750b384ac54112518b6a65918e7", + "85b48792e16680f66c5821eab69faa9f91c502a2", [] ], "text-transform-computed-expected.txt": [ @@ -314585,7 +314869,7 @@ [] ], "text-transform-computed.html.ini": [ - "26416ac0e9c4e844e3c408a87fac3ecd25d4688c", + "b0d28b167ef439a41fc276f5fa0a18d8931ffdc1", [] ], "text-transform-valid-expected.txt": [ @@ -314593,7 +314877,7 @@ [] ], "text-transform-valid.html.ini": [ - "972b8ff4a29290d4049c2a999d25f666f5459d2f", + "7914d415f40157abc74c28b37e3c13af8cc4b9e5", [] ], "text-wrap-valid-expected.txt": [ @@ -314601,7 +314885,7 @@ [] ], "text-wrap-valid.html.ini": [ - "6900f7a1f732edaf9a4b55ef43567632da29af97", + "fa85c5c713b4f54eda0d838b667fe7698b036e08", [] ], "word-boundary-detection-computed-expected.txt": [ @@ -314609,7 +314893,7 @@ [] ], "word-boundary-detection-computed.html.ini": [ - "ac397c364d3c76903a72877eb49776d49657e90c", + "3fbdcb26daeebcd60780e740bd183a5a5ebd6402", [] ], "word-boundary-detection-valid-expected.txt": [ @@ -314617,7 +314901,7 @@ [] ], "word-boundary-detection-valid.html.ini": [ - "fdd2a316ceb13099222a1ea98f4c656c4906be05", + "657a5d88b2ff6db457dfbf6f0633a51cbc9c4347", [] ], "word-boundary-expansion-computed-expected.txt": [ @@ -314625,7 +314909,7 @@ [] ], "word-boundary-expansion-computed.html.ini": [ - "501387c036d453ce27205bd330ad9489ea0526a4", + "5c9540b9ee7fe1bf877b4bf217cd9ee4a4136811", [] ], "word-boundary-expansion-valid-expected.txt": [ @@ -314633,7 +314917,7 @@ [] ], "word-boundary-expansion-valid.html.ini": [ - "3df060e1f235393971b2389fdda3d481c490682a", + "9408b40adacc02ffc8cf1e6e4af6f569b5b6797d", [] ] }, @@ -316609,7 +316893,7 @@ [] ], "seg-break-transformation-001.tentative.html.ini": [ - "ae2ad831c394f3fdf066888e5e6f9938645b00c1", + "287cfa7cc37a0bc619f9836e5e30bf0d6d419f1c", [] ], "seg-break-transformation-002.tentative-expected.txt": [ @@ -316617,7 +316901,7 @@ [] ], "seg-break-transformation-002.tentative.html.ini": [ - "4e0c0b662fe3fa19cf5ce6389d8b1f6f705de5d2", + "2e8f167cffe54d9e587f5f40c551e8c1263ce71d", [] ], "seg-break-transformation-003.tentative-expected.txt": [ @@ -316625,11 +316909,11 @@ [] ], "seg-break-transformation-003.tentative.html.ini": [ - "c2440ff2c8327b9c46bce69049c34b83ac3f85bd", + "736eff4a7ce45de0d46402df557cc1fda09a2ac7", [] ], "seg-break-transformation-004.tentative.html.ini": [ - "8f4ecf75955b49546702f5f9fb0cdda3ae8f44ae", + "05a976088fc5f89cd665662835223547c8acbc8b", [] ], "seg-break-transformation-008.tentative-expected.txt": [ @@ -316637,7 +316921,7 @@ [] ], "seg-break-transformation-008.tentative.html.ini": [ - "2fe309ce3db7efe6657548486590fd18044c1193", + "9988ea8c34b96dba36ceaff45441571e91e91e9f", [] ], "seg-break-transformation-009.tentative-expected.txt": [ @@ -316645,7 +316929,7 @@ [] ], "seg-break-transformation-009.tentative.html.ini": [ - "86120d27605840acdcf08ca220ba2cc8ea9ee63a", + "13b33f9fbd6651003f0505743cd4b311d6696d31", [] ], "seg-break-transformation-019.tentative.html.ini": [ @@ -316729,7 +317013,7 @@ [] ], "white-space-collapse-002.html.ini": [ - "923be960abd4a8cea04150fa26dc913e3a302e08", + "55915245d1dd73502038641784d6b3077949c769", [] ], "white-space-intrinsic-size-019.html.ini": [ @@ -317303,7 +317587,7 @@ [] ], "text-decoration-computed.html.ini": [ - "5cb2bcf91d2d7fc90308367381f93f04456a133e", + "fb41ef4f524d4e4231ad25f045921cfec101d091", [] ], "text-decoration-line-computed-expected.txt": [ @@ -317311,7 +317595,7 @@ [] ], "text-decoration-line-computed.html.ini": [ - "59c4a4bcd1c93e1bbee66e6d5972bb9a4ad5b012", + "8eba4323b0872e8d76a035d6019bc45696f52d19", [] ], "text-decoration-valid-expected.txt": [ @@ -317319,7 +317603,7 @@ [] ], "text-decoration-valid.html.ini": [ - "5581e2c7c9004879c3f8f01173be3e92c583b294", + "2b5f537b7e9932c5086d3c3014448c636cfb1942", [] ] }, @@ -318889,7 +319173,7 @@ [] ], "transform-box-computed.html.ini": [ - "26df7437ce71abbe5c7e77ce2137cf0b2e031e33", + "18ba243046e91d20c180f78897e3b4f706394fe4", [] ], "transform-box-valid-expected.txt": [ @@ -318897,7 +319181,7 @@ [] ], "transform-box-valid.html.ini": [ - "2d431297f59a5613cc81148eb66d4a289562ad64", + "26d3b9f8527994471e1248878e6dc1ac31186f14", [] ], "translate-parsing-valid-expected.txt": [ @@ -320215,7 +320499,7 @@ [] ], "transition-timing-function-valid.html.ini": [ - "766805fba87f565b8a33a3aa0f49abecfe18bad3", + "a59e6a926b025e978418e718fa8a3c6d256821a8", [] ] }, @@ -320224,7 +320508,7 @@ [] ], "properties-value-001.html.ini": [ - "a96638419922bfcfe9551c212624877a53201cf7", + "93eaf14349605d3564f3422122e8f60aa5c2c6a1", [] ], "properties-value-002-expected.txt": [ @@ -320232,7 +320516,7 @@ [] ], "properties-value-002.html.ini": [ - "56b0fa56d4be2426b3e21691317e165259b40cda", + "dfcb7b7de41a374d670b08b44932174c0b65fd46", [] ], "properties-value-003-expected.txt": [ @@ -320240,7 +320524,7 @@ [] ], "properties-value-003.html.ini": [ - "f245dab15a76bed3d30cf78b156be32e425e306f", + "eccf5a87a6a589df92394ba8ca71b3d6db23206e", [] ], "properties-value-auto-001-expected.txt": [ @@ -320260,7 +320544,7 @@ [] ], "properties-value-inherit-001.html.ini": [ - "ced24ecab20e4860f2d192ff3aa71418a42ed00b", + "22253cfd7780ff8cfd00f10eff36c83d23149bfc", [] ], "properties-value-inherit-002-expected.txt": [ @@ -320268,7 +320552,7 @@ [] ], "properties-value-inherit-002.html.ini": [ - "6346b7c161a647c7a9ea72735f951053cf52e448", + "02866a0909c8a55c8d9aca3036ee92ea2e4c335e", [] ], "reference": { @@ -320518,7 +320802,7 @@ [] ], "idlharness.html.ini": [ - "5a42f252fc3b0e73d7f8627239d62be3abba4871", + "e1e8dcf355f593190f0acb75d396f6466414c2c3", [] ], "resources": { @@ -320545,7 +320829,7 @@ [] ], "normalize-tokens.tentative.html.ini": [ - "edbe02b0c80d514b2baf5951d48b5243e28e220f", + "d6e1c1705bb4bbaa8a13eb8bae3e93069eb407fa", [] ] }, @@ -320565,7 +320849,7 @@ [] ], "cssHSL.html.ini": [ - "fcce24dcd5c311f045e6a37fedc449e6f6598913", + "c45ebd867a636e50c6391abd7e81b773f5e86482", [] ], "cssHWB-expected.txt": [ @@ -320573,7 +320857,7 @@ [] ], "cssHWB.html.ini": [ - "9bf803016ab5da877310f808672b9bc3107b86ad", + "e4f7a7b24651db26ba02c278f90fec14fd1cfcac", [] ], "cssLCH-expected.txt": [ @@ -320581,7 +320865,7 @@ [] ], "cssLCH.html.ini": [ - "cc425cbce150fd19c1116cd7257740a1ec6a7f4c", + "3e1872ef6429b3d9b7fd5969f41480b025389e89", [] ], "cssLab-expected.txt": [ @@ -320589,7 +320873,7 @@ [] ], "cssLab.html.ini": [ - "53e8fc531858677943ceb22fe38d7c03da9cad38", + "8c0d94b256e6dc89b8d741dfaec6eac495f55fe6", [] ], "cssOKLCH-expected.txt": [ @@ -320597,7 +320881,7 @@ [] ], "cssOKLCH.html.ini": [ - "82f75aa0bbe253a5ad77d0b508e3433e0925b047", + "0a4f896126293e5c88503546aee90f6499573ca3", [] ], "cssOKLab-expected.txt": [ @@ -320605,7 +320889,7 @@ [] ], "cssOKLab.html.ini": [ - "b348f3654686e129d471ba802ae9d8a9dd30d6b1", + "b4abed43836635fe765df4a2e12f826827e16701", [] ], "cssRGB-expected.txt": [ @@ -320613,7 +320897,7 @@ [] ], "cssRGB.html.ini": [ - "5c562224259dfd93a127db482a43a6888e59146d", + "2b412f23304e838bbf4cfc46ea4722010b5f3965", [] ], "numeric-objects": { @@ -320644,7 +320928,7 @@ "the-stylepropertymap": { "computed": { "computed.tentative.html.ini": [ - "b952ff28a156ba32b83cca2be61f7183198292fd", + "81fc391a70ee804cf102df5ad0d7de0f11c2a728", [] ], "get.html.ini": [ @@ -320706,7 +320990,7 @@ [] ], "alignment-baseline.html.ini": [ - "075a54d470b899149f2e63701de4abe5730904da", + "db695c623bb0477df6412721ef2ca36cc58484df", [] ], "all-expected.txt": [ @@ -320714,7 +320998,7 @@ [] ], "all.html.ini": [ - "9bb81a725ff10845699f7bce707d13a8282f29ed", + "43f6e799905d8a6f84c7d452ff9a07e691760891", [] ], "animation-delay-expected.txt": [ @@ -320722,7 +321006,7 @@ [] ], "animation-delay.html.ini": [ - "6210f8f687e0b3d86c00f3f95f790d1c839b8511", + "c3362e8fb80557bd3c80521be95fc59538823b0b", [] ], "animation-duration-expected.txt": [ @@ -320746,7 +321030,7 @@ [] ], "animation-name.html.ini": [ - "04236a05e2ba3651afbc9facd38f746b6a0cd963", + "ebc0ef3c1ff53fdafb32c9f259e505af74d736c9", [] ], "background-expected.txt": [ @@ -320758,7 +321042,7 @@ [] ], "background-position.html.ini": [ - "f57341e03f87943805e409fb0c74f0d97a2cf61a", + "5a88cf62bfc596d154c3c8992f319a3041b82ad3", [] ], "background-repeat-expected.txt": [ @@ -320766,7 +321050,7 @@ [] ], "background-repeat.html.ini": [ - "3a193e88e31f5dc822210e60b1efa15a133464bb", + "8b278c514eefec05563bb74fa1078a0bdb23c7d4", [] ], "background-size-expected.txt": [ @@ -320778,7 +321062,7 @@ [] ], "background.html.ini": [ - "a9d352b7bbf34ba92ebd4de9ff07dd45c45546be", + "7cc18ba5df63ca3b62e41adc83fbe6ab9f4c26bb", [] ], "block-size-expected.txt": [ @@ -320786,7 +321070,7 @@ [] ], "block-size.html.ini": [ - "7384c11e28812eb1bd05475ec49e3de948035d13", + "85f188b8c08f13f0c33d033be2d48aaae08d9992", [] ], "border-image-outset-expected.txt": [ @@ -320810,7 +321094,7 @@ [] ], "border-image-width.html.ini": [ - "c59be3ee81a488888808cf24c3742a24e64cc5ca", + "6ed2d23d81ba5a030a37f0b0824e7baa3f2d7230", [] ], "border-radius-expected.txt": [ @@ -320818,7 +321102,7 @@ [] ], "border-radius.html.ini": [ - "d015071b948c0d8f54e94454f648e8bc66150e4f", + "2b1422e481fcd821045f8ec411e530c3a1cd2acd", [] ], "break-expected.txt": [ @@ -320834,7 +321118,7 @@ [] ], "clip-path.html.ini": [ - "0e3955c11c73a6b14c0711fe13b7889be71e6cf0", + "52eeb175f278a6fe49c76d38966e77d3384caa6f", [] ], "container-name-expected.txt": [ @@ -320842,7 +321126,7 @@ [] ], "container-name.html.ini": [ - "04ee2140ef5cc3754037b128e1b8bee4e60090f5", + "73af6220e7deac3b4b9fae2b0847f1dacf054bfc", [] ], "dominant-baseline-expected.txt": [ @@ -320858,7 +321142,7 @@ [] ], "fill-color.html.ini": [ - "31421ee66dd4a2eeb10a50e96d36d068e9146cde", + "dd88a42b9ca2e23fb44dc5b0aaac9c1510e93ebb", [] ], "fill-expected.txt": [ @@ -320870,7 +321154,7 @@ [] ], "fill-opacity.html.ini": [ - "021a785c21cc90f766a9d2f3a5bf4febdbccc04f", + "c1ab3ed41a5cab74ed5bcb0325fe6f212cd96fdf", [] ], "fill.html.ini": [ @@ -320906,7 +321190,7 @@ [] ], "flood-opacity.html.ini": [ - "fdde889ad66b224a9674e6216f95a9be3922b978", + "fcbd624cf36a7c63cdf64d8015c6dbbef2c4f499", [] ], "font-language-override-expected.txt": [ @@ -320914,7 +321198,7 @@ [] ], "font-language-override.html.ini": [ - "1eb09b746986bef37588b9257c30423c8c0bf457", + "05bb1aaf37e5f3da9fa7cf7982c64b3c6dc1c856", [] ], "font-palette-expected.txt": [ @@ -320930,7 +321214,7 @@ [] ], "font-presentation.html.ini": [ - "5ad7916d6ac51ad1b631e0fea00e1e03e196cf94", + "f78444feea690622b1cdad7ebcac93f4b01d2d67", [] ], "font-size-adjust-expected.txt": [ @@ -320946,7 +321230,7 @@ [] ], "font-size.html.ini": [ - "f13d940c73ab9deab8975f2c60f1de05c1d97d04", + "b051e603728b8670943084a0cfa48fb88292fa14", [] ], "font-stretch-expected.txt": [ @@ -320954,7 +321238,7 @@ [] ], "font-stretch.html.ini": [ - "357f26bd0ee1079deff7d21880820d947579f734", + "70fcedb5fbec031d11e00ed3f05ca86d836b401d", [] ], "font-style-expected.txt": [ @@ -320978,7 +321262,7 @@ [] ], "font-variant-emoji.html.ini": [ - "2526776e269213c86b742e8893ba1c1bd8c7fc6d", + "d3dfca9f1046f2e842a3dd4eb3d59cc453cc874c", [] ], "font-weight-expected.txt": [ @@ -320986,7 +321270,7 @@ [] ], "font-weight.html.ini": [ - "660be04571b83ac3e853342d2c5c86d401a95285", + "2adea678015de50d03931c8a98fbe0d2d7fe745a", [] ], "gap-expected.txt": [ @@ -321002,7 +321286,7 @@ [] ], "grid-auto-columns-rows.html.ini": [ - "68888bf126131285517a157d7486720422c9d629", + "5aaa955ec4e05f217b10e53770c086314e760111", [] ], "grid-gap-expected.txt": [ @@ -321010,7 +321294,7 @@ [] ], "grid-gap.html.ini": [ - "0c0d3e07143eba6b27a784f1b9f67f58156f601c", + "2f24cd373261e96bd8ec827ff6d1887675c13240", [] ], "grid-template-columns-rows-expected.txt": [ @@ -321018,7 +321302,7 @@ [] ], "grid-template-columns-rows.html.ini": [ - "a2484780a34c8dad328b7273fea991039e1a3560", + "110cd6c9ada3db2868c55ae586d9dd8dec43d847", [] ], "height-expected.txt": [ @@ -321026,7 +321310,7 @@ [] ], "height.html.ini": [ - "bfd5ea056b531dde0b06982be2c428d4d0a79d8a", + "92a06b3e50a1fb00340c3da0e9769457f4900f82", [] ], "image-rendering-expected.txt": [ @@ -321034,7 +321318,7 @@ [] ], "image-rendering.html.ini": [ - "3970d649112bffc4aa9fa46066a41e3f9b786b23", + "bbe0713b882c064f207af01be6573f46102c9d84", [] ], "inline-size-expected.txt": [ @@ -321042,7 +321326,7 @@ [] ], "inline-size.html.ini": [ - "65e308f89b3cdcca101594d52672619711934331", + "0bc743dd5d194971c0b3ba6941c2f773af444138", [] ], "line-height-expected.txt": [ @@ -321058,7 +321342,7 @@ [] ], "list-style-type.html.ini": [ - "c0a7b41cca9ec2a151e34c8a3cf27909bc9fc8d2", + "8f7936bf865a9b0287751ea63520e2b5abe65222", [] ], "logical-expected.txt": [ @@ -321066,7 +321350,7 @@ [] ], "logical.html.ini": [ - "cdbb0bd18a91bec679b55e28835c4b8b2b41e216", + "e52c9a69bf8faabf87b39294025e6f3667e1d857", [] ], "margin-expected.txt": [ @@ -321074,7 +321358,7 @@ [] ], "margin.html.ini": [ - "763d9aed62acd262b4b5695ccd0a3b508c1427a3", + "86ff24e6ce9773b798bd7ec079e4827135dd965b", [] ], "mask-image-expected.txt": [ @@ -321082,7 +321366,7 @@ [] ], "mask-image.html.ini": [ - "945f9c17161d63982a954190865c12b8081ccd4a", + "4f82bfb8335b715619600d34c91031cd8fff51bd", [] ], "object-position-expected.txt": [ @@ -321122,7 +321406,7 @@ [] ], "opacity.html.ini": [ - "ad564561938e47f3673827f45f904c40d0b5b1c7", + "10e58f436384422b36fcc056302cc548b3446fa6", [] ], "outline-style-expected.txt": [ @@ -321138,7 +321422,7 @@ [] ], "overflow-wrap.html.ini": [ - "6f1d7299fe6648d16104c85cf1ee8632d0d95e7c", + "92ba446fa256364d5ef5cb9f3a67eb8af846175d", [] ], "padding-expected.txt": [ @@ -321146,7 +321430,7 @@ [] ], "padding.html.ini": [ - "52194a3e30b48481178a305ffcdb01c7efe835f2", + "21e67984ef6697e40adf80baf1b63bbe33dc8135", [] ], "page-expected.txt": [ @@ -321162,7 +321446,7 @@ [] ], "paint-order.html.ini": [ - "96999f9a25b75daeece7173ee254a8c2b2e7961f", + "3137957e8ec19dee5dab05fd04f1147414cd3ac2", [] ], "perspective-origin-expected.txt": [ @@ -321192,7 +321476,7 @@ [] ], "scroll-padding.html.ini": [ - "7c79b5f0bfc1735e46efcd79f9d11e8335a39c0a", + "842c41fdc170b9d180b4ef08c013c315e67e7d77", [] ], "scroll-snap-align-expected.txt": [ @@ -321200,7 +321484,7 @@ [] ], "scroll-snap-align.html.ini": [ - "e4a5537ecf04711fefac2a42446b57521f8165a6", + "0e70ae4a90415f41e60f65d398c02b2a1128117a", [] ], "scroll-snap-type-expected.txt": [ @@ -321224,7 +321508,7 @@ [] ], "shape-outside.html.ini": [ - "3168b60a06f8d25729c2b0fcb74cc97352990a81", + "23a5cee3492d03bf62492dd886656510eed6bd49", [] ], "speak-expected.txt": [ @@ -321232,7 +321516,7 @@ [] ], "speak.html.ini": [ - "63701a3a97b017eca6858852248602299b2e0f0c", + "9cfbbcc48a958d2648a9e9800ff29a0a2d7d69e7", [] ], "stop-opacity-expected.txt": [ @@ -321240,7 +321524,7 @@ [] ], "stop-opacity.html.ini": [ - "eda78c5eca022bf8e5fd42b5e19d05a75ee7aa21", + "1ca0b4b27f03eca7575da264eacc1df7a5105cee", [] ], "stroke-dasharray-expected.txt": [ @@ -321248,7 +321532,7 @@ [] ], "stroke-dasharray.html.ini": [ - "4085665e290bfa4aa2250ff34e06768d24549b80", + "9c9e8c9c22b5e2d8ab0fb5411e0a7224bb07d8b8", [] ], "stroke-dashoffset-expected.txt": [ @@ -321256,7 +321540,7 @@ [] ], "stroke-dashoffset.html.ini": [ - "41416388262e3652c91eeca582cd98dd4a9f0a39", + "2d900f0fd2f72a6478a30b563771b7fc0c38067f", [] ], "stroke-expected.txt": [ @@ -321268,7 +321552,7 @@ [] ], "stroke-linejoin.html.ini": [ - "6d2a09fc2e293b07ae56117cadd8dc850dd0920f", + "31574b41c4ac52ca3196d266be763300ab7db32d", [] ], "stroke-miterlimit-expected.txt": [ @@ -321284,7 +321568,7 @@ [] ], "stroke-opacity.html.ini": [ - "b8a8b50d33f2dd9172881e06628f2e8a1fb984dd", + "6161e87139548cca188d95fc94d2d781719c5634", [] ], "stroke-width-expected.txt": [ @@ -321292,7 +321576,7 @@ [] ], "stroke-width.html.ini": [ - "3366c2540654f2ec0be5da77050e23d07da631e9", + "79ce201c3582bee30df3c68433d04abbd129918b", [] ], "stroke.html.ini": [ @@ -321320,11 +321604,11 @@ [] ], "text-decoration-skip.html.ini": [ - "a0bd688c78a1d2efdfe895651e622dfce77ca9df", + "b52a945fbbde378f1f0a9accb8c03afcbb1d24bd", [] ], "text-indent.html.ini": [ - "df7a6d8a9c323bf8083d1a743906521e9022a06b", + "780fc6506af410767486e51edcf3c60c4f34ee0a", [] ], "text-justify-expected.txt": [ @@ -321332,7 +321616,7 @@ [] ], "text-justify.html.ini": [ - "f1f4e4cd0f2af1cb34407ed7273c95f5b6a96cb0", + "fd9a92e71a0a728c95ed7524d5225f3a9c00a447", [] ], "text-overflow-expected.txt": [ @@ -321340,7 +321624,7 @@ [] ], "text-overflow.html.ini": [ - "b067b04a6c51c8a81a58116c3b63300a953b69b4", + "5e5a0481bb0f105e4e8e36a5ee4a5647655eeef1", [] ], "text-size-adjust-expected.txt": [ @@ -321348,7 +321632,7 @@ [] ], "text-size-adjust.html.ini": [ - "2f6591c260103c8e2213659534857d357df4bc85", + "7c8634dcd26e6fc940ed56055a509f19c6ea6693", [] ], "text-transform-expected.txt": [ @@ -321388,7 +321672,7 @@ [] ], "width.html.ini": [ - "c6c0b0a6bc45138cf8ac64a06271595971d17298", + "7e2fdb80d6a730345cc626bd6a0ed98b85114d49", [] ], "word-spacing-expected.txt": [ @@ -321396,7 +321680,7 @@ [] ], "word-spacing.html.ini": [ - "fac5b5dfcc68e1ee9137ff53b29e02ae6b908642", + "4c30909a904039930b6459627846962fa345bc17", [] ], "word-wrap-expected.txt": [ @@ -321404,7 +321688,7 @@ [] ], "word-wrap.html.ini": [ - "56c5a0e76325eb046596bd752fc5e1f3a050c4c5", + "0f379891cbb69de8b9ae43085621dfa818fcbbee", [] ], "writing-mode-expected.txt": [ @@ -321412,7 +321696,7 @@ [] ], "writing-mode.html.ini": [ - "1e00128a43682234cc2589114f87c69e8b255607", + "0ba598fdc7138ce8266bb8d96f3d8e2e6ddf18d2", [] ] } @@ -321611,7 +321895,7 @@ [] ], "kind-of-widget-fallback-input-button-border-inline-start-width-001.html.ini": [ - "7dcd817f746113233616f393724f4c05bbefd158", + "95412ba6b08e920902e1eacc3039a9daa212477c", [] ], "kind-of-widget-fallback-input-button-border-top-left-radius-001.html.ini": [ @@ -321638,6 +321922,10 @@ "57c6eb8f88bb60ce4dac4ee4d4727c8597a0c812", [] ], + "kind-of-widget-fallback-input-reset-border-inline-end-style-001.html.ini": [ + "eb2f5fbc407abc8145c7569df8b1e81c729982f9", + [] + ], "kind-of-widget-fallback-input-reset-border-left-color-001.html.ini": [ "5e986e0106069e78502c5c7a58f4f59b7724824d", [] @@ -321686,6 +321974,10 @@ "5981cd7fe9796312b82645e87b2da6ad7f00ada1", [] ], + "kind-of-widget-fallback-input-search-text-background-size-001.html.ini": [ + "b67ebbbbccecb8d16a9ec57093c3de3955715f06", + [] + ], "kind-of-widget-fallback-input-search-text-border-block-end-style-001.html.ini": [ "bf85076c27628a5885b91254e618404c279873a7", [] @@ -322113,7 +322405,7 @@ [] ], "webkit-user-modify-02.html.ini": [ - "58674b1da50f14a010b54bac380e0edb2e2ca039", + "5f03fd0fd428ff429321754b607fb89654986aa7", [] ], "webkit-user-modify-03-expected.txt": [ @@ -322130,7 +322422,7 @@ [] ], "inheritance.html.ini": [ - "cb2b66e751fd7b8a9aedd00534a67224c91ac75a", + "1cb6dffdadca461a102f9f0c85b07e4abebdfaa7", [] ], "input-security-auto-sensitive-text-input-ref.html": [ @@ -322142,7 +322434,7 @@ [] ], "input-security-computed.html.ini": [ - "529aaa9170bb33d084affbf205e3ba11d319bb53", + "3bfb5bc72dcb5f622301113f83bf8726763d03dc", [] ], "input-security-non-sensitive-elements-ref.html": [ @@ -322162,7 +322454,7 @@ [] ], "input-security-parsing.html.ini": [ - "bca1a58ecd7abb69e48c0e7872ca844f31d2fefd", + "7933e4bdacda932ecb0bd54c2f3285fe81e9a9ee", [] ], "nothing-below-ref.html": [ @@ -322207,7 +322499,7 @@ [] ], "outline-valid-optional.html.ini": [ - "b07e4927d2eeaf7b55365175dfe0e7b29b19f5da", + "d28abeeec2d8f3f18382e00144ba8b22a9f824fb", [] ], "resize-invalid-expected.txt": [ @@ -323409,7 +323701,7 @@ [] ], "calc-interpolation.html.ini": [ - "e008517e088f7611c41a9667a01e76708baa5404", + "41b00f5ce402757ecdbcc290aa900e509f6c4934", [] ] }, @@ -323466,7 +323758,7 @@ [] ], "calc-background-position-003.html.ini": [ - "15b4cb2b3d42e977fda13a7ffaa5e3eeb1710452", + "04ceedabb101ca029db7a9a73de8fd63970becf7", [] ], "calc-background-position-1-ref.html": [ @@ -323486,7 +323778,7 @@ [] ], "calc-catch-divide-by-0.html.ini": [ - "b518ab7257c8b8d4f8002595ff687e879eae41af", + "5889c085afa6f75b7628dbcaeda8868df5459db6", [] ], "calc-ch-ex-lang-ref.html": [ @@ -323514,7 +323806,7 @@ [] ], "calc-infinity-nan-computed.html.ini": [ - "fbb94b169be5ea39120858e31aa022a5dad87ec7", + "bbd995d7f1c39e3bc7338ca9fd4c73a77e148da4", [] ], "calc-infinity-nan-serialize-angle-expected.txt": [ @@ -323594,11 +323886,11 @@ [] ], "calc-serialization-002-expected.txt": [ - "4c9f22c4a16805dce2a9b0f054fad32a150990e4", + "7a00b086952517d5ddc316b3109b5656841df30b", [] ], "calc-serialization-002.html.ini": [ - "138c62d30179aa71f5641b90954069e3ede6035f", + "a493205acd09a94473b3ae861887de0b18088fb9", [] ], "calc-serialization-expected.txt": [ @@ -323678,7 +323970,7 @@ [] ], "exp-log-compute.html.ini": [ - "6d05f6b77e3afd4d3a9f56f6fc447d91532a603d", + "beb0f9fc620395b26bdb0037cd14bdbb92ae1e61", [] ], "exp-log-serialize-expected.txt": [ @@ -323686,7 +323978,7 @@ [] ], "exp-log-serialize.html.ini": [ - "f8246bbe7abb1a60a1f9cb439044ceb3475e4c88", + "65ba5095e1044754fecdf183e092af312a5099a6", [] ], "hypot-pow-sqrt-computed-expected.txt": [ @@ -323730,7 +324022,7 @@ [] ], "minmax-angle-serialize.html.ini": [ - "31fb8ecd454b79ad10d7f102e98d2a837be33b33", + "37309303f1ed3007809559877294a9d409d7070c", [] ], "minmax-length-percent-serialize-expected.txt": [ @@ -323738,7 +324030,7 @@ [] ], "minmax-length-percent-serialize.html.ini": [ - "732171d4db057c0d7eb890acdf30d5c81905fafc", + "f7fdfd7d590c3af05b31e9347e14eb2f3367856c", [] ], "minmax-length-serialize-expected.txt": [ @@ -323746,7 +324038,7 @@ [] ], "minmax-length-serialize.html.ini": [ - "cedabbdb7ad876cae6f673e8f2c6dc82cd2b3a52", + "3467297c31badc8b6768d2d44eb7d914bdc158a6", [] ], "minmax-number-serialize-expected.txt": [ @@ -323754,7 +324046,7 @@ [] ], "minmax-number-serialize.html.ini": [ - "884e5fdcd302ea62039353e4cddae0085bdcbffb", + "a19cd6e676912e9a18645b61ede75d4c3bf4174e", [] ], "minmax-percentage-serialize-expected.txt": [ @@ -323762,7 +324054,7 @@ [] ], "minmax-percentage-serialize.html.ini": [ - "7122c3e870f3537f9753ee9478c4477da52d4fdc", + "b9f7b50a6a3edd2baf5ed57f5f2e79aee36e10ab", [] ], "minmax-time-serialize-expected.txt": [ @@ -323770,7 +324062,7 @@ [] ], "minmax-time-serialize.html.ini": [ - "f4051888ae7b19c4c7d20bd93431ebc36f389a1f", + "29d0471f588d9a2addc6e35b50b62c8ab7bc02c7", [] ], "negative-calc-to-non-negative-integer-ref.html": [ @@ -323918,7 +324210,7 @@ [] ], "round-function.html.ini": [ - "223e66485dc19d551555332de10652907712eeca", + "57f9dc3d27514209c8a30a8b7f90737e56d201c9", [] ], "round-mod-rem-computed-expected.txt": [ @@ -323926,7 +324218,7 @@ [] ], "round-mod-rem-computed.html.ini": [ - "d6162c889e31d3bb66c6e09eea4c511121acb656", + "e7daa6eedd81cff2b7263b4d44980a4a6e84b135", [] ], "round-mod-rem-serialize-expected.txt": [ @@ -323934,7 +324226,7 @@ [] ], "round-mod-rem-serialize.html.ini": [ - "c2cf0447912f91d20e61a0264d061eb8a882bf56", + "4eac495149576b3d26991589758a8a0b6b53990d", [] ], "signs-abs-computed-expected.txt": [ @@ -324167,7 +324459,7 @@ [] ], "empty.html.ini": [ - "fa2066e5b370525debc2f002b9cc020b413f4486", + "905e32eb8ba5790f7148e5130992ef58b2a0e493", [] ], "fragment-only-expected.txt": [ @@ -324175,7 +324467,7 @@ [] ], "fragment-only.html.ini": [ - "041228a69e6f63304e87a963754b0ef696c2abe8", + "045f66ede195086e08ce5e5de254af916d89852c", [] ], "support": { @@ -324278,7 +324570,7 @@ [] ], "variable-definition.html.ini": [ - "a10d1a8aa4e159838b6d5e3bbb43de9f6450c11e", + "386cc260e77c7afaf79a4c43ccacf92df6ac44ad", [] ], "variable-external-font-face-01-ref.html": [ @@ -325225,7 +325517,7 @@ [] ], "will-change-invalid.html.ini": [ - "dbed7a14b691d5f762f5025ed7c4d302cc2e954c", + "0877459af1e6d8f3c3ab90405a8aef916405906f", [] ] }, @@ -325716,6 +326008,10 @@ "6aa46d087c5fd6588e787d0dbe93759aaabe0051", [] ], + "range-input-appearance-native-vertical-rtl.optional.html.ini": [ + "3620009c1535e547d123d51fd1d7e4bf7094dd21", + [] + ], "range-input-appearance-native-vertical.optional.html.ini": [ "1ba77e710954512e1923bf4366a2072375b78b3a", [] @@ -325724,6 +326020,10 @@ "0dd5a531922b893ec45a76cfbbb361fc73bcfc75", [] ], + "range-input-appearance-none-vertical-rtl.optional.html.ini": [ + "ef89e70f6a20c2c552c70334593736c2e23b5f6a", + [] + ], "range-input-appearance-none-vertical.optional.html.ini": [ "5773abce28c318e35d5becbc793ddd4d365d6a0b", [] @@ -325777,7 +326077,7 @@ [] ], "text-input-block-size.optional.html.ini": [ - "b141aa133f8b6e08978917ceec7fac1eb10c55e9", + "9d5402461f50f1cf2ab524c7e2f9e01cf71c25b4", [] ], "textarea-appearance-native-horizontal.optional.html.ini": [ @@ -325805,7 +326105,7 @@ [] ], "textarea-rows-cols-sizing.html.ini": [ - "092707fe3ab95a810f05733b5a17547ea0a5cdb5", + "60b24043be32466a518aa0232ed9251783d4f96b", [] ] }, @@ -328104,7 +328404,7 @@ [] ], "CSSKeyframesRule.html.ini": [ - "ee897473ea517e9764c06d19e19a7e75ee4d996b", + "65cf628a604afed238edf4357ad81d26f3887919", [] ], "CSSStyleSheet-constructable-baseURL.tentative-expected.txt": [ @@ -328112,7 +328412,7 @@ [] ], "CSSStyleSheet-constructable-baseURL.tentative.html.ini": [ - "a321e08277f2b60be19873cf1b7020440b2e2fe6", + "f4028f5a022dbedb627634965f7c41c25b571f77", [] ], "CSSStyleSheet-constructable-concat-ref.html": [ @@ -328124,7 +328424,7 @@ [] ], "CSSStyleSheet-constructable.html.ini": [ - "6df3852139825157c39dcfef21d5560e5b3891cb", + "b3f73686e831f43caa87188c26b02a71a35972b7", [] ], "HTMLLinkElement-disabled-alternate-ref.html": [ @@ -328144,7 +328444,7 @@ [] ], "cssom-getPropertyValue-common-checks.html.ini": [ - "85390b362128b211f82f9e019ef94d5c5d27e354", + "0ecbbe2c0690575334221671759f88ab5d967bb4", [] ], "cssstyledeclaration-cssfontrule.tentative-expected.txt": [ @@ -328152,7 +328452,7 @@ [] ], "cssstyledeclaration-cssfontrule.tentative.html.ini": [ - "684213873ea3190e27d35c7f823524e341502cef", + "4789b982ec898069ee4f864665037f6002e24c64", [] ], "cssstyledeclaration-csstext-all-shorthand-expected.txt": [ @@ -328196,7 +328496,7 @@ [] ], "font-variant-shorthand-serialization.html.ini": [ - "ca6c7e569983cbd7fb6782f686a7d155010dd255", + "e39cd32d156ef8bc68bb02f62304fe4204b8f427", [] ], "getComputedStyle-detached-subtree-expected.txt": [ @@ -328204,7 +328504,7 @@ [] ], "getComputedStyle-detached-subtree.html.ini": [ - "bc6a6ae37fc44796e4a6966376a18fd342a4b3a6", + "cf3372122e3daa9cc2e6b46d8223039602158283", [] ], "getComputedStyle-insets-absolute-expected.txt": [ @@ -328212,7 +328512,7 @@ [] ], "getComputedStyle-insets-absolute.html.ini": [ - "aa4a018b622055308d0067dbf77b98224cdef8fe", + "250658376abcb8af1aa7a2f67c273207815c68fc", [] ], "getComputedStyle-insets-fixed-expected.txt": [ @@ -328220,7 +328520,7 @@ [] ], "getComputedStyle-insets-fixed.html.ini": [ - "25aa5d5120e73a208a75289551fe1ca50c346661", + "125f1cbf4bb54a98505a8846f246f50fa0fa4bc0", [] ], "getComputedStyle-pseudo-expected.txt": [ @@ -328244,7 +328544,7 @@ [] ], "idlharness.html.ini": [ - "38d70008107ce142046c8cc19bd0625919cbb290", + "b04976d2081525721f81cfc7e7448e8dca0f1fe9", [] ], "insertRule-from-script-ref.html": [ @@ -328276,7 +328576,7 @@ [] ], "serialize-custom-props.html.ini": [ - "b99372182c708f8af7be71ea4eb158a59c4e3d3e", + "38d12b2c212461bc69b89209934cc369274113d7", [] ], "serialize-values-expected.txt": [ @@ -328284,7 +328584,7 @@ [] ], "serialize-values.html.ini": [ - "ddc40bba42e2e8bf4e970719e90d39d8a71d0368", + "d4c6c5cb6c2de244cb73e2ca29adcaff43800e0e", [] ], "shorthand-values-expected.txt": [ @@ -328292,7 +328592,7 @@ [] ], "shorthand-values.html.ini": [ - "9aba1750540340e4f60b9d837ce523ba070541f6", + "b5f432a5134176c97b1009c4350c5920d5edd18b", [] ], "stylesheet-replacedata-dynamic-ref.html": [ @@ -328550,7 +328850,7 @@ [] ], "cssom-getBoxQuads-001.html.ini": [ - "02e2128c0f05dfd76c7eb0251d9a2bdfd93d19c8", + "38990c9d2a4fecb2793e30fd0a08b8be561ee5ba", [] ], "cssom-getBoxQuads-002-expected.txt": [ @@ -328566,11 +328866,11 @@ [] ], "elementFromPosition.html.ini": [ - "3bcaefe288e87fd0304804f8a0de5df5cbb924a5", + "09a8eb9168f6751d4df483bbb57fc77d75f8089a", [] ], "getBoundingClientRect-shy.html.ini": [ - "697e6ed791acce9e5c0e2be8db8cf49a2752c941", + "bb9c783d8f314484d26eefe1377429792380b23d", [] ], "idlharness-expected.txt": [ @@ -328578,7 +328878,7 @@ [] ], "idlharness.html.ini": [ - "92b35dbc27a76a89973c7721247f82240d548ce0", + "62924a50275510cdac78219773269c05f7b1b22a", [] ], "iframe.html": [ @@ -328624,7 +328924,7 @@ [] ], "scroll-behavior-main-frame-root.html.ini": [ - "bb3a12cc5dbe55e3fa8f3796d9e49f91ef297751", + "3196772e74f4ff9d009c95a1eac9b9e9f9682da7", [] ], "scroll-behavior-main-frame-window.html.ini": [ @@ -328644,7 +328944,7 @@ [] ], "scrollIntoView-sideways-lr-writing-mode-and-rtl-direction.html.ini": [ - "db472dfe533ab644bc250d7209c664954febcdca", + "f62c323f48981d596c234956e1a0be22df719740", [] ], "scrollIntoView-sideways-lr-writing-mode-expected.txt": [ @@ -328652,11 +328952,11 @@ [] ], "scrollIntoView-sideways-lr-writing-mode.html.ini": [ - "5686e2ea04314afc200a2bcc80c8cbd832a09d65", + "c40247207ac9c83e626ce9aae7556b163714ca2e", [] ], "scrollIntoView-sideways-rl-writing-mode-and-rtl-direction.html.ini": [ - "41a1698db1efa54bd91bab1e3f83e9a138338be8", + "0a07ac4c8df5abb56d23d469295dcc35c79178ff", [] ], "scrollIntoView-sideways-rl-writing-mode-expected.txt": [ @@ -328664,7 +328964,7 @@ [] ], "scrollIntoView-sideways-rl-writing-mode.html.ini": [ - "cd32d0118457c94592934b3b53a3360366886f17", + "956498c0674d70267ec9e4bb0ca7dbf6f22de9b8", [] ], "scrollIntoView-stuck.tentative.html.ini": [ @@ -328876,7 +329176,7 @@ [] ], "table-client-props.html.ini": [ - "e321c3dfe9e56de1220688c9dd820e48483e3989", + "f7e438a23cb9ce71645ccb92d6991944d9d024a7", [] ], "table-scroll-props-expected.txt": [ @@ -328884,7 +329184,7 @@ [] ], "table-scroll-props.html.ini": [ - "745c51cd4c7587bb74cacb2afbec4bcd1c08b05b", + "e2647ab428ef03fe252dec0db7d6ab56a68b44ba", [] ] }, @@ -329400,7 +329700,7 @@ [] ], "idlharness.any.js.ini": [ - "4a8a40b92eef7bd5dc765f09e3303a9c9b30f2e4", + "e8323c46a904fa6c9ceecbd6a137427398cabf1a", [] ], "parsing": { @@ -329864,7 +330164,7 @@ [] ], "idlharness.any.js.ini": [ - "737ceb26f7e4bc1ca08b0191bded5945878b8205", + "01ef208456d6a4689204e801e65ec2328e8309ac", [] ], "support": { @@ -329888,7 +330188,7 @@ [] ], "media-query-matches-in-iframe.html.ini": [ - "e0829db3d9282a76cc3fd2039bfbf968080f3a6f", + "205bf45683a027fa5a579851879539762c1223a9", [] ], "mq-gamut-001.html.ini": [ @@ -329908,7 +330208,7 @@ [] ], "navigation-controls.tentative.html.ini": [ - "c4b3aa5891b9af4c238e65a92128769ecd072452", + "31bac48fb59e9a3daf1ce00f29872ca67ace6fc9", [] ], "prefers-color-scheme-svg-image-normal-ref.html": [ @@ -330197,7 +330497,7 @@ [] ], "offset-shorthand.html.ini": [ - "62eb8f58bffb903886d94a8971b3fb2f32aa96f3", + "56b359e690518f9829145334f1d7750112439b5f", [] ] } @@ -330430,7 +330730,7 @@ [] ], "dir-pseudo-on-input-element.html.ini": [ - "cda9468d357b519684526aa9cc1e00260818a2a9", + "b1ea48a59c4c697410c8d1deb40a9d95a8f939e2", [] ], "dir-selector-change-001-ref.html": [ @@ -330568,16 +330868,20 @@ "a4e075f95e7850f6310da3a6b79912c029d621da", [] ], + "location-pseudo-classes-in-has.html.ini": [ + "934003dec1c05092644a70916cd2003a44e1c49a", + [] + ], "logical-combinations-in-has-expected.txt": [ "5695721fc8827da2eb1b25998402639ca4b16323", [] ], "media-loading-pseudo-classes-in-has.html.ini": [ - "468b68e88d12f17e8e881a00280ec808b68d4989", + "636911eea21f29d3b9196b94793fecda70f39503", [] ], "media-pseudo-classes-in-has.html.ini": [ - "f03b8b1bf7d660a0c14952c40eda11bee6a20729", + "a9dfc084faf42b747d3f338acd2e2e5b558f8319", [] ], "modal-pseudo-class-in-has.html.ini": [ @@ -330616,6 +330920,10 @@ "f28d358cdc53d71501fd35c0c6dc2db41e042b2b", [] ], + "nth-child-of-pseudo-class-ref.html": [ + "b06f47aafa30d19d2cbf4ff5d43b23d9a920dd28", + [] + ], "nth-child-of-sibling-ref.html": [ "0388fc7c5ab112271e3b2d54293765c8ad87eff0", [] @@ -330652,6 +330960,10 @@ "3eb330f58c50ed9c3cc5aefd67477e05dd1a9c33", [] ], + "nth-last-child-of-pseudo-class-ref.html": [ + "370e8887c5c6dc79826201e88489f8177b38135f", + [] + ], "nth-last-child-of-sibling-ref.html": [ "349a7b66fb5f4480e5f994dc635b27623dcc3672", [] @@ -330679,11 +330991,11 @@ ], "media": { "media-loading-state.html.ini": [ - "6a19b04ad245ea0ff38c80982b6f34dd4156e533", + "7c51c0b60222477cac39c52b171103b17aa29346", [] ], "media-playback-state.html.ini": [ - "e5cedb528d7df7c720e7d6472db2ced85ced2e8f", + "1035dce3cc82a9c3f6a9063070707587d3a2e48e", [] ], "sound-state-expected.txt": [ @@ -330691,7 +331003,7 @@ [] ], "sound-state.html.ini": [ - "e91a9529f4dafb941da503f212528739a511e296", + "715212e5ca80947f3c77f04c343712647ade40e5", [] ] }, @@ -331303,7 +331615,7 @@ [] ], "ElementInternals-accessibility.html.ini": [ - "442621897e1fa97a6687d916ebaac28db2dc2914", + "94a6251d30ed954bc559080ba9aadd83cf0f6d72", [] ], "HTMLElement-constructor-customized-bulitins-expected.txt": [ @@ -331319,7 +331631,7 @@ [] ], "HTMLElement-constructor.html.ini": [ - "cbed805fee31211bfd81734fd369dacd0f7c19fd", + "64e9bb356009e560d7c74d7de50ec0547c8d2515", [] ], "META.yml": [ @@ -331368,7 +331680,7 @@ [] ], "newtarget-customized-builtins.html.ini": [ - "2cd694a9d42686ab25af46826481efc08950c364", + "c3c73e1dbfc2a6ce00b9268998d7d2fdea3b3207", [] ], "newtarget-expected.txt": [ @@ -331376,7 +331688,7 @@ [] ], "newtarget.html.ini": [ - "bc2e3cf1804163ce2ea680cf2736343600b4ad9b", + "f8347886f64401c173b962bbd9b13ff1be4733fe", [] ] }, @@ -331615,7 +331927,7 @@ [] ], "idlharness.any.js.ini": [ - "c3c32238a40dd9c9c8f3bcc824fb3aea6c989f7b", + "81bbce0add8cd9deb048c4bffcf13ad6b7234343", [] ], "idlharness.any.worker-expected.txt": [ @@ -332314,7 +332626,7 @@ [] ], "EventListener-handleEvent-cross-realm.html.ini": [ - "fd28f5e58ce49dc7ca2c86b41aa657ab269b1d02", + "c18c2221903dcd6fa939ce5f98517216d71d42a4", [] ], "EventListener-handleEvent-expected.txt": [ @@ -332378,7 +332690,7 @@ [] ], "relatedTarget.window.js.ini": [ - "ac4db0eb0afc3ef982ad5581a2d6238d0595d800", + "4585e5a41fa31eef00e7cf6db7e521d4fe8affa9", [] ], "resources": { @@ -332498,7 +332810,7 @@ [] ], "DOMImplementation-createDocument.html.ini": [ - "8d8da272cfbaee77364692219afaa81cf7bd85e9", + "5d76f52a9ac289ef8c048daf7b77a5653d009644", [] ], "DOMImplementation-createHTMLDocument.js": [ @@ -332742,7 +333054,7 @@ [] ], "Document-createElementNS.html.ini": [ - "63463f30a142ca82d13631115a98828f8feada41", + "dfe2060f34d6b936429b58297bac9fb9600c6a39", [] ], "Document-createElementNS.js": [ @@ -332754,7 +333066,7 @@ [] ], "Document-createEvent.https.html.ini": [ - "f708e08feb9000db94c75d08ec84a0788164eeb6", + "9621f39c4a5946ec9cc3ab9faf2db3e1c2f18f1a", [] ], "Document-createEvent.js": [ @@ -333088,12 +333400,20 @@ "5a884ce65add9a794aa76a284a9f7c6328837d3c", [] ], + "DOMParser-parseFromString-url-base-pushstate.html.ini": [ + "fd8f202903dc8649f2ed2a0d810b5d2da1ce94e1", + [] + ], + "DOMParser-parseFromString-url-pushstate.html.ini": [ + "866ea603fb3e711c492b962be6adf8b984065822", + [] + ], "DOMParser-parseFromString-xml-expected.txt": [ "56c0d19a1a3637168e75cffdd2d4e40ac3b114a8", [] ], "DOMParser-parseFromString-xml.html.ini": [ - "71c34f65405848dfeb56d246ca05aeef45f8143e", + "8eac5d3567b9dc7da85634e44140d1617594b55c", [] ], "META.yml": [ @@ -333109,7 +333429,7 @@ [] ], "XMLSerializer-serializeToString.html.ini": [ - "f94275628c880770fa18c42167007e8232c951b3", + "1c80059fce0298be993ef626ed52c4baa7ece759", [] ], "innerhtml-01-expected.txt": [ @@ -333193,7 +333513,7 @@ [] ], "resolver-callback-interface-cross-realm.tentative.html.ini": [ - "d129b32d4a21171c50d7680bca98e47d891c885e", + "76ce0afecdcee43cd3f7ff07d2f2743b5587b866", [] ], "resolver-callback-interface-expected.txt": [ @@ -333201,7 +333521,7 @@ [] ], "resolver-callback-interface.html.ini": [ - "4d8b018c129225ffda6326a4449c208a823f33f5", + "6c97ec80019ca25da2bed4c761c74d3fa47584fd", [] ], "resolver-non-string-result-expected.txt": [ @@ -333209,7 +333529,7 @@ [] ], "resolver-non-string-result.html.ini": [ - "fc041a3532358f31cd254f6f4596ba90870e7349", + "a12e82a0b2af60a10a1010726a558c39af2608e7", [] ], "resources": { @@ -333415,7 +333735,7 @@ [] ], "event.html.ini": [ - "e193c5b42bf9cb4c35aa4335bef3a254117cf68b", + "2198e689fc5d20b4b10b1bbd266f39a8b18c6183", [] ], "include": { @@ -333450,7 +333770,7 @@ [] ], "cefalse-boundaries-deletion.html.ini": [ - "828bcf1d5e50c2de85719fb81ee50e10b2a19bf9", + "9a65e494fcd8d472d18935f346e2f1ac4b3b697d", [] ], "cloning-attributes-at-splitting-element.tentative-expected.txt": [ @@ -333458,7 +333778,7 @@ [] ], "cloning-attributes-at-splitting-element.tentative.html.ini": [ - "3a65381dfb61c07c6d3f900376d6a7bc07ce8faf", + "bb8c4bed3370518cb3c2349fd7789e6f4b260b96", [] ], "delete-expected.txt": [ @@ -333466,7 +333786,7 @@ [] ], "delete-in-child-of-head.tentative.html.ini": [ - "2e4be68d8f2d9785dac4d062454f6c218bd2060e", + "e86644e81172896c8f0f5a01a40d40c56b5d9388", [] ], "delete-in-child-of-head.tentative_designMode=off_method=backspace-expected.txt": [ @@ -333486,7 +333806,7 @@ [] ], "delete-in-child-of-html.tentative.html.ini": [ - "487232db5527fe881a71dae0ea2d2b3cdeb23455", + "9e2029c6307d96d5b38b694b96e304faf7d37f85", [] ], "delete-in-child-of-html.tentative_designMode=off_method=backspace-expected.txt": [ @@ -333506,7 +333826,7 @@ [] ], "delete-in-last-definition-list-item-when-parent-list-is-editing-host.html.ini": [ - "0f410f0ddcef6b0b33d4398b2cb6e4993acac17d", + "ad59242213ed112cdbe2e9da69310d496850d72f", [] ], "delete-in-last-definition-list-item-when-parent-list-is-editing-host_action=Backspace-expected.txt": [ @@ -333518,7 +333838,7 @@ [] ], "delete-in-last-list-item-when-parent-list-is-editing-host.html.ini": [ - "11f0275947e69c78548867e7ae0071ea5816178e", + "afc01bf8702b8fa4317fcd1e38af722551cb3ef7", [] ], "delete-in-last-list-item-when-parent-list-is-editing-host_list=ol_action=Backspace-expected.txt": [ @@ -333562,7 +333882,7 @@ [] ], "editing-around-select-element.tentative.html.ini": [ - "6cfd2e3fb717a670703445e4a499b00ef1638034", + "91a8b5b0010e93db8f8d52bd927922c6eeb7e29d", [] ], "editing-around-select-element.tentative_delete-expected.txt": [ @@ -333582,7 +333902,7 @@ [] ], "empty-elements-insertion.html.ini": [ - "b57301fe69c284f5cb3add9a8a56ee6c38fae433", + "94ebae8c6ff6a0bff8aaa799f7d9ae2daf80a914", [] ], "exec-command-with-text-editor.tentative-expected.txt": [ @@ -333590,7 +333910,7 @@ [] ], "exec-command-with-text-editor.tentative.html.ini": [ - "ca609ab221d61d0c953a2733763586b9c232986e", + "ac14c6d5ea62212c3497091f0116e02908a0fd5c", [] ], "exec-command-without-editable-element.tentative-expected.txt": [ @@ -333598,7 +333918,7 @@ [] ], "exec-command-without-editable-element.tentative.html.ini": [ - "91f3b8ced52d70094e6128fa0b76fbcb3faf6bc8", + "af28f823e65450b523b68853972469d9a98923bd", [] ], "extra-text-nodes-expected.txt": [ @@ -333610,7 +333930,7 @@ [] ], "formatblock-preserving-selection.tentative.html.ini": [ - "da3d09f460667bf398ab0fe79260f67559ab7abe", + "6bb438a859432c552f14bb1b60ab055eb64982e2", [] ], "formatblock-preserving-selection.tentative_styleWithCSS=false_block=address-expected.txt": [ @@ -333674,7 +333994,7 @@ [] ], "insert-paragraph-in-void-element.tentative.html.ini": [ - "e1818394e5ae9a28596169a0a76379c37bb5eef0", + "f8540237c05f64e80274f4c10bed059d71c93bd4", [] ], "insert-text-in-void-element.tentative-expected.txt": [ @@ -333682,11 +334002,11 @@ [] ], "insert-text-in-void-element.tentative.html.ini": [ - "55272713e3357e9781d9a65484a58a2b576c512e", + "fd3b9e5a523d0e5dd624c8d8f096a60b22d26d11", [] ], "inserthtml-do-not-preserve-inline-styles.html.ini": [ - "423e80754d99f16fb27d4db25105a0cf0d3ca563", + "bdfd828c0db5f4531468d820dff94cd46bdabe0d", [] ], "inserthtml-do-not-preserve-inline-styles_stylesAtInsertionPoint=bold_stylesInserting=hilitecolor-expected.txt": [ @@ -333694,7 +334014,7 @@ [] ], "insertlinebreak-with-white-space-style.tentative.html.ini": [ - "e78429999300f6861a8928766f2226625a3eeb0c", + "2c8ff0c337d845fd3c0a529ea81706e4463f4a14", [] ], "insertlinebreak-with-white-space-style.tentative_pre-line-expected.txt": [ @@ -333702,7 +334022,7 @@ [] ], "insertparagraph-in-child-of-head.tentative.html.ini": [ - "4ea195acfc0a18787c3b69b8fbdeb12bf857dcf6", + "2cb60e617687946f61ec2bb2ddc8ed18d8abba04", [] ], "insertparagraph-in-child-of-head.tentative_designMode=off_white-space=normal-expected.txt": [ @@ -333738,7 +334058,7 @@ [] ], "insertparagraph-in-child-of-html.tentative.html.ini": [ - "7dbf993fcc3516261f76f13bcec8919d66b189e9", + "996aef189c96303cb0f80b94f26780bff4512d6d", [] ], "insertparagraph-in-child-of-html.tentative_designMode=off_white-space=normal-expected.txt": [ @@ -333774,7 +334094,7 @@ [] ], "insertparagraph-in-inline-editing-host.tentative.html.ini": [ - "afae5342a093bee85f50a629d6c42b7df0b7fec9", + "89b392252a233a5cc61d2a1d30975a4638a29667", [] ], "insertparagraph-in-inline-editing-host.tentative_white-space=normal_display=block_method=enter-expected.txt": [ @@ -333946,7 +334266,7 @@ [] ], "insertparagraph-with-white-space-style.tentative.html.ini": [ - "2bc707a8f8de24067263335f02b50aee7a949740", + "2f4874bddd3072a1700c5d86f3e34c1dff83082f", [] ], "insertparagraph-with-white-space-style.tentative_white-space=pre-line_command=insertParagraph-expected.txt": [ @@ -333958,15 +334278,15 @@ [] ], "join-different-white-space-style-left-line-and-right-paragraph.html.ini": [ - "871c9d861e0a9f8da645146b8dd6e0b264cec842", + "694b6730483b80993b5e96b6646cc29ce0350e2b", [] ], "join-different-white-space-style-left-paragraph-and-right-line.html.ini": [ - "4d8bc690af35cd9746c3a4466cc61da669fe84f5", + "4c157d5ba22004fd01d7e15149be89105f65bee7", [] ], "join-different-white-space-style-paragraphs.html.ini": [ - "13b7596b15b70a3b1b29ee904c7c00c7fb571ed2", + "f19fad982750e32677721c89510f4ebc52b71f6c", [] ], "join-different-white-space-style-paragraphs_method=backspace_left-white-space=normal_right-white-space=nowrap-expected.txt": [ @@ -334258,7 +334578,7 @@ [] ], "link-boundaries-insertion.html.ini": [ - "4c1b2d9c3238fb574b6275487dc28674942739c5", + "355a55364bc23024edca7bab124ba53a898280c1", [] ], "restoration-expected.txt": [ @@ -334266,7 +334586,7 @@ [] ], "restoration.html.ini": [ - "b808103adf0a3cc4d1646f666da9d6a745bbcd0d", + "ead9769e19933cebac0f6e0f0fbc3551f0ece5ee", [] ], "selectall-in-editinghost-expected.txt": [ @@ -334286,7 +334606,7 @@ [] ], "typing-around-link-element-after-joining-paragraphs.html.ini": [ - "20c6c00f5ea398f3e7eaad34d60e2d2baca0cef6", + "92891afe05d3e2197942b8d1a4c8050265e5bf04", [] ], "typing-around-link-element-after-joining-paragraphs_action=Backspace-expected.txt": [ @@ -334298,7 +334618,7 @@ [] ], "typing-around-link-element-at-collapsed-selection.tentative.html.ini": [ - "8dcfbcf1c96626d914e2f17237becd9c7afc2b21", + "8f0d895cc086e10f06883a468d49bb94bd2d26ff", [] ], "typing-around-link-element-at-collapsed-selection.tentative_target=DesignMode-expected.txt": [ @@ -334318,7 +334638,7 @@ [] ], "typing-around-link-element-at-non-collapsed-selection.tentative.html.ini": [ - "9acd4f7965b79a38e19128edaaa6be7884e58a78", + "4d1341a4775c45c7da3950eabb49c26451acfb41", [] ], "typing-around-link-element-at-non-collapsed-selection.tentative_target=DesignMode-expected.txt": [ @@ -334348,7 +334668,7 @@ [] ], "backcolor.html.ini": [ - "ae2974abe4b6cfad1626c33f6f8553195b3fdbe6", + "bbb34407569d317a54d938180a99450c3ab1e408", [] ], "bold.html.ini": [ @@ -334364,7 +334684,7 @@ [] ], "createlink.html.ini": [ - "93404e0ed2af4fc8377f440c7fae0d9968876173", + "a037e69d55ada045e764997b276b33bd7b2f222a", [] ], "delete-expected.txt": [ @@ -334412,7 +334732,7 @@ [] ], "fontname.html.ini": [ - "1019ef9926dd71940d4d06b39904879a0535a1c9", + "b115bb6c3e0c978132d496f801e745e0f950d620", [] ], "fontname_1-1000-expected.txt": [ @@ -334432,7 +334752,7 @@ [] ], "fontsize.html.ini": [ - "acde3eae70c024c4b64fa12028503269977a29c3", + "e45ff6414582ceb6ed5c0463c7e9e66593349b19", [] ], "fontsize_1-1000-expected.txt": [ @@ -334452,7 +334772,7 @@ [] ], "forecolor.html.ini": [ - "18d5206e5fd166c94a7ad440f7966a9da79bc40c", + "0e9aaaf9dacfbcbd2bdf554b4cf11bcd6f2c1fbb", [] ], "forecolor_1-1000-expected.txt": [ @@ -334472,7 +334792,7 @@ [] ], "formatblock.html.ini": [ - "62c6b0a33c209efc865571514c2bca40e311ed31", + "f7ffe372af588f6de8456820e8dd3fb3b4c3dfa3", [] ], "formatblock_1-1000-expected.txt": [ @@ -334500,7 +334820,7 @@ [] ], "forwarddelete.html.ini": [ - "bc4350ca26c23343e957bb1be0ea35fed60c1e86", + "0fd9fdf920b3935184ec1ecf6244c32811557ffc", [] ], "forwarddelete_1-1000-expected.txt": [ @@ -334544,7 +334864,7 @@ [] ], "hilitecolor.html.ini": [ - "bb69a2c2b71154e9718a16e70166713babfcd9d6", + "fc70e0a65e1f479172f8c43de851be9bef2127a8", [] ], "indent-expected.txt": [ @@ -334552,7 +334872,7 @@ [] ], "indent.html.ini": [ - "7f8946eb95f7b962eca7a84f9626817d283a0eb6", + "7f5c5520346208ee299c4baf5de4c4d678086fb1", [] ], "insert-list-items-in-table-cell-expected.txt": [ @@ -334568,7 +334888,7 @@ [] ], "inserthorizontalrule.html.ini": [ - "c643070d32776e8b8e4109e64816b45c846b39f4", + "3838a9f8bdc82dea2be55b375c1fcfc6ea9556fd", [] ], "inserthtml-expected.txt": [ @@ -334576,7 +334896,7 @@ [] ], "inserthtml.html.ini": [ - "5a237da98f2ff878f19bfef83c2ace523f1780da", + "a7c0b0a6ca6d023c4b2dbd96040958f1a856656e", [] ], "insertimage-expected.txt": [ @@ -334584,7 +334904,7 @@ [] ], "insertimage.html.ini": [ - "e9c80df80dc786e6e9f5ab5e488c99f2219817a4", + "afe940e7bd7793982e8f02b909744bae21abb90b", [] ], "insertlinebreak-expected.txt": [ @@ -334592,7 +334912,7 @@ [] ], "insertlinebreak.html.ini": [ - "92a660d183052d1ed479327c389541fa20f0eae3", + "8e2e7cb918e4494adf499818da365aa04080440e", [] ], "insertorderedlist-expected.txt": [ @@ -334600,7 +334920,7 @@ [] ], "insertorderedlist.html.ini": [ - "d31a7db479858ee5e61920eb092b43bc1d458cab", + "83923252dfcc52626ab2b1c0608e6f8008006370", [] ], "insertorderedlist_1-1000-expected.txt": [ @@ -334616,7 +334936,7 @@ [] ], "insertparagraph.html.ini": [ - "250469f7a4319a9a2d91920d38c201055066a2c3", + "d1f8588a19c6193cb31c26e9e0148d2b288c0cb8", [] ], "insertparagraph_1-1000-expected.txt": [ @@ -334652,7 +334972,7 @@ [] ], "inserttext.html.ini": [ - "2cb2cf4665ed1c270e189feeb1bedf9c549c8633", + "527bb6451e52a89a4f60ae042813ec003332fd89", [] ], "inserttext_1-1000-expected.txt": [ @@ -334672,7 +334992,7 @@ [] ], "insertunorderedlist.html.ini": [ - "c3840eead8ee3aa77c129fdd32ed619a383483ca", + "2b21b7c21b45c2fd9cf9101bb4a240c5bc0607aa", [] ], "insertunorderedlist_1-1000-expected.txt": [ @@ -334728,7 +335048,7 @@ [] ], "justifyleft.html.ini": [ - "51deff413f0050b91507a1f4589c26c7ddff0abe", + "69783566a46d2929edecc268711b63f3ce5d4163", [] ], "justifyleft_1-1000-expected.txt": [ @@ -334764,7 +335084,7 @@ [] ], "misc.html.ini": [ - "aafef5b73f2e46263263cf44f41898c320bec00e", + "d3442d59fa467fa8824fd90cd4970771eb78165f", [] ], "multitest-expected.txt": [ @@ -334772,7 +335092,7 @@ [] ], "multitest.html.ini": [ - "6b071d45aa585b1ec572e8d0d59717e49531f740", + "3d43df3658c8b2b678ad54216289f8e3967909bf", [] ], "multitest_1-1000-expected.txt": [ @@ -334820,7 +335140,7 @@ [] ], "outdent.html.ini": [ - "d4057ae4dcec12f343a3cc02a1c05e58ac2bdea8", + "90dcae252af375e6b43d89da849255d18ffb0920", [] ], "outdent_1-1000-expected.txt": [ @@ -334840,7 +335160,7 @@ [] ], "removeformat.html.ini": [ - "e938d3adb87c29a2a33cb1ccd7ca4a3db3237830", + "f9fa5cf50c2b4b3d8541d38f85888a2b52d907dd", [] ], "strikethrough.html.ini": [ @@ -334872,7 +335192,7 @@ [] ], "undo-redo-after-mutation.html.ini": [ - "9e5a91c488b5338348d204f44e2ec8e24364c21d", + "8605dbe44c8679e71bd883f938a39efe07e01cf2", [] ], "unlink-expected.txt": [ @@ -334880,7 +335200,7 @@ [] ], "unlink.html.ini": [ - "1f2c2f7f7611ff6f8e27dbe73d991efbb2c6920e", + "1e20d2bd3af8250fe4585beae9797c030a6d71e9", [] ] } @@ -334987,7 +335307,7 @@ [] ], "encodeInto.any.js.ini": [ - "542951f5451f027b15cbac5d42f469416f43aba9", + "8cf2a91650a67be893815dbfd9b8df17f77afcf1", [] ], "encodeInto.any.serviceworker-expected.txt": [ @@ -335748,7 +336068,7 @@ [] ], "decode-utf8.any.js.ini": [ - "c35581c19e6ee126d34db926e7c67024cdad16df", + "ed86a87c798a0bbc481150d892fde89306f5031b", [] ], "decode-utf8.any.serviceworker-expected.txt": [ @@ -335768,7 +336088,7 @@ [] ], "invalid-realm.window.js.ini": [ - "0f16e272af50471806f064bdeace916129ba3c0c", + "e4dff1dba2634cf35485c46a6822b624c6203e02", [] ], "resources": { @@ -335791,7 +336111,7 @@ [] ], "textdecoder-copy.any.js.ini": [ - "a8d563f2a1414ecece9446326bb5d51cfd07dd7c", + "45dd5408cb0ed761a51aa14c9399930620267319", [] ], "textdecoder-copy.any.serviceworker-expected.txt": [ @@ -335815,7 +336135,7 @@ [] ], "textdecoder-streaming.any.js.ini": [ - "b74f9af1cd59da73f9a07ca044e0e69a57a1c4d0", + "20c8e010f8d6ce09cb1a87ad26018a634d201867", [] ], "textdecoder-streaming.any.serviceworker-expected.txt": [ @@ -335831,7 +336151,7 @@ [] ], "unsupported-labels.window.js.ini": [ - "1e6a9cbf18fffd0794d65109234561b47916052f", + "f88a1aaa709e6fe36117c5797603c5715668025e", [] ] }, @@ -336453,7 +336773,7 @@ [] ], "idlharness.window.js.ini": [ - "3af11b1f40c31382e803c71fac0d3b64ae42653c", + "e276a2f2893157bb5d51824149d503e9728da279", [] ], "support": { @@ -336529,7 +336849,7 @@ [] ], "idlharness.any.js.ini": [ - "856be5dc6d35accedea5b1c31fa0d9908fc66eba", + "041dca3a4da95b64f0ba4ab302aafccea43fc74a", [] ], "idlharness.any.serviceworker-expected.txt": [ @@ -336623,7 +336943,7 @@ [] ], "eventsource-constructor-url-bogus.any.js.ini": [ - "7e65e1147796c46b0f85b79c3cc4b815274b477b", + "507b894c63a52e44be8cd1fbe5c2398e79a0502f", [] ], "eventsource-constructor-url-bogus.any.serviceworker-expected.txt": [ @@ -336651,7 +336971,7 @@ [] ], "format-utf-8.any.js.ini": [ - "bcc06dc66dde6ab5baceec3b567de29f25930984", + "e9cdf8bb77ceb255a8530b1d1be4e6d0826d1e6f", [] ], "format-utf-8.any.worker-expected.txt": [ @@ -336659,7 +336979,7 @@ [] ], "request-credentials.any.window.js.ini": [ - "38c892129232a9d929552da24ed7d6e2bc835f44", + "dc32b3ddb9a6e3f0f1f43dad5bdb2701057fcdb0", [] ], "request-redirect.any.window.js.ini": [ @@ -336846,7 +337166,7 @@ ] }, "trust-token-redemption-default-feature-policy.tentative.https.sub.html.ini": [ - "1e7e3e3878b8cac0d6aa1ef2ca41fb8ede19170d", + "3bda24cb7e0867bddca9448fcf66422711dc4c2a", [] ], "trust-token-redemption-supported-by-feature-policy.tentative.html.ini": [ @@ -337091,7 +337411,7 @@ [] ], "general.any.js.ini": [ - "8dcfabd22ef25649993174cffc04af90fb965e4c", + "1551659ebcdf4cb51755e0be6d560c65153df57c", [] ], "general.any.serviceworker-expected.txt": [ @@ -337111,7 +337431,7 @@ [] ], "request.any.js.ini": [ - "dbb579891c482c75b31208740b71373c534eb838", + "3c0340e07c1502929c19ffadc88c3691f9a2569e", [] ], "request.any.serviceworker-expected.txt": [ @@ -337127,7 +337447,7 @@ [] ], "serviceworker-intercepted.https.html.ini": [ - "bc7e5f4c4a9de228206b1117e02a6de864a80854", + "662161b266cd76036078261d598227f7b332fbda", [] ] }, @@ -337149,7 +337469,7 @@ [] ], "http-response-code.any.js.ini": [ - "4cf35b3f527e63119d2d082cd931af6804e275c5", + "f711629f0fa61ae91fd40f4f8c41b4592705c598", [] ], "http-response-code.any.serviceworker-expected.txt": [ @@ -337169,7 +337489,7 @@ [] ], "response-null-body.any.js.ini": [ - "7be5513b93bb8fe692ea497490b68bf309f568bc", + "1a623948a5e63fba491dd628a8272d1ee3d95768", [] ], "response-null-body.any.serviceworker-expected.txt": [ @@ -337195,7 +337515,7 @@ [] ], "formdata.any.js.ini": [ - "2fbdce4291b34f89aaa9566d0b6eb88e05e20da1", + "3dd8e35f2b28aa95b2ae6f6cc69d67aa58332439", [] ], "formdata.any.worker-expected.txt": [ @@ -337207,7 +337527,7 @@ [] ], "mime-type.any.js.ini": [ - "6260bd47455caa28fa0c036cfc674aeb8c10ecfe", + "83c149a4e5d2a6d66b5086109969a016d0c81a8c", [] ], "mime-type.any.worker-expected.txt": [ @@ -337221,7 +337541,7 @@ [] ], "cors-preflight-redirect.any.js.ini": [ - "66f079cb868eb4ba257f2ccde27526c442d64d78", + "9e59970dcb1a35963e032d2ab2b33afcec93c4b6", [] ], "cors-preflight-redirect.any.sharedworker-expected.txt": [ @@ -337261,7 +337581,7 @@ [] ], "authentication-redirection.any.js.ini": [ - "ebcadb4625e7f75ac1d9d3527f5a9459b4931d3c", + "45d3ae219797706837f075e355ac0fa0f594e469", [] ], "authentication-redirection.any.serviceworker-expected.txt": [ @@ -337283,7 +337603,7 @@ [] ], "header-setcookie.any.js.ini": [ - "9f52c2a1f24a6c1f8374e275647a3be7e52b15df", + "df1aaa85faa48557a0e30eaf21fff8188785c87d", [] ], "header-setcookie.any.serviceworker-expected.txt": [ @@ -337304,7 +337624,7 @@ [] ], "idlharness.any.js.ini": [ - "15a0324b7edfe95389e4b026ff72bc4c46df8ac0", + "e6c58a2fb5b0d6c3bec92d52d639db9962cfaec2", [] ], "idlharness.any.serviceworker-expected.txt": [ @@ -337403,7 +337723,7 @@ [] ], "redirect-empty-location.any.js.ini": [ - "e5e94f23295d0b6e66cfd9e22a810b8be94d3288", + "e3effb9d01683e1524f7d27b12d27b4abe02ccc3", [] ], "redirect-empty-location.any.serviceworker-expected.txt": [ @@ -337423,7 +337743,7 @@ [] ], "redirect-location.any.js.ini": [ - "f81bd4e39133c2eae3082e4b753913679a68074a", + "96a5e9a22bceadf55f5637ac2f3fec7016203f30", [] ], "redirect-location.any.serviceworker-expected.txt": [ @@ -337543,7 +337863,7 @@ [] ], "request-consume-empty.any.js.ini": [ - "d12ee01c28c4d64e540606824475f094ad412dd8", + "ffade24f0a9822e0812e6b936f0151fd9d7a0503", [] ], "request-consume-empty.any.serviceworker-expected.txt": [ @@ -337567,7 +337887,7 @@ [] ], "request-disturbed.any.js.ini": [ - "7f3d8b8a2cb0666a8c6b03aa500a9f791c578c94", + "4ec099d67bc4cf707411fc0c2a2dd9a09227a7b2", [] ], "request-disturbed.any.serviceworker-expected.txt": [ @@ -337591,7 +337911,7 @@ [] ], "request-error.any.js.ini": [ - "7eefc5d7ac14de28588e68a9f703380df3dbd4ae", + "987bf3ce74cf412182530c17f97b07a53a31e46c", [] ], "request-error.any.serviceworker-expected.txt": [ @@ -337627,7 +337947,7 @@ [] ], "request-structure.any.js.ini": [ - "46d8bdb3634ab6e0d7cb3cc75d91059aa06e1807", + "cbdd8318a6670b16b50541c0b19721f8ebe5155b", [] ], "request-structure.any.serviceworker-expected.txt": [ @@ -337821,7 +338141,7 @@ [] ], "response-clone.any.js.ini": [ - "80316b16240c06aff65ec496a777f17fac93228f", + "b7b39270572152b7b5b225ec808870963cf90490", [] ], "response-clone.any.serviceworker-expected.txt": [ @@ -337845,7 +338165,7 @@ [] ], "response-consume-empty.any.js.ini": [ - "5250be73a07a97006e665f05b0242b30f1deaedc", + "82f076325ba5d52826a035ca42d74c697e05daa1", [] ], "response-consume-empty.any.serviceworker-expected.txt": [ @@ -337865,7 +338185,7 @@ [] ], "response-consume-stream.any.js.ini": [ - "d2ba8ac6b1af22a2ac6663532e232cbf3ec7b737", + "a448d746efed32961360159a1044da24aeb84dda", [] ], "response-consume-stream.any.serviceworker-expected.txt": [ @@ -337889,7 +338209,7 @@ [] ], "response-error-from-stream.any.js.ini": [ - "af1ba2e622b35a315c4f986272e031095508e8b7", + "ea55f7f09c1694d77db59e09ff21fbebd51bcbb0", [] ], "response-error-from-stream.any.serviceworker-expected.txt": [ @@ -337909,7 +338229,7 @@ [] ], "response-stream-disturbed-by-pipe.any.js.ini": [ - "e35df71b02c5888bb2d6bcdc04f2745fe61e1281", + "55e4cc2fad8328b97a61f30815a1766772662bf6", [] ], "response-stream-disturbed-by-pipe.any.serviceworker-expected.txt": [ @@ -337936,7 +338256,7 @@ }, "connection-pool": { "network-partition-key.html.ini": [ - "e03994f57a3a1df6d3f4d72ff481c896a69da640", + "2068807069d5f90f1d1b12071f46705bf4b309e9", [] ], "resources": { @@ -338034,7 +338354,7 @@ ] }, "response.window.js.ini": [ - "9bcc0864970041cb6051112cb700d4aec35c235c", + "8f09c67860659c3619de703df177574636c1d434", [] ], "script.window-expected.txt": [ @@ -338042,7 +338362,7 @@ [] ], "script.window.js.ini": [ - "3e550b3cc6b88310f9a16617766f12bd430f5f3d", + "661dc7bf3a4993ea742d2e810a83b7547b707a9c", [] ] }, @@ -338238,7 +338558,7 @@ [] ], "response_block.tentative.sub.https.html.ini": [ - "29c012ef1e65b080886dda57480b52d181850314", + "6a510bae6cc3c0c243ecacf7c66b9c6b8362bf93", [] ], "script-resource-with-nonsniffable-types.tentative.sub.html.ini": [ @@ -338300,7 +338620,7 @@ [] ], "processing.any.js.ini": [ - "2fc1551909ab59dd71c27c790f49de9bcaebdc0e", + "374cd1475063a672987658e3cc650b6291ce6233", [] ], "processing.any.serviceworker-expected.txt": [ @@ -338336,7 +338656,7 @@ [] ], "lone-cr.window.js.ini": [ - "9f02cd44c2f5d805d23a0f1b8eef2c8326323987", + "01aaeb934862d677ac3b37df853d2294a1fa2fca", [] ], "resources": { @@ -338370,7 +338690,7 @@ [] ], "status-code.window.js.ini": [ - "26e8554ada57e6bc6625d5c17230c14be8eda5bb", + "065d2a48f07c259e4dbd2f880e2c9da10786e6a6", [] ] }, @@ -338396,7 +338716,7 @@ [] ], "cache-mode.any.js.ini": [ - "25def9d377f35258318d6e52a52900e8b9282a46", + "b0c5235e3e83f57545e15b9adb4628652a8ac2be", [] ], "cache-mode.any.serviceworker-expected.txt": [ @@ -338420,7 +338740,7 @@ [] ], "cc-request.any.js.ini": [ - "0ec7d76d5f01c54cd600ff3d97e964efda1c7568", + "45543f805f7736bb9f52e33322306ad0034d9375", [] ], "cc-request.any.serviceworker-expected.txt": [ @@ -338440,7 +338760,7 @@ [] ], "credentials.tentative.any.js.ini": [ - "d8e2757ad3ccf62a77ca36a3191c815a67e7e68b", + "ce32874501f5611cd371107eb31337a23152825d", [] ], "credentials.tentative.any.serviceworker-expected.txt": [ @@ -338464,7 +338784,7 @@ [] ], "heuristic.any.js.ini": [ - "b2abe24ae1cadef8120a1f06c8d19cda938771f7", + "015c1ee22b94987b8c832e5e2afd7defbacb5a8a", [] ], "heuristic.any.serviceworker-expected.txt": [ @@ -338492,7 +338812,7 @@ [] ], "invalidate.any.js.ini": [ - "3f9fca6af212cfd0e24e3be998a3b20cc59b7668", + "c7a0176e11cef87152cbb7c70265f1ae8fd1ab5b", [] ], "invalidate.any.serviceworker-expected.txt": [ @@ -338516,7 +338836,7 @@ [] ], "partial.any.js.ini": [ - "52d16fbb633f3f249a343f2a4a4335877e5ea4fb", + "b54e0bbab8f6132dfafe9ee0f35854cfdc2a38a4", [] ], "partial.any.serviceworker-expected.txt": [ @@ -338540,7 +338860,7 @@ [] ], "post-patch.any.js.ini": [ - "c009c7fdcc1ea7825d9b14107e1871d44db395ea", + "7235595b8593b927b6f0dfa89c4a686c8a6fd506", [] ], "post-patch.any.serviceworker-expected.txt": [ @@ -338586,7 +338906,7 @@ [] ], "vary.any.js.ini": [ - "05fb763531af16ccbe1dfa7500c3e58281530be8", + "d24ff6d5ddf074530de50f2622d08aa598066cc2", [] ], "vary.any.serviceworker-expected.txt": [ @@ -338877,15 +339197,15 @@ [] ], "appcache-manifest.https.sub.html.ini": [ - "fdf575f99df1c163b4f61520aad021e64caffeeb", + "7d405d1deda8af4f4020c70fc462a1f49a21513d", [] ], "css-images.https.sub.tentative.html.ini": [ - "57df66180070756cc17d2da5af6a071259ef664a", + "b5e1562318185d612bce020828b9d1533f3d73ce", [] ], "css-images.sub.tentative.html.ini": [ - "7b472064a58aa2810ed08155754669db4853a88e", + "ed2900aa87a4f28b26142a47f1e04c2159011d0a", [] ], "element-a.https.sub-expected.txt": [ @@ -338937,11 +339257,11 @@ [] ], "element-link-icon.https.sub.html.ini": [ - "1497c8d277061b5a6652cfaf254fa501add1183f", + "a5b6fbc87e317ce68752dd90d90c263c775d146a", [] ], "element-link-icon.sub.html.ini": [ - "e2e601ee0122df78727d0daf20742e9cb0dd71a6", + "965fcd578d01e27f362b778beb71a1cabe08052d", [] ], "element-link-prefetch.https.optional.sub-expected.txt": [ @@ -338953,7 +339273,7 @@ [] ], "element-video-poster.https.sub.html.ini": [ - "2965bff0fd265e5d4638a396563eddd14b698582", + "3e0f4310214487bcca7377e3a72308c6f5895886", [] ], "element-video.https.sub-expected.txt": [ @@ -338969,7 +339289,7 @@ [] ], "header-link.https.sub.html.ini": [ - "6346c6dbf6c79c320848bfcc5299e8d88b5a5600", + "b83ded3d055bb4d29cc854d99bcde04e23c016a1", [] ], "header-link.https.sub.tentative-expected.txt": [ @@ -338985,7 +339305,7 @@ [] ], "header-link.sub.html.ini": [ - "cb3931b0d7afa243563fbb9846815cfed7178421", + "a2e94e80b2600c57572ef310cd01455ded0f6d08", [] ], "svg-image.https.sub-expected.txt": [ @@ -338993,16 +339313,16 @@ [] ], "svg-image.https.sub.html.ini": [ - "be183287eb3b80035a7bb3d1a3843fce41ffe7d5", + "67ccc564496cffa2c66cc1436b44dac4cc4d2a53", [] ], "worker-dedicated-constructor.sub.html.ini": [ - "da6289c1350e26985fe621228331fbcfb802ce0d", + "bdc9d8f6cfd9189083a37adc6efaf1fbf557cf0d", [] ] }, "portal.https.sub.html.ini": [ - "667144ec6713a504a9f4d4200c68ac7575a555dd", + "a3f0e995d7dca6a69b890f755ffbfcd6b2cc80f1", [] ], "report.https.sub.html.sub.headers": [ @@ -339244,7 +339564,7 @@ } }, "trailing-dot.https.sub.any.js.ini": [ - "9c7bff08d397c280a9bb36cf06b0ff31b41ffb59", + "1b07e4e514823ffbea6592640c08a406ec83b237", [] ] }, @@ -339258,7 +339578,7 @@ [] ], "parsing-nosniff.window.js.ini": [ - "e77c74221dfb3ff24621f7b8b751321f0febf6fe", + "6567bb10407f8f4dc44a778441e557a4d52eb6ea", [] ], "resources": { @@ -339389,7 +339709,7 @@ [] ], "nosniff.sub.any.js.ini": [ - "134f31556a27f8928b1e1ff9cfee8ae5685a967c", + "d23aea1166eadbc993c2a7172ce6d34b8e67c1f1", [] ], "nosniff.sub.any.worker-expected.txt": [ @@ -339401,7 +339721,7 @@ [] ], "status.sub.any.js.ini": [ - "55c1fca1894346f2187dd8894792d73eeb2ab24f", + "eba380bffeb96dc6a61bcb996213feec4cb7c7f1", [] ], "status.sub.any.worker-expected.txt": [ @@ -339416,7 +339736,7 @@ [] ], "assorted.window.js.ini": [ - "0390b8e4c50488f8443fe6c9c508739ab9ed8fe5", + "a7fc3f7d0761d47d0b33b76299f3664a00e77991", [] ], "resources": { @@ -339436,7 +339756,7 @@ [] ], "blob.any.js.ini": [ - "3644c12043dd30b1ee85f88fb83b4eb7838252d7", + "d7a894e39b0f45206e7a128fb67095f591b41e55", [] ], "blob.any.worker-expected.txt": [ @@ -339520,7 +339840,7 @@ [] ], "subresource-fragments.html.ini": [ - "ef7a0e6a5210b565e0683b6435161a047125d795", + "cf71d3d6f490d851e333e93477407776b60b7f5d", [] ] }, @@ -339538,7 +339858,7 @@ [] ], "redirect-to-url-with-credentials.https.html.ini": [ - "c23ea31118c24aa3be624a557d2a0b120a658215", + "5191602b33802a5e4df4cf476a34a11e1785d06f", [] ], "support": { @@ -339554,7 +339874,7 @@ [] ], "fetch.any.js.ini": [ - "314358a6b2cdf58f4995a9c11e8cb6ce85037381", + "e5e053259b363b0b63f0cd476c4448aa66d66f3c", [] ], "resources": { @@ -339623,7 +339943,7 @@ ] }, "sandboxed_FileSystemDirectoryHandle-move.https.any.js.ini": [ - "149abc8c23eb6bbef0eebb84ec35d7b9ea989822", + "7a37c37315520b95daeadb9dc9cfe07261bbab9d", [] ], "script-tests": { @@ -339639,7 +339959,7 @@ [] ], "activeelement-after-calling-window-focus.sub.html.ini": [ - "e63caa7f33ef837a210efaee9a0184b68633df2b", + "6e81d73c5e259e1e48b3b849630b551ba00ab39a", [] ], "activeelement-after-focusing-different-site-iframe-contentwindow-expected.txt": [ @@ -339711,7 +340031,7 @@ [] ], "focus-event-after-iframe-gets-focus.html.ini": [ - "44a2e330f057cc838f30aa017bbeec3acd084b75", + "159c3c44270a17561719cff24e5d438110ac8035", [] ], "focus-restoration-in-different-site-iframes-expected.txt": [ @@ -340088,7 +340408,7 @@ [] ], "local-fonts-allowed-by-permissions-policy-attribute.https.sub.html.ini": [ - "e9445f376ad5538cd9f3eb2e74132acf70f274f6", + "55bbb2b02ab49410caa5b49dab1a2beca05869e4", [] ], "local-fonts-allowed-by-permissions-policy.https.sub.html.headers": [ @@ -341215,7 +341535,7 @@ [] ], "FileSystemDirectoryHandle-getFileHandle.https.any.js.ini": [ - "f63d298353095e8af290f18f035d91ae2e30c03c", + "8f554f78f3acca70eefb630b5b02926f94439b67", [] ], "FileSystemDirectoryHandle-getFileHandle.https.any.worker-expected.txt": [ @@ -341227,7 +341547,7 @@ [] ], "FileSystemDirectoryHandle-removeEntry.https.any.js.ini": [ - "e8686992890525e40f61456aa87b598ce28ae4ca", + "520d00feaec82704d376c619984df6df0b69fde7", [] ], "FileSystemDirectoryHandle-removeEntry.https.any.worker-expected.txt": [ @@ -341458,7 +341778,7 @@ [] ], "document-fullscreen-enabled-cross-origin.sub.html.ini": [ - "6fec3d3af1378637329e8aa14b23381d81e42ace", + "c631d96a6e4ffd0378bb41a5b77023bc10ebc703", [] ], "document-fullscreen-enabled-removing-allowfullscreen.sub-expected.txt": [ @@ -341558,7 +341878,7 @@ [] ], "element-request-fullscreen-namespaces.html.ini": [ - "8d4e3b2238f9b2125b0fbed834769bfc9234cf51", + "b94ca96c445414e402e875ba006cc5c7bd660d29", [] ], "element-request-fullscreen-non-top.html.ini": [ @@ -341610,7 +341930,7 @@ [] ], "historical.html.ini": [ - "44cc39d24ec8f325e97fd78276acf0f71a295517", + "59492dde49b0d8f9d6fe7e584416b7d382bb5af3", [] ], "promises-resolve.html.ini": [ @@ -341769,7 +342089,7 @@ [] ], "idlharness-extensions.https.window.js.ini": [ - "5b03058bd2ffac19a0288822863931a057c0ab97", + "27e8b68a7c2be43e6695918a11ad0cb8cbfb4ebf", [] ], "idlharness-extensions.window-expected.txt": [ @@ -341781,7 +342101,7 @@ [] ], "idlharness.https.window.js.ini": [ - "1413709e6edc73bc67d755d786d5fcc01f963b13", + "8c4678e9a761676d54fc5811b95d6b7fdc5900ab", [] ], "idlharness.window-expected.txt": [ @@ -341855,11 +342175,11 @@ [] ], "enabled-by-permission-policy-attribute-redirect-on-load.https.sub.html.ini": [ - "9d59460bfa2a1b6999e972667be14a4457b738b6", + "61a322b714246e788858307441efcc1ac5fba61f", [] ], "enabled-by-permission-policy-attribute.https.sub.html.ini": [ - "db0b707687585bb50fb5a18b7954e55995eedaea", + "5fb48479f825858d16274cb48afea337534ce1a9", [] ], "enabled-by-permissions-policy.https.sub.html.headers": [ @@ -341867,7 +342187,7 @@ [] ], "enabled-by-permissions-policy.https.sub.html.ini": [ - "ff0fbfd1fe7347788cf106b2ad46902dabb4454a", + "5c49a061e3a91ced2c65046c2f0fda37d51d316a", [] ], "enabled-on-self-origin-by-permissions-policy.https.sub.html.headers": [ @@ -341875,7 +342195,7 @@ [] ], "enabled-on-self-origin-by-permissions-policy.https.sub.html.ini": [ - "4c46e05a96b3e1e31fef7b5c3ba829c496ca6d03", + "c6894f877199b83331b856b9482ec47d07ed795d", [] ], "getCurrentPosition_IDL.https-expected.txt": [ @@ -341887,7 +342207,7 @@ [] ], "getCurrentPosition_permission_allow.https.html.ini": [ - "2d248127fa518905ce6ec83e3e2a9308b9e327b3", + "85be43b74b34c0e490045ac1c0e05af1d4441e97", [] ], "non-fully-active.https.html.ini": [ @@ -341927,7 +342247,7 @@ [] ], "GeolocationSensor-disabled-by-feature-policy.https.html.ini": [ - "bebb240d992177ec3a5c40f996c5af55af9b2ec2", + "b4403ba82447d3b62884bbdbac7e5b4d706c3d64", [] ], "GeolocationSensor-enabled-by-feature-policy-attribute-redirect-on-load.https-expected.txt": [ @@ -341943,7 +342263,7 @@ [] ], "GeolocationSensor-enabled-by-feature-policy-attribute.https.html.ini": [ - "bd6a645cc8765ecd0e13619c059938e4e0f652c3", + "55a65857eef6e0835e23802820c3b24a3b4434a5", [] ], "GeolocationSensor-enabled-by-feature-policy.https-expected.txt": [ @@ -341955,7 +342275,7 @@ [] ], "GeolocationSensor-enabled-by-feature-policy.https.html.ini": [ - "bf2e4c909d7a6631e7768af12d573813cb170c71", + "f7b1ec6a63997c1ac5d9330118f5290b83af557e", [] ], "GeolocationSensor-enabled-on-self-origin-by-feature-policy.https-expected.txt": [ @@ -341967,7 +342287,7 @@ [] ], "GeolocationSensor-enabled-on-self-origin-by-feature-policy.https.html.ini": [ - "1a23e0c08872476c4e92184ad0715bd9b2de0353", + "7e42e63fd9e585932133313719ba1c001d83466a", [] ], "GeolocationSensor-iframe-access.https-expected.txt": [ @@ -341975,7 +342295,7 @@ [] ], "GeolocationSensor-iframe-access.https.html.ini": [ - "d6403536bcab6c8ea18c866c9d265be1d43c7005", + "7a051cfc9a4b436d724e3eca1b08dbea47ccd391", [] ], "GeolocationSensor.https-expected.txt": [ @@ -341983,7 +342303,7 @@ [] ], "GeolocationSensor.https.html.ini": [ - "fc23cbb5821d4431856c2521351b89315a0630fd", + "3d3fa9d191587b2d00b70fa100f2968142250897", [] ], "GeolocationSensor_read.https-expected.txt": [ @@ -341991,7 +342311,7 @@ [] ], "GeolocationSensor_read.https.html.ini": [ - "d4590914015f51083a03336c50d4a5a5e14f76ca", + "b682ab1d809acb5a81e71cd4e14c6e41d9892b43", [] ], "META.yml": [ @@ -342003,7 +342323,7 @@ [] ], "idlharness.https.window.js.ini": [ - "f420e040889d7feee564ff118f1193097f02831d", + "fe1857cd49a2ecfd4ba30e9e44dc1ac7a25c262a", [] ] }, @@ -342197,7 +342517,7 @@ [] ], "broadcast-channel.html.ini": [ - "7d0aa08442264ad61566942919c71c0e2a4c7fed", + "8ca051431395d2026784e76fc7c007debadb744b", [] ], "dedicated-worker.html.ini": [ @@ -342209,15 +342529,15 @@ [] ], "inflight-fetch-1.html.ini": [ - "88df0aea21feadcaf4ff59359ce023555a68ba99", + "6d60e7bc38f102ccf7795f2a9da3d30d0fce62f3", [] ], "inflight-fetch-2.html.ini": [ - "44650d8765da23d1d8dba94bfd895817f36b5d8b", + "c44edbb36a7c60e3fe141e3db176259ea8b4b461", [] ], "inflight-fetch-cors.html.ini": [ - "3794730228b6f6049f88c580534c637a422d76ec", + "d394d6fee7d019e9502e0120d77180321763d2fd", [] ], "inflight-fetch-redirects-expected.txt": [ @@ -342225,7 +342545,7 @@ [] ], "inflight-fetch-redirects.html.ini": [ - "72dc64190604a2f331f62419c129e0e9ab03066e", + "f4be108ebc679c4f69e92f0661620bc2f5903dc8", [] ], "shared-worker-expected.txt": [ @@ -342242,7 +342562,7 @@ [] ], "events.html.ini": [ - "4fafe992712a8d7ebe9a2ad1a0ffa6c57d505861", + "7ac92f1616298fafc8d3e70965b4631a5c47a433", [] ], "focus-expected.txt": [ @@ -342401,6 +342721,32 @@ "33fe97a7d6100d1eeb31a71a972e4124d3b761d7", [] ], + "event-order": { + "after-load-hash-twice.html.ini": [ + "e58354c2dfddded09e71953cf0a121e4f031b341", + [] + ], + "after-load-hash.html.ini": [ + "adb8612c49807623e8e0aa05ae4e06b584d01707", + [] + ], + "before-load-hash-twice.html.ini": [ + "351c44e6d2032548b02e66ee8d1cbf24519db130", + [] + ], + "before-load-hash.html.ini": [ + "cb8aab4860cc2a33d09ba4690b945b2a435ff68b", + [] + ], + "pushState-inside-popstate.html.ini": [ + "cd21c8b5b383821c476bb3b66c09d058a2321c54", + [] + ] + }, + "hashchange_event.html.ini": [ + "e20480cca1cfbb5d2111199f782bd7e8cfb1274b", + [] + ], "persisted-user-state-restoration": { "resources": { "blank1.html": [ @@ -342419,7 +342765,11 @@ "1e9b10d1ee8a9d70fe0b4e3cb28b97352bfccb75", [] ] - } + }, + "scroll-restoration-fragment-scrolling-samedoc.html.ini": [ + "9a4c89e2b22d9d22e3123907df842b90df23fcc0", + [] + ] }, "resources": { "a.html": [ @@ -342469,7 +342819,7 @@ [] ], "srcdoc-history-entries.html.ini": [ - "e0d43ff2c7e47c1705a2a5ea122f159a908cf022", + "e327f9655593b76e43a2916ea2161e246392a1ec", [] ] }, @@ -342609,7 +342959,7 @@ [] ], "window-open-204-fragment.html.ini": [ - "0f1e623e9e556dee95249d637bd24f3edea7431f", + "9eea4312d2f7476f77904a834e68a18c07891e8a", [] ], "window-open-204-pushState-replaceState-expected.txt": [ @@ -342926,7 +343276,7 @@ [] ], "top-level-data-url.window.js.ini": [ - "3ad61148a85e0f53dc70d07ebc5a716cc7279f65", + "bc6efb2050bc1127c481c198bedff391cbf9d801", [] ] }, @@ -342935,12 +343285,20 @@ "cc313a155a167fa9f8182346c96764fe949da455", [] ], + "anchor-fragment-history-back-on-click.html.ini": [ + "c1e4f3835b118ffbcb9ef35a7dcfebf9db59c179", + [] + ], "cross-document-traversal-cross-document-traversal-expected.txt": [ "bc974a74ff1fc48aa94303d9a8d43bfe48f233a5", [] ], "cross-document-traversal-cross-document-traversal.html.ini": [ - "8452eaf736003e12ee2fa8edbdc844ffbdb6fc95", + "6d99cc6db2eb459e45dd4ea6d824bbbf8f2f8c4e", + [] + ], + "forward-to-pruned-entry.html.ini": [ + "4c02c03af75fa7bb17b7a4895d903e30beb22e8a", [] ], "nav-cancelation-1-expected.txt": [ @@ -342986,11 +343344,11 @@ [] ], "same-document-traversal-same-document-traversal-hashchange.html.ini": [ - "9868f0f6616b7d9ca5504ec7f6f775641f7b9a9c", + "cf457400f670d1fd22d1a89e50513073b36a0048", [] ], "same-document-traversal-same-document-traversal-pushstate.html.ini": [ - "cb68916559af43dbdd8cdb3d369ceba7729eee8a", + "c6b04742f9dcfcbb23f88ca9bbf9fd0a56cbe353", [] ] }, @@ -343069,9 +343427,53 @@ ] }, "scroll-to-fragid": { + "004.html.ini": [ + "007d46d6102037a23a1803ce8d8ceec02352ec96", + [] + ], + "fragment-and-encoding-2.html.ini": [ + "a6846005f6d75efbd8facfb6125a0f40a950b8b4", + [] + ], + "fragment-and-encoding.html.ini": [ + "e696b087f82eb5bfd05f36b3de074d5d5eb2b409", + [] + ], "navigate-helpers.js": [ "7a9adeb3d2e6a0f6c75a37624579a594c6286cf6", [] + ], + "scroll-frag-non-utf8-encoded-document.html.ini": [ + "b1118903e049caad55400e428a515d945fc6302e", + [] + ], + "scroll-frag-percent-encoded.html.ini": [ + "2a232a790e6c0d853e6a15bbe41276dfc6b0640e", + [] + ], + "scroll-position-vertical-lr.html.ini": [ + "77a05d7790405ffac96688f1669789181294f0ca", + [] + ], + "scroll-position-vertical-rl.html.ini": [ + "b26b2f5a8011135f505354bf64b6ed20c5e4a04d", + [] + ], + "scroll-position.html.ini": [ + "446f96ae6b43db764c6093a4f33e134cdcbff127", + [] + ], + "scroll-to-anchor-name.html.ini": [ + "77f6f667ec9537cca6911765e6ccd2d044418f93", + [] + ], + "scroll-to-id-top.html.ini": [ + "e908c3a7775eff47426f4f9876bcd0f680756975", + [] + ], + "scroll-to-top.html.ini": [ + "135b399aef45868723f0e73870d55f5e8eb39e80", + [] ] }, "unloading-documents": { @@ -343363,6 +343765,10 @@ "3b5d563e04ba6cb2dc6f5920399119c0df1c78cf", [] ], + "008.html.ini": [ + "83a2a3317654b1e303fe7848d3a3ebbd1daee4b8", + [] + ], "008.js": [ "96a1fe5d4a6f7e6fd548abf218777dac4fc15bb7", [] @@ -343391,6 +343797,14 @@ "d150449eb2df241e4ae286cf8ba13fc37f0874c3", [] ], + "011.html.ini": [ + "c44c7e5681bdf56b49f071edb08d58155da15eb9", + [] + ], + "012.html.ini": [ + "bb5eebc6ef2f695f3bb35e96b2e1d6aa1d11dd7f", + [] + ], "blank-new.html": [ "2a545af0ed30d69b1e4bb7d1e608273b89dd3d1e", [] @@ -343411,6 +343825,34 @@ "2a8989f27252570aa49ada5a1e6eefbddfd9b207", [] ], + "combination_history_001.html.ini": [ + "e862d3ec4d7e30336c4825fafe3e84dd529b4cc0", + [] + ], + "combination_history_002.html.ini": [ + "83feb91e868b6fecab180ba4787183a1b9fea87e", + [] + ], + "combination_history_003.html.ini": [ + "468e1c46d36071c75809159097d9534ec656f74a", + [] + ], + "combination_history_004.html.ini": [ + "8f9479d43cc07722ebe6225a4f39f0d191c25c45", + [] + ], + "combination_history_005.html.ini": [ + "f78a8d1b830abde47516cb6a749f14eb439c7fc0", + [] + ], + "combination_history_006.html.ini": [ + "e8d5d7a37fd681e1551f3e55ca091595e5807b39", + [] + ], + "combination_history_007.html.ini": [ + "d1a7c40d49727473cdaf24f4b62deadd0cc9cd3e", + [] + ], "history-state-after-bfcache.window.js.ini": [ "23780f8ffc78ecc63c41d21b4b464aae5364c1e5", [] @@ -343423,6 +343865,14 @@ "78547019f3a43b3a318618a9221dd23283cd78a8", [] ], + "history_back.html.ini": [ + "0a54f6d117508c7c101c50dc87abad6239d6c85e", + [] + ], + "history_back_cross_realm_method.html.ini": [ + "34c78a9fbecd7216facaac7db88ae42bcfae991c", + [] + ], "history_entry.html": [ "e5929ddbe84389641a083f29057a3ea7b9f5076b", [] @@ -343435,10 +343885,30 @@ "c7a9a106823bc81db469d1659cee5c01ef1f863f", [] ], + "history_forward.html.ini": [ + "456bc6f01bd24a90a169e653d6803b8ea1d8ef70", + [] + ], + "history_forward_cross_realm_method.html.ini": [ + "d14bf0c11982ae33cc1f398c5cb209f1096eb658", + [] + ], + "history_go_cross_realm_method.html.ini": [ + "c92cf19699841038d507f59021919e51f0dbce46", + [] + ], + "history_go_minus.html.ini": [ + "a4ce81e98edab20569add116119a5bf97e210032", + [] + ], "history_go_no_argument-1.html": [ "acd9bda31dcfae1d1183bdb47340066426dcdfb3", [] ], + "history_go_plus.html.ini": [ + "f87e320e7daad33db5c95388d50dcfbb513fa70f", + [] + ], "history_go_to_uri-1.html": [ "46c744e95d6b13765796f13eb406451708559401", [] @@ -343459,12 +343929,24 @@ "d9d4f330b2ecebae47dabc73000d9c47d7149424", [] ], + "history_pushstate.html.ini": [ + "657fb7faf0c65a666c80ae75c14971396bacc52b", + [] + ], "history_pushstate_url_rewriting-expected.txt": [ "2d0515b7ae2e3c0504ef4807934b46eca88cb53c", [] ], "history_pushstate_url_rewriting.html.ini": [ - "7e79633d9c96bf66e7ffcd29734b2c3e00e078be", + "9402d8d7af92ebd87838df9e5860ba9de84557f3", + [] + ], + "history_replacestate.html.ini": [ + "72f29fe2d4cf40ea21889f71ec15c1e232f0d81e", + [] + ], + "history_state.html.ini": [ + "6ed910d15369d2967369b62a947d4383cd7a1bc1", [] ], "joint_session_history": { @@ -343568,7 +344050,7 @@ [] ], "allow_prototype_cycle_through_location.sub.html.ini": [ - "8bca215e237ec8798fd442b17e00dbd31b16e6fc", + "ea72d8f3634a9df712d77abb0064095ca2f795e0", [] ], "assign_after_load-1.html": [ @@ -343636,7 +344118,7 @@ [] ], "location-protocol-setter-sameish.html.ini": [ - "12ca4627353d34ce63676a6a79ec071f3bd3eef7", + "1b66ac5990036cb4160f00122a533779ec481b2f", [] ], "location-prototype-setting-cross-origin-domain.sub-expected.txt": [ @@ -343671,6 +344153,10 @@ "ed2001b90728fbe3fb254297dd5a4a337c71ef02", [] ], + "location_assign.html.ini": [ + "bddcfdb8dfb7bbba169aaf317f3186c22a4ca874", + [] + ], "location_assign_about_blank-1.html": [ "b43598f2cd8f47bcd23373075773ef245c95c21a", [] @@ -343679,12 +344165,20 @@ "f08cf5de3e8d6220a5ace3027d789f8ac968d9e6", [] ], + "location_replace.html.ini": [ + "7d4aebee1cb140301e0bd7d9e5084ccfd072cc86", + [] + ], + "location_search.html.ini": [ + "bb842c59e8d4ee13fcc10d2fa8d0c7ff29d9f5ae", + [] + ], "no-browsing-context.window-expected.txt": [ "12dc8bca01799883ee0800e88e50b31ffb54fbea", [] ], "no-browsing-context.window.js.ini": [ - "94ad50aa55263677bc7e2d6a7f9ec5a4d3dd0286", + "5f16db379e8dc9c5e9e41b7fa7218d2310513f90", [] ], "per-global.window.js.ini": [ @@ -343866,7 +344360,7 @@ [] ], "cross-origin-objects-function-name.html.ini": [ - "df54342880d0038f649b9a569f018e176e1b65db", + "7d924f261b32d4a4cc99f0b840ecd67e4a9eac5b", [] ], "cross-origin-objects-on-new-window.html.ini": [ @@ -343874,7 +344368,7 @@ [] ], "cross-origin-objects.html.ini": [ - "7eb5722c7e54e97ba61939f7ca2013879049bf6a", + "1d8b52d50ca15489f8ffdf0bf07df03b831ecbb1", [] ], "frame-with-then.html": [ @@ -343900,7 +344394,7 @@ [] ], "window-location-and-location-href-cross-realm-set.html.ini": [ - "a969398a399e901192c26d1589877ecc5a285086", + "914cc4113aafe4f1c4b1356fbd30a3b6c9f366d5", [] ] }, @@ -343917,7 +344411,7 @@ "origin-keyed-agent-clusters": { "1-iframe": { "parent-no-child-bad-subdomain.sub.https.html.ini": [ - "2caec1d39eef9d9b7a8e43bcbe5806bfccab882c", + "00d1f68be7cbc9b660af57c4379c1fd8bd62535c", [] ], "parent-yes-child-no-port.sub.https.html.headers": [ @@ -343925,7 +344419,7 @@ [] ], "parent-yes-child-no-port.sub.https.html.ini": [ - "0a47aac746013f7eaf0859432df97e419158e602", + "4f4d2384e534c5da9cb7b12c261ee654e9e7d7d0", [] ], "parent-yes-child-no-same.sub.https.html.headers": [ @@ -343933,7 +344427,7 @@ [] ], "parent-yes-child-no-same.sub.https.html.ini": [ - "91ad32806d4eb28623ab172eafb83099c026128e", + "1c67ab66fbf00a1e590455981c89e0d8c160a8de", [] ], "parent-yes-child-no-subdomain.sub.https.html.headers": [ @@ -343941,7 +344435,7 @@ [] ], "parent-yes-child-no-subdomain.sub.https.html.ini": [ - "d3e8ea04b9d0f90ae7494c4a2540fadbeefa41b4", + "3c86f1b6d67d7e8a128063fcfd19774f4daad578", [] ], "parent-yes-child-yes-port.sub.https.html.headers": [ @@ -343957,7 +344451,7 @@ [] ], "parent-yes-child-yes-same.sub.https.html.ini": [ - "123a20fe43a9732c062c9f260667014320f87928", + "c5b305713e63964beddd8b8ed95cff025e37f624", [] ], "parent-yes-child-yes-subdomain.sub.https.html.headers": [ @@ -344080,7 +344574,7 @@ [] ], "about-blank.https.sub.html.ini": [ - "fd8ebb75e44920d6aef1fb6158283fc913c0cabe", + "d41c881c263d1675e639a7f09b3528bc179e2d6d", [] ], "document-domain.sub.https.html.headers": [ @@ -344168,12 +344662,12 @@ [] ], "going-back.sub.https.html.ini": [ - "60d60d86f2cacca05e0b58c14d1ae1f2f126e14e", + "dc231a8ccf0706b828e83944f4136f9fc51f3656", [] ], "iframe-navigation": { "parent-no-1-no-subdomain-2-yes-subdomain.sub.https.html.ini": [ - "b4d8cfcd5a833df9412c198103e68b5d6624abc0", + "fe43adfbf3e380461de6e6deb8b17d6f96ff8b26", [] ], "parent-no-1-no-subdomain-2-yes-subdomain2.sub.https.html.ini": [ @@ -344189,7 +344683,7 @@ [] ], "parent-yes-1-no-same-2-no-port.sub.https.html.ini": [ - "efa1d4ad3fcd7ba419071e28afd611c6a5592a06", + "596af08dc5b9d0c6b294df640b3260971b48edcb", [] ], "parent-yes-1-no-same-2-no-subdomain.sub.https.html.headers": [ @@ -344197,7 +344691,7 @@ [] ], "parent-yes-1-no-same-2-no-subdomain.sub.https.html.ini": [ - "2f07f4d072d2a586f5bf49ee3ca430e42fe4f3c3", + "c560c42e9e5a1149b70173e1abef165239aa753c", [] ] }, @@ -344219,7 +344713,7 @@ [] ], "opener-yes-openee-no-same.sub.https.html.ini": [ - "81b5f26f8e0f2cb37b03de867f399d20fac3ab65", + "6033375b13656d12cfbbc9ebf3ab9db98ad03c3b", [] ], "opener-yes-openee-no-subdomain.sub.https.html.headers": [ @@ -344227,7 +344721,7 @@ [] ], "opener-yes-openee-no-subdomain.sub.https.html.ini": [ - "e187d1606d72365841a8f672100fdf94d36a16fd", + "26713597e76c8f902fa3f601204384471a2ea53b", [] ], "opener-yes-openee-yes-port.sub.https.html.headers": [ @@ -344243,7 +344737,7 @@ [] ], "opener-yes-openee-yes-same.sub.https.html.ini": [ - "d100973615ab26128815ebfb796f10516ceb2ad7", + "659a9c6f6b6c7bb5f64ea8d8cbde20c8d437e864", [] ], "opener-yes-openee-yes-subdomain.sub.https.html.headers": [ @@ -344264,7 +344758,7 @@ [] ], "removing-iframes.sub.https.html.ini": [ - "3e28f42ff2ccfef7828d9a561680e239dd7947dd", + "6151a954744406c5df76e6ab04b5af81c9366655", [] ], "resources": { @@ -344522,7 +345016,7 @@ [] ], "navigated-named-objects.window.js.ini": [ - "1c81e26e9a05ba28751391065b7795bd18882ebe", + "76a0d922ce3e8d29a12f343483f77e4f80a60a88", [] ], "test.html": [ @@ -344602,11 +345096,11 @@ [] ], "open-features-negative-innerwidth-innerheight.html.ini": [ - "f2b2f25b9673f9da594798338603ad217b1f171a", + "dec45d2577e16e5e72013ddda9936afc9a46d97c", [] ], "open-features-negative-width-height.html.ini": [ - "c6e046747c6092994e7f72c3132299b3dada8978", + "50f2d8d192e2c3ffb1375c94c7e33b76012df0b9", [] ], "open-features-non-integer-height.html.ini": [ @@ -344626,7 +345120,7 @@ [] ], "open-features-non-integer-left.html.ini": [ - "ca5ec48ce60bd9a26f069c064befc4e48ca3317e", + "cbbd6f04e8c3a2156c22f811e436e90b8188ae4e", [] ], "open-features-non-integer-screenx-expected.txt": [ @@ -344634,7 +345128,7 @@ [] ], "open-features-non-integer-screenx.html.ini": [ - "a87db107378a8ed6abfea76398b64c7bad1850ca", + "541a6ed4b3874a8369fdbdf4f006c7ec7deee864", [] ], "open-features-non-integer-screeny-expected.txt": [ @@ -344642,7 +345136,7 @@ [] ], "open-features-non-integer-screeny.html.ini": [ - "6ea055eac7d596ec196447323ac381521fc4534f", + "6b1b30f642c61b469e12a4f33b947384007b396b", [] ], "open-features-non-integer-top-expected.txt": [ @@ -344650,7 +345144,7 @@ [] ], "open-features-non-integer-top.html.ini": [ - "f6468a026208668b3407234247731b85bdacec1d", + "9ed91db3b7c343fe77aad6dc532b0582166063b7", [] ], "open-features-non-integer-width.html.ini": [ @@ -344674,7 +345168,7 @@ [] ], "open-features-tokenization-top-left.html.ini": [ - "583939a584d8c4f1fa38175b281686d147deb23b", + "1fe4ea4da10955894f0313e4b5d0112093d4547d", [] ], "open-features-tokenization-width-height.html.ini": [ @@ -344700,6 +345194,10 @@ ] } }, + "proxy-getOwnPropertyDescriptor.html.ini": [ + "14697149260fe3349fa5a006e0323908c3e3a2ac", + [] + ], "support": { "BarProp-target.html": [ "9921e7a5773db8eef8d90f5956dbade3284609e6", @@ -344763,7 +345261,7 @@ [] ], "window-properties.https.html.ini": [ - "b47ac456f2800fc409dc9d9b52e559a2e5281014", + "b8bf427c54e187ef7381814e72388a75630d96fb", [] ], "window-reuse-in-nested-browsing-contexts.tentative-expected.txt": [ @@ -344771,7 +345269,7 @@ [] ], "window-reuse-in-nested-browsing-contexts.tentative.html.ini": [ - "d28b6a0d0b5eb970cbb448fb4d782d4f3ec43532", + "8cd59b5a6beae326f244548ce098dad5955c38bd", [] ] }, @@ -344923,7 +345421,7 @@ [] ], "clear-window-name.https.html.ini": [ - "2a191e84b6590d9d3c7fa1016209520e502aebd3", + "e7d16638a317dd20f4fe996ea5c07e9537e9c893", [] ], "document-domain-removed-iframe-expected.txt": [ @@ -344939,7 +345437,7 @@ [] ], "embedded-opener-remove-frame.html.ini": [ - "c43a5aa58f318a600a467fdb7f395f9b70a80cbc", + "b35668d08b4dd7acdd551df84e1033827dcaeeb3", [] ], "iframe-cross-origin-print.sub.html.ini": [ @@ -346099,7 +346597,7 @@ [] ], "createImageBitmap-drawImage.html.ini": [ - "6e254bb17dd4a4a8c2d70bdbde1b1bbc1927fc1f", + "96674a73e6902981adffdd466de39ef30a4ba369", [] ], "createImageBitmap-exif-orientation-expected.txt": [ @@ -346107,7 +346605,7 @@ [] ], "createImageBitmap-exif-orientation.html.ini": [ - "71ba99c9cdf670b0dbda0642e581aa46e0970fab", + "6d0a525aa39877571966c11f670289d6654cae9d", [] ], "createImageBitmap-flipY-expected.txt": [ @@ -346115,7 +346613,7 @@ [] ], "createImageBitmap-flipY.html.ini": [ - "427e1836ff6f16ab772d595c66f51677a9823377", + "bda29f75b4a967a2a00167f34ff129d0b3b1b856", [] ], "createImageBitmap-worker.js": [ @@ -346253,7 +346751,7 @@ [] ], "canvas-display-p3-drawImage-ImageBitmap-Blob.html.ini": [ - "6e88a20febd0a9cba5ce43e00c43f1ae6535b458", + "9b727c1a21073417d5ea0a6afc66b23485ae5733", [] ], "canvas-display-p3-drawImage-ImageBitmap-cloned-expected.txt": [ @@ -346261,7 +346759,7 @@ [] ], "canvas-display-p3-drawImage-ImageBitmap-cloned.html.ini": [ - "8792407b5d5cc7f4739405aa92eddb940fb31902", + "cb417bf5d09e6aae7811ce293f27f8764aa02b5e", [] ], "canvas-display-p3-drawImage-ImageBitmap-image-expected.txt": [ @@ -346269,11 +346767,11 @@ [] ], "canvas-display-p3-drawImage-ImageBitmap-image.html.ini": [ - "556cc6610393d3995049e250e4122dffae0eee1d", + "e1dc1809166abea007ce75bb7ab9266be334692a", [] ], "canvas-display-p3-drawImage-ImageBitmap-video.html.ini": [ - "b8a5f238da2ee7156a9068e29bfdb897f22f8b5e", + "2ed723350b1f16ea075c10a556ff647180b75ebd", [] ], "canvas-display-p3-drawImage-expected.txt": [ @@ -346281,7 +346779,7 @@ [] ], "canvas-display-p3-drawImage-video.html.ini": [ - "4149e179488d27678023caf617ddd17df29dcca1", + "aff469a68abb427c41998011a037e676fe1ee318", [] ], "canvas-display-p3-drawImage.https-expected.txt": [ @@ -346289,7 +346787,7 @@ [] ], "canvas-display-p3-drawImage.https.html.ini": [ - "8cd51ed9514d7104d2889f8df8fb368431b779c5", + "b6b1b9cf74d26875784ec0cbf6105897a37909d1", [] ], "canvas-display-p3-pattern-image-expected.txt": [ @@ -346297,7 +346795,7 @@ [] ], "canvas-display-p3-pattern-image.html.ini": [ - "e9d5d99428a0b25a33b16fb2cbbfc480898e994f", + "779385b43a84b5ceb0959aeef7e27612142a71cf", [] ], "canvas-display-p3.js": [ @@ -346933,7 +347431,7 @@ [] ], "offscreencanvas.resize.html.ini": [ - "91a366642c8b7be8a4345d2d63887bdd0846a50a", + "132c88fa0825fe1cd7ae2c1b385b34fc3b468c8b", [] ], "offscreencanvas.transferrable-expected.txt": [ @@ -347384,7 +347882,7 @@ [] ], "delegate-fullscreen-request-subframe-same-origin.https.tentative.html.ini": [ - "7a2d2d87c4f9afc9d527638b3717b27596899071", + "4b369f01e17d6cd8af9745e6354caec61b16f3b4", [] ], "resources": { @@ -347445,7 +347943,7 @@ [] ], "cache-storage.https.window.js.ini": [ - "85febba688db95416b0d0138c00a59ee652decb8", + "d767bcd9ac6cfb9f5f460b3a281ac752cfbb4859", [] ], "cache-storage.https.window_dedicated_worker-expected.txt": [ @@ -347508,7 +348006,7 @@ [] ], "dedicated-worker.https.html.ini": [ - "20f3e367113195e400fe00137bde7d9463e0f891", + "ed00f277c79f4338c3c6c0a8b0c27706fddb6a06", [] ], "javascript.https.html.headers": [ @@ -347618,11 +348116,11 @@ [] ], "reporting-subresource-corp.https.html.ini": [ - "03a338dcc93db62d77af39b8ddfd949a16f79932", + "8a49b4cb4d6ed4413ee6ff959a1b0e3da579014e", [] ], "reporting-to-document-reporting-endpoint.https.window.js.ini": [ - "823f0d9922981c087bc0a4e32205ad67560ef465", + "df7f5798f20d37c48a5589ff724f8c0e11ab1a9c", [] ], "reporting-to-endpoint.https-expected.txt": [ @@ -347630,7 +348128,7 @@ [] ], "reporting-to-endpoint.https.html.ini": [ - "e6be0e6d3327bd7958b937f3b3c46762ae90a66d", + "5a745b87d7f0af93409c250ecab15adf2106f3d7", [] ], "reporting-to-endpoint.https.html.sub.headers": [ @@ -347848,7 +348346,7 @@ [] ], "shared-workers.https.html.ini": [ - "a7e0aeb6af34b57e54890cd3f90ffc8889404979", + "4d20ec50726c832f37d534cead61165850ab1c6b", [] ], "srcdoc.https.html.headers": [ @@ -347925,6 +348423,10 @@ "46ad58d83bf6e98913ca4c564b7acb8f19fa0093", [] ], + "header-parsing-failures.https.html.ini": [ + "dcd24cedd6fea71d08396098a8d4f71131b2d319", + [] + ], "header-parsing-non-ascii.https.html.headers": [ "54e44a7113def0babd42f726c878fc90db2e99f9", [] @@ -347992,7 +348494,7 @@ [] ], "iframe-popup-same-origin-allow-popups-to-unsafe-none.https.html.ini": [ - "a28ee11d2d01c05ea042276b38ed7e93ee50f51d", + "6d4972087d790ee062350ebd5d95c7d1c0dc12d2", [] ], "iframe-popup-same-origin-to-same-origin.https.html.headers": [ @@ -348000,7 +348502,7 @@ [] ], "iframe-popup-same-origin-to-same-origin.https.html.ini": [ - "e4bfcbc1f2a23e028ede4c6d03bcda4d9f1efdec", + "c73dee2df70d8c8a3213ed81ed15bbec1730f601", [] ], "iframe-popup-same-origin-to-unsafe-none.https.html.headers": [ @@ -348008,7 +348510,7 @@ [] ], "iframe-popup-same-origin-to-unsafe-none.https.html.ini": [ - "c07f1822589bfa534828fb542856efedb1eb45d1", + "b984971dcf01d8653d53dc658dd4be6a65f35c25", [] ], "iframe-popup-unsafe-none-to-same-origin.https.html.headers": [ @@ -348016,7 +348518,7 @@ [] ], "iframe-popup-unsafe-none-to-same-origin.https.html.ini": [ - "f1459da9d2bdf96e0f52db2d7f039eac97bcd7ce", + "c23deef7b0f25a3bd9698120159e8bed3b3b782f", [] ], "iframe-popup-unsafe-none-to-unsafe-none.https.html.headers": [ @@ -348024,11 +348526,11 @@ [] ], "iframe-popup-unsafe-none-to-unsafe-none.https.html.ini": [ - "bf18053d12bc27c28a2b5b7c67faa4e7faf6f324", + "725cd4098aeafe2fcbee9906e8afa9facb3d2612", [] ], "javascript-url.https.html.ini": [ - "d8bd3cb3a11dda94b9baf9340e83db21c6f01cae", + "02dc7c5cbcd4ed090156a3e820115ec1147db5ca", [] ], "navigate-to-aboutblank.https.html.ini": [ @@ -348158,23 +348660,23 @@ [] ], "property-blur.https.html.ini": [ - "0343830065ddabb8f36ba727ac84e1b1f3e4f2bc", + "f06d461fcb6b3c4c92676a3c626728ead704145b", [] ], "property-close.https.html.ini": [ - "3224bea1ddfa3f1600afd4f6f27cb5aff2ed7aa5", + "a5e726b403cc8e483aecfe990f2a614006d2f35d", [] ], "property-closed.https.html.ini": [ - "1df22a9f90268bf0741fc21bea08f7be808c5fc9", + "3a3063ccf73ecb40aa55acc4e429bbc43de9d38e", [] ], "property-focus.https.html.ini": [ - "713b464571f336ea177bfffb826dd0280441a4a5", + "2fd1ec9234899125b7eee16db545c6f1c45758b3", [] ], "property-frames.https.html.ini": [ - "406da98f8dc41232dd9e8c9b610bdd61262757a8", + "93b4945a4e79d0d2399f95698b2d2f2e0e8bb816", [] ], "property-indexed-getter.https.html.headers": [ @@ -348182,15 +348684,15 @@ [] ], "property-length.https.html.ini": [ - "5a996f9bcb555924b45f0902c94f7d8714f32d7b", + "812f31c51288c54f43f94c17aba792b1554abf1b", [] ], "property-location-get.https.html.ini": [ - "8ec9befd16a3e05ff1aea4b9c0b3dc52a45401a5", + "88554d6d07967972b3c976d718376c1b1fef3635", [] ], "property-location-set.https.html.ini": [ - "735b12f6a40b0346e651dbaa441d8825e923892a", + "81ed9a6ab359cd0427e4365e2fafb53bd5f3470c", [] ], "property-named-getter.https.html.headers": [ @@ -348206,27 +348708,27 @@ [] ], "property-postmessage-1.https.html.ini": [ - "d77f418e1fab843ec644eafdf2332b3d61e444da", + "c580a9e513d79c99cd94e8a8c8d296f8f53a576d", [] ], "property-postmessage-2.https.html.ini": [ - "248e6d61a5c8c4f11a42e04eb175683c0db15319", + "9e493b589410f3d7a0ad67841b3054fe0f345d94", [] ], "property-self.https.html.ini": [ - "854a0d3f016500951deca92fd5349ad75dcc5d4a", + "65c0505061191942b2700d6b2dc4472a494944c1", [] ], "property-top.https.html.ini": [ - "29150971954b12d04333fd78eb167cc44a176170", + "b4c93b53b9548bb44d0610242ec9d2e20598a907", [] ], "property-window.https.html.ini": [ - "245babf68cf3bc5a61df61a9180a392dcfd3ba62", + "255097cff04fec50cefdcbc2cef580fdfee7d8a7", [] ], "report-to-both_coop-ro.https.html.ini": [ - "7256ca66a680ce9de4012350fef973f4f386714f", + "524923f877d544fca95450b12e3dcea015b72976", [] ], "reporting-observer.html.ini": [ @@ -348244,15 +348746,15 @@ [] ], "report-to-both_coop-ro.https.html.ini": [ - "913e57600388f5eb39c63b7846b5385caad6ec82", + "d28f7a965e262f48c852b32a3123e1c9f66a4ad1", [] ], "reporting-redirect-with-same-origin-allow-popups.https.html.ini": [ - "a84c7cec4281bd23d4ca481460bd7543e92056ca", + "500341da5b9fc2ef2753a8c871cec3ec32521b9e", [] ], "reporting-redirect-with-unsafe-none.https.html.ini": [ - "0248e1a50df76f0b263e57019e750847e0b25986", + "b3ec97db8c3a0968a951b73eec16a25e07395613", [] ] }, @@ -348270,7 +348772,7 @@ [] ], "report-only-from-unsafe-none.https.html.ini": [ - "de75cfd37174af49e928018d4dc37c927702b163", + "e6a697e762dd4a07d710fc5fe8ca7ed333183f8a", [] ], "report-only-same-origin-report-to.https.html.ini": [ @@ -348294,7 +348796,7 @@ [] ], "report-only-same-origin.https.html.ini": [ - "2c0bd7de272a8b452fa1f7fa7e7f744d6f17ae45", + "9c8cac78b86d0330b1ae2234dacc2403a8bf4306", [] ], "reporting-coop-navigated-opener.https.html.ini": [ @@ -348310,7 +348812,7 @@ [] ], "reporting-popup-same-origin-allow-popups-report-to.https.html.ini": [ - "60f5eee680ab462e8a386fd39e8261c885f4a881", + "1d40094d294cae05abe0388376d4df2875b52be2", [] ], "reporting-popup-same-origin-allow-popups-report-to.https.html.sub.headers": [ @@ -348318,7 +348820,7 @@ [] ], "reporting-popup-same-origin-coep-report-to.https.html.ini": [ - "5e7b5c78a49ba24f25efa0fb0af7e39c57d1b80b", + "39d56bc6135a095bd0cf80dcc19ba7ef85948a7d", [] ], "reporting-popup-same-origin-coep-report-to.https.html.sub.headers": [ @@ -348326,7 +348828,7 @@ [] ], "reporting-popup-same-origin-report-to.https.html.ini": [ - "1718751b6c499c207140985a71811a7be1f0cb07", + "0dbdfdc52c30536079ffb2b974565248cbdfa6c1", [] ], "reporting-popup-same-origin-report-to.https.html.sub.headers": [ @@ -348338,11 +348840,11 @@ [] ], "reporting-popup-same-origin.https.html.ini": [ - "df2820f72d7d983998df9b8b692281a472a3eb65", + "2a850bfcc024f8f2ccfdcb34d23a037b2424bb00", [] ], "reporting-popup-unsafe-none-report-to.https.html.ini": [ - "f795c454bb4da414f5f79d54dcb1bbcedc047c21", + "91476a385cbbd78c9b1c79524d530969725b7c95", [] ], "reporting-popup-unsafe-none-report-to.https.html.sub.headers": [ @@ -348350,7 +348852,7 @@ [] ], "reporting-redirect-with-same-origin-allow-popups.https.html.ini": [ - "a84c7cec4281bd23d4ca481460bd7543e92056ca", + "500341da5b9fc2ef2753a8c871cec3ec32521b9e", [] ] }, @@ -348446,7 +348948,7 @@ [] ], "iframe-popup-to-so.https.html.ini": [ - "9a1a2fca2179983813a181018b20d758b1f88abc", + "fb278d661db12b214d84874185558ed8c9d3e550", [] ], "iframe-popup-to-soap.https.html.headers": [ @@ -348454,7 +348956,7 @@ [] ], "iframe-popup-to-soap.https.html.ini": [ - "e7e4ae3d95681fe038d07fb958cc54cf6e116fcd", + "bb590ef0359c2e90aeeaf1ea73f2d89d29c1fbd1", [] ], "iframe-popup-to-un.https.html.headers": [ @@ -348462,7 +348964,7 @@ [] ], "iframe-popup-to-un.https.html.ini": [ - "b0e0364d88a13b4371d32a4e1e144208c30c7817", + "673d02cf901bcf85e712bb04a02bf9dff1430448", [] ], "iframe-popup-to-un.https_1-2-expected.txt": [ @@ -348490,7 +348992,7 @@ [] ], "iframe-popup.https.html.ini": [ - "183b597c39863715ac87d694299b4bd35bb42f1b", + "ead098e8152ebd19f6c9fd2e8ce7c17c72726c96", [] ], "iframe-popup.https_3-4-expected.txt": [ @@ -348530,7 +349032,7 @@ [] ], "popup-soap.https.html.ini": [ - "d4cfb804c1cda4b1271b3a5e605bfb31db94812a", + "cc8f0bacb9dffe1331cc63cb1876210ba4f89dd5", [] ], "popup-u.https-expected.txt": [ @@ -348538,7 +349040,7 @@ [] ], "popup-u.https.html.ini": [ - "2381405d8bb70ac2439570b0d970beaf7d786e87", + "d4eda90e00209f3d9e336c5fa52adb8ad539519c", [] ], "popup-un.https-expected.txt": [ @@ -348550,7 +349052,7 @@ [] ], "popup-un.https.html.ini": [ - "245d44f04bd04c497a587d0b1f23c067a3808476", + "497708bf5e78910f35d140af53d8a931e8ac3a5e", [] ], "popup-with-cross-origin.https-expected.txt": [ @@ -348562,7 +349064,7 @@ [] ], "popup-with-cross-origin.https.html.ini": [ - "fca3b7c3e8f677f571d091f75a427352539790f5", + "d0f55058c632a10c9f4a14b95b891e4d3379b443", [] ], "popup-with-same-origin.https-expected.txt": [ @@ -348574,7 +349076,7 @@ [] ], "popup-with-same-origin.https.html.ini": [ - "9eec3f07ec7ac34da28c3232363beab51403a7a9", + "614be8612545b7e5a06c0fdca58c70ffb35de5db", [] ], "popup-with-same-site.https-expected.txt": [ @@ -348586,7 +349088,7 @@ [] ], "popup-with-same-site.https.html.ini": [ - "e404be947098123394a87af157965b790afd4836", + "05d2d2984d8a6e34589a66c6dfc67391763fdead", [] ] } @@ -348598,7 +349100,7 @@ [] ], "aria-element-reflection.html.ini": [ - "6a543e4240daf1b06e4021973cfaa047e8764737", + "968ffd88ddc39c7eb477c1cc320c6bb8acd4d31c", [] ], "directionality": { @@ -348640,7 +349142,7 @@ [] ], "nameditem-names.html.ini": [ - "728ddfe37f963cde84d7611df87c8be57c1914f9", + "8f77b0002077a2b0699c1cd9f051ebdbc62f9130", [] ] }, @@ -349014,7 +349516,7 @@ [] ], "getter.html.ini": [ - "85242542df1f11d83085566c2e4a6e42c2e4d41f", + "a66e43b6e4075e7f3e2f81b5f87154a627106a2b", [] ], "innertext-setter-tests.js": [ @@ -349078,7 +349580,7 @@ [] ], "idlharness.https.html.ini": [ - "11a219f9021eefb19c6203156d86b0a72cef00bd", + "2ff4bc17cb04ac92b8bf6b4c9e5fe95081934d0c", [] ], "idlharness.https_exclude=(Document_Window_HTML._)-expected.txt": [ @@ -349098,7 +349600,7 @@ [] ], "idlharness.worker.js.ini": [ - "058a603559fcb1900a881ee52f27a1f85dd54af7", + "99dfda9e5c260a8a4d1bf6e20aa350d2c844231e", [] ], "new-harness.js": [ @@ -349114,7 +349616,7 @@ [] ], "reflection-embedded.html.ini": [ - "cd44f409492bbb2d43e37ac922614c9bb867c056", + "ec7e0ebabd23fa8a176f360e1d03838e34f81a75", [] ], "reflection-metadata-expected.txt": [ @@ -349122,7 +349624,7 @@ [] ], "reflection-metadata.html.ini": [ - "0c24fcde2303d586fd55980dc9377cb571a0e4be", + "093eb0505df44a12bb5441fbbfcf1f0be0117644", [] ], "reflection-original.html": [ @@ -349134,7 +349636,7 @@ [] ], "reflection-text.html.ini": [ - "7188824ee97a32b75cc793f155e5d1057b82b935", + "313b00d0c52005b3077cb97f54ca33423669440b", [] ], "reflection.js": [ @@ -349188,7 +349690,7 @@ [] ], "usvstring-reflection.https.html.ini": [ - "fb41c308e02b81354d2a57484ef6717c837e046e", + "b77c494ebfdc94e90fe10e3eb0ee64528d5dc99f", [] ] }, @@ -352248,7 +352750,7 @@ [] ], "dropzone_attribute.html.ini": [ - "39c6bde3dd71d9cd6646253b92174a235d28ef63", + "ccc6f765f692b8e253b9eeaf31f2d4ac2d9eb06e", [] ] } @@ -352328,6 +352830,10 @@ } }, "the-hidden-attribute": { + "beforematch-element-fragment-navigation.html.ini": [ + "1eb3e88a351ccedbef6fda36caa693a4505a6924", + [] + ], "hidden-1-ref.html": [ "7346ce919d210a740104ca5e82264bed8377c2d0", [] @@ -352430,7 +352936,7 @@ [] ], "blob-data.https.html.ini": [ - "b112bccc9ef25f2501cbcbb3720ece06c5508fba", + "888f95acc87883ed2829ab96703aa80bfcd56357", [] ], "broadcastchannel-success-and-failure.https.html.headers": [ @@ -352462,7 +352968,7 @@ [] ], "nested-sharedworker-success.https.html.ini": [ - "5a66574c42bf7a931d1aaf76e732d9392d30545c", + "fda5347435fb4cdb203a62a4ba4ea587b851d899", [] ], "nested-worker-success-sharedworker-expected.txt": [ @@ -352713,7 +353219,7 @@ [] ], "structured-cloning-error-stack-optional.sub.window.js.ini": [ - "88b775902411b1aded1ec2f301eedfc33beb02ee", + "9c7e65671a7da8ffe592bd17a4adebc108986ed7", [] ] }, @@ -352755,7 +353261,7 @@ [] ], "navigation.sub.html.ini": [ - "79e20f292a4e71a43a918bcb7dac399e6b575d91", + "3388e29a8e59181fcf2ad54518cdf8a850269cb1", [] ], "resources": { @@ -352781,7 +353287,7 @@ ] }, "utf-16be.html.ini": [ - "a088fe30dd114667f548e5a04d862d68a0596a87", + "315ae7b58992f21a405d2ec5a8c97ac9f9b8716d", [] ], "utf-16be_include=history-expected.txt": [ @@ -352793,7 +353299,7 @@ [] ], "utf-16le.html.ini": [ - "d7272beb2e3a2b03cf746bff2f1b4ec8146f73d2", + "3deb270a6935fca93a8ba3259b761697a88f3cbb", [] ], "utf-16le_include=history-expected.txt": [ @@ -352805,7 +353311,7 @@ [] ], "utf-8.html.ini": [ - "9671e4ac3e6981aadd45d54de6987fb285f59652", + "8502c39364716c63e54b78b9e66d8ff947cbb0e0", [] ], "utf-8_include=css-expected.txt": [ @@ -352825,7 +353331,7 @@ [] ], "windows-1251.html.ini": [ - "9aa6470688c3424e9d5bbcf46a01cf7d7cabaccf", + "0dfb49f42c907e9e781150eff2c19872ca2c29d5", [] ], "windows-1251_include=base-href-expected.txt": [ @@ -352865,7 +353371,7 @@ [] ], "windows-1252.html.ini": [ - "924cdb733413ff86f14fc5664141500fc1e2a4c3", + "5086245c1c6f0e7aa1afdeab611f4343ff0eb83e", [] ], "windows-1252_include=base-href-expected.txt": [ @@ -352916,7 +353422,7 @@ [] ], "document-base-url-initiated-grand-parent.https.window.js.ini": [ - "af28c41df64b3dbe2983d474b229003bd6c9d40c", + "d25b70b39e2c0a2d53031c3d85cae1059fbeb506", [] ], "resources": { @@ -352974,7 +353480,7 @@ [] ], "focusVisible.html.ini": [ - "4c189b17365062128e8cb663b0e92b949e6767e4", + "f6161be30033deffbf68bbb4b0f4009678965d49", [] ], "support": { @@ -353146,7 +353652,7 @@ [] ], "dimension-attributes.html.ini": [ - "50cc9be8240b21bf6c2a9a3ca0b8b7c64999adc2", + "f3c87b7e1d55988500953aaf397c03363e9cb093", [] ], "interactive-media": { @@ -353188,7 +353694,7 @@ [] ], "input-line-height-computed.html.ini": [ - "511cb5becd7e3acc76d3a2d5c500b721f21d196d", + "3e2acde45b6da371cc62eaa8d060150812aa2316", [] ], "input-line-height-ref.html": [ @@ -353246,7 +353752,7 @@ [] ], "lists-styles.html.ini": [ - "37529f59545aa6479a7e3e42af0f2761c7d9c579", + "ebacc160ac7b4bed4a4b30b27a7c5c5078164582", [] ], "ol-display-contents-ref.html": [ @@ -353322,7 +353828,7 @@ [] ], "hidden-attr.html.ini": [ - "e2c6fb1e1be9ce95aa8d3b9a6345d9cfab4811f8", + "6fe1ef313862384d53f76ceb5afe9a1cb7dc794b", [] ], "resources": { @@ -353352,7 +353858,7 @@ [] ], "table-attribute.html.ini": [ - "c94605552fd6dcf2d8020ab9ac3cd922da5df801", + "ac2feadeb6358afa17b4ad8f9bdc8c98a8c202cc", [] ], "table-background-print-ref.html": [ @@ -353502,7 +354008,7 @@ [] ], "fieldset-display.html.ini": [ - "09fde25d7ac2f7fbe6b92c8d8e52baaa1be9e489", + "7df3727874d7e977bbd0eaf31a8bd6478bc85c44", [] ], "fieldset-div-display-contents.html": [ @@ -353570,7 +354076,7 @@ [] ], "legend-align-justify-self.html.ini": [ - "bca6d9f8b1f84dff731f3bea4cb362303a40f5a2", + "242bc267f4ccbb1efbbcdc83d5daea51584fd625", [] ], "legend-align-text-align-expected.txt": [ @@ -353578,7 +354084,7 @@ [] ], "legend-align-text-align.html.ini": [ - "38ad9c59b0cb56064cdc1e91a3fd8f03713d7d28", + "100233e33f6204946f7d26ef608162da26ed0bdd", [] ], "legend-align.html.ini": [ @@ -353622,7 +354128,7 @@ [] ], "legend-display.html.ini": [ - "db606d16f521752a924416e51c79a461db341520", + "4be0dd7d8aff6da5e71223a630746e2993a6b367", [] ], "legend-dynamic-update.html": [ @@ -353670,7 +354176,7 @@ [] ], "legend-sans-fieldset-display.html.ini": [ - "43645d9642a19efa32acc27f7dc07ab52e96d0e7", + "7b89212a5fed354b241e0ad117c7b58666f3919e", [] ], "legend-tall-ref.html": [ @@ -353682,7 +354188,7 @@ [] ], "legend.html.ini": [ - "8adb66451831972a535a582ca9a79e297b03930d", + "f3e78c3dbe2f5cc74041a627b45f44eb2f4ec29a", [] ], "no-red-ref.html": [ @@ -353866,7 +354372,7 @@ [] ], "pixel-length-attributes.html.ini": [ - "eb06f41d27547736f30fc3f6ba41f8661e5bf1c3", + "1d0fe617f8d0beaaade58db626358722f1800332", [] ], "replaced-elements": { @@ -354172,7 +354678,7 @@ [] ], "unmapped-attributes.html.ini": [ - "a762eae3de5b5414fac1797f757a7f8177229a3d", + "bb088db44e0dadac06f35c2cfe7dd8253f8b3615", [] ], "widgets": { @@ -354195,7 +354701,7 @@ [] ], "baseline-alignment-and-overflow.tentative.html.ini": [ - "6fe8d39e81038839ce44390652a651f386305e0d", + "3c710ee2c16b6b0aa575e3223e85a502bffd2b83", [] ], "button-layout": { @@ -354212,7 +354718,7 @@ [] ], "computed-style.html.ini": [ - "f986ad4991eae0e76a437dc7a634daac8a942876", + "33e029dd0bdeaa472c7da18010bc1444305b1239", [] ], "display-other-expected.txt": [ @@ -354220,7 +354726,7 @@ [] ], "display-other.html.ini": [ - "ba59f47231e0e6a1798385c573141c00cd0e4deb", + "8e956253bd9400d0f1c3def142609efcc08e83e9", [] ], "inline-level-ref.html": [ @@ -354278,7 +354784,7 @@ [] ], "select-as-listbox-default-styles.tentative.html.ini": [ - "358681685f655191c8bb4c095f9eceaf3db0cba3", + "8963f3b31e2103e48cd88289bfac52208f61321a", [] ], "select-invalidation-ref.html": [ @@ -354418,7 +354924,7 @@ [] ], "link-load-error-events.html.ini": [ - "70cda3f03948dec4f3dedaf44725fdbfc39bb029", + "a9d42c09c15ca3efa2c8b32fc57aebf52e2c32c4", [] ], "link-load-error-events.https-expected.txt": [ @@ -354426,7 +354932,7 @@ [] ], "link-load-error-events.https.html.ini": [ - "08f70d9e22943246b2156e6d18246b80b7903ddc", + "b8fed45f445b5209940b340af506d53b19c7cc06", [] ], "link-load-fired-before-scripting-unblocked-expected.txt": [ @@ -354454,7 +354960,7 @@ [] ], "link-style-error-01.html.ini": [ - "599aebcc9f8c4e0c665a3767ea1e7588e3e594da", + "7fcef551bce060a0ee8cb806b3cd57c7210cba17", [] ], "link-style-error-limited-quirks-expected.txt": [ @@ -354712,7 +355218,7 @@ [] ], "autoplay-disabled-by-feature-policy.https.sub.html.ini": [ - "a6f5d6f728ce1d4e9f28a0faa580315b6e62b8c9", + "5004daedd95f0a9983b9300f75ee279743e7410e", [] ], "interfaces": { @@ -354723,7 +355229,7 @@ [] ], "src.html.ini": [ - "5a3caf8eb626c2c245970c92b2ca04b5ed315142", + "989c8ebae1b3acd95519e7928c44d9b85a4283da", [] ] } @@ -354734,7 +355240,7 @@ [] ], "activeCues.html.ini": [ - "56201a4302b5c205b9585e51bf9e87fff452bc17", + "40c5234bb6433c5b4746d7459dffa906bba67d82", [] ] }, @@ -354752,7 +355258,7 @@ [] ], "onenter.html.ini": [ - "fc8d71fd9e4418fceff2f01dbed7d7c87b088ba5", + "aa0cd2f3708d05e70dc1cc49d49391429bdccfef", [] ], "onexit-expected.txt": [ @@ -354760,7 +355266,7 @@ [] ], "onexit.html.ini": [ - "6fa04beb5bda3600fe44bee3469af35345ddf8cf", + "1b1a31957833352146e78eb3dd260737cd285292", [] ] }, @@ -354959,7 +355465,7 @@ [] ], "canPlayType.html.ini": [ - "bb4c3252aded8e7a12c0bfcebd0f18f1c97f317e", + "a1ff639a264b4955bdd4df9f8f7c862532b9020c", [] ] }, @@ -355320,7 +355826,7 @@ [] ], "src-clear-cues.html.ini": [ - "47a6e4f8bdc8e837ee85b0d68ef39a53c5e594f0", + "ed6202ec1f0b4aa9dbb1a4ad767705bb487abcbf", [] ], "track-cue-order-expected.txt": [ @@ -355735,6 +356241,10 @@ "0484c397cd4bedd92f33a4c43f8d589ace6b1557", [] ], + "iframe-loading-lazy-base-url-2.html.ini": [ + "74170a48bdaa2b8e1ddaa8af13560bdfb9778658", + [] + ], "iframe-loading-lazy-expected.txt": [ "fb8804941ba81b386e252e6f31002c5005f3b8fc", [] @@ -355748,7 +356258,7 @@ [] ], "iframe-loading-lazy.html.ini": [ - "40b4f67ed465c97fad7774c9827c447a8adb4fe1", + "4ada0df254643b23c16fc6c8187575cd6856c0ab", [] ], "iframe-modify-scrolling-attr-to-yes-ref.html": [ @@ -356059,7 +356569,7 @@ ], "decode": { "image-decode-iframe.html.ini": [ - "d21d0ba7313b85236ab9a6c2a2896df9e560bef4", + "e93e004c661d52ccd15729be3a409737a343c315", [] ] }, @@ -356077,7 +356587,7 @@ [] ], "viewport-change.html.ini": [ - "9dd699774095770f6df38a67f899b14df0d90368", + "d30a5060ff39fd365d1ce3102122ad938b7836c6", [] ] }, @@ -356102,7 +356612,7 @@ [] ], "image-loading-lazy-base-url-2.html.ini": [ - "b0363e4de7578bd60156bcdc1d7a525b8227181a", + "658d1cf2fafc559447bdd19d1b54d2c9c53cb715", [] ], "image-loading-lazy-base-url-expected.txt": [ @@ -356166,7 +356676,7 @@ [] ], "image-loading-lazy.html.ini": [ - "67608bb89be28a30f06aabdafe16d12dc4be8db9", + "30c51f204141bf52e92762e3f268334bf53b08bf", [] ], "image-loading-subpixel-clip-ref.html": [ @@ -356186,7 +356696,7 @@ [] ], "img.complete.html.ini": [ - "badc9de4fcd6f5321d005915ca249025765f4578", + "c9c753c93e811ec59ebb3b13525e681782204f28", [] ], "invisible-image.html.ini": [ @@ -356224,7 +356734,7 @@ [] ], "relevant-mutations.html.ini": [ - "b94e288abf8d232b67d67d3c2a1318a85c6b1d74", + "0891b62e91f3b8927c4a7a9d6a52b67fdafacea9", [] ], "resources": { @@ -356386,7 +356896,7 @@ [] ], "object-fallback-failed-cross-origin-navigation.sub.html.ini": [ - "11b87122b993c5a5dcd74ef5f388b0e956502060", + "805d9075592bc7fb144e014c2df856975c463c04", [] ], "object-in-object-fallback-2-expected.txt": [ @@ -356422,7 +356932,7 @@ [] ], "usemap-casing.html.ini": [ - "2d1170909d0c2bbed408b7389e1caae36ed658eb", + "1128b10fff85f8990a895f69ca3cdb281ccaad1e", [] ] }, @@ -356432,7 +356942,7 @@ [] ], "intrinsic_sizes.htm.ini": [ - "2b43f15d25f7d7c98b0ed131d74379b7de4df179", + "38f575d61d8f138bb96319b1f67730ff1be2417d", [] ], "resize-during-playback.html.ini": [ @@ -356474,6 +356984,10 @@ "dirname-ltr-iframe.html": [ "b5ed7e3d9a717746d9653c7d5f867f3acbf3e47f", [] + ], + "formAction_document_address.html.ini": [ + "8f11654c6d778f627e8d11a7fd6898f612be1f6b", + [] ] }, "constraints": { @@ -356577,7 +357091,7 @@ [] ], "historical.html.ini": [ - "6a1baab0885ee0701b5f7b2e4c41660afb268294", + "ffbf46892becff07c1801be20c23e4a10e1b1f64", [] ], "resetting-a-form": { @@ -356656,7 +357170,7 @@ [] ], "form-nameditem.html.ini": [ - "bbe225e9716dc93d381004c5d757848a059c2ffe", + "57a2056f048978d43594c1f5020fbf2b6a6ad6c9", [] ], "resources": { @@ -356698,7 +357212,7 @@ [] ], "checkable-active-space-key-being-disabled.html.ini": [ - "cc96ed16caef8ae4fcd914b078ec735deff7ff75", + "c90e6f430ee502d62fc03361dd2109e54126c3e0", [] ], "checkable-active-space-key-prevented-default-expected.txt": [ @@ -357131,6 +357645,10 @@ "4dc3143cddacf09b8d3395cb7fa08abcc35dca4a", [] ], + "auto-expand-details-element-fragment.html.ini": [ + "770801aa9cffd6d00a16eca2a491da344c855a8a", + [] + ], "details-add-summary-ref.html": [ "14f2be232fb4aba0afb4542213331995fcb12575", [] @@ -357300,6 +357818,10 @@ "DIR_METADATA": [ "4dc3143cddacf09b8d3395cb7fa08abcc35dca4a", [] + ], + "anchor-with-inline-element.html.ini": [ + "751595414c390e7b1a5d25656ebf7772b7f91f99", + [] ] } }, @@ -357453,7 +357975,7 @@ [] ], "popover-attribute-basic.html.ini": [ - "e8d7a350aa48fd9ae74e034388756b89bf5162d6", + "61c9197bec9c1c6280f67c342d75f4679f8d3193", [] ], "popover-backdrop-appearance-ref.html": [ @@ -357481,7 +358003,7 @@ [] ], "popover-light-dismiss.html.ini": [ - "a7b5c86a0f3d78be0379150ffb1fbb5fa3904d6a", + "30264a4b1028c4a46fb22e9b667de8683b0c32c9", [] ], "popover-open-display-ref.html": [ @@ -357497,7 +358019,7 @@ [] ], "popover-top-layer-combinations.html.ini": [ - "437d693eb1d98a3bea6dc1a7bf52f4e90ffe5d5d", + "508a39f09d4d276ff2a8f41c788b1fee0ef93f21", [] ], "popover-top-layer-interactions.html.ini": [ @@ -357999,7 +358521,7 @@ [] ], "valid-content-type.html.ini": [ - "d8c616ecc8d4b8ec25a20af2700dfcfdb35c3621", + "90808fbd5a984e1f883485c268b95dd0444a1a27", [] ], "windows-1250.json": [ @@ -358245,7 +358767,7 @@ [] ], "basic.any.js.ini": [ - "48e497d3b973a58d06590ca8fcc906922a8b1fa2", + "256b8dc5dcfacd7db8e159308a0681a58fc679b9", [] ], "basic.any.sharedworker-expected.txt": [ @@ -358338,7 +358860,7 @@ [] ], "string-compilation-base-url-external-classic.html.ini": [ - "0e4ee87f92c61c365cfdaf6b3f0c82bcc775ab06", + "805cdfe6c43826a16d50418e0df80d3506f39999", [] ], "string-compilation-base-url-external-module-expected.txt": [ @@ -358346,7 +358868,7 @@ [] ], "string-compilation-base-url-external-module.html.ini": [ - "413b169607f7e5e643cbbc661ef4b3c7884fccd5", + "e3252a09232b489c0865baeb60508ddfe2a6cabb", [] ], "string-compilation-base-url-inline-classic-expected.txt": [ @@ -358354,7 +358876,7 @@ [] ], "string-compilation-base-url-inline-classic.html.ini": [ - "0ca377636b6723abe9878cbe8ed6073af4c4475a", + "c14bc94a00a0fa2f5020a368051d4c08b9d747c4", [] ], "string-compilation-base-url-inline-module-expected.txt": [ @@ -358362,7 +358884,7 @@ [] ], "string-compilation-base-url-inline-module.html.ini": [ - "c9dd4ba1dd24b44f436795a82a0816914d173200", + "8645acb2f7e61fcc99f2d23f9dd4397938bd9d3a", [] ], "string-compilation-nonce-classic-expected.txt": [ @@ -358386,7 +358908,7 @@ [] ], "string-compilation-of-promise-result.html.ini": [ - "2256f52a326a5bf2722e02ee4c4bd7f84831181e", + "dea37dbfd8050e5031c7c55c960a99bf15b6d5a0", [] ], "string-compilation-other-document-expected.txt": [ @@ -358402,7 +358924,7 @@ [] ], "v8-code-cache.html.ini": [ - "0a7742b584d5b1443ccf54248fc88f35abc97d9c", + "058cee9a46398e8b8d1212ee4fa749fbcb2a7152", [] ] }, @@ -359188,7 +359710,7 @@ [] ], "dir.html.ini": [ - "34bfcba814d6187a74781171655e302b63ce544b", + "63a6cfc4d63c219899fe751cc6024524825572aa", [] ], "focus-iframe.html": [ @@ -359559,7 +360081,7 @@ [] ], "html5lib_innerHTML_webkit02.html.ini": [ - "cc0b7037b0a7b340774f01c4f6d59b5eedcd0f40", + "e4f12f060c555be0b5b2c89abe57b9a5b0053c5d", [] ], "html5lib_isindex-expected.txt": [ @@ -359587,7 +360109,7 @@ [] ], "html5lib_tests25.html.ini": [ - "4bec0d53e8c7aa4681025c9f5d40c2cef635ffa1", + "d9961ad76a695463c0ee0351a6c30f195178320b", [] ], "html5lib_tests25_run_type=uri-expected.txt": [ @@ -359603,7 +360125,7 @@ [] ], "html5lib_webkit02.html.ini": [ - "791c814429ed5f43bd5ebfabe1d440260b245815", + "9369de047da95d020ecf05c80a9eb0023b412355", [] ], "html5lib_webkit02_run_type=uri-expected.txt": [ @@ -360932,7 +361454,7 @@ [] ], "activation-trigger-pointerevent.html.ini": [ - "c839b3be30a6d629c00b02f869cf96dc9c3d9f91", + "6a9427c1baca2872c0d915100246aecb07d40776", [] ], "consumption-crossorigin.sub.tentative-expected.txt": [ @@ -361052,7 +361574,7 @@ [] ], "contentType.window.js.ini": [ - "deabe4c5d7d27d45612399d8db4f8fcebc85a7de", + "d09a117f992fbe8e1c949b36a326eed6140ddb76", [] ], "empty.html": [ @@ -361269,6 +361791,10 @@ "3e715502b971d4f8282d1e05a8ccfad6f7037910", [] ], + "url-fragment.window.js.ini": [ + "17ee31d140e6c7a0eabb0009f8935e1bba2aa29b", + [] + ], "url.window-expected.txt": [ "1e6f7125ab0d88e02cb8497ac6eefa5e4e9cbea2", [] @@ -361324,7 +361850,7 @@ [] ], "event-handler-attributes-body-window.html.ini": [ - "42838e3dda7a6560b88d9573b5de4ce1e3cc2ffb", + "02428941f6e0e947fdbed7c2b106b2247e002eaf", [] ], "event-handler-attributes-frameset-window-expected.txt": [ @@ -361332,7 +361858,7 @@ [] ], "event-handler-attributes-frameset-window.html.ini": [ - "a45eeee311a2eb12387db3d57190de2c556590c4", + "6dfb6f5df7d2b10d287504ca8ecd1ceaf1ce9d8b", [] ], "event-handler-processing-algorithm-error": { @@ -361385,7 +361911,7 @@ [] ], "promise-job-incumbent.html.ini": [ - "f066f1e093f21ed734c324a18d82b94f0dee58fa", + "9dc4a09b49b772bcdb3e9f30bd59a64602935b81", [] ], "resources": { @@ -361542,7 +362068,7 @@ [] ], "per-global.window.js.ini": [ - "a020082f4b1c0c1084313f04eebfc8b511932e0c", + "4f9ff6fcb93b8e17ff2529f0c57e51285be55812", [] ], "resources": { @@ -361639,7 +362165,7 @@ [] ], "capture_reflect.html.ini": [ - "da777b1ae3769f694bea064e30df7c7bebf5a156", + "f4933eaaacf92ccd43575dc5777b97bb56df8975", [] ], "idlharness.window-expected.txt": [ @@ -361667,7 +362193,7 @@ [] ], "idle-detection-allowed-by-permissions-policy-attribute.https.sub.html.ini": [ - "d0037302a23a03b38dc54eec0a1306c7e4c8f63c", + "01f7fa3eb11d0ecc887bf4f5a62d58c15ffdf218", [] ], "idle-detection-allowed-by-permissions-policy.https.sub.html.headers": [ @@ -361675,11 +362201,11 @@ [] ], "idle-detection-allowed-by-permissions-policy.https.sub.html.ini": [ - "72ab7077d7a9e7e0aad9701c1e76f6b97b70ffa8", + "613ed5393a7853aa839633e9ea4861380f68568d", [] ], "idle-detection-default-permissions-policy.https.sub.html.ini": [ - "cb296f98a8730d86ba71d19f3b77a777635c200a", + "d3bddbf86453b5e77b7d6ffe282bc9c296db4964", [] ], "idle-detection-disabled-by-permissions-policy.https.sub.html.headers": [ @@ -362518,7 +363044,7 @@ [] ], "webtransport-h3.https.sub.any.js.ini": [ - "e10052aab63db6772854690c2c6937e117f367d2", + "85936f9008f1980333e459562740077d8850acbe", [] ] }, @@ -362657,15 +363183,15 @@ [] ], "input-events-exec-command.html.ini": [ - "d1f22d0a2d4599c82101fe23d1b0a372c152ab10", + "3786c432f2b04eaf54522ce54e28665a4d138a38", [] ], "input-events-get-target-ranges-backspace.tentative.html.ini": [ - "560a3c09ba17443a67e1ccb6a8cfb7a78ef410ee", + "473ae634ab74e7c4a0fa89abd09230706b7f9f63", [] ], "input-events-get-target-ranges-deleting-in-list-items.tentative.html.ini": [ - "7e2a2b7d42b0f52baedbc79c8c2f8a210fd3f148", + "d0e2ea2ed11b5db8aa87333d0f5d25b8687862a4", [] ], "input-events-get-target-ranges-deleting-range-across-editing-host-boundaries.tentative-expected.txt": [ @@ -362673,7 +363199,7 @@ [] ], "input-events-get-target-ranges-deleting-range-across-editing-host-boundaries.tentative.html.ini": [ - "ec7467b1ef20fd3799cfb4ad176a932a5ffb922a", + "17b832552b4a98f441cc099217a5e856e83fb5d8", [] ], "input-events-get-target-ranges-during-and-after-dispatch.tentative.html.ini": [ @@ -362681,19 +363207,19 @@ [] ], "input-events-get-target-ranges-forwarddelete.tentative.html.ini": [ - "e294b06a651540ce1efc6b45b6f71869f4d35d59", + "011e2b99146e8365af3e5d17089a5ede18959c1a", [] ], "input-events-get-target-ranges-joining-dl-element-and-another-list.tentative.html.ini": [ - "78ef207d3fb93732eeb2729188001dbe6473f50f", + "38168776088a7af4c7f34520433d16dcf8410269", [] ], "input-events-get-target-ranges-joining-dl-elements.tentative.html.ini": [ - "d095545bdf2c3c21444a7ad3c1a3bfefcfa80b03", + "6033b3c3941a3c77f61a386bd8789bedb02b140b", [] ], "input-events-get-target-ranges-non-collapsed-selection.tentative.html.ini": [ - "06dc6857ba4568f0e22957f7ac582b88cc999461", + "5473afc7e85996b81d40ab0079089f42f86823d6", [] ], "input-events-get-target-ranges.js": [ @@ -362701,7 +363227,7 @@ [] ], "input-events-typing.html.ini": [ - "9647ef7e893fc208959f3ddbfef78e11f59c4129", + "194a36bc8ac769a94c2f759f324b0582ec844e56", [] ] }, @@ -363995,7 +364521,7 @@ [] ], "idlharness.any.js.ini": [ - "fc52caadf8afe7a699eac99eb7d50bc99ee367ea", + "9d9079b0a2795c704356acd3d29b0829b637dd32", [] ], "idlharness.any.worker-expected.txt": [ @@ -364048,7 +364574,7 @@ [] ], "cross-origin-subframe-overlap.sub.html.ini": [ - "12ac0af32d7daf68737bb905eac83fb58bcf421f", + "cfeb8f40cd4a25a126e51f850ad537f0b242a2d8", [] ], "cross-origin-subframe-pointer-events-none.sub.html.ini": [ @@ -364225,7 +364751,7 @@ [] ], "image-upscaling.html.ini": [ - "a7392a48ef88d39a82b395dd4c6361124f2f8fb8", + "92470e2cece1cbe9213ce9ae61b57c3cb6b176c2", [] ], "mouseover-heuristics-background.tentative.html.ini": [ @@ -364304,6 +364830,10 @@ "7abf7a46798bb1f2777eccdc2c3f7af5704190a7", [] ], + "content-visibility-auto-offscreen.html.ini": [ + "53a6139b27633b1431601b0bfbdacd76504daa17", + [] + ], "main-frame.html.ini": [ "e308dd8e3ec962ca064dce7548cdde0b29784b29", [] @@ -364859,7 +365389,7 @@ [] ], "Magnetometer-disabled-by-feature-policy.https.html.ini": [ - "5ae701dc28ff5c96cfe20ea7749efcca4fddcf15", + "03f606320f74f152527647176e73e68498813a13", [] ], "Magnetometer-enabled-by-feature-policy-attribute-redirect-on-load.https-expected.txt": [ @@ -364875,7 +365405,7 @@ [] ], "Magnetometer-enabled-by-feature-policy-attribute.https.html.ini": [ - "cfebd8d086c5c35bd950bc1a9af1720f90508831", + "cba7dd21215bb9a2295833616bf9bc41926f9fed", [] ], "Magnetometer-enabled-by-feature-policy.https-expected.txt": [ @@ -364887,7 +365417,7 @@ [] ], "Magnetometer-enabled-by-feature-policy.https.html.ini": [ - "c16336b0722a8e1c9bc15b376a1de41e66cce22e", + "27635465b6403d8cd9d34cb8684531bd64b4e754", [] ], "Magnetometer-enabled-on-self-origin-by-feature-policy.https-expected.txt": [ @@ -364899,7 +365429,7 @@ [] ], "Magnetometer-enabled-on-self-origin-by-feature-policy.https.html.ini": [ - "2c550227c89d6649ca90c6c8da4886f17d29ed6b", + "ce31f28acf2956028efdb06bb21423be6fad0060", [] ], "Magnetometer-iframe-access.https-expected.txt": [ @@ -364907,7 +365437,7 @@ [] ], "Magnetometer-iframe-access.https.html.ini": [ - "447f9bb26e2ca587ae03b6c798d096f14060a464", + "459883562aa8725feb7508244b8cbb76bfc714c6", [] ], "Magnetometer.https-expected.txt": [ @@ -364915,7 +365445,7 @@ [] ], "Magnetometer.https.html.ini": [ - "c397c9504d8a1a6b182c29b10caf7edb66fa1a49", + "cbde740cb38afc7e82be1b4ea7affcb5b45566e0", [] ], "OWNERS": [ @@ -364927,7 +365457,7 @@ [] ], "idlharness.https.window.js.ini": [ - "bc6b7f5cb27e8ce1618b7897f74f0e6c974466ff", + "44bd01518717c09a2f86403d87b2bbc3107e9a42", [] ] }, @@ -365119,7 +365649,7 @@ [] ], "legacy-mrow-like-elements-001.html.ini": [ - "2bcfac2b9623ae7a92278a398f02352046096f6c", + "89a1daa631dbfa1fbb3d5d17c15973b04b3df585", [] ], "legacy-mrow-like-elements-002-ref.html": [ @@ -365137,7 +365667,7 @@ [] ], "mo-axis-height-1.html.ini": [ - "731eeacf321eaae3d7a3b88af66cda1efc177775", + "383f779ec06e792349961ad31923342cf1f372be", [] ], "mo-form-dynamic-002-ref.html": [ @@ -365343,7 +365873,7 @@ [] ], "subsup-2.html.ini": [ - "ab630928c64f2ba5228ec49dff5e1889841a186d", + "32906aa5d8309a5fa042340fad1d40c0bc4e2096", [] ], "subsup-3-expected.txt": [ @@ -365367,7 +365897,7 @@ [] ], "underover-parameters-4.tentative.html.ini": [ - "584583de2dc8192331ee4864bb847fe49252576a", + "51448d6354be927e2e8332fc8f5af06177c32619", [] ], "underover-stretchy-001-ref.html": [ @@ -365419,7 +365949,7 @@ [] ], "table-default-styles-001.html.ini": [ - "4e16d5c7e20f43706ff5dab6c8f7c7668b76488f", + "6dcc8d211d1161ed5624637c3c468ff453aa0a08", [] ] }, @@ -365477,7 +366007,7 @@ [] ], "display-2.html.ini": [ - "c828a872b570d42dda4f81577aea1977d75b27b1", + "ba5a2888ef3a445f62ab3111f6a73f918bcdec25", [] ], "display-with-overflow-ref.html": [ @@ -365887,7 +366417,7 @@ [] ], "math-global-event-handlers.tentative.html.ini": [ - "947dc10b91f42a84c8bf9e43ed895867155a2f88", + "6550d4a89fc63c1b49d839075432b62f64e1aa20", [] ], "required-extensions-2-ref.html": [ @@ -365899,7 +366429,7 @@ [] ], "tabindex-001.html.ini": [ - "799f1aad1edfb3526a6f642dbf8cd40ad39de2a5", + "d4132457631e08c31ac25cf510a6df46d70e0f06", [] ], "tabindex-002.html.ini": [ @@ -365925,7 +366455,7 @@ }, "text-and-math": { "basic-mathematical-alphanumeric-symbols-with-default-font.html.ini": [ - "828a79ecc7f5c5129279c49d38615bee2e1ee330", + "077a8869e8515ecb17faf5068847a1c166147361", [] ], "use-typo-metrics-1-ref.html": [ @@ -366485,7 +367015,7 @@ [] ], "URL-createObjectURL-revoke.html.ini": [ - "29d98cd2cd6e02795f1271acf4bf19193a6dc32d", + "d0d0824f9469f7d98534b9046d025f94ad305bd8", [] ], "dedicated-worker": { @@ -366551,7 +367081,7 @@ [] ], "idlharness.window.js.ini": [ - "df46ba0d4e8ae706a5da1b9fce64066955a4f26a", + "f14519275236623a1da5ade09712056b62e1d492", [] ], "import_tests.sh": [ @@ -366563,7 +367093,7 @@ [] ], "mediasource-addsourcebuffer.html.ini": [ - "9c307f3f61ea1de0bb0683ffe0693a6be06eb4c4", + "e5fc0e738368a604e9d8093ba4c4e8da00978b82", [] ], "mediasource-append-buffer-expected.txt": [ @@ -366583,7 +367113,7 @@ [] ], "mediasource-buffered.html.ini": [ - "a04c9dcbaf7eab65878578590bbb5f060b9a9bb3", + "2d1586aeee6ec1a82da3d08a495e9e0d295f2f73", [] ], "mediasource-changetype-play-implicit.html.ini": [ @@ -366591,11 +367121,11 @@ [] ], "mediasource-changetype-play-negative.html.ini": [ - "8a339be16c791cc16b3cd23921155b6d9e49f870", + "2fc7aafcaee744f445b9e2cd7d86bb7bffba700d", [] ], "mediasource-changetype-play-without-codecs-parameter.html.ini": [ - "e1f697e59d1c00d3472d41484f4f9cc8cff12f9c", + "b0d489f291046ac461f18130e1abdcb157af2a98", [] ], "mediasource-changetype-util.js": [ @@ -366647,7 +367177,7 @@ [] ], "mediasource-duration.html.ini": [ - "e95de221ca8bcc01d6c49b08fbd91781494c3d04", + "a89764b1981e339e8350e05267c9293b92125e73", [] ], "mediasource-endofstream-expected.txt": [ @@ -366663,7 +367193,7 @@ [] ], "mediasource-is-type-supported.html.ini": [ - "1b8ed64969b45d3413e1cc13de675fb5f8b255cd", + "b21b3423623b3dbcdad4e415ae17e6b6af68596c", [] ], "mediasource-remove-expected.txt": [ @@ -366671,7 +367201,7 @@ [] ], "mediasource-remove.html.ini": [ - "fd7142a5a22e53d17c492d270a996734f507b3cb", + "ea1b96eb5233851db5213905dffaf9157dba7e49", [] ], "mediasource-sequencemode-append-buffer-expected.txt": [ @@ -366969,7 +367499,7 @@ [] ], "MediaStreamTrackGenerator-in-worker.https.html.ini": [ - "62797e78c3ca6809aab94b13a68b46dc7c567814", + "1b5d0a531c2e50b4043b4922206cffb0c350f1c9", [] ], "MediaStreamTrackGenerator-pipes-data-in-worker.https-expected.txt": [ @@ -367011,7 +367541,7 @@ [] ], "MediaRecorder-bitrate.https.html.ini": [ - "fc6c60c11457ad37048eb54d63872f33800f9969", + "ab1d160b4237f87edf11098cd2d7a16f2f917c24", [] ], "MediaRecorder-creation.https-expected.txt": [ @@ -367019,7 +367549,7 @@ [] ], "MediaRecorder-creation.https.html.ini": [ - "0a42a5903b56e32b836ee40899356fece31e6303", + "9f8682bf7f178ff8aa3c0cb55c2d6b995c645273", [] ], "MediaRecorder-destroy-script-execution.html.ini": [ @@ -367047,7 +367577,7 @@ [] ], "MediaRecorder-peerconnection.https.html.ini": [ - "ce6f63bd245b709282acb53a8594c6c0d3e2c416", + "3d02462a5b438d8a1bb7e7621b4ad20d6a479442", [] ], "MediaRecorder-start-expected.txt": [ @@ -367119,7 +367649,7 @@ [] ], "MediaDevices-after-discard.https.html.ini": [ - "e6759f3c719fe31bd2de31543914273239de0ebf", + "8b80631d93b545e8fdd778faa48e539afbbd4d6b", [] ], "MediaDevices-enumerateDevices-not-allowed-camera.https-expected.txt": [ @@ -367183,11 +367713,11 @@ [] ], "MediaStream-MediaElement-srcObject.https.html.ini": [ - "a868a408f2be606b34f070e0c7516eb3438e263e", + "d9748e1a6823106e139f86508329363fd9a1fab7", [] ], "MediaStream-default-feature-policy.https.html.ini": [ - "2d2e68d3cd5313c88c71c392eec41c018712b74e", + "e4f9bea43739638254db9d7cf1b713b21fb5231b", [] ], "MediaStream-removetrack.https-expected.txt": [ @@ -367195,7 +367725,7 @@ [] ], "MediaStream-removetrack.https.html.ini": [ - "0997bef83950619dca7a01c747f1b198bf901aba", + "aca65aa87cb2e022790e1660c5928d3b0c9da7fe", [] ], "MediaStreamTrack-iframe-audio-transfer.https.html.ini": [ @@ -367235,7 +367765,7 @@ [] ], "historical.https.html.ini": [ - "871691fabc1858802fbc1cacea4a5bf06d8b3fb3", + "79737eaeca9fab57a3811f99c05cfd882f9662d5", [] ], "idlharness.https.window-expected.txt": [ @@ -367319,7 +367849,7 @@ [] ], "onmerchantvalidation-attribute.https.html.ini": [ - "3848a97e88f109706bf4715ffe6890284b1cf56d", + "c5bd43559846dbe18a3aef4db09f60d5aaf237e4", [] ] }, @@ -367334,7 +367864,7 @@ ], "media": { "media-sniff.window.js.ini": [ - "b563f5ea458c67f5c6850871c7da89b0cd2f79b8", + "15f9e864f40140036c37d7b4d77f55aceaf2516a", [] ], "resources": { @@ -367390,7 +367920,7 @@ [] ], "parsing.any.js.ini": [ - "2a0829b7255ba2119313a05d66aa72bb88ca8926", + "64c0dd8a2b81251a0c9dc5e3701ff40dec41c34e", [] ], "parsing.any.worker-expected.txt": [ @@ -367890,7 +368420,7 @@ ], "currententrychange-event": { "anchor-click.html.ini": [ - "e5cbcf9d484a061676e3a2d013daaf5180ce765b", + "dd56601051a70f18bd9368709d701297017fbd13", [] ], "history-back-same-doc.html.ini": [ @@ -367898,31 +368428,59 @@ [] ], "history-pushState.html.ini": [ - "5a4f4c967995799644234ce183c47d3524abe454", + "32a11b4b2e1d846021e609a36f4527a2504f5a15", [] ], "history-replaceState.html.ini": [ - "991544547bd70e4fdb24e256ec0841a6daefbf69", + "c4864656e1b08ca0976ca7078fc40e80b8c8da73", [] ], "location-api.html.ini": [ - "d8ac712c8ea797b0ae48fa3a96f2b05034e0f3b0", + "b22e79ebf5093a1de94afbb60725340f8a8e77bc", [] ], "navigation-back-forward-same-doc.html.ini": [ - "da76b675aad97ef3f67c5213fa9d413b07e839b4", + "ab034981abf96bce8abae8aa259d627fc47e53dc", [] ], "navigation-navigate-replace-same-doc.html.ini": [ - "4a43170cf382a17db3d79018c8fcf6c176dce33d", + "b5e023fbc5ad5ce9728183d8a1b6bdf08162570c", [] ], "navigation-navigate-same-doc.html.ini": [ - "0c7589d43d89029c045b952c5c292c0e33d965fd", + "48cebc9fd5fe1c4ded9a4640120d33d02b31b9d0", + [] + ], + "properties.html.ini": [ + "c533d308235d9aca11b410db79685798208c43b5", [] ] }, "focus-reset": { + "autofocus.html.ini": [ + "9ab8e7b88f762eee6ac6584b266126ca9a05a893", + [] + ], + "change-focus-again-in-blur-during-intercept.html.ini": [ + "65b986e2316cef1f83408245ca99d598b27da535", + [] + ], + "change-focus-back-to-origial-during-intercept.html.ini": [ + "98e604c9650b8a900f624cb3707f191d747310b3", + [] + ], + "change-focus-during-intercept.html.ini": [ + "79fa09f7b68a3b37b34e4c2c68f8219d556fd28b", + [] + ], + "change-focus-then-remove-during-intercept.html.ini": [ + "4ac946582d2589ff544c117d376e6afc58df59e9", + [] + ], + "focus-reset-timing.html.ini": [ + "914004d97e2dd9882af992d11fd594e08f25d113", + [] + ], "resources": { "helpers.mjs": [ "0a8a0439e1c885fdf263da1ecc74bcbc304b35a0", @@ -367975,32 +368533,100 @@ [] ] }, + "event-constructor.html.ini": [ + "c328cff0bff0c8f336fb0313847f90406d68e4b3", + [] + ], + "intercept-after-dispatch.html.ini": [ + "3c70b38c06570965e86f281dd580cb63bad05450", + [] + ], "intercept-and-navigate.html.ini": [ "6f5f6250202cb58797af28017039f48c3eeddb05", [] ], + "intercept-handler-null-or-undefined.html.ini": [ + "7b3116769558ff183fe96c53c43ec3bff52d9309", + [] + ], + "intercept-handler-returns-non-promise.html.ini": [ + "c2c19bb3459a479deaefcd300871c60ce8578bb0", + [] + ], + "intercept-handler-throws.html.ini": [ + "f58cd8ce57ede3ecd86d62f546f1f8567723327a", + [] + ], + "intercept-history-pushState.html.ini": [ + "9eec74af9640146e737355fc56f949d28e1cee4d", + [] + ], + "intercept-history-replaceState.html.ini": [ + "fcc730966648023a18b22f6b244aba56c24d4f52", + [] + ], + "intercept-multiple-times-reject.html.ini": [ + "d285eee47b848b646b5f48b76502885ef53b6836", + [] + ], + "intercept-multiple-times.html.ini": [ + "2a9906a7b787dd00edc1b317ac0d3d7fdd333190", + [] + ], "intercept-navigation-back.html.ini": [ "80585c0d44f222a25a11ab2a9fca25ed55fb0c5f", [] ], + "intercept-on-synthetic-event.html.ini": [ + "cf7e7b17734116d9823d9cd56c35136ab679fed4", + [] + ], + "intercept-popstate.html.ini": [ + "906fcf38c7d13e4efbebac46f3589f80f67ba7cb", + [] + ], + "intercept-reject.html.ini": [ + "82d53a982ad64e0921081dfade3120ffffdef08f", + [] + ], + "intercept-resolve.html.ini": [ + "10517d39d2969618476d25a027a4464d37291e0f", + [] + ], "intercept-same-document-history-back.html.ini": [ "f1c508edb00f094291f5e43e242b43b92d8bff5d", [] ], + "navigate-destination-getState-back-forward.html.ini": [ + "16f25feba2dc65baaf7a4ee1a1bf3f258b243315", + [] + ], "navigate-history-back-after-fragment.html.ini": [ - "16dd23c3d415061624dd5de59a8bbe379ad40eea", + "8448c4d36b16e94c894efba7dabbe1aa50dccf01", [] ], "navigate-history-back-after-pushState.html.ini": [ - "b2f4b54f94df7b7319de9419ab0580414900a5ba", + "462cf3855c47d5a7f8fd3711503e67a3bbb1b56a", [] ], "navigate-history-back-noop.html.ini": [ "7e2cc3d77b1c0a3ccfe4826545f97c4c167560f2", [] ], + "navigate-location.html.ini": [ + "99ea7b7455fe5fc0944d77b9a99fad2526bcee16", + [] + ], "navigate-navigation-back-same-document.html.ini": [ - "51c385cce229b6b14bc2c85b842625e039dae76f", + "ddc4009a2dc887830f4ff2cf5d11a71362b3c7f6", + [] + ], + "navigate-navigation-navigate.html.ini": [ + "5489420674b4bf0c34c95ea69a9216ae1a871d68", + [] + ], + "navigatesuccess-same-document.html.ini": [ + "985adb6f03814980dd91021f3f0b53cbfdc08048", [] ], "navigation-back-same-document-preventDefault.html.ini": [ @@ -368045,6 +368671,14 @@ "ce87559247e63b46a467d2dfab60b922209be6ca", [] ], + "signal-abort-intercept.html.ini": [ + "2242a896efa5043242112f39e10104ddd0261421", + [] + ], + "signal-abort-window-stop-after-intercept.html.ini": [ + "b744634a2b34a0d5a67dd0366c01ed9c0de3d2bd", + [] + ], "signal-abort-window-stop-in-onnavigate.html.ini": [ "e1dcca83b454ec56c4077671af7a38edfcbac172", [] @@ -368056,7 +368690,7 @@ }, "navigation-history-entry": { "current-basic.html.ini": [ - "389a106a78f73b370fab27f5c76248a108b11a56", + "109d7d708900bc074706052ad46135bdc3738760", [] ], "entries-after-bfcache-in-iframe.html.ini": [ @@ -368068,15 +368702,15 @@ [] ], "entries-after-navigations-in-multiple-windows.html.ini": [ - "ee9970df0def88bfb0d5e705a3996eaceb5062d2", + "9d5b3c3cb5a42e9036ab58f60427c42d4cab3923", [] ], "entries-when-inactive.html.ini": [ - "455aadae0e77ba9561282f3a3db60c31a84cbbdc", + "119d19f36abaf1ae17240946fbf83ca42c7a2e25", [] ], "index-not-in-entries.html.ini": [ - "f6d0eb8cefc78f76bde419d8aed675449e80f5ff", + "28d35d602e22167c86e64530b5fd67f040bb0da7", [] ], "key-id-back-cross-document.html.ini": [ @@ -368130,43 +368764,59 @@ ] }, "sameDocument-after-fragment-navigate.html.ini": [ - "6de4e00304cfc6d7b905e2846826042044b64486", + "75d24b89bcf4e649ec5a812b06dd2af8d8a732be", [] ] }, "navigation-methods": { "back-forward-multiple-frames.html.ini": [ - "30f7107fca9a29108201dc955f4c19113112e3ea", + "84f3ee8a02ccb7d0d839a73719e3dc20d6ed4aee", [] ], "disambigaute-back.html.ini": [ - "816e0f76ee372ff75e62e249a2846b28700b827e", + "3103715fccf3074c221074ab650bb8d871d39fcb", [] ], "disambigaute-forward.html.ini": [ - "01cbd1f4dd59073e90674896ff443d8eea29dd25", + "db408b2f8a419e0c9a5c4dc40524f99a55e966a0", [] ], "disambigaute-traverseTo-back-multiple.html.ini": [ - "bb09c4e89c523e9fa6d3f74dd252b5ef10320644", + "37d0cd7b0e0c8b6c9a28b294cce0d477a31c2ace", [] ], "disambigaute-traverseTo-forward-multiple.html.ini": [ - "29f5dd2da3fa59228528268aef1b7535ec61cb9f", + "114936e1cc0c2b64d2e4d9287808576f3c1c7cb1", [] ], "forward-to-pruned-entry.html.ini": [ - "6717c3e095681ce6cff2072bc7727183c8c4bacf", + "1e91ccf4f46daeb3c55a34cb238b0d8862e5e5e5", [] ], "navigate-history-push-not-loaded.html.ini": [ - "0f4580748c3d62fcca09cb3e82a5eea270bea379", + "e0d2f4dbe1eea29100b69d2c9a4bc4f89f04fff6", [] ], "navigate-history-push-same-url.html.ini": [ "7ebf0d36147aeaac23b2083ab688582d5190f925", [] ], + "navigate-history-state-replace.html.ini": [ + "84d2e289f29b067a23a7c60c1bad368555c3b674", + [] + ], + "navigate-history-state.html.ini": [ + "30029fd5b108415825a530060b6b41d20cd98708", + [] + ], + "navigate-info-and-state.html.ini": [ + "593762e19da0ef5e47818977f6f5b7ba2865e45c", + [] + ], + "navigate-intercept-history-state.html.ini": [ + "0932ed0cd734e1dede9faabf0db7157cab895242", + [] + ], "navigate-replace-cross-document.html.ini": [ "0d14ef5a138721843f296c8efb0f09e99486a69b", [] @@ -368175,6 +368825,18 @@ "e80d8bb0590b71e49dce64418619caf24196505c", [] ], + "navigate-same-document.html.ini": [ + "2bfbcaff4767312976d79009eb56157b1728f763", + [] + ], + "navigate-state-repeated-await.html.ini": [ + "0d68c4f137fda066bd88d66244926b68795be9ba", + [] + ], + "navigate-state-repeated.html.ini": [ + "0aa54ac1067adf38ce57fa7727f2c33b686a88ca", + [] + ], "reload-service-worker-fetch-event-expected.txt": [ "cf4b285328a985e8413570fcc80e16d4501b3d09", [] @@ -368231,15 +368893,15 @@ [] ], "forward-intercept-rejected.html.ini": [ - "d3171b1d608b079b02490e00fa5a9c501d464d90", + "7a5d680b03cb46f128492d2e6e330c0abee68a6a", [] ], "forward-intercept.html.ini": [ - "b10cd0966a0120be5423716abee9c37c1a0ae508", + "4cca6be61a0f3fc5ffa3c7daace650e9b661ede8", [] ], "forward.html.ini": [ - "840be07d649fbf3044a53f6da6481e7963e80342", + "eff67b9c5f811608b805714ad04c3323f97067f0", [] ], "navigate-initial-about-blank.html.ini": [ @@ -368247,7 +368909,15 @@ [] ], "navigate-intercept-interrupted.html.ini": [ - "0be3840a6375f1070653633a276210b368b999c1", + "567ef9bd8bc9e7149f345523d58c60f3b60599ce", + [] + ], + "navigate-intercept-rejected.html.ini": [ + "484668a0bb8f6fafbc551aa72191ae4318387ae9", + [] + ], + "navigate-intercept.html.ini": [ + "9af9b0cf319dce1dbcdb72580943d0a1b0161585", [] ], "navigate-interrupted-within-onnavigate.html.ini": [ @@ -368255,7 +368925,11 @@ [] ], "navigate-interrupted.html.ini": [ - "e6e485d823cd76cacc5f25e7ab9994e233221273", + "3bf3cf9be0116ef5e3687ce490d8edcc0430caa7", + [] + ], + "navigate.html.ini": [ + "1efa6e82599921b32ce330044f3a1a830e041409", [] ], "resources": { @@ -368293,12 +368967,20 @@ [] ] }, + "sandboxing-back-parent.html.ini": [ + "24e628e7b2b6fedf6368b83aec962dee681ca67b", + [] + ], + "sandboxing-navigate-parent.html.ini": [ + "264f08862c51d1ccdfa01cb4ec81a72f9c74b2db", + [] + ], "traverseTo-after-adding-iframe.html.ini": [ - "9253fb2d118dbc8fd92d70e8f8dbc36e0ef9f5ea", + "35e01d05eb94e411fb94984e74556ac89652048e", [] ], "traverseTo-multiple-steps.html.ini": [ - "9d0b716ab5cea9f3f89b72037e27003f121d6937", + "0d5074fb2d32cc4a5af5ff3ee0ed98bd8cef1591", [] ], "traverseTo-navigates-multiple-iframes.html.ini": [ @@ -368315,12 +368997,68 @@ "628b22ec48b7d0e93504eba7c734a74a916279ae", [] ], + "anchor-download-intercept-reject.html.ini": [ + "50eaddaded400b5815eff732137271784ae7c17f", + [] + ], + "anchor-download-intercept.html.ini": [ + "ca186c80ad628ef21f286926298f27f1b9f1740b", + [] + ], "currententrychange-before-popstate-intercept.html.ini": [ - "32d4103fd75c91e78aa21daa67b8e20e16f82092", + "e1d533d94ef22db766d1b6db88ae800edc11219f", [] ], "currententrychange-dispose-ordering.html.ini": [ - "b82ac250b3751eef819dff49c9eb0abd09a2926f", + "81369a8259f002075f07758fc9aa6b239dda3313", + [] + ], + "intercept-async.html.ini": [ + "b9cd9f8644545f9064300e06ae4a703cdfc3ffb8", + [] + ], + "location-href-double-intercept.html.ini": [ + "e746862ebb73506020b0e957725cbd7e86f23098", + [] + ], + "location-href-intercept-reentrant.html.ini": [ + "6c752fcbc01084f0f6a43a9b07e9c385086090ba", + [] + ], + "location-href-intercept-reject.html.ini": [ + "139fb71433b9f07d4dffdc8a913c18653dad87f0", + [] + ], + "location-href-intercept.html.ini": [ + "2b92f45349031e85476f9c98229f3b0623271048", + [] + ], + "navigate-double-intercept.html.ini": [ + "6d6ca4d830cf1c7e04a2d0ea84a4d82c4aaf4299", + [] + ], + "navigate-in-transition-finished.html.ini": [ + "9c071ea83d71ee15ae2bc73001fdf5143fee1d60", + [] + ], + "navigate-intercept-stop.html.ini": [ + "d2c272830756f3bf5467df1bfa78d23e0cd6318e", + [] + ], + "navigate-intercept.html.ini": [ + "4b67c250fd72da6013f37c9702214e47a109a125", + [] + ], + "navigate-same-document-intercept-reentrant.html.ini": [ + "1b75f98fd089097a7d68c0867cd1329e4095e819", + [] + ], + "navigate-same-document-intercept-reject.html.ini": [ + "fae9e8f4dc262d5b4a8f280d0f81a69be68878a9", + [] + ], + "navigate-same-document.html.ini": [ + "dd595486ac1d0864b5015add0177f0188ee98051", [] ], "resources": { @@ -368332,7 +369070,11 @@ "0dd796f609c0659bd489e10cb02ac4816a88960b", [] ] - } + }, + "transition-finished-mark-as-handled.html.ini": [ + "e6d8a84d379f1963c9ecaaf912f52bcfacf5318c", + [] + ] }, "per-entry-events": { "dispose-after-bfcache.html.ini": [ @@ -368340,7 +369082,7 @@ [] ], "dispose-for-full-session-history.tentative.html.ini": [ - "d229023f791031aea7642fb1d1939f64bb3d5b66", + "5aec1ae9a22cb0a518a4da5eb5dc25f9ea7044de", [] ], "dispose-for-navigation-in-child.html.ini": [ @@ -368348,34 +369090,70 @@ [] ], "dispose-same-document-intercept.html.ini": [ - "9f1b6e1ce46e60a9984f0b77511c1757cd513818", + "e0deccd28dd23b7b263a1438f73d11c78c872cfc", [] ], "dispose-same-document-navigate-during.html.ini": [ - "977a30baf8d232f7ab955454296251445259d31b", + "37b18409d0f08cce197bd46682205697206310f4", [] ], "dispose-same-document-replace-with-intercept.html.ini": [ - "2cc394d2111733cb9fb8d2c5f5d7d4632dd794d7", + "95d50fa99d2e4d5a25855d46fb6a27f337fe22e7", [] ], "dispose-same-document-replaceState.html.ini": [ - "f1d797596bfe8c73b91d7f72e8b9d8f36be4ea9b", + "fbe0ea80defbfd59da108d8e18332ab94e2e0077", [] ], "dispose-same-document.html.ini": [ - "683c3eb5d7f5a26866133cba46f86c22ef6fb0ec", + "0d4d57ed82b0176cf4132211bdc4b0a2bac28196", [] ], "dispose-skip-current-on-truncate.html.ini": [ - "e06d5e83140fd083c90233ac9004a03907bce2cd", + "494cb739af39abbf664c717fe8b684e8da4e89e8", [] ] }, "scroll-behavior": { + "after-transition-push.html.ini": [ + "b048227877dc837b56c9b05ce70c389f72e851ea", + [] + ], + "after-transition-reload.html.ini": [ + "3ddd39ea0ca45e98fc292a9a39646bfaf2b7f588", + [] + ], + "after-transition-replace.html.ini": [ + "47de61fc0400b5e73f6d58778201e26ce2d095a2", + [] + ], + "manual-scroll-fragment-does-not-exist.html.ini": [ + "3e456fa92f1b2eff7fc737ce063af8804960da4a", + [] + ], + "manual-scroll-push.html.ini": [ + "e5a5651b5f96645150cd7789481c63c25307e54f", + [] + ], + "manual-scroll-reload.html.ini": [ + "d23dfff40d655782fe164ce1e1711784c4a78b2d", + [] + ], + "manual-scroll-replace.html.ini": [ + "c424e68b846fe7e70c55674b6354215fe7e44dbb", + [] + ], "scroll-after-preventDefault.html.ini": [ "95d1a1f3885adf2aa18dc39fed96151b0ddac9ce", [] + ], + "scroll-on-synthetic-event.html.ini": [ + "d5d44fb820be595e8fe76a4ed29830c98a8c9a77", + [] + ], + "scroll-without-intercept.html.ini": [ + "5f3811834a5a0341a7147654596ed8d3249b69d2", + [] ] }, "state": { @@ -368391,12 +369169,20 @@ "5e15cf293ea083a95770c21618a6ef4f424207bd", [] ], + "history-pushState.html.ini": [ + "a268f3541c1e79b97a8cb77484fe0d2b31756257", + [] + ], + "history-replaceState.html.ini": [ + "47eb9dbbe34296051740146b3e3fbc3e0a8bfec9", + [] + ], "same-document-away-and-back-location-api.html.ini": [ "2d7e42492d993e1759bcacac2b52e6ca0dee9f7f", [] ], "same-document-away-and-back-navigation-api.html.ini": [ - "5b38149eff7e795dcf1a0f4a1a66c06003e83d00", + "70cc531593a9f162727dfeab97ca422d751ba31c", [] ] }, @@ -368405,6 +369191,14 @@ "5e15cf293ea083a95770c21618a6ef4f424207bd", [] ], + "history-pushState.html.ini": [ + "a268f3541c1e79b97a8cb77484fe0d2b31756257", + [] + ], + "history-replaceState.html.ini": [ + "47eb9dbbe34296051740146b3e3fbc3e0a8bfec9", + [] + ], "resources": { "opaque-origin-page.html": [ "59931458a6b8632ae7ce17286d1ebca80b88235a", @@ -368442,6 +369236,10 @@ "851691d6c49808393376486e2616ce8d18075b18", [] ], + "nav2-test-navigate-within-document.html.ini": [ + "dd7df80c9a96370ec7ecb8fdd5115a51df238903", + [] + ], "prefetch-transfer-size-iframe.html.ini": [ "e6b7295939b961285506dd35b06e1e62a07b11cf", [] @@ -368515,7 +369313,11 @@ "afe09530d75866dbfd84ad4c346b0d8d6f27e5d3", [] ] - } + }, + "test-navigate-within-document.html.ini": [ + "2783e47040a6967e693d5b44ffbd40880bb3bd27", + [] + ] }, "netinfo": { "DIR_METADATA": [ @@ -368661,7 +369463,7 @@ [] ], "getnotifications-across-processes.https.window.js.ini": [ - "953bf00b6237d80d14e5bd4273ff49bf7f997a5d", + "181a0c1afea45ebf8a9911c42524bb15fb07efe8", [] ], "getnotifications-sw.js": [ @@ -368681,7 +369483,7 @@ [] ], "lang.https.html.ini": [ - "fcf7cca61731bbbfc6adaf16b50f9c0fda896034", + "e6b36c5a735a3ad0b9c3a0dbf8e1e524a046ce16", [] ], "noop-sw.js": [ @@ -368707,7 +369509,7 @@ ] }, "shownotification.https.window.js.ini": [ - "3529902d9e09b7688906974b849992e697595b9c", + "ee5b1e76b467e71d03048cc8e6abeb91261285cb", [] ] }, @@ -368813,7 +369615,7 @@ [] ], "minimize.html.ini": [ - "724fdcd1e4cdc487d0186754a0fcf3da19b4eccc", + "34c594deb77bc4c49621867b9016ff859a56a41b", [] ], "prerender_call-expected.txt": [ @@ -368923,7 +369725,7 @@ [] ], "createAdRequest.tentative.https.sub.window.js.ini": [ - "2bd7bdbf58525ead0b48ee250e618407967c50e9", + "aba75710375c03e1e2cfd5971704ff868780983a", [] ], "finalizeAd.tentative.https.sub.window-expected.txt": [ @@ -368931,7 +369733,7 @@ [] ], "finalizeAd.tentative.https.sub.window.js.ini": [ - "dafbf9da86475e4ac764830e17b7f01a9510b3c8", + "623672dd985248d4556a5033a489bab91542e7fb", [] ], "idlharness.tentative.https.window-expected.txt": [ @@ -368939,7 +369741,7 @@ [] ], "idlharness.tentative.https.window.js.ini": [ - "d53ddec8c72e20a3fcabb175b49962c1d3c2832c", + "5e8bc41db1ed31eac817457466f3e66ddeed63f4", [] ] }, @@ -368993,7 +369795,7 @@ [] ], "can-make-payment-event.https.html.ini": [ - "35af7db016182629857ad52f4908b5903dd1e359", + "5fa783e3fa165f26813713b571e13b7fcc1e3f32", [] ], "change-payment-method-manual-manifest.json": [ @@ -369009,7 +369811,7 @@ [] ], "idlharness.https.any.js.ini": [ - "70598dcda3f096e9f8ed8d64d2cf71e407cdc09f", + "1efad896fc80a05fd6c6b0d1c1683c6119e473cc", [] ], "idlharness.https.any.serviceworker-expected.txt": [ @@ -369065,7 +369867,7 @@ [] ], "payment-request-canmakepayment-method.https.html.ini": [ - "b132bbb6d12606d568a0498c01c11e4fae0641e5", + "3dfa41de82911e853145332da331f5fb567225c0", [] ], "steps_for_selecting_the_payment_handler.html.ini": [ @@ -369123,7 +369925,7 @@ [] ], "delegate-request.https.sub.html.ini": [ - "7c687205395f503799e1fee87b2f7f0de93aa03a", + "5721eee8b2dff19632c8c38445abe4a37bde989e", [] ], "historical.https-expected.txt": [ @@ -369151,7 +369953,7 @@ [] ], "payment-is-showing.https.html.ini": [ - "a23828ce30385faad12f40a650048287c58b3199", + "97247ec4947239cf86be3c8709f9db7aa79c5804", [] ], "payment-request-abort-method.https-expected.txt": [ @@ -369159,7 +369961,7 @@ [] ], "payment-request-abort-method.https.html.ini": [ - "3ff8b549335e4a34512abc55dfbce7368d60611b", + "69ca0478eba49879ed38ccd2296d677eb7a69e0a", [] ], "payment-request-canmakepayment-method-protection.https-expected.txt": [ @@ -369171,7 +369973,7 @@ [] ], "payment-request-canmakepayment-method.https.html.ini": [ - "c3345d25a23fdc013cd49d9bf8fe133d0d03a3bd", + "88bf42ef2c29b945b3029c961f8c7754251e1fd7", [] ], "payment-request-hasenrolledinstrument-method-protection.tentative.https-expected.txt": [ @@ -369187,7 +369989,7 @@ [] ], "payment-request-hasenrolledinstrument-method.tentative.https.html.ini": [ - "c01bd07e95fdcda55b0381cda1e3c6644bbed3c0", + "110f0e4f5aa072875d4d1283749d734222371909", [] ], "payment-request-show-method.https-expected.txt": [ @@ -369195,7 +369997,7 @@ [] ], "payment-request-show-method.https.html.ini": [ - "092ef0bde628f94b627e0b215786ae99f3c89ca3", + "d2719c376a5fd4e98060a1218d41dd0ea7a3e652", [] ], "payment-response": { @@ -369239,7 +370041,7 @@ [] ], "show-method-optional-promise-rejects.https.html.ini": [ - "9cbce69c0f868638f1369324dd95c26306416f71", + "649f1f50fef12c2385002ff3d78b5afb1b3c3603", [] ], "show-method-postmessage-iframe.html": [ @@ -369419,7 +370221,7 @@ [] ], "idlharness.https.any.js.ini": [ - "8086adc2310afec46d9dd2effa7cc8486de446a0", + "d5ce086a6510976bde2faa475d45800437ebf3a1", [] ], "idlharness.https.any.worker-expected.txt": [ @@ -369443,7 +370245,7 @@ [] ], "all-permissions.html.ini": [ - "5da062cd52408ca7a67b357016e33bcb18de01e7", + "5b579e300a598990f8fab9ed8b5466fb680994ad", [] ], "feature-policy-permissions-query.html": [ @@ -369455,7 +370257,7 @@ [] ], "permissions-query-feature-policy-attribute.https.sub.html.ini": [ - "824c65b41e4aa59694f07b43ca188f0adda5fd5d", + "4e8e1eb8c20a184b74f4cabe5e4def265b43e911", [] ], "resources": { @@ -369570,7 +370372,7 @@ ] }, "trust-token-redemption-default-permissions-policy.tentative.https.sub.html.ini": [ - "3d80263611fb9c2d0a26753bee8b0a70c974e133", + "95f36f7071600858605e8bbbd9ff26c769a60b9f", [] ], "trust-token-redemption-supported-by-permissions-policy.tentative.html.ini": [ @@ -369587,7 +370389,7 @@ [] ], "idlharness.window.js.ini": [ - "dd5baddfdbc4b2eb8e43561fc7511854539aa949", + "df49ca86d46381a11736bf1aad1b097ba8796f1a", [] ], "payment-allowed-by-permissions-policy.https.sub.html.headers": [ @@ -369603,7 +370405,7 @@ [] ], "payment-extension-allowed-by-permissions-policy-attribute.https.sub.html.ini": [ - "57b11386d3fcdd7a13014e5d7596d7128439af3d", + "8c88e81f16a1b869e66fc2f6413a6f70c69baada", [] ], "payment-supported-by-permissions-policy.tentative.html.ini": [ @@ -369611,7 +370413,7 @@ [] ], "permissions-policy-frame-policy-allowed-for-all.https.sub.html.ini": [ - "f9ea79dc05abcc8af4c14417bcb4646cd41d3fe7", + "8713afdb26921e4595a5d6c2297191bb4be25c91", [] ], "permissions-policy-frame-policy-allowed-for-all.https.sub.html.sub.headers": [ @@ -369623,7 +370425,7 @@ [] ], "permissions-policy-frame-policy-allowed-for-self.https.sub.html.ini": [ - "7640645f42c92c846b364866009accc24c5d4aa5", + "82ae1a54409295e3157494173b3ddaed1a74ebc9", [] ], "permissions-policy-frame-policy-allowed-for-self.https.sub.html.sub.headers": [ @@ -369635,7 +370437,7 @@ [] ], "permissions-policy-frame-policy-allowed-for-some-override.https.sub.html.ini": [ - "d521480aa2626fd1671c5c90eafaae93cd6c1229", + "f88d90395e98ba6a8610ecd210e7a3fdb841ad3d", [] ], "permissions-policy-frame-policy-allowed-for-some-override.https.sub.html.sub.headers": [ @@ -369647,7 +370449,7 @@ [] ], "permissions-policy-frame-policy-allowed-for-some.https.sub.html.ini": [ - "f1b7e85b094d20d7964bd4d4e58471bcf4d58bbc", + "cccd9a742e3ec70a5b30d73c59fbf70b93778584", [] ], "permissions-policy-frame-policy-allowed-for-some.https.sub.html.sub.headers": [ @@ -369655,7 +370457,7 @@ [] ], "permissions-policy-frame-policy-disallowed-for-all.https.sub.html.ini": [ - "055a82bb3c8e6cd08afbfbc924c09bad6f6f6fa6", + "1770844edbb94463b3b03f3cc0d7f3bd759973df", [] ], "permissions-policy-frame-policy-disallowed-for-all.https.sub.html.sub.headers": [ @@ -370053,7 +370855,7 @@ [] ], "disable-picture-in-picture.html.ini": [ - "cbc76568d99b7cc0aa998be74710559da0c4cde9", + "21dd416ae12ade4b59766ece8ee5b9edeed9e891", [] ], "enter-picture-in-picture.html.ini": [ @@ -370065,7 +370867,7 @@ [] ], "idlharness.window.js.ini": [ - "78862a80e950ca284377b45785da11e3ef69fae6", + "6158cc1175eab44aae1f98e32e547c2263d70614", [] ], "leave-picture-in-picture.html.ini": [ @@ -370081,7 +370883,7 @@ [] ], "picture-in-picture-window.html.ini": [ - "de53768809d726cc0457e82bb37e9b964a4f9e9a", + "4f4ab134254ad979c5a0b2e09569d56fb3fce56c", [] ], "removed-from-document.html.ini": [ @@ -370135,11 +370937,11 @@ [] ], "capturing_boundary_event_handler_at_ua_shadowdom.html.ini": [ - "bd87fb911ee93ff2102ad354adf2a7ae013dd457", + "276f1281e6df754169a664890c0b12e69db1dffd", [] ], "coalesced_events_attributes_under_load.html.ini": [ - "b5b0fd52406859b24ec774742c4db6eafce7b792", + "20c586e4cd04874c7de50517c65fcb5ce0f49311", [] ], "compat": { @@ -370153,19 +370955,19 @@ ] }, "pointerevent_after_target_removed.html.ini": [ - "1cde114ec964aa7a4d8d0e5f738e79abd003856a", + "02f313b169611db555bd80d859fc3ddd2584097b", [] ], "pointerevent_attributes_hoverable_pointers.html.ini": [ - "d2c64c73cd5d397cff9912920f8f66b14c4053d5", + "2ecbc83a50a56ee5eb7b4b850f6c38404519b8b8", [] ], "pointerevent_attributes_hoverable_rightbutton.html.ini": [ - "99f05b509dd21eed8a059326d95c98194db4198d", + "7c87614eab1d700c58c17a964c46dd898e52e656", [] ], "pointerevent_attributes_nohover_pointers.html.ini": [ - "4a1f77fcbf9fce9b99db49047379037b83c486e0", + "cc1e955b94092b14ca53863f7500889014e4de7d", [] ], "pointerevent_change-touch-action-onpointerdown_touch.html.ini": [ @@ -370181,7 +370983,7 @@ [] ], "pointerevent_constructor.html.ini": [ - "3280c10da9068d42714465d1288d57062d9ddf7a", + "3c96ad3e7f6b123ad79a0d159ffc956701ab8ef4", [] ], "pointerevent_contextmenu_is_a_pointerevent.html.ini": [ @@ -370400,7 +371202,7 @@ [] ], "frame-src.sub.html.ini": [ - "4e1c0c6276ba4d009ae07c23777acbdaf2d82169", + "44a9c376d1b71da9e277141972325cc28f3ec00b", [] ], "resources": { @@ -370416,11 +371218,11 @@ }, "history": { "history-manipulation-inside-portal-with-subframes.html.ini": [ - "f3660261d2b6ea03adf427b566836971b0fcefff", + "252a3037b74b36cef5d92398cc3a01fc2b0c0701", [] ], "history-manipulation-inside-portal.html.ini": [ - "0c6f4b764aedd17909bcb81873d3671a6990e422", + "235e437e99ddc251152890e533084d8e2cfefe1b", [] ], "resources": { @@ -370451,11 +371253,11 @@ [] ], "idlharness.window.js.ini": [ - "8e50d240e21411dca28ef3130d4b324deb71e4cd", + "4580f8f9993d3df62002a5bfdb734b27959ef8fc", [] ], "portal-activate-data.html.ini": [ - "878c0095d991d55630bc75095e2dfbbb20f30cb1", + "a7ff35b78d89f0da0a56c5dd87116bc0c2af7488", [] ], "portal-activate-default.html.ini": [ @@ -370463,11 +371265,11 @@ [] ], "portal-activate-event-constructor.html.ini": [ - "594779302e0308db643a70ffac3a4e138ee5958d", + "c90733cc7873ea3ed34b08e67d930ac2871b9290", [] ], "portal-activate-event.html.ini": [ - "21d13c281bd546edcc61578075d7ab1df36ee8a3", + "29ac665790676ec855067a7da5b28e651c1a5d6c", [] ], "portal-non-http-navigation.html.ini": [ @@ -370511,7 +371313,7 @@ [] ], "portals-adopt-predecessor.html.ini": [ - "7c7b0d5dc35bf04d92a2adc2613c95476368bca7", + "e7b416d97fa6ad8c3300f22ea58b205c864d14a3", [] ], "portals-api.html.ini": [ @@ -370527,11 +371329,11 @@ [] ], "portals-focus.sub.html.ini": [ - "0c9d48320990fc3481c70e4a10b87fc29292d8e6", + "9df3af8d21a0c2a1dfcc568c3883bf2f9f5e869c", [] ], "portals-host-exposure.sub.html.ini": [ - "e24ee3f8251ecb1881a3cbec9d4dcaa7fc3c3480", + "df0901ecff51f2c4fee3503be7829edf5585ea87", [] ], "portals-host-hidden-after-activation.html.ini": [ @@ -370543,7 +371345,7 @@ [] ], "portals-host-post-message.sub.html.ini": [ - "b24b82400738d7ff2058b1d193317f1489e090a2", + "ae0752b53453183590d56768bea77fcfb4e864b4", [] ], "portals-navigate-after-adoption.html.ini": [ @@ -370555,7 +371357,7 @@ [] ], "portals-post-message.sub.html.ini": [ - "a1f0ce45e90294c7ba2fcc7f04b0231d024ef8a2", + "70878f24700a782d4dad247dccf212c6edb80303", [] ], "portals-referrer-inherit-header.html.headers": [ @@ -370571,7 +371373,7 @@ [] ], "portals-referrer.html.ini": [ - "0f90a874a53712ad3e1cde2ec27a563aa344bc60", + "6651fbda3bc2df1395e3dd75edc5aa569925a675", [] ], "portals-rendering.html.ini": [ @@ -370772,7 +371574,7 @@ }, "xfo": { "portals-xfo-deny.sub.html.ini": [ - "c45fa6f57453c2311487938ecf6afd2dd5c71266", + "8ec9554a1b398efda4ca4adf2b49e2b53af8c4d3", [] ], "portals-xfo-sameorigin.html.ini": [ @@ -370873,7 +371675,7 @@ [] ], "prefetch-cache.html.ini": [ - "c71ed04a49dd9499273a465535dee54476e9ef25", + "311339a40e6da243ca66c4cb2769b2f6762bab02", [] ], "prefetch-document-expected.txt": [ @@ -370881,7 +371683,7 @@ [] ], "prefetch-document.html.ini": [ - "b208130b8b5e49911e7ca9a1f920e771281ef8ed", + "eb17fdd62118f3bb8883323a5af63c174fda1ca8", [] ], "prefetch-events-expected.txt": [ @@ -370889,7 +371691,7 @@ [] ], "prefetch-events.html.ini": [ - "93038cb21abf3a89ac8f1278303ec7d34067903b", + "257bf6124607b5af1ec91c3f92bf98baea41cc21", [] ], "prefetch-headers-expected.txt": [ @@ -370905,7 +371707,7 @@ [] ], "prefetch-types.html.ini": [ - "d11c18465d59cfe9cf6aca2a4ea5ce27f9e6d3d7", + "62b84b38cfb336ef12e0739998c7273fa5d5842e", [] ], "preload-error.sub-expected.txt": [ @@ -370913,7 +371715,7 @@ [] ], "preload-error.sub.html.ini": [ - "b772de758c2d3350f5712c8275801567a6a8be94", + "064772e36c7472900cba5d1d8255491f36367a22", [] ], "preload-in-data-doc-ref.html": [ @@ -370921,7 +371723,7 @@ [] ], "preload-resource-match.https.html.ini": [ - "f0d2bf4c9e9ec57e08c4e0c6b14d1b4c395ef3e9", + "daa1a3d4a9250e931de7166e61758f43d3aa23d1", [] ], "preload-time-to-fetch.https-expected.txt": [ @@ -371115,7 +371917,7 @@ [] ], "subresource-integrity.html.ini": [ - "1075331816ab176ae923862119f4bc8c8a0804c8", + "d389decd999fa5a4b7d8f4852ce3de1b00d7d869", [] ] }, @@ -371307,7 +372109,7 @@ [] ], "percentage-height-calculation.html.ini": [ - "7082ed27808dabface1adf75190b67ede45f1cfd", + "8feb5ce693185c95339d3a018c7a231718b25fbe", [] ], "reference": { @@ -371366,37 +372168,73 @@ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], "fetch.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], "iframe-tag.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], "img-tag.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], "script-tag.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], "sharedworker-classic.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], "worker-classic.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], "worker-module.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], "xhr.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] ] }, "origin-when-cross-origin": { @@ -371404,37 +372242,73 @@ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], "fetch.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], "iframe-tag.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], "img-tag.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], "script-tag.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], "sharedworker-classic.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], "worker-classic.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], "worker-module.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], "xhr.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] ] }, "same-origin": { @@ -371442,37 +372316,73 @@ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], "fetch.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], "iframe-tag.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], "img-tag.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], "script-tag.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], "sharedworker-classic.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], "worker-classic.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], "worker-module.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], "xhr.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] ] }, "strict-origin-when-cross-origin": { @@ -371480,37 +372390,73 @@ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], "fetch.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], "iframe-tag.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], "img-tag.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], "script-tag.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], "sharedworker-classic.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], "worker-classic.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], "worker-module.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], "xhr.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] ] }, "unsafe-url": { @@ -371518,37 +372464,341 @@ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], "fetch.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], "iframe-tag.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], "img-tag.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], "script-tag.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], "sharedworker-classic.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], "worker-classic.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], "worker-module.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], "xhr.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] + ] + }, + "unset": { + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] + ] + } + }, + "top.meta": { + "no-referrer-when-downgrade": { + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] + ] + }, + "origin-when-cross-origin": { + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] + ] + }, + "same-origin": { + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] + ] + }, + "strict-origin-when-cross-origin": { + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] + ] + }, + "unsafe-url": { + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] + ] + }, + "unset": { + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] ] } } @@ -371572,37 +372822,73 @@ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], "fetch.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], "iframe-tag.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], "img-tag.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], "script-tag.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], "sharedworker-classic.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], "worker-classic.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], "worker-module.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], "xhr.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] ] }, "origin-when-cross-origin": { @@ -371610,37 +372896,73 @@ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], "fetch.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], "iframe-tag.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], "img-tag.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], "script-tag.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], "sharedworker-classic.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], "worker-classic.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], "worker-module.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], "xhr.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] ] }, "same-origin": { @@ -371648,37 +372970,73 @@ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], "fetch.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], "iframe-tag.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], "img-tag.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], "script-tag.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], "sharedworker-classic.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], "worker-classic.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], "worker-module.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], "xhr.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] ] }, "strict-origin-when-cross-origin": { @@ -371686,37 +373044,73 @@ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], "fetch.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], "iframe-tag.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], "img-tag.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], "script-tag.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], "sharedworker-classic.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], "worker-classic.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], "worker-module.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], "xhr.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] ] }, "unsafe-url": { @@ -371724,37 +373118,341 @@ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], "fetch.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], "iframe-tag.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], "img-tag.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], "script-tag.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], "sharedworker-classic.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], "worker-classic.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], "worker-module.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], "xhr.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] + ] + }, + "unset": { + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] + ] + } + }, + "top.meta": { + "no-referrer-when-downgrade": { + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] + ] + }, + "origin-when-cross-origin": { + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] + ] + }, + "same-origin": { + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] + ] + }, + "strict-origin-when-cross-origin": { + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] + ] + }, + "unsafe-url": { + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] + ] + }, + "unset": { + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] ] } } @@ -371778,37 +373476,73 @@ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], "fetch.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], "iframe-tag.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], "img-tag.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], "script-tag.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], "sharedworker-classic.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], "worker-classic.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], "worker-module.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], "xhr.http.html.headers": [ "180358e691bd449b825e0c8f199d919dbd90c270", [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] ] }, "origin-when-cross-origin": { @@ -371816,37 +373550,73 @@ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], "fetch.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], "iframe-tag.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], "img-tag.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], "script-tag.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], "sharedworker-classic.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], "worker-classic.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], "worker-module.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], "xhr.http.html.headers": [ "a15ea7c65c8647c29e5ac992286568aa8dc013f5", [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] ] }, "same-origin": { @@ -371854,37 +373624,73 @@ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], "fetch.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], "iframe-tag.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], "img-tag.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], "script-tag.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], "sharedworker-classic.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], "worker-classic.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], "worker-module.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], "xhr.http.html.headers": [ "be66cf9321103b1397670f3acc89cecc09aabec2", [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] ] }, "strict-origin-when-cross-origin": { @@ -371892,37 +373698,73 @@ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], "fetch.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], "iframe-tag.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], "img-tag.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], "script-tag.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], "sharedworker-classic.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], "worker-classic.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], "worker-module.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], "xhr.http.html.headers": [ "4cff1d12f82e028f7f1e9616bfb539ffb75b1df1", [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] ] }, "unsafe-url": { @@ -371930,37 +373772,341 @@ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], "fetch.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], "iframe-tag.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], "img-tag.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], "script-tag.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], "sharedworker-classic.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], "worker-classic.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], "worker-module.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], "xhr.http.html.headers": [ "c1d3fd1a0be2609a6939653a3f4ce6f5036b6286", [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] + ] + }, + "unset": { + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] + ] + } + }, + "top.meta": { + "no-referrer-when-downgrade": { + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] + ] + }, + "origin-when-cross-origin": { + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] + ] + }, + "same-origin": { + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] + ] + }, + "strict-origin-when-cross-origin": { + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] + ] + }, + "unsafe-url": { + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] + ] + }, + "unset": { + "a-tag.http.html.ini": [ + "628c5f1ccb4c66d3019eb773552ceab6a82d0989", + [] + ], + "fetch.http.html.ini": [ + "7b445aedb5a9f7bf521eb338c065a9e4a704432e", + [] + ], + "iframe-tag.http.html.ini": [ + "c4b44147d448633585d58148c89052d4ab1d42a5", + [] + ], + "img-tag.http.html.ini": [ + "de8b8bd1830732475881aeacee4dba2e0637f5bf", + [] + ], + "script-tag.http.html.ini": [ + "d829c9a15845bb595adecfb7c607824ae2087e28", + [] + ], + "sharedworker-classic.http.html.ini": [ + "8685f1441eaab2b12fc25dfcf4309deac0c2d60d", + [] + ], + "worker-classic.http.html.ini": [ + "43ad990d9c7b9e6792504c299afbb9652a9f9b80", + [] + ], + "worker-module.http.html.ini": [ + "6cc87a84f1a0ffdc3e70223782a777a9523dd8ca", + [] + ], + "xhr.http.html.ini": [ + "77af2357e6ad11b71e900f50b0b99f5bbf1bf4de", + [] ] } } @@ -372003,27 +374149,27 @@ ], "svg": { "external-stylesheet.html.ini": [ - "38a4790e2e46245c93a01169d7f85b2fafd6cf6b", + "11ae41455ff58186d02eb4013a541ecc8dc1d5dc", [] ], "inline-style-with-differentorigin-base-tag.tentative.html.ini": [ - "156e1865b30245f38fe99830bb7f90ccc6af53dc", + "8ffdb23566c229826d908a8f716565e98f553416", [] ], "inline-style.html.ini": [ - "b18cb1e669cc4127335701d8fed6a23ff932c660", + "94fad066c608a6a8709711c1c32c8c669ee68517", [] ], "internal-stylesheet.html.ini": [ - "c4cbf7cafbe807c1d63e8c6d3152318095cb6b7c", + "c14d3584923c58469137f074012a1de5c92f7ec5", [] ], "presentation-attribute.html.ini": [ - "6b8834cc500315875be9316e47f2917438cb8890", + "a4bff4652a86bd2356b5cbd57eb2b2c5b34deee6", [] ], "processing-instruction.html.ini": [ - "1c6d2128147bb9048b1eb807500cb8ac222d2de9", + "0ce6264a8d75336d574daba814cf5cee09b6fa10", [] ] } @@ -372939,7 +375085,7 @@ [] ], "idlharness.any.js.ini": [ - "0f79ee948676eeea626580a5914953af3a6a3f23", + "5849ac9a4268a9a089404f78a622ba36d642d701", [] ], "idlharness.any.worker-expected.txt": [ @@ -373915,7 +376061,7 @@ [] ], "element-set-sanitized-html.https.html.ini": [ - "b4db7011801997c762947d49a5244d42b9a9c14d", + "1e2c9dccef6ab7ff10b77beacce2674c05d460f7", [] ], "sanitizer-config.https-expected.txt": [ @@ -373931,7 +376077,7 @@ [] ], "sanitizer-names.https.html.ini": [ - "ea0eda58da939308282695435787f94dbbd12d68", + "a1a619873ebdc692492596cd05d408a553af99d9", [] ], "sanitizer-sanitize.https.tentative-expected.txt": [ @@ -373939,7 +376085,7 @@ [] ], "sanitizer-sanitize.https.tentative.html.ini": [ - "b53ad4cbcfdbedccba5329f57789207d78f2722e", + "ee306127252245adcdd2f5e70a92e02b47d43d0a", [] ], "sanitizer-sanitizeFor.https.tentative-expected.txt": [ @@ -373947,7 +376093,7 @@ [] ], "sanitizer-sanitizeFor.https.tentative.html.ini": [ - "f57b057698f473a21cbf792c3f937a3f74de93c5", + "1ab0223882eae1ab7b91eb6f5d8ecd84bcde907d", [] ], "sanitizer-unknown.https-expected.txt": [ @@ -373955,7 +376101,7 @@ [] ], "sanitizer-unknown.https.html.ini": [ - "bc4d3ef9d6c15eefdd5dd88686af8fc092c2a2ec", + "085c743365113654d0628331ae65575349f35120", [] ], "support": { @@ -374049,7 +376195,7 @@ [] ], "fullscreen-interactions.html.ini": [ - "348c225d4a5b96ceb20ed281d82ef52270598333", + "11153e9d95863360b30607ba10196c5108e0f5c8", [] ], "hidden_document-expected.txt": [ @@ -374057,7 +376203,7 @@ [] ], "hidden_document.html.ini": [ - "59c1bf8a01a28f79dffe87c2217e1fa4f896458b", + "0147e192c975477fa23e6f9bee031f549ed84cba", [] ], "lock-basic-expected.txt": [ @@ -374065,11 +376211,11 @@ [] ], "lock-basic.html.ini": [ - "05f5581170b43c53a80591d6c41a2742b0b0d144", + "bcf3bedc1f4304ccf21722270a6c4656d88cf3f5", [] ], "lock-sandboxed-iframe.html.ini": [ - "b2f7a9411b277190d3c3178be84144462d75ae63", + "f9ce150df4cf32826d25ead64b09219b2bd8673d", [] ], "lock-unlock-check-expected.txt": [ @@ -374101,11 +376247,11 @@ [] ], "onchange-event-subframe.html.ini": [ - "e18d1531342cfe2f33c650ddbfb8e9c82735c584", + "1d8b346fd96550d299296fc2ac50f5e07c103385", [] ], "onchange-event.html.ini": [ - "9bf7ea1340b5c87807bd4cf6ee95235ea31106af", + "a2a8335e87bc7e213f3655b9c9b1270b5867447b", [] ], "orientation-reading-expected.txt": [ @@ -374113,7 +376259,7 @@ [] ], "orientation-reading.html.ini": [ - "c7ea824f31db94444926d2d6dfde657b25ae4739", + "a84e655e4a21b4d98482f0565a79c3a217f5559f", [] ], "resources": { @@ -374139,7 +376285,7 @@ [] ], "unlock.html.ini": [ - "cf94b21b014aa928428cf771435c9f812cb078fa", + "92c03a75c30ec72b03a7eb9471d1312e78c04ece", [] ] }, @@ -374167,7 +376313,7 @@ [] ], "wakelock-document-hidden.https.html.ini": [ - "59e9a5ef4db2840fd40fd5af3e544cf04c90f840", + "9279623ccb30100042c97655a1213232bbc0a02c", [] ], "wakelock-enabled-by-permissions-policy-attribute-redirect-on-load.https.html.ini": [ @@ -374175,7 +376321,7 @@ [] ], "wakelock-enabled-by-permissions-policy-attribute.https.html.ini": [ - "681fbe0d32577298a4f51650af96a9b2c0d4b531", + "1bb45200eac2b3b15af1c8ef15a9034e4a490a5e", [] ], "wakelock-enabled-by-permissions-policy.https.html.headers": [ @@ -374183,7 +376329,7 @@ [] ], "wakelock-enabled-by-permissions-policy.https.html.ini": [ - "1496c200b5bc11027954713a332da4a6e627a4ba", + "fcbb7abe7f4b6640417e1eb7072cb5db139a1e06", [] ], "wakelock-enabled-on-self-origin-by-permissions-policy.https.html.headers": [ @@ -374378,6 +376524,10 @@ [] ] }, + "same-document-tests.html.ini": [ + "121691785a6f974a987a5640041c099ec3884139", + [] + ], "scroll-to-text-fragment-target.html": [ "b2be85132cb8f2f2c14c82bf1854c3130f375c96", [] @@ -374409,7 +376559,7 @@ [] ], "basic-popup-and-iframe-tests.https.html.ini": [ - "daf7398451359f5a501d5ac03227cb0e9826fda4", + "634afe51dd97a2de021c2ec30a58c07a4d499923", [] ], "basic-popup-and-iframe-tests.https.js": [ @@ -374421,7 +376571,7 @@ [] ], "basic-shared-worker.html.ini": [ - "6bbfd6ad3f28f72b77cd7f9cc68ae3c33d7a9967", + "f33fa27f8819b4e3856747a4e560cb12869147ae", [] ], "basic-shared-worker.https-expected.txt": [ @@ -374429,7 +376579,7 @@ [] ], "basic-shared-worker.https.html.ini": [ - "52a43d1a21da5038bdbfce204017d5cfc3f66e9c", + "959936438a3a821569569e9a974baf0280ae3ca5", [] ], "postMessage-helper.html": [ @@ -374449,7 +376599,7 @@ [] ], "shared-worker-insecure-first.https.html.ini": [ - "b6ed3381750c3b967f5c2d9922d95a5793db7b0e", + "3dc71b8a0c48fcb23c77a1cd569206b730b3b73c", [] ], "shared-worker-secure-first.https-expected.txt": [ @@ -374457,7 +376607,7 @@ [] ], "shared-worker-secure-first.https.html.ini": [ - "b8634ee23e79d67fdbfbd3ec55b441d62b602ab9", + "31deef130234617544a3969652fdea731c4e0287", [] ], "support": { @@ -374541,7 +376691,7 @@ [] ], "authentication-invalid-icon.https.html.ini": [ - "48b3321f032043418c35392bb7f2417ddc683d5b", + "c827aef3a60879aab8f99a19166391c1fca3d9cc", [] ], "authentication-optout.https-expected.txt": [ @@ -374581,7 +376731,7 @@ [] ], "enrollment.https.html.ini": [ - "af94a038a11d272db05855b2d30801bc29695b96", + "aaaec28cfa192f87c48f84a5ea98982c094e0c2b", [] ], "resources": { @@ -374654,7 +376804,7 @@ [] ], "initial-selection-on-focus.tentative.html.ini": [ - "d6436a72943558125021b52e16298f22d9f68b0f", + "794e498b59d3339053c5c38d09b5be8570d533a0", [] ], "modifying-selection-with-middle-mouse-button.tentative-expected.txt": [ @@ -374675,7 +376825,7 @@ [] ], "idlharness.window.js.ini": [ - "61d4af159f4ab22f4895677658e7e9710bd25491", + "5b9fde7bdd360eda7d40377bfd757278e4db62af", [] ], "modify-line-flex-row.tentative-expected.txt": [ @@ -374683,7 +376833,7 @@ [] ], "modify-line-flex-row.tentative.html.ini": [ - "61bedc6594c5676d77134b22d6a1b1bce5010418", + "574b9dfe685c2ef0e02737f5fa2a1ff10f97fa07", [] ], "modify.tentative-expected.txt": [ @@ -374699,7 +376849,7 @@ [] ], "removeRange.html.ini": [ - "be65f3d1bbc86edc70124e622f020fcc09b94d76", + "31734b8104292d798ef0c1adffc58d2a2fd3bba5", [] ], "script-and-style-elements-expected.txt": [ @@ -374740,7 +376890,7 @@ [] ], "selectionchange.html.ini": [ - "e56b4784364aebbb71ac4ce4dc47b5e076fa024a", + "b283864197d5a4570671d1b0e34b68d6381e3e22", [] ], "selectionchange.tentative-expected.txt": [ @@ -375598,7 +377748,7 @@ [] ], "cache-add.https.any.js.ini": [ - "7fef27e4828cfead5662f89fdee68f434be013d3", + "369cb9564e6c784e3f7b7ec1bbcb6d3fac8c55db", [] ], "cache-add.https.any.serviceworker-expected.txt": [ @@ -375618,7 +377768,7 @@ [] ], "cache-keys-attributes-for-service-worker.https.html.ini": [ - "3c36c91ba49762cd9c998bcec46d1d6ee4c30fe1", + "39b746d773d162f5fe2aace70cfc915286bc903e", [] ], "cache-keys.https.any-expected.txt": [ @@ -375626,7 +377776,7 @@ [] ], "cache-keys.https.any.js.ini": [ - "7c0333b10a50bcf9ac4610d24ef4ebe38d7403ef", + "aaddf08f338cd97a52ebc296fc58568fb8e75a6d", [] ], "cache-keys.https.any.serviceworker-expected.txt": [ @@ -375646,7 +377796,7 @@ [] ], "cache-match.https.any.js.ini": [ - "3f154491044a8dd8522708c616774ae3f42f5d75", + "1c63457962a6063d10c3ee14d6ceebf26a71b9a5", [] ], "cache-match.https.any.serviceworker-expected.txt": [ @@ -375666,7 +377816,7 @@ [] ], "cache-matchAll.https.any.js.ini": [ - "51afd68f748a2b2b63e40122298f848695c6c50c", + "9bb24dd9a4e8229c3192c82b9611d0899fbc52f8", [] ], "cache-matchAll.https.any.serviceworker-expected.txt": [ @@ -375759,7 +377909,7 @@ ] }, "idlharness.https.any.js.ini": [ - "e9611e85bc5251e1042f0bdf43aecd95d719336b", + "de243c62398c1bf1801604f4ee29fc5cfdfba96e", [] ], "idlharness.https.any.serviceworker-expected.txt": [ @@ -375856,7 +378006,7 @@ [] ], "about-blank-replacement.https.html.ini": [ - "b2a61d9c24fb4e80b97cb4747249e50855d8dddb", + "a3c6618ffc1284d84678c0c918914031f9d9da71", [] ], "client-url-of-blob-url-worker.https-expected.txt": [ @@ -375900,7 +378050,7 @@ [] ], "clients-matchall-order.https.html.ini": [ - "fe67c439015377ed28b90116985faba81c00e02c", + "71b4b9264cee8ac7cd1be0e7ea3b08a5dba5832d", [] ], "dedicated-worker-service-worker-interception.https-expected.txt": [ @@ -375908,7 +378058,7 @@ [] ], "dedicated-worker-service-worker-interception.https.html.ini": [ - "cdea0ceb76772355ad9be7c76b70436affaccfa1", + "a8029dda6f4c311fadf54e3b0a61c29410978d39", [] ], "fetch-error.https-expected.txt": [ @@ -375924,7 +378074,7 @@ [] ], "fetch-event-redirect.https.html.ini": [ - "35ae1feb5af5940906048cb682c615878c0739ce", + "e26af97788c8da8a751c9561e7c585c3b0a23277", [] ], "fetch-event-referrer-policy.https.html.ini": [ @@ -375936,7 +378086,7 @@ [] ], "fetch-event.https.html.ini": [ - "d281a6f02543a7357cf9fe3a779f359aa84a4e87", + "9c0260e94a90794e3b1e6aed1c303d6c1c44c7e6", [] ], "fetch-header-visibility.https.html.ini": [ @@ -375964,7 +378114,7 @@ [] ], "fetch-request-xhr.https.html.ini": [ - "0123272d4e83141af79e1dcbbcc5b7e36b0151b9", + "97df438780987dfab799c75fa653c87e64654e42", [] ], "fetch-waits-for-activate.https-expected.txt": [ @@ -375992,7 +378142,7 @@ [] ], "import-scripts-redirect.https.html.ini": [ - "d376e76a05828a2d97378387f69e4145978f59a9", + "ca6800b0c556c50af18ade353bc4c24e8dd7ff05", [] ], "interface-requirements-sw.https-expected.txt": [ @@ -376008,7 +378158,7 @@ [] ], "local-url-inherit-controller.https.html.ini": [ - "dfbb73a5f0fe6e396f793b744247c374faa6d4c0", + "01e033cad13ce02bdf6d55d89135a09f9f9b0478", [] ], "multi-globals": { @@ -376052,7 +378202,7 @@ [] ], "navigate-window.https.html.ini": [ - "ddbb3c791bc813d01d11456e5c52f89c5daefbef", + "e133268691411b7d095201239a2b852395eb0d77", [] ], "navigation-preload": { @@ -377740,11 +379890,11 @@ [] ], "same-site-cookies.https.html.ini": [ - "888058dd9033a70ffc91e47e701cd3dcb51aad1b", + "60d8ef3905a722151a2df2e72c1f9cbdb125518e", [] ], "unregister-immediately-during-extendable-events.https.html.ini": [ - "79345ba172bfa396f0c8b88d63be5413d7d05e51", + "538577a805436568c7d1e056465b23abae9720c1", [] ], "unregister-then-register-new-script.https-expected.txt": [ @@ -377752,7 +379902,7 @@ [] ], "unregister-then-register-new-script.https.html.ini": [ - "2d71adacc7263bea35685c505fc27355f8b547bc", + "71d0909dcf3a72fc1dd40851cc4976fe4b8ec43c", [] ], "unregister-then-register.https-expected.txt": [ @@ -377788,7 +379938,7 @@ [] ], "worker-interception-redirect.https.html.ini": [ - "39a2e0c4ec9b837272f7a39ac82398965b005ee8", + "002e7265b6c86b11992206c1da9a61e17a8715fd", [] ], "worker-interception.https-expected.txt": [ @@ -377796,7 +379946,7 @@ [] ], "worker-interception.https.html.ini": [ - "1ac67ab5de0811f0a998351aebaa1872b6062505", + "6f70d96c44f49bc8ee8f819b813b04da2b6f9f9c", [] ], "xhr-content-length.https.window-expected.txt": [ @@ -377838,7 +379988,7 @@ [] ], "getinnerhtml.tentative.html.ini": [ - "7ab112592e92df3084de6aea893bd7d7a5b4a6d3", + "7d67af1adda3ed209b1bae8e9ef6e4892e152da7", [] ], "support": { @@ -377928,6 +380078,10 @@ [] ] }, + "scroll-to-the-fragment-in-shadow-tree.html.ini": [ + "19164c4a562051c3b2d5dce4b2c991e1995b36a8", + [] + ], "shadow-style-invalidation-vw-units-ref.html": [ "d86fd234ca321a762fff5017b4adc68301124bcd", [] @@ -378053,7 +380207,7 @@ [] ], "select-url-permissions-policy-none.tentative.https.sub.html.ini": [ - "990b636943d1bd9feb121ddfc18dc53dd6d67140", + "d11c26a53c8a5ad9176264d4faf54c21ab620faf", [] ], "select-url-permissions-policy-self.tentative.https.sub.html.headers": [ @@ -378065,7 +380219,7 @@ [] ], "shared-storage-permissions-policy-default.tentative.https.sub.html.ini": [ - "3d215fbc6801ccb0b8b907a6685ee23f3c235ded", + "4ddcd7ce9213915eaa80e0a1c5ad7d09d1441df9", [] ], "shared-storage-permissions-policy-none.tentative.https.sub.html.headers": [ @@ -378073,7 +380227,7 @@ [] ], "shared-storage-permissions-policy-none.tentative.https.sub.html.ini": [ - "44ebd1660ed7a0c2990378bf9b76cada450c593a", + "049ec35907430f3fe9489bb6906ec860ac237fbd", [] ], "shared-storage-permissions-policy-self.tentative.https.sub.html.headers": [ @@ -378081,7 +380235,7 @@ [] ], "shared-storage-permissions-policy-self.tentative.https.sub.html.ini": [ - "159807364e8aaf51ebd6713e3618dfc64a3a1fd9", + "934ffa5ccd8f3a871f0416d1829f9ff24174bba4", [] ] }, @@ -378528,7 +380682,7 @@ [] ], "document-rules.https.html.ini": [ - "ff249664b48d0cd3d4106583abdb8027573418b4", + "b7662df627150f64d7f15b2b2feafa4b6b4032e2", [] ], "no-vary-search": { @@ -378537,12 +380691,12 @@ [] ], "prefetch-single.https.html.ini": [ - "c841671ddfcc96c33630a2928f8e9740e3bf0146", + "efb419ee5447361c738be3d691f70e49f7de0266", [] ] }, "out-of-document-rule-set.https.html.ini": [ - "826dc049be209db26a27033ec25fb0ce1f08de28", + "ee28f8b35838c120355f5cc47c90b2c615ca257b", [] ], "redirect-url.https.html.ini": [ @@ -378694,7 +380848,7 @@ [] ], "referrer-policy-mismatch.html.ini": [ - "2126198c63f137e714dd8891b878d3a8aca07861", + "7dce1222075e1621bea7b284e397dd798ce762fd", [] ], "referrer-policy-no-referrer.html.ini": [ @@ -379117,10 +381271,14 @@ "worker-post-timeOrigin.js": [ "86c7d3136dc27649d3b079d751fa98d29d657fb1", [] + ], + "workers-in-cross-origin-iframe.html": [ + "8f27533ed175e9e0f397049c37bfaebb20dc3081", + [] ] }, "response-code-successful.html.ini": [ - "a7f47532f797bffa8d4dfc501940081c1bfdb5f2", + "bf9c058e4cce7a3a4d57d1d479400282aa8e7589", [] ], "restriction-audio-setSinkId-with-invalid-sinkId.https.tentative.html.ini": [ @@ -379208,7 +381366,7 @@ [] ], "restriction-notification.https.html.ini": [ - "55db11aa9963aadc1e79a0ed2565cc5f6a47d837", + "00e171547a6cb114f8a31c0101be65e4dbc9df1b", [] ], "restriction-presentation-request.https-expected.txt": [ @@ -379268,7 +381426,7 @@ [] ], "restriction-speech-synthesis.html.ini": [ - "f6203eb653c5c63b5d5f1049821bd4a67f1cc9f0", + "f4624323a4a185e5c4cea6eea3461fbb64cf3805", [] ], "restriction-storage-persist.https.html.ini": [ @@ -379284,7 +381442,7 @@ [] ], "restriction-web-locks.https.html.ini": [ - "09c920f8a97677070cff87e866e276c6bb51f221", + "6cd318469cd4b61032a08cd3c100193f23078afa", [] ], "restriction-web-nfc.https.html.ini": [ @@ -379312,7 +381470,7 @@ [] ], "restriction-window-move.html.ini": [ - "d9bd79caf66ec970c0bdbcfe165efa57d9f5c7a6", + "6b2a50d8dad8b42743ccca391611b626b41624c8", [] ], "restriction-window-open.html.ini": [ @@ -379320,11 +381478,11 @@ [] ], "restriction-window-resize.html.ini": [ - "8f03bf69988c976794a2d2ec0371379608384dab", + "5e2909edb818508ad6395035d54c67cbff555f9e", [] ], "restrictions.html.ini": [ - "7fffa178684751c1f3868576c9ed130d1258e308", + "3292b9f27e7b29abc65b7c8416ba18bf800527cc", [] ], "sandbox-iframe.html.ini": [ @@ -379332,7 +381490,7 @@ [] ], "service-workers.https.html.ini": [ - "39ec27e6429e5290ec43a30a84369f7715b1cb01", + "05cc21e624793df3776245f2366d26f2cc94ab0d", [] ], "session-history-activation.https.html.ini": [ @@ -379340,7 +381498,7 @@ [] ], "session-history-location.https.html.ini": [ - "3808c323a99e842a95e0ee8387eb9a367d5e7b47", + "44e4e48072b0872ffcb054c3abbf2348391f1210", [] ], "session-history-navigation.https.html.ini": [ @@ -379383,8 +381541,12 @@ "c934bee68c7f3ef5408991957053874d901ea069", [] ], + "workers-in-cross-origin-iframe.html.ini": [ + "bc3a810dec604a50946197aaccc1f91cab5433dd", + [] + ], "workers.html.ini": [ - "a97cf8d0489f82e0e81f76a773922c885fc228e6", + "794e82acc208449aaa25319963ec1447f48ed42d", [] ] } @@ -379411,7 +381573,7 @@ [] ], "SpeechSynthesis-speak-events.html.ini": [ - "21febf7335b95e3db842d143ddc380f452f0dec0", + "78b1806f2eb351be5276ad195b2e3280975d3e9b", [] ], "SpeechSynthesis-speak-twice.html.ini": [ @@ -379427,7 +381589,7 @@ [] ], "historical.html.ini": [ - "4b1b84c4276a0de793377a7bb4c866e77ea78f52", + "66fd686c64afbe9caec395e5dd94a4f1988c6537", [] ], "idlharness.window-expected.txt": [ @@ -379435,7 +381597,7 @@ [] ], "idlharness.window.js.ini": [ - "dffbf63f79ab4655d55eaacefbe807cd86c53be3", + "e11c000219e44dda80a21acfc24b34bc774d9555", [] ], "webspeech.js": [ @@ -379573,7 +381735,7 @@ ] }, "storage-access-permission.sub.https.window.js.ini": [ - "847e1acfbb24d3fc1c3f8a290d856cb14f3d3f94", + "a64a86608ec6a5b7bd38863a718f7b06a9ff431c", [] ], "storageAccess.testdriver.sub.html.ini": [ @@ -379611,7 +381773,7 @@ [] ], "idlharness.any.js.ini": [ - "db9f762e54f754da5a64de258b1e1305c3b42851", + "6e44cec1e30c66ee9cb579cf8acfd179375634fa", [] ], "idlharness.any.serviceworker-expected.txt": [ @@ -379632,7 +381794,7 @@ [] ], "abort.any.js.ini": [ - "23d6b37ca6758faeb331bb44de15eb8699db74bb", + "9a99a57f651db9aeacd21898a2edbe4452d77fa3", [] ], "abort.any.serviceworker-expected.txt": [ @@ -379654,7 +381816,7 @@ [] ], "tee.any.js.ini": [ - "e47b0acc61265a2b33bafef9941661e37ece4454", + "12f70272864aeb2e0caf466accab78145d0cafd5", [] ], "tee.any.serviceworker-expected.txt": [ @@ -379676,7 +381838,7 @@ [] ], "async-iterator.any.js.ini": [ - "27409996a3b1259845104227fa4f100d977718bb", + "0ef2ce89899308df6834928743aeaae47b8c6c76", [] ], "async-iterator.any.serviceworker-expected.txt": [ @@ -379706,7 +381868,7 @@ [] ], "general.any.js.ini": [ - "1092a62771732e39978bb8257cea00ada59942f0", + "9f9b916a08c03955bea258826b71f0f8f8c13ed3", [] ], "general.any.serviceworker-expected.txt": [ @@ -379734,7 +381896,7 @@ [] ], "patched-global.any.js.ini": [ - "37e7ce5491dcb2e2334c20c92f3def74444b1287", + "9ae9a03f6e247f9c7fe765c07fc92ad69127bb26", [] ], "patched-global.any.serviceworker-expected.txt": [ @@ -379754,7 +381916,7 @@ [] ], "tee.any.js.ini": [ - "0ffb544151740def0af7b57acef66e267276f711", + "0cdfaa7c399f1a619dc7ffed133d2b756494726a", [] ], "tee.any.serviceworker-expected.txt": [ @@ -379839,11 +382001,11 @@ }, "subapps": { "add-error.tentative.https.html.ini": [ - "b91b000286ee6dd0ddefddddc11e1bbcd59256d4", + "75c2cbbac61e37998ce6edac767e73a1a245a0df", [] ], "add-success.tentative.https.html.ini": [ - "cae0298288e23c1b7c8e45c083d6a8dba68bea2a", + "5a381f98c6fc655df01ca005a391674eda58fecc", [] ], "resources": { @@ -380225,7 +382387,7 @@ [] ], "height-computed.svg.ini": [ - "37b6b13a98143879810f2428dfabba8398318468", + "e09731763e157c688c3ec9533e8e4364f0ed27ef", [] ], "r-computed.svg.ini": [ @@ -380285,7 +382447,7 @@ [] ], "width-computed.svg.ini": [ - "d3c883c5b7056045373394b26d37bd1d3a1ca30a", + "03fe673d7f1938b8912d7a42fdbafb87daab2e91", [] ], "x-computed.svg.ini": [ @@ -380361,7 +382523,7 @@ [] ], "idlharness.window.js.ini": [ - "362bf4fedcc0f31f430e13a6ab9b39e6067d8d99", + "699be656dd60620e66ea57b334a2fd5af727bdfd", [] ], "interact": { @@ -380407,7 +382569,7 @@ ] }, "svg-pointer-events-bbox.html.ini": [ - "090d36b885ea6eadb8f8557b709eb4d00dac7a21", + "c6b5c2a7eedf73b083f9da769fd460e105269589", [] ], "tabindex-focus-flag-expected.txt": [ @@ -380415,7 +382577,7 @@ [] ], "tabindex-focus-flag.svg.ini": [ - "7875a4080f089d11309b416e49445b9603c603d8", + "28e84a3ef0f6f9a93aefd291e7ce42831c57f58b", [] ] } @@ -380525,11 +382687,11 @@ [] ], "href-animate-element.html.ini": [ - "1d2bd9466df00443ac4ad42899399b6cac1893b5", + "7901e1eae498ae17e8331faa7893a3a373210d6b", [] ], "href-mpath-element.html.ini": [ - "785ab29793308354faa3bfc954d26c9cd641e450", + "48e8f99e96374b9f50298d2fe882b639b6ad10c2", [] ], "rellist-feature-detection-expected.txt": [ @@ -380845,7 +383007,7 @@ [] ], "stroke-linejoin-valid.svg.ini": [ - "02ef52e55c9c99a2fa964ec8a705ac24be14e880", + "0cbebce9e57736d9c4cea71007c78a160efc5896", [] ], "stroke-miterlimit-computed.svg.ini": [ @@ -381552,7 +383714,7 @@ [] ], "css-selectors-case-sensitivity.html.ini": [ - "63996d6a5b457a438a28cb831bda90e9e839b912", + "5a25b1d4483ba91aed689b27a77a8c1451f63493", [] ], "padding-on-svg-via-img-ref.tentative.html": [ @@ -381580,7 +383742,7 @@ [] ], "presentation-attributes-special-cases.html.ini": [ - "3f4c603533b820947501dce56a32217a10c58374", + "1beda0e71e92e9783be49100a192b57184a3d613", [] ], "presentation-attributes-unknown-expected.txt": [ @@ -381654,7 +383816,7 @@ [] ], "inheritance.svg.ini": [ - "0ce845b3c894913628ccf9a068250770c846b7bc", + "94a17c5c49fa36f535f83e4297a3f00a2e2a4e62", [] ], "parsing": { @@ -381675,7 +383837,7 @@ [] ], "shape-inside-valid.svg.ini": [ - "0cd79e343ea0b0c86c9929d03cbe04f8ae0a0d83", + "9e3612743587b9b0465940f4d4276065d4b8af98", [] ], "shape-margin-invalid.svg.ini": [ @@ -381695,7 +383857,7 @@ [] ], "shape-subtract-valid.svg.ini": [ - "b83e72897ab16b5d4297462c61faad67f794b4db", + "76568579f711e40668040a2ffac0f91f352384e5", [] ], "text-anchor-computed.svg.ini": [ @@ -381719,7 +383881,7 @@ [] ], "text-decoration-fill-valid.svg.ini": [ - "4a256d25a23f9136365386428d1d486042b86b47", + "87a7be4e6d89b5f180bbc8ded1a19a0fbfb5edf3", [] ], "text-decoration-stroke-invalid.svg.ini": [ @@ -381731,7 +383893,7 @@ [] ], "text-decoration-stroke-valid.svg.ini": [ - "134f3e5b8a954f11c60d9da73bbe7e26e1940e01", + "7229f73e9314b14aacd93549f224b6e7de81ace1", [] ] }, @@ -382003,7 +384165,7 @@ [] ], "getrotationofchar.html.ini": [ - "b60ef066919c71fa705ec5f19492490994557bae", + "7c46efa5f2f1375c25952f50cf25dfa3d3c55739", [] ], "textlength-inconsistent.svg.ini": [ @@ -382073,7 +384235,7 @@ [] ], "SVGGeometryElement.isPointInFill-01.svg.ini": [ - "a47b88c159a0f6594c746e4bf68c2201fc78a560", + "b60b9cb22728c53d0b31563df58a75abd4090819", [] ], "SVGGeometryElement.isPointInStroke-01-expected.txt": [ @@ -382081,7 +384243,7 @@ [] ], "SVGGeometryElement.isPointInStroke-01.svg.ini": [ - "bb0ccecc44a0ff9fb924efd6300da85499641719", + "96ff2d82e6bc8ff5166a1e6ae0bdedcf2b5148e3", [] ], "SVGGeometryElement.isPointInStroke-02.svg.ini": [ @@ -382097,7 +384259,7 @@ [] ], "SVGLength-px.html.ini": [ - "f0075277297cdb4a1ebaebb2c0eeb918098807ba", + "32399d7af33b108521ba191da093943e23e70d7e", [] ], "SVGPoint-expected.txt": [ @@ -382143,7 +384305,7 @@ "a4331a212effab5d3e84c494025b4183a814d03a", [] ], - "requestStorageAccessForOrigin.sub.https.window-expected.txt": [ + "requestStorageAccessFor.sub.https.window-expected.txt": [ "fbc4eb52e7b0464842231afcfb2704ff830cb95c", [] ], @@ -382160,11 +384322,11 @@ "f4db5cf65ec6814036d40ab165b9705725df39fa", [] ], - "requestStorageAccessForOrigin-iframe.html": [ + "requestStorageAccessFor-iframe.html": [ "43d16705c8515b48685420c8d14925af90afb62a", [] ], - "requestStorageAccessForOrigin-iframe.https.html": [ + "requestStorageAccessFor-iframe.https.html": [ "db03b25e14d7883a89cac79746c11b280ec24dae", [] ] @@ -382189,7 +384351,7 @@ [] ], "idlharness.window.js.ini": [ - "2204e6a727d85f5ab3ac82d603c1a59246be7c8f", + "bf8acfd4be5fa18cef5b61fcb98b8c3190096c9a", [] ], "multi-touch-interactions.js": [ @@ -382203,7 +384365,7 @@ ] }, "touch-globaleventhandler-interface.html.ini": [ - "ddf8dac252b3b0bae3fb25be26e363536e932a2c", + "fbdee1b5a3460a5861e953710bb6fa7404de5715", [] ] }, @@ -382223,7 +384385,7 @@ [] ], "trust-token-parameter-validation.tentative.https.html.ini": [ - "385bf3bae5bde62ca6bbe5eb4366019aec56e6ff", + "3f69376bfa6da216efeea0615d0b03590af5721e", [] ] }, @@ -382365,7 +384527,7 @@ [] ], "useragentdata.https.any.js.ini": [ - "a1b5ae8e87106ee30dfd3d09c389628c3d34eda1", + "17c0563015eeb02f30d8eac819ce2bc2363594e1", [] ] }, @@ -382708,7 +384870,7 @@ [] ], "mousemove_prevent_default_action.tentative.html.ini": [ - "f2a82b71d2bbdea08e4f89982552c1a3e9ed0655", + "8fdc570b91c50d2a58c7bd061fdcb7947a4271ff", [] ], "resources": { @@ -383211,7 +385373,7 @@ [] ], "IdnaTestV2.window.js.ini": [ - "a429ef177f8d1b710c919ddbaf14d573bf0d069f", + "517b20ac6df2e2e6457f4872372cf36203f2d2c6", [] ], "META.yml": [ @@ -383223,11 +385385,11 @@ [] ], "a-element-origin-xhtml.xhtml.ini": [ - "8a7483fa77b9f8076cb82765a36cb21cec6cbefe", + "a84d07fe94890abb32fde586da2b0cca9d805514", [] ], "a-element-origin.html.ini": [ - "357befebf5ebf0ab134bfe1ac91cb9aa8da5d4b6", + "e0447aac473a845a905d89564bedf854bdbd38d5", [] ], "a-element-xhtml.xhtml.ini": [ @@ -383313,7 +385475,7 @@ [] ], "toascii.window.js.ini": [ - "03a9b1d6823c9433ee07c06bac30a9659f85f1d5", + "37ce0dda673a6081583af48e066839be2a0bd4ec", [] ], "tools": { @@ -383343,7 +385505,7 @@ [] ], "url-origin.any.js.ini": [ - "e6f6e984c7341f1105f4a8c38503b26882f88235", + "83629f0d695f8f93d53494536ad85893ca3fca39", [] ], "url-setters-a-area.window.js.ini": [ @@ -383363,7 +385525,7 @@ [] ], "url-setters-stripping.any.js.ini": [ - "d353c9cee193cb6665a638edf391d8b734766c83", + "c956d45a210f27bd0897687f8fcfa72ccd2bd1f2", [] ], "url-setters-stripping.any.worker-expected.txt": [ @@ -383407,7 +385569,7 @@ [] ], "urlsearchparams-delete.any.js.ini": [ - "baa982aa8ae9315a6d746926fe284e4b7c60243a", + "9f22a447d7a66f9514b01ba4102d38c7aff7d171", [] ], "urlsearchparams-delete.any.worker-expected.txt": [ @@ -383595,7 +385757,7 @@ [] ], "getArg.tentative.any.js.ini": [ - "012fe6c7f8b5bff447d542d1c12cec4f0622a3c6", + "5b912c1b691be3aa866f71d19104cf1c585624c5", [] ], "getArg.tentative.any.worker-expected.txt": [ @@ -383609,7 +385771,7 @@ [] ], "call.tentative.any.js.ini": [ - "189c22557030f92ef1cc2061af7c871cd839e028", + "0941c3813ec48652755d8ae5f349fc6e085b9c8d", [] ], "call.tentative.any.worker-expected.txt": [ @@ -383621,7 +385783,7 @@ [] ], "constructor.tentative.any.js.ini": [ - "194ac003bbf8c1ab3b65f4df118bb2510b0caa6c", + "53fd8e004de29ea1b1cce4c831b24ae1aa2f611d", [] ], "constructor.tentative.any.worker-expected.txt": [ @@ -383633,7 +385795,7 @@ [] ], "table.tentative.any.js.ini": [ - "9a9941493654472448ceb409aa0fd655322cd8e4", + "d1c9e23ec99a7f4b7740e861049695b64077a771", [] ], "table.tentative.any.worker-expected.txt": [ @@ -383645,7 +385807,7 @@ [] ], "type.tentative.any.js.ini": [ - "293b3dafc050c4ad4ffa59223b32fbb2e8dd2770", + "92d23a11596a439e337b06eecc1a8d6d7b73c92d", [] ], "type.tentative.any.worker-expected.txt": [ @@ -383725,7 +385887,7 @@ [] ], "type.tentative.any.js.ini": [ - "66b04b06d1b3b3400ac532a8bac6f9d57db6ee61", + "05f6bf87714d7235515c1bdb9b9aaf7a885157e5", [] ], "type.tentative.any.worker-expected.txt": [ @@ -383747,7 +385909,7 @@ [] ], "constructor-types.tentative.any.js.ini": [ - "f3f6673fe559cd1e85f4f872eb85898e9b500f67", + "036a8e64bb6b11da42b5d2777e9ec0460eeb7e3e", [] ], "constructor-types.tentative.any.worker-expected.txt": [ @@ -383759,7 +385921,7 @@ [] ], "type.tentative.any.js.ini": [ - "f52c82be6aa938821cd137bf12d23754c020c7b1", + "4fb6f25849641704c375788f2d7767c37abe14b6", [] ], "type.tentative.any.worker-expected.txt": [ @@ -383772,7 +385934,7 @@ [] ], "proto-from-ctor-realm.html.ini": [ - "a0304a6d3b9533f2409503f53970f720a3f86896", + "2a4674fe2422d9dbf7b43ba948baa6d705cbbd23", [] ], "table": { @@ -383793,7 +385955,7 @@ [] ], "constructor-types.tentative.any.js.ini": [ - "459b66bca7a0cdef538a28569f846a8695b4d0fe", + "036a8e64bb6b11da42b5d2777e9ec0460eeb7e3e", [] ], "constructor-types.tentative.any.worker-expected.txt": [ @@ -383821,7 +385983,7 @@ [] ], "type.tentative.any.js.ini": [ - "ba9b81bcfb14411de601f86d9ab35b84d40918c1", + "b4363629fa9d2965fe1dc9772b236257ad642e04", [] ], "type.tentative.any.worker-expected.txt": [ @@ -383835,7 +385997,7 @@ [] ], "type.tentative.any.js.ini": [ - "3ebc88e7b36eb357e8e025440f1b16d40d2b84a5", + "02f97c3009e1efd8598876b75ead85c139b0c861", [] ], "type.tentative.any.worker-expected.txt": [ @@ -384289,7 +386451,7 @@ [] ], "interpolation-per-property-001.html.ini": [ - "dbb44a5fa15f5fed207aaf5fe70c6c24861b8c66", + "b91256615ecbe4dfde0951e53ee09dad3a69b554", [] ], "interpolation-per-property-002-expected.txt": [ @@ -384335,7 +386497,7 @@ [] ], "effect-value-iteration-composite-operation.html.ini": [ - "d4658892d62e47d59dfe31f36fc7ed15db0c2648", + "43a496adb565ad954979a2d5702cc03c7a0a6368", [] ], "transform-and-opacity-on-inline-001-ref.html": [ @@ -384349,7 +386511,7 @@ [] ], "idlharness.window.js.ini": [ - "9d69d4b89e57f77f82071ef9831d1a72333ff090", + "b932ebf807f005aebecaa1774e87062af93fe8a7", [] ], "interfaces": { @@ -384371,6 +386533,12 @@ [] ] }, + "Animation": { + "finished.html.ini": [ + "aaa39fefc4502cea80b70dba94b0f31ce9aa3add", + [] + ] + }, "KeyframeEffect": { "constructor-expected.txt": [ "51e5f086363a0f40864298b93ede4a66a38a4825", @@ -384389,7 +386557,7 @@ [] ], "processing-a-keyframes-argument-001.html.ini": [ - "97afa598255371934d5906e533d502cfee6909e4", + "f82bf4d22643121ca767fb51a64080f290b507f1", [] ], "style-change-events-expected.txt": [ @@ -384405,7 +386573,7 @@ [] ], "target.html.ini": [ - "8f5deaf42d752c32549e39f88dacf4e8059c1740", + "18f2e199b6b662afdbce5cf1d94f79726b9f8077", [] ] } @@ -384492,7 +386660,7 @@ [] ], "textIndent.html.ini": [ - "661bb02c267b4d8380bbf275d3d865e587b378ca", + "4db14e8057ce45bd759e9c08379c54697f1e1ed2", [] ], "toggle-animated-iframe-visibility-ref.html": [ @@ -384579,7 +386747,7 @@ [] ], "timelines.html.ini": [ - "fdc8d9e6b858c2969ed5feba9f10e7429b2eaead", + "b6334aa9c25d3369a2263f8776b9a75eb60b67f4", [] ], "update-and-send-events.html.ini": [ @@ -385016,7 +387184,7 @@ [] ], "abort.tentative.https.html.ini": [ - "f33d260c1e062f381860e81d3ade0d648d0ecf19", + "32fa07d6227b5ac289948ba6c40bc56894ef8df2", [] ], "helpers.js": [ @@ -385028,7 +387196,7 @@ [] ], "release.tentative.https.html.ini": [ - "f580f5e14398488bb0ca0d1b7db19639af60315f", + "64edf882b75bb91f639e155f5892a2b61edf3bb5", [] ] }, @@ -385135,7 +387303,7 @@ [] ], "feature-policy-listed.tentative.html.ini": [ - "04e127ce3c34b509c551fdbb1eb60c1030b43dc0", + "3c47b5bbbc9d8997afcd6efe2aad41b64c9b2e58", [] ], "resources": { @@ -385187,7 +387355,7 @@ [] ], "idlharness.https.window.js.ini": [ - "529d4da84a407e4c9ffc765c67813c5bef4495c4", + "7bb39ca2401a357eef9b26f8fefdd71a5380b01b", [] ], "js": { @@ -385329,7 +387497,7 @@ [] ], "acquire-the-content.html.ini": [ - "9f7727640c39787c3e5323636c312a69de355d36", + "060c8f5079cd764179be6b2e9e1bbdc05beaaa4d", [] ] }, @@ -385363,7 +387531,7 @@ [] ], "audiocontext-suspend-resume-close.html.ini": [ - "01ee1e3a6fd4abf65d17bd46c1fd9e4294bd4cd0", + "4fb0c668d128210d919c2ff4cc91409170085b8e", [] ], "audiocontext-suspend-resume-expected.txt": [ @@ -385371,7 +387539,7 @@ [] ], "audiocontext-suspend-resume.html.ini": [ - "555f3a4ea51a899bc9fb441df2b400db3b393ef7", + "8b402e1ac85d2884a97233a87553e0f30b6ee1c8", [] ], "constructor-allowed-to-start-expected.txt": [ @@ -385425,7 +387593,7 @@ [] ], "process-getter.https.html.ini": [ - "f6003bd68947951254427ba13152da0978cec1f8", + "fe958fcb3088c5285acffc37701d6d69fa3906b4", [] ], "processor-construction-port.https-expected.txt": [ @@ -385433,7 +387601,7 @@ [] ], "processor-construction-port.https.html.ini": [ - "5add646b1b46ee9286bfb44df183d50441b01ddc", + "9bdc605178b80568fd5ac90585a4472319b46bbb", [] ], "processors": { @@ -385595,7 +387763,7 @@ [] ], "idlharness.https.window.js.ini": [ - "5cba4572594ff722e41cc08a39ff5a5ef9f56d58", + "85e649bdb14202fb040d6b4538d8bd197395aa7e", [] ], "remote-desktop-client-override.tentative.https-expected.txt": [ @@ -385639,7 +387807,7 @@ [] ], "audioDecoder-codec-specific.https.any.js.ini": [ - "8e20de9d3f2549c8a2c96047984f10c818eec541", + "0f1d833c9ab3fa7760a2106804c98536f5563228", [] ], "av1.mp4": [ @@ -385727,7 +387895,7 @@ [] ], "idlharness.https.any.js.ini": [ - "99451fe75eef1c62bc32df0be1f16e4d93204e1a", + "2ed416f247455bc14aca2334fe0aa489eee34f33", [] ], "idlharness.https.any.worker-expected.txt": [ @@ -385787,11 +387955,11 @@ [] ], "video-decoder.crossOriginIsolated.https.any.js.ini": [ - "d6f0ee61b202400184d8c0a0424dacf64603d5ff", + "81dc9475c4d2246b2ea4a5687944240d0e564802", [] ], "video-encoder-config.https.any.js.ini": [ - "92868f2b1c90a6dcd27c33cd11e4c624b0774865", + "c377ef25d3f5a5d2bc21f452b98baf2995a32f72", [] ], "video-encoder-utils.js": [ @@ -385799,7 +387967,7 @@ [] ], "videoDecoder-codec-specific.https.any.js.ini": [ - "89bfa816dfbd8b669738d283a5b760a619459a90", + "b0a0d2658ff001244c819a95339bb7667fb06b72", [] ], "videoFrame-construction.crossOriginIsolated.https.any.js.headers": [ @@ -386520,7 +388688,7 @@ [] ], "constructors.html.ini": [ - "6c0a91918db06cb5fab185b739b85002738fb9df", + "2944d7a182e8cfd76793bf0c9c17fc891af51a1d", [] ], "es-exceptions": { @@ -386538,7 +388706,7 @@ ] }, "global-object-implicit-this-value.any.js.ini": [ - "25242c2f57e14dc270ceda5e3123dfba6a4edb61", + "6f7a4a29d5f2d630f0c16d13a2811f0b042adb1d", [] ], "global-object-implicit-this-value.any.serviceworker-expected.txt": [ @@ -386558,7 +388726,7 @@ [] ], "invalid-this-value-cross-realm.html.ini": [ - "87aacc665559d915cf549f196a4c56499a9332f4", + "c592c227df24edb78f551f96157d7d91ea20d79e", [] ], "legacy-platform-object": { @@ -386580,7 +388748,7 @@ [] ], "sequence-conversion.html.ini": [ - "55a81fc91d9184290bf7905866bcf9434afdd385", + "cc7614d10141cd8880d3c42707c285b15e28108a", [] ], "support": { @@ -386602,7 +388770,7 @@ [] ], "window-named-properties-object.html.ini": [ - "dc99e4cb3fda1b2503fc954077ae92c06cab269f", + "4109f87cdd1ac7e454727ad6a5e7b78037ca2616", [] ] }, @@ -386678,7 +388846,7 @@ [] ], "close.any.js.ini": [ - "b7e61218ee8f7898ee447633eb3ba196f8b27eba", + "1c4916d1214e18cb0e596ecec8447458a1f08b60", [] ], "close.any.worker-expected.txt": [ @@ -386797,6 +388965,10 @@ "0a16a392a2613129aa07950c9344517abbfbca22", [] ], + "021.html.ini": [ + "a93b3d74768cfeac90df51ca9e908ded8fab22d8", + [] + ], "025-1.js": [ "bd1d778d9b32651b05f1b7364459ed4096646528", [] @@ -386817,7 +388989,7 @@ [] ], "idlharness.https.window.js.ini": [ - "51c9073a7479051039cf5f8d71eedec21c1800ab", + "00aa467cf20852384ca9c1fdf07e247db4503dd5", [] ] }, @@ -386887,7 +389059,7 @@ [] ], "idlharness.https.any.js.ini": [ - "0bdd77500603cd5554127480ea6a0dfe451e8f2b", + "2e398d509c89ed3e853667cbc439094368389de0", [] ], "leaky_relu.https.any.js.ini": [ @@ -387205,7 +389377,7 @@ [] ], "RTCConfiguration-iceServers.html.ini": [ - "6a5f89ea372f5ddcdfb4924d388bca3fded140a1", + "6289d1bc68569ec000b02e10b41ec1baf7d2717a", [] ], "RTCConfiguration-iceTransportPolicy-expected.txt": [ @@ -387213,7 +389385,7 @@ [] ], "RTCConfiguration-iceTransportPolicy.html.ini": [ - "adc9c23a816142b3f26430958903a667af161899", + "72b001ea4cf2da02a58b7756a3c5d0aa83b4b168", [] ], "RTCDTMFSender-helper.js": [ @@ -387233,7 +389405,7 @@ [] ], "RTCDataChannel-binaryType.window.js.ini": [ - "a7a719b05e6b9d1bfc544e96563dc523e8a99fa7", + "856e6ad13b6ee993ec4426df997ccb02d1767f44", [] ], "RTCDataChannel-bufferedAmount-expected.txt": [ @@ -387241,7 +389413,7 @@ [] ], "RTCDataChannel-bufferedAmount.html.ini": [ - "e72e60b8e8e3edd1e91527e378e09361ba82d8db", + "3b07579f9953bd8c570082d6865745ba04b6f964", [] ], "RTCDataChannel-send-blob-order-expected.txt": [ @@ -387257,7 +389429,7 @@ [] ], "RTCDataChannel-send.html.ini": [ - "90d566c2ad053bcb01f3edf1f8cc8a59c0d3d90e", + "4ac52d59d32f56407f0b3498f2e8127dd19957ab", [] ], "RTCDtlsTransport-state-expected.txt": [ @@ -387285,7 +389457,7 @@ [] ], "RTCPeerConnection-addIceCandidate.html.ini": [ - "64e4c43f6578acec122ef22a3d4cc8f995ee780e", + "8e1872df9131060f1352cf579d32ce0424bde540", [] ], "RTCPeerConnection-createAnswer-expected.txt": [ @@ -387301,7 +389473,7 @@ [] ], "RTCPeerConnection-createDataChannel.html.ini": [ - "86c1d38880c273bb03ff6afa69dfb0acd320c696", + "d12404d850a4f56c7b1f9687a6ddb167df5186de", [] ], "RTCPeerConnection-createOffer-expected.txt": [ @@ -387309,7 +389481,7 @@ [] ], "RTCPeerConnection-createOffer.html.ini": [ - "49681b9c223f6b0a39b91d1e2e88a420af80cc8e", + "3924abea95db0d7287ebcf11eb82b668881d30f3", [] ], "RTCPeerConnection-generateCertificate-expected.txt": [ @@ -387345,7 +389517,7 @@ [] ], "RTCPeerConnection-operations.https.html.ini": [ - "34ec5683d9e2c1156a693cb2b5c27cdf3cbd5580", + "e9832a759ec314d5b7fd418614c37fc1c20eceb2", [] ], "RTCPeerConnection-perfect-negotiation-helper.js": [ @@ -387361,7 +389533,7 @@ [] ], "RTCPeerConnection-remote-track-mute.https.html.ini": [ - "ff81054455a19db13fae66a53a7bbfd73171b3e3", + "e0f55819104be9d814557704b9146a854debe9ca", [] ], "RTCPeerConnection-restartIce.https-expected.txt": [ @@ -387377,7 +389549,7 @@ [] ], "RTCPeerConnection-setLocalDescription-answer.html.ini": [ - "847924ebcbc477527e4837306ef8b877d2c5a0f3", + "a922827dc82e131469d3b55ce6a137cfb97bee9a", [] ], "RTCPeerConnection-setLocalDescription-offer-expected.txt": [ @@ -387393,7 +389565,7 @@ [] ], "RTCPeerConnection-setLocalDescription-parameterless.https.html.ini": [ - "becb0542e7a4ed0bf8acea1bacd1244a684bbdbe", + "8a20cbdf18c402c0aa51c6f8f25b88d99c77c96a", [] ], "RTCPeerConnection-setLocalDescription-pranswer-expected.txt": [ @@ -387421,7 +389593,7 @@ [] ], "RTCPeerConnection-setRemoteDescription-offer.html.ini": [ - "64f04e41f281eb470da41d2e2a51ab629e8596dc", + "05faa923bb8aaf2a36b6dfc73a441655288c70f9", [] ], "RTCPeerConnection-setRemoteDescription-rollback-expected.txt": [ @@ -387441,7 +389613,7 @@ [] ], "RTCPeerConnection-setRemoteDescription-tracks.https.html.ini": [ - "c64d07c5c2f40c90ff554f15b2b41e84646d90f3", + "f4c253ec1444b26983109af72d82c4bc9ec4b83a", [] ], "RTCPeerConnection-setRemoteDescription.html.ini": [ @@ -387453,7 +389625,7 @@ [] ], "RTCPeerConnectionIceEvent-constructor.html.ini": [ - "bb0770b5c03c5a73ff3863910036844f990f8690", + "9d8ff4837c0f6e02e0698b5699b6bc2ede4bbf29", [] ], "RTCRtpCapabilities-helper.js": [ @@ -387465,7 +389637,7 @@ [] ], "RTCRtpParameters-encodings.html.ini": [ - "4d0a4de73b89f9e159fccec4ad59326fbf7e9f5c", + "7bebff7ca0d599d1fbab6a39fee57a534120792d", [] ], "RTCRtpParameters-helper.js": [ @@ -387493,7 +389665,7 @@ [] ], "RTCRtpReceiver-getStats.https.html.ini": [ - "8fe54305e9d5dc447850c0170610b839166c4c23", + "856cab57ad59aefded5f63a89c6e8068bb249509", [] ], "RTCRtpReceiver-getSynchronizationSources.https-expected.txt": [ @@ -387501,7 +389673,7 @@ [] ], "RTCRtpReceiver-getSynchronizationSources.https.html.ini": [ - "a0afd8e47d81d8e5b22e4674fdc6ac4e1e470d10", + "e5eb21199da99d385eeb92b6dd5fa024652d1509", [] ], "RTCRtpSender-getStats.https-expected.txt": [ @@ -387521,7 +389693,7 @@ [] ], "RTCRtpTransceiver-setCodecPreferences.html.ini": [ - "65a97211c0e65072eb00568564f6dd71ecd606c4", + "21c825ce8c2192125f93bb2a33c360f343c65f7b", [] ], "RTCRtpTransceiver.https-expected.txt": [ @@ -387529,7 +389701,7 @@ [] ], "RTCRtpTransceiver.https.html.ini": [ - "07a3afad8f2fd1b775be77c7448f209bf3876297", + "b36274d941b34d683ac6df8a871c8dcfae807741", [] ], "RTCStats-helper.js": [ @@ -387567,7 +389739,7 @@ [] ], "idlharness.https.window.js.ini": [ - "2881f4e3d7e17da35750e4c595044db38ce0ce4a", + "68ef1c826a1311ebe09b4909ddd00a8255e933e2", [] ], "legacy": { @@ -387602,7 +389774,7 @@ [] ], "h264-profile-levels.https.html.ini": [ - "1dbd03b13cd78c1f472cb383f21975bc69bf282c", + "11078b80d968a38bc97a6f33114155da43455875", [] ], "rtp-demuxing.html.ini": [ @@ -387630,11 +389802,11 @@ [] ], "simulcast-answer.html.ini": [ - "a739c08eaf63cb870b0cc3d4c5a754006c179f23", + "6d066afc383da47c9eb9d1e9418d26b7b7f4b853", [] ], "video-codecs.https.html.ini": [ - "d707a5d85fdf238bd679126bc58332771ad0e225", + "8ee1037a2fc918914a433c359e66db196f1adbca", [] ], "vp8-fmtp-expected.txt": [ @@ -387666,7 +389838,7 @@ [] ], "negotiation-encodings.https.html.ini": [ - "2d5a402bea542c2fa2fce866722a82136e0384b0", + "b0602040bbb112cce6e7dc68287aa6c7d8e432a4", [] ], "setParameters-encodings.https-expected.txt": [ @@ -387674,7 +389846,7 @@ [] ], "setParameters-encodings.https.html.ini": [ - "bb83e16af2f137b92acd6574903efe1885959ace", + "767326c0a1343705918293964a8fe894bffac1bd", [] ], "simulcast.js": [ @@ -387739,7 +389911,7 @@ [] ], "idlharness.https.window.js.ini": [ - "446618306de937abe0559a2c2ab8764e052baea5", + "8b0f0b18e0944a9f98853d74ded2afff26092239", [] ], "resources": { @@ -387809,7 +389981,7 @@ [] ], "script-transform.https.html.ini": [ - "9d2011ba49ae55a0f02f2e0cd8792264b269c167", + "6df384dc7d718c5b8d7d98cc8a00025872a0057e", [] ], "script-write-twice-transform-worker.js": [ @@ -387829,7 +390001,7 @@ [] ], "sframe-keys.https.html.ini": [ - "f300601b6cede23fa5a3aaff84e08293d71862ad", + "1690213b85a48dcc1330eec8d8caf9aa793ccd4d", [] ], "sframe-transform-buffer-source-expected.txt": [ @@ -387865,7 +390037,7 @@ [] ], "sframe-transform.html.ini": [ - "340c12ccb8c9514b857afdab81b5e7ec5af18f69", + "f39b18ca51cc0f74baa788dbb4a1336b9d036102", [] ] }, @@ -387879,7 +390051,7 @@ [] ], "RTCOAuthCredential.html.ini": [ - "ed7214ceb69e6ed7e76c79b5f164dd38c82863ca", + "b40b01b294a62955360a929b8fc8dd7dfdfa5570", [] ], "RTCRtpSynchronizationSource-helper.js": [ @@ -387903,7 +390075,7 @@ [] ], "transfer-datachannel.html.ini": [ - "5cecdd93152eaa58f924b5862af968336f83617f", + "1668b60b9e57adf60ec86abe57c3465f802b48a3", [] ] }, @@ -387925,7 +390097,7 @@ [] ], "RTCIceTransport-extension.https.html.ini": [ - "4c6ebd72d987acf7b6ac7cd849f5405f003843cf", + "9d12f8e9ff4856891d8dd57eacd5ce65f7d97df9", [] ] }, @@ -387947,7 +390119,7 @@ [] ], "RTCPeerConnection-getIdentityAssertion.sub.https.html.ini": [ - "bea80b29e33a3f9b9b94ce336cf20c23e0c9e8a8", + "167a2469a9b329140a8750f7d86b1c6af4337368", [] ], "RTCPeerConnection-peerIdentity.https-expected.txt": [ @@ -387955,7 +390127,7 @@ [] ], "RTCPeerConnection-peerIdentity.https.html.ini": [ - "4273aab6b877955b4a6065c2faea1a76c3e98aef", + "bac74d0b3bd78838046db8a9953ae2062096fffd", [] ], "identity-helper.sub.js": [ @@ -387967,7 +390139,7 @@ [] ], "idlharness.https.window.js.ini": [ - "3aca8b266116ba95a3e56efcd7d6a2bf2d013271", + "4cab074acca377a4d9f1139345f9d1c5309d5dba", [] ] }, @@ -387981,7 +390153,7 @@ [] ], "RTCPeerConnection-ondatachannel.html.ini": [ - "30c8c9d0add996e5e425732815f3a40f53c17655", + "0cf6fe9aedab99f81523aba7d4c7f21a2e2fe375", [] ] }, @@ -388007,7 +390179,7 @@ [] ], "hardware-capability-stats.https.html.ini": [ - "c25f4bff828af91f32b6455a7fbd3cae6d6aa0fb", + "629a492ba0e16aa30d84570d405f7e28748fbaaa", [] ], "outbound-rtp.https-expected.txt": [ @@ -388023,7 +390195,7 @@ [] ], "rtp-stats-creation.html.ini": [ - "90f1d62ee4fa69c67fc483e06641c5371128a036", + "5d57bb24424675d482848aef2319ea8548b6771f", [] ], "supported-stats.https-expected.txt": [ @@ -388031,7 +390203,7 @@ [] ], "supported-stats.https.html.ini": [ - "992428b1dc68fbaac95b97661d75dfc887040694", + "b6636a687b7b5fa1c5c7f1f2307344bbb709eaa3", [] ] }, @@ -388095,7 +390267,7 @@ [] ], "Create-protocols-repeated-case-insensitive.any.js.ini": [ - "645859d176e39ea12fb562c512a5a741f2d611ff", + "c7ec916a6609144bcec373467dce63eb5d82e30a", [] ], "Create-protocols-repeated-case-insensitive.any.worker-expected.txt": [ @@ -388123,7 +390295,7 @@ [] ], "Create-url-with-space.any.js.ini": [ - "eaa8fd6c852364d03f913154f9a5d32cc5d0b75f", + "7318d31c307aa619ef0b0f5b3e86179f2d21316a", [] ], "Create-url-with-space.any.worker-expected.txt": [ @@ -388254,7 +390426,7 @@ [] ], "002.html.ini": [ - "aafb037ffd0cacd354f5f0e9772e14d7748d5a25", + "b469a85e857cd15ac6bbd004fd5af31dbc06cbb1", [] ], "002_wpt_flags=h2-expected.txt": [ @@ -388320,7 +390492,7 @@ [] ], "007.html.ini": [ - "85fb6baaa84c3c102e6950e26e17c5ebdf176239", + "8accbb209e4d78a8e38723249c310d0b889711ce", [] ], "007_wpt_flags=h2-expected.txt": [ @@ -388625,7 +390797,7 @@ [] ], "backpressure-send.any.js.ini": [ - "4fc03dcc908ff439e6c46506b31241646a9994a7", + "79fa753a59180878bbb109028d3fdce69a899ba7", [] ], "backpressure-send.any.sharedworker_wpt_flags=h2-expected.txt": [ @@ -388698,7 +390870,7 @@ [] ], "002.html.ini": [ - "20d7a265669d45f4fd78a2826bb2908f9b95761f", + "b347018ea3163ff95dcc587cf6bf7d8c6be3cf0b", [] ], "002_wpt_flags=h2-expected.txt": [ @@ -388843,7 +391015,7 @@ [] ], "set.window.js.ini": [ - "8cbda39f1b27afe1940bcd6ecb86f45a469fe2c3", + "8669817b7d6d35d5cce04cf34e2723f763999cfe", [] ], "storage_builtins-expected.txt": [ @@ -388981,7 +391153,7 @@ [] ], "idlharness.https.any.js.ini": [ - "b38cba8dcec7575b6d911ff641157946b8c0b7d4", + "0e52244a3825d61af4e82ab86b6aee1c18d8364f", [] ], "idlharness.https.any.worker-expected.txt": [ @@ -392086,7 +394258,7 @@ [] ], "idlharness.https.window.js.ini": [ - "74894b2b8983d6a13dac22a1fb8d56c837668012", + "325de7cab3a91fa044e9154d5e874487d57f22d2", [] ] }, @@ -392134,7 +394306,7 @@ [] ], "ar_dom_overlay.https.html.ini": [ - "4018ae9400447963e4aa83fdadc3817030953bee", + "62fd25fe8af48e6df3134c071e77ba5b61c383de", [] ], "ar_dom_overlay_hit_test.https.html.ini": [ @@ -392173,7 +394345,7 @@ [] ], "idlharness.https.window.js.ini": [ - "ae0831a7c7bac09f6050a7a33b56d5e0e0db4870", + "d14d757cc26a969674ec6e782419a122d80b8ce0", [] ], "layers": { @@ -392225,7 +394397,7 @@ [] ], "xr_viewport_scale.https.html.ini": [ - "1a64f27a1965527d02c146a5f950a8658d47038b", + "0135251757f82980285459e67699c0827dff60c3", [] ] }, @@ -392535,7 +394707,7 @@ [] ], "dedicated-worker-in-data-url-context.window.js.ini": [ - "8e3ebef3e6e51467127721e825be154a6e3bcac3", + "9639698f1d1d45085e9c7d6a26d0fc4a5e213e94", [] ], "dedicated-worker-parse-error-failure-expected.txt": [ @@ -392553,7 +394725,7 @@ ] }, "importscripts_mime_local.any.js.ini": [ - "b9c279f48329325357bdedef653a80c84c49212f", + "cce8a1b8d38c271e8b18fc7cfe9fc1287f84e3ed", [] ], "importscripts_mime_local.any.sharedworker-expected.txt": [ @@ -392688,7 +394860,7 @@ [] ], "message-module-DOMException.html.ini": [ - "b6d2a17523c35b777be600368aab1f503c037cc8", + "d7ef058fd8d914e32e5c714b861c67eaf5282877", [] ], "not-handled.js": [ @@ -393179,7 +395351,7 @@ [] ], "001.worker.js.ini": [ - "eac399d068b70ed4e94f192a6c96118655a98806", + "121d5d1ed681d1fde1c00f1593f54013e21c8763", [] ], "003-expected.txt": [ @@ -393187,7 +395359,7 @@ [] ], "003.any.js.ini": [ - "d5372c4caecc9f3bc8cd86e7968b82c118dee5ee", + "5c7c2cd2d0035160916b4171838453fee85924e0", [] ], "003.any.sharedworker-expected.txt": [ @@ -393329,7 +395501,7 @@ [] ], "shared-worker-in-data-url-context.window.js.ini": [ - "e0d2ea3da3267420c2716d5c8b4fc826e331f0c1", + "c080b540b5d635271570a372beceb4ce732df63c", [] ], "shared-worker-parse-error-failure.html.ini": [ @@ -393895,7 +396067,7 @@ [] ], "overridemimetype-blob.html.ini": [ - "5f1c166dd7d3376238434d7e53789fa3d3917d8d", + "a0cb4b31ec7081564c0350d61396972c6fa483be", [] ], "preserve-ua-header-on-redirect.htm.ini": [ @@ -394377,7 +396549,7 @@ [] ], "response-data-progress.htm.ini": [ - "6931f8effad8648177e078431ac491030ea4966c", + "73a67cb636b2e42de4319b9027ae1efa04f597e2", [] ], "response-json-expected.txt": [ @@ -394405,7 +396577,7 @@ [] ], "responsetype.any.js.ini": [ - "3b5e14447e590feb734233cc2d490165a3bc45fd", + "3d36734586cae17c3821e12cefd06f593c0f16c8", [] ], "responsetype.any.worker-expected.txt": [ @@ -394417,7 +396589,7 @@ [] ], "responsexml-media-type.htm.ini": [ - "e3fe1d97dfd89bec67a00bb1667903a6126ec631", + "cae36bd373aac7a2485e47e242cef019a63a0a18", [] ], "send-accept-language.htm.ini": [ @@ -394437,7 +396609,7 @@ [] ], "send-content-type-charset.htm.ini": [ - "c16197fc40130c2135490af8cf88907707a3a36b", + "9288655bffe635a7a3df82687d6837e2f6e98f72", [] ], "send-data-readablestream.any-expected.txt": [ @@ -394465,7 +396637,7 @@ [] ], "send-redirect-to-cors.htm.ini": [ - "397d58e2b109034da3743311d095217d50656960", + "5af6361bbe4c48117313d6e0de9db122b956582c", [] ], "setrequestheader-combining.window-expected.txt": [ @@ -394489,7 +396661,7 @@ [] ], "xhr-authorization-redirect.any.js.ini": [ - "976ec21393a755051d6fb12f14bb2a9d4646aae7", + "cbb24ff0b84382442154951efc1c9364810e2729", [] ], "xhr-authorization-redirect.any.serviceworker-expected.txt": [ @@ -431342,7 +433514,7 @@ ] ], "import-conditions.html": [ - "d4a0918a5b245f12a28d6c96bd41a5b07bd29c09", + "0bb09754702ce2c4f2655f2ec1c01ec8f78a661d", [ null, {} @@ -455951,7 +458123,7 @@ ] ], "calc-serialization-002.html": [ - "a06b33e492e323386c40c333b22bd344e281fd98", + "79159480b9b24c0b2aa0fee35e64a97faf841773", [ null, {} @@ -456076,6 +458248,13 @@ {} ] ], + "getComputedStyle-calc-bg-height-percent-001.html": [ + "c6fea70aae9b01c141e230a876f269c94900038e", + [ + null, + {} + ] + ], "hypot-pow-sqrt-computed.html": [ "3cc85a5230ca8dfc6310daf76ae89278a364169f", [ @@ -588538,6 +590717,13 @@ {} ] ], + "timeline-offset-in-keyframe.html": [ + "62a8d1387d38cb9abd11a6252fefbf7d0fd71f24", + [ + null, + {} + ] + ], "view-timeline-get-current-time-range-name.html": [ "25e477e1a97acc56bb692abb8375ab05f9b8e9c9", [ @@ -588545,6 +590731,13 @@ {} ] ], + "view-timeline-get-set-range.html": [ + "e80ef57afe025c3ff60cc7761c2cf91fe8518346", + [ + null, + {} + ] + ], "view-timeline-inset.html": [ "357d8558f94eeb8342942ecb17a3e1a1bf86fa1d", [ @@ -597498,6 +599691,15 @@ } ] ], + "workers-in-cross-origin-iframe.html": [ + "8d79f43a4ed553e9b6b73cf7cc6e4d75933fd23a", + [ + null, + { + "timeout": "long" + } + ] + ], "workers.html": [ "daaedf481c93bb1bf98b1c6a45f9a9945077e6f0", [ @@ -605833,10 +608035,10 @@ }, "top-level-storage-access-api": { "tentative": { - "requestStorageAccessForOrigin-insecure.sub.window.js": [ + "requestStorageAccessFor-insecure.sub.window.js": [ "8cf72b85fa81217fac5adb11a582d4ad641e34d7", [ - "top-level-storage-access-api/tentative/requestStorageAccessForOrigin-insecure.sub.window.html", + "top-level-storage-access-api/tentative/requestStorageAccessFor-insecure.sub.window.html", { "script_metadata": [ [ @@ -605855,10 +608057,10 @@ } ] ], - "requestStorageAccessForOrigin.sub.https.window.js": [ + "requestStorageAccessFor.sub.https.window.js": [ "6fff9e9189e495af43ef0a4c9a087cbc05c7d14c", [ - "top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.https.window.html", + "top-level-storage-access-api/tentative/requestStorageAccessFor.sub.https.window.html", { "script_metadata": [ [ @@ -614800,6 +617002,13 @@ null, {} ] + ], + "keyframe-exceptions.html": [ + "4cb4be76a8a2d5b2db51408046485c74afa4827b", + [ + null, + {} + ] ] } }, @@ -614964,7 +617173,7 @@ ] ], "style-change-events.html": [ - "b41f748720ad722a2789b163ff6a9e5ba013c518", + "0ec21657e3c965acc82a254c60570ea43f77dc00", [ null, {} @@ -620868,6 +623077,171 @@ } ] ], + "per-frame-qp-encoding.https.any.js": [ + "3207fa8356c83ef9566348f9246d0f6570068615", + [ + "webcodecs/per-frame-qp-encoding.https.any.html?av1", + { + "script_metadata": [ + [ + "global", + "window,dedicatedworker" + ], + [ + "script", + "/webcodecs/video-encoder-utils.js" + ], + [ + "variant", + "?av1" + ], + [ + "variant", + "?vp9_p0" + ], + [ + "variant", + "?vp9_p2" + ] + ] + } + ], + [ + "webcodecs/per-frame-qp-encoding.https.any.html?vp9_p0", + { + "script_metadata": [ + [ + "global", + "window,dedicatedworker" + ], + [ + "script", + "/webcodecs/video-encoder-utils.js" + ], + [ + "variant", + "?av1" + ], + [ + "variant", + "?vp9_p0" + ], + [ + "variant", + "?vp9_p2" + ] + ] + } + ], + [ + "webcodecs/per-frame-qp-encoding.https.any.html?vp9_p2", + { + "script_metadata": [ + [ + "global", + "window,dedicatedworker" + ], + [ + "script", + "/webcodecs/video-encoder-utils.js" + ], + [ + "variant", + "?av1" + ], + [ + "variant", + "?vp9_p0" + ], + [ + "variant", + "?vp9_p2" + ] + ] + } + ], + [ + "webcodecs/per-frame-qp-encoding.https.any.worker.html?av1", + { + "script_metadata": [ + [ + "global", + "window,dedicatedworker" + ], + [ + "script", + "/webcodecs/video-encoder-utils.js" + ], + [ + "variant", + "?av1" + ], + [ + "variant", + "?vp9_p0" + ], + [ + "variant", + "?vp9_p2" + ] + ] + } + ], + [ + "webcodecs/per-frame-qp-encoding.https.any.worker.html?vp9_p0", + { + "script_metadata": [ + [ + "global", + "window,dedicatedworker" + ], + [ + "script", + "/webcodecs/video-encoder-utils.js" + ], + [ + "variant", + "?av1" + ], + [ + "variant", + "?vp9_p0" + ], + [ + "variant", + "?vp9_p2" + ] + ] + } + ], + [ + "webcodecs/per-frame-qp-encoding.https.any.worker.html?vp9_p2", + { + "script_metadata": [ + [ + "global", + "window,dedicatedworker" + ], + [ + "script", + "/webcodecs/video-encoder-utils.js" + ], + [ + "variant", + "?av1" + ], + [ + "variant", + "?vp9_p0" + ], + [ + "variant", + "?vp9_p2" + ] + ] + } + ] + ], "reconfiguring-encoder.https.any.js": [ "bc7e9b74fb917639b581b72096741395df1b9198", [
diff --git a/third_party/blink/web_tests/external/wpt/content-security-policy/navigate-to/anchor-navigation-always-allowed.html.ini b/third_party/blink/web_tests/external/wpt/content-security-policy/navigate-to/anchor-navigation-always-allowed.html.ini new file mode 100644 index 0000000..9d3c463 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/content-security-policy/navigate-to/anchor-navigation-always-allowed.html.ini
@@ -0,0 +1,4 @@ +[anchor-navigation-always-allowed.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/content-security-policy/reporting/report-strips-fragment.html.ini b/third_party/blink/web_tests/external/wpt/content-security-policy/reporting/report-strips-fragment.html.ini new file mode 100644 index 0000000..27af40da --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/content-security-policy/reporting/report-strips-fragment.html.ini
@@ -0,0 +1,4 @@ +[report-strips-fragment.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-clip/clip-text-multi-line-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-clip/clip-text-multi-line-002-ref.html deleted file mode 100644 index 5cb77d52..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-clip/clip-text-multi-line-002-ref.html +++ /dev/null
@@ -1,26 +0,0 @@ -<!DOCTYPE html> - - <meta charset="UTF-8"> - - <title>CSS test reference</title> - - <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> - <link rel="stylesheet" href="/fonts/ahem.css"> - - <style> - div - { - color: green; - font-size: 30px; - font-family: Ahem; - line-height: 1.5; - } - </style> - - </head> - - <body> - - <p>Test passes if there are 2 green stripes and if the top stripe is half the width of the bottom stripe. - - <div>12345<br>1234567890</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-clip/clip-text-multi-line-002.html b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-clip/clip-text-multi-line-002.html deleted file mode 100644 index ff34ca0..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-clip/clip-text-multi-line-002.html +++ /dev/null
@@ -1,44 +0,0 @@ -<!DOCTYPE html> - - <meta charset="UTF-8"> - - <title>CSS Backgrounds Test: 'background-clip: text' and painting of multi-line text</title> - - <!-- - - Inspired by - - http://wpt.live/css/css-backgrounds/background-clip/clip-text-multi-line.html - - For more info, see - - https://github.com/web-platform-tests/wpt/pull/30812#issuecomment-1314514987 - - --> - - <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> - <link rel="author" href="mailto:mmaxfield@apple.com" title="Myles C. Maxfield"> - <link rel="help" href="https://drafts.csswg.org/css-backgrounds-4/#valdef-background-clip-text"> - <link rel="match" href="clip-text-multi-line-002-ref.html"> - <link rel="stylesheet" href="/fonts/ahem.css"> - - <style> - div - { - background-clip: text; - background-color: red; - background-image: linear-gradient(green, green); - color: transparent; - font-family: Ahem; - font-size: 30px; - line-height: 1.5; - } - </style> - - </head> - - <body> - - <p>Test passes if there are 2 green stripes and if the top stripe is half the width of the bottom stripe. - - <div>12345<br>1234567890</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-clip/clip-text-multi-line-002.html.ini b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-clip/clip-text-multi-line-002.html.ini deleted file mode 100644 index 96410ec..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-clip/clip-text-multi-line-002.html.ini +++ /dev/null
@@ -1,2 +0,0 @@ -[clip-text-multi-line-002.html] - expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-clip/clip-text-multi-line-ref.html b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-clip/clip-text-multi-line-ref.html index 3b45e91..455daa7a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-clip/clip-text-multi-line-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-clip/clip-text-multi-line-ref.html
@@ -1,35 +1,22 @@ <!DOCTYPE html> -<html> -<head> -<title>CSS test reference: background-clip: text paints multi-line text in the wrong place</title> -<link rel="author" href="mailto:mmaxfield@apple.com" title="Myles C. Maxfield"> -<link rel="stylesheet" href="/fonts/ahem.css"> -<style> -#container { - position: relative; - padding: 3px; -} -span { - color: green; - font: 48px "Ahem"; -} + <meta charset="UTF-8"> -div.cover { - position: absolute; - background: green; -} -</style> -</head> -<body> -<p>This test makes sure that multi-line elements with <code>background-clip: text</code> are placed correctly. The test passes if the top rectangle is (roughly) half as wide as the bottom rectangle.</p> -<div id="container"> -<span>AAA<br>AAAAAA</span> -<div class="cover" style="left: 0px; top: 0px; width: calc(48px * 3 + 3px); height: 3px;"></div> -<div class="cover" style="left: 0px; top: 48px; width: calc(48px * 6 + 3px); height: 6px;"></div> -<div class="cover" style="left: 0px; top: calc(48px * 2); width: calc(48px * 6 + 3px); height: 3px;"></div> -<div class="cover" style="left: 0px; top: 0px; width: 3px; height: calc(48px * 2);"></div> -<div class="cover" style="left: calc(48px * 3); top: 0px; width: 3px; height: 48px;"></div> -<div class="cover" style="left: calc(48px * 6); top: 48px; width: 3px; height: 48px;"></div> -</body> -</html> + <title>CSS test reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + <link rel="stylesheet" href="/fonts/ahem.css"> + + <style> + div + { + color: green; + font-size: 30px; + font-family: Ahem; + line-height: 1.5; + } + </style> + + <p>Test passes if there are 2 green stripes and if the top stripe is half the width of the bottom stripe. + + <div>12345<br>1234567890</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-clip/clip-text-multi-line.html b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-clip/clip-text-multi-line.html index cd51b2ea..e85a4f9 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-clip/clip-text-multi-line.html +++ b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-clip/clip-text-multi-line.html
@@ -1,41 +1,40 @@ <!DOCTYPE html> -<html> -<head> -<title>CSS Test: background-clip: text paints multi-line text in the wrong place</title> -<link rel="help" href="https://drafts.csswg.org/css-backgrounds-4/#valdef-background-clip-text"> -<link rel="help" href="https://drafts.fxtf.org/fill-stroke-3/#propdef-fill-color"> -<link rel="author" href="mailto:mmaxfield@apple.com" title="Myles C. Maxfield"> -<link rel="match" href="clip-text-multi-line-ref.html"> -<link rel="stylesheet" href="/fonts/ahem.css"> -<style> -#container { - position: relative; - padding: 3px; -} -span { - font: 48px "Ahem"; - background-clip: text; - fill-color: rgba(0, 0, 0, 0); - background-image: linear-gradient(0deg, green 0%, green 100%); -} + <meta charset="UTF-8"> -div.cover { - position: absolute; - background: green; -} -</style> -</head> -<body> -<p>This test makes sure that multi-line elements with <code>background-clip: text</code> are placed correctly. The test passes if the top rectangle is (roughly) half as wide as the bottom rectangle.</p> -<div id="container"> -<span>AAA<br>AAAAAA</span> -<div class="cover" style="left: 0px; top: 0px; width: calc(48px * 3 + 3px); height: 3px;"></div> -<div class="cover" style="left: 0px; top: 48px; width: calc(48px * 6 + 3px); height: 6px;"></div> -<div class="cover" style="left: 0px; top: calc(48px * 2); width: calc(48px * 6 + 3px); height: 3px;"></div> -<div class="cover" style="left: 0px; top: 0px; width: 3px; height: calc(48px * 2);"></div> -<div class="cover" style="left: calc(48px * 3); top: 0px; width: 3px; height: 48px;"></div> -<div class="cover" style="left: calc(48px * 6); top: 48px; width: 3px; height: 48px;"></div> -</div> -</body> -</html> + <title>CSS Backgrounds Test: 'background-clip: text' and painting of multi-line text</title> + + <!-- + + Inspired by + + http://wpt.live/css/css-backgrounds/background-clip/clip-text-multi-line.html + + For more info, see + + https://github.com/web-platform-tests/wpt/pull/30812#issuecomment-1314514987 + + --> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + <link rel="author" href="mailto:mmaxfield@apple.com" title="Myles C. Maxfield"> + <link rel="help" href="https://drafts.csswg.org/css-backgrounds-4/#valdef-background-clip-text"> + <link rel="match" href="clip-text-multi-line-ref.html"> + <link rel="stylesheet" href="/fonts/ahem.css"> + + <style> + div + { + background-clip: text; + background-color: red; + background-image: linear-gradient(green, green); + color: transparent; + font-family: Ahem; + font-size: 30px; + line-height: 1.5; + } + </style> + + <p>Test passes if there are 2 green stripes and if the top stripe is half the width of the bottom stripe. + + <div>12345<br>1234567890</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-cascade/import-conditions.html b/third_party/blink/web_tests/external/wpt/css/css-cascade/import-conditions.html index d4a0918..0bb0975 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-cascade/import-conditions.html +++ b/third_party/blink/web_tests/external/wpt/css/css-cascade/import-conditions.html
@@ -4,10 +4,9 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <style> - #target { color: red; } + .target { color: red; } </style> -<style id="styleElement"></style> -<div id="target"></div> +<div id="target" class="target"></div> <script> const testCases = [ { @@ -31,14 +30,11 @@ matches: false } ]; - - let styleElement = document.querySelector("#styleElement"); - - styleElement.remove(); - + let target = document.getElementById("target"); for (let testCase of testCases) { promise_test(async t => { - styleElement.innerText = "@import url(data:text/css,#target{color:green}) " + testCase.importCondition + ";"; + let styleElement = document.createElement("style"); + styleElement.innerText = "@import url(data:text/css,.target{color:green}) " + testCase.importCondition + ";"; await new Promise(resolve => { styleElement.onload = resolve;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-scroll-anchoring/fragment-scrolling-anchors.html.ini b/third_party/blink/web_tests/external/wpt/css/css-scroll-anchoring/fragment-scrolling-anchors.html.ini new file mode 100644 index 0000000..2904bd7 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-scroll-anchoring/fragment-scrolling-anchors.html.ini
@@ -0,0 +1,4 @@ +[fragment-scrolling-anchors.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/css/css-sizing/min-content-negative-margin-crash.html.ini b/third_party/blink/web_tests/external/wpt/css/css-sizing/min-content-negative-margin-crash.html.ini new file mode 100644 index 0000000..b223f72 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-sizing/min-content-negative-margin-crash.html.ini
@@ -0,0 +1,3 @@ +[min-content-negative-margin-crash.html] + expected: + if (product == "content_shell") and (os == "mac"): TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-inline-start-width-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-inline-start-width-001.html.ini index 7dcd817..95412ba 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-inline-start-width-001.html.ini +++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-inline-start-width-001.html.ini
@@ -1,3 +1,3 @@ [kind-of-widget-fallback-input-button-border-inline-start-width-001.html] expected: - if (product == "content_shell") and (os == "win") and (port == "win10.20h2"): FAIL + if (product == "content_shell") and (os == "win"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-inline-end-style-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-inline-end-style-001.html.ini new file mode 100644 index 0000000..eb2f5fbc --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-inline-end-style-001.html.ini
@@ -0,0 +1,3 @@ +[kind-of-widget-fallback-input-reset-border-inline-end-style-001.html] + expected: + if (product == "content_shell") and (os == "mac"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-size-001.html.ini b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-size-001.html.ini new file mode 100644 index 0000000..b67ebbb --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-size-001.html.ini
@@ -0,0 +1,3 @@ +[kind-of-widget-fallback-input-search-text-background-size-001.html] + expected: + if (product == "content_shell") and (os == "linux"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-values/calc-serialization-002-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-values/calc-serialization-002-expected.txt index 4c9f22c..7a00b08 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-values/calc-serialization-002-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/css-values/calc-serialization-002-expected.txt
@@ -2,13 +2,21 @@ FAIL testing calc(1vh + 2px + 3%) assert_equals: expected "calc(3% + 2px + 1vh)" but got "calc(1vh + 2px + 3%)" PASS testing calc(4px + 1vh) FAIL testing calc(5px + 6em + 1vh) assert_equals: expected "calc(6em + 5px + 1vh)" but got "calc(5px + 6em + 1vh)" -FAIL testing calc(1vh - 7px) assert_equals: expected "calc(-7px + 1vh)" but got "calc(1vh - 7px)" FAIL testing calc(-8px + 9em + 1vh) assert_equals: expected "calc(9em - 8px + 1vh)" but got "calc(-8px + 9em + 1vh)" FAIL testing calc(1pc + 1in + 1vh + 10%) assert_equals: expected "calc(10% + 112px + 1vh)" but got "calc(112px + 1vh + 10%)" FAIL testing calc(25.4q + 1vh + 12%) assert_equals: expected "calc(12% + 24px + 1vh)" but got "calc(25.4q + 1vh + 12%)" FAIL testing calc(1em + 1.27cm + 13% + 3em) assert_equals: expected "calc(13% + 4em + 48px)" but got "calc(1em + 1.27cm + 13% + 3em)" -FAIL testing calc(1vmin - 14%) assert_equals: expected "calc(-14% + 1vmin)" but got "calc(1vmin - 14%)" FAIL testing calc(15vw + 16vmin - 17vh) assert_equals: expected "calc(-17vh + 16vmin + 15vw)" but got "calc((15vw + 16vmin) - 17vh)" +FAIL testing calc(9pt + calc(9rem + 10px)) assert_equals: expected "calc(22px + 9rem)" but got "calc(9pt + 9rem + 10px)" +FAIL testing calc(5pt + 5em + 4pt + 3em) assert_equals: expected "calc(8em + 12px)" but got "calc(5pt + 5em + 4pt + 3em)" +FAIL testing calc(4vmin + 0pt + 3pc) assert_equals: expected "calc(48px + 4vmin)" but got "calc(4vmin + 0pt + 3pc)" +FAIL testing calc(4vmin + 0pt) assert_equals: expected "calc(0px + 4vmin)" but got "calc(4vmin + 0pt)" +PASS testing calc(100% - 100% + 1em) +FAIL testing calc(100% + 1em - 100%) assert_equals: expected "calc(0% + 1em)" but got "calc((100% + 1em) - 100%)" +FAIL testing calc(1vh - 7px) assert_equals: expected "calc(-7px + 1vh)" but got "calc(1vh - 7px)" +PASS testing calc(5ex - 9ex) PASS testing calc(-80px + 25.4mm) +FAIL testing calc(1vmin - 14%) assert_equals: expected "calc(-14% + 1vmin)" but got "calc(1vmin - 14%)" +PASS testing calc(4 * 3px + 4pc / 8) Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/css/css-values/calc-serialization-002.html b/third_party/blink/web_tests/external/wpt/css/css-values/calc-serialization-002.html index a06b33e..79159480 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-values/calc-serialization-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-values/calc-serialization-002.html
@@ -2,13 +2,20 @@ <meta charset="UTF-8"> - <title>CSS Values and Units: calc() serialization of a summation (complex)</title> + <title>CSS Values and Units: serialization of calc() specified values: 19 arithmetical operations (complex)</title> <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> - <link rel="help" href="https://www.w3.org/TR/css-values-4/#compat"> <link rel="help" href="https://www.w3.org/TR/css-values-4/#calc-serialize"> - <meta content="This test verifies how 11 summations of mixed length units are serialized. Absolute length units, relative length units, font-relative length units, viewport-percentage length units and percentage units are tested." name="assert"> + <meta content="" name="flags"> + <meta content="This test verifies how 19 arithmetical operations of mixed length units in calc() specified values are serialized. Absolute length units (cm, in, mm, pc, pt, q, px), font-relative length units (ex, em, rem), viewport-percentage length units (vh, vmax, vmin, vw) and percentage units are tested. 12 additions, 6 substractions and 1 division are tested." name="assert"> + + <!-- + + Issue 1050968: CSS calc and other math function serialization doesn't follow the spec + https://bugs.chromium.org/p/chromium/issues/detail?id=1050968 + + --> <script src="/resources/testharness.js"></script> @@ -38,53 +45,90 @@ /* " - Sort the terms in the following order: - The number, if present + If nodes contains a number, remove it from nodes and append it to ret. - The percentage, if present + If nodes contains a percentage, remove it from nodes and append it to ret. - The dimensions, ordered by their units ASCII case-insensitive alphabetically + If nodes contains any dimensions, remove them from nodes, sort them by their units, ordered ASCII case-insensitively, and append them to ret. + + If nodes still contains any items, append them to ret in the same order. + " - https://www.w3.org/TR/css-values-4/#math-function-serialize-a-summation - - cm centimeters 1cm = 96px/2.54 - mm millimeters 1mm = 1/10th of 1cm - Q quarter-millimeters 1Q = 1/40th of 1cm - in inches 1in = 2.54cm = 96px - pc picas 1pc = 1/6th of 1in - pt points 1pt = 1/72th of 1in - px pixels 1px = 1/96th of 1in + https://www.w3.org/TR/css-values-4/#calc-serialize */ + /* 12 Additions */ + verifySerialization("calc(1vh + 2px + 3%)", "calc(3% + 2px + 1vh)", "testing calc(1vh + 2px + 3%)"); verifySerialization("calc(4px + 1vh)", "calc(4px + 1vh)", "testing calc(4px + 1vh)"); verifySerialization("calc(5px + 6em + 1vh)", "calc(6em + 5px + 1vh)", "testing calc(5px + 6em + 1vh)"); - verifySerialization("calc(1vh - 7px)", "calc(-7px + 1vh)", "testing calc(1vh - 7px)"); - verifySerialization("calc(-8px + 9em + 1vh)", "calc(9em - 8px + 1vh)", "testing calc(-8px + 9em + 1vh)"); verifySerialization("calc(1pc + 1in + 1vh + 10%)", "calc(10% + 112px + 1vh)", "testing calc(1pc + 1in + 1vh + 10%)"); - /* verifySerialization(specified_value, serialization_expected, description) */ - verifySerialization("calc(25.4q + 1vh + 12%)", "calc(12% + 24px + 1vh)", "testing calc(25.4q + 1vh + 12%)"); verifySerialization("calc(1em + 1.27cm + 13% + 3em)", "calc(13% + 4em + 48px)", "testing calc(1em + 1.27cm + 13% + 3em)"); - verifySerialization("calc(1vmin - 14%)", "calc(-14% + 1vmin)", "testing calc(1vmin - 14%)"); + /* verifySerialization(specified_value, serialization_expected, description) */ verifySerialization("calc(15vw + 16vmin - 17vh)", "calc(-17vh + 16vmin + 15vw)", "testing calc(15vw + 16vmin - 17vh)"); - verifySerialization("calc(-80px + 25.4mm)", "calc(16px)", "testing calc(-80px + 25.4mm)"); + verifySerialization("calc(9pt + calc(9rem + 10px))", "calc(22px + 9rem)", "testing calc(9pt + calc(9rem + 10px))"); + + verifySerialization("calc(5pt + 5em + 4pt + 3em)", "calc(8em + 12px)", "testing calc(5pt + 5em + 4pt + 3em)"); + + verifySerialization("calc(4vmin + 0pt + 3pc)", "calc(48px + 4vmin)", "testing calc(4vmin + 0pt + 3pc)"); + + verifySerialization("calc(4vmin + 0pt)", "calc(0px + 4vmin)", "testing calc(4vmin + 0pt)"); + + /* + + More info on the calc(4vmin + 0pt) sub-test: + https://github.com/web-platform-tests/wpt/pull/38245#issuecomment-1464215777 + Date: March 10th 2023 + + */ + + /* 6 Substractions */ + + + verifySerialization("calc(100% - 100% + 1em)", "calc(0% + 1em)", "testing calc(100% - 100% + 1em)"); + + verifySerialization("calc(100% + 1em - 100%)", "calc(0% + 1em)", "testing calc(100% + 1em - 100%)"); + + verifySerialization("calc(1vh - 7px)", "calc(-7px + 1vh)", "testing calc(1vh - 7px)"); + + verifySerialization("calc(5ex - 9ex)", "calc(-4ex)", "testing calc(5ex - 9ex)"); /* - This calc(-80px + 25.4mm) test is on purpose last. We want the - div#target to occupy 16px and to not cause document box height + + An out-of-range value inside calc() is not syntactically invalid. + Inside a calc() function, the resulting summation value can be + out of range and can be serialized. + + */ + + verifySerialization("calc(-80px + 25.4mm)", "calc(16px)", "testing calc(-80px + 25.4mm)"); + + /* verifySerialization(specified_value, serialization_expected, description) */ + + verifySerialization("calc(1vmin - 14%)", "calc(-14% + 1vmin)", "testing calc(1vmin - 14%)"); + + + /* 1 Multiplication and division */ + + + verifySerialization("calc(4 * 3px + 4pc / 8)", "calc(20px)", "testing calc(4 * 3px + 4pc / 8)"); + + /* + This calc(4 * 3px + 4pc / 8) test is on purpose last. We want the + div#target to occupy 20px and to not cause document box height to be unneedlessly tall. */
diff --git a/third_party/blink/web_tests/external/wpt/css/css-values/calc-serialization-002.html.ini b/third_party/blink/web_tests/external/wpt/css/css-values/calc-serialization-002.html.ini index 96ccea5..a493205 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-values/calc-serialization-002.html.ini +++ b/third_party/blink/web_tests/external/wpt/css/css-values/calc-serialization-002.html.ini
@@ -2,6 +2,9 @@ [testing calc(-8px + 9em + 1vh)] expected: FAIL + [testing calc(100% + 1em - 100%)] + expected: FAIL + [testing calc(15vw + 16vmin - 17vh)] expected: FAIL @@ -23,5 +26,17 @@ [testing calc(25.4q + 1vh + 12%)] expected: FAIL + [testing calc(4vmin + 0pt + 3pc)] + expected: FAIL + + [testing calc(4vmin + 0pt)] + expected: FAIL + + [testing calc(5pt + 5em + 4pt + 3em)] + expected: FAIL + [testing calc(5px + 6em + 1vh)] expected: FAIL + + [testing calc(9pt + calc(9rem + 10px))] + expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-values/getComputedStyle-calc-bg-height-percent-001.html b/third_party/blink/web_tests/external/wpt/css/css-values/getComputedStyle-calc-bg-height-percent-001.html new file mode 100644 index 0000000..c6fea70 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-values/getComputedStyle-calc-bg-height-percent-001.html
@@ -0,0 +1,110 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Values Test: computed value of 3 calc() values</title> + + + <!-- + " + Where percentages are not resolved at computed-value time, + they are not resolved in math functions, e.g. + 'calc(100% - 100% + 1px)' resolves to 'calc(0% + 1px)', not to + '1px'. If there are special rules for computing percentages + in a value (e.g. the 'height' property), they apply whenever + a math function contains percentages. + " + § 10.11 Computed Value + https://www.w3.org/TR/css-values-4/#calc-computed-value + --> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + <link rel="help" href="https://www.w3.org/TR/css-values-4/#calc-computed-value"> + + <meta name="flags" content=""> + <meta content="This test verifies that terms with a percentage unit that can not be resolved at computed-value time will require a calc() wrapper. A term with an em value, on the other hand, must be resolved at computed-value time and therefore must be absolutized to 'px'." name="assert"> + + <script src="/resources/testharness.js"></script> + + <script src="/resources/testharnessreport.js"></script> + + <style> + html, body + { + font-size: 16px; + height: 570px; + } + + div#target + { + background-color: yellow; + background-image: url("support/cat.png"); + background-position: top center; + background-repeat: no-repeat; + background-size: 14% 50%; /* entirely arbitrary and random background-size values */ + height: 200px; + } + </style> + + <div id="target"></div> + + <script> + function startTesting() + { + + var targetElement = document.getElementById("target"); + + function verifyComputedStyle(property_name, specified_value, expected_value, description) + { + + test(function() + { + + targetElement.style.setProperty(property_name, specified_value); + + assert_equals(getComputedStyle(targetElement)[property_name], expected_value); + + }, description); + } + + verifyComputedStyle("background-size", "calc(67% - 54% + 4em)", "calc(13% + 64px)", "testing background-size: calc(67% - 54% + 4em)"); + + /* + "Where percentages are not resolved at computed-value time, + they are not resolved in math functions (...)" + https://www.w3.org/TR/css-values-4/#calc-serialize + + Therefore here, the percentage is preserved and + a calc() wrapper must be used. The 4em term + must be resolved though. + */ + + verifyComputedStyle("background-position", "calc(100% - 100% + 20em)", "calc(0% + 320px) 50%", "testing background-position: calc(100% - 100% + 20em)"); + + /* + Here too, the percentage is preserved and + a calc() wrapper must be used. The 20em term + must be resolved though. + */ + + + verifyComputedStyle("height", "calc(60% - 50% + 3em)", "105px", "testing height: calc(60% - 50% + 3em)"); + + /* + + The height of the containing block of div#target is not auto. + So, such percentage can and must be resolved at + computed-value time. + + 570px mult 10% == 57px + + + 48px + ============ + 105px + + */ + } + + startTesting(); + + </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/range-input-appearance-native-vertical-rtl.optional.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/range-input-appearance-native-vertical-rtl.optional.html index 74b24b5..095ca96 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/range-input-appearance-native-vertical-rtl.optional.html +++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/range-input-appearance-native-vertical-rtl.optional.html
@@ -6,6 +6,7 @@ <meta charset="utf-8"> <link rel="mismatch" href="range-input-appearance-native-vertical.optional.html"> <link rel="mismatch" href="range-input-appearance-none-vertical.optional.html"> +<link rel="mismatch" href="range-input-appearance-native-horizontal-rtl.optional.html"> <!-- Note test description should be the same across all files to mismatch on. --> <p>The range input below should match the correct writing mode & direction.</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/range-input-appearance-native-vertical-rtl.optional.html.ini b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/range-input-appearance-native-vertical-rtl.optional.html.ini new file mode 100644 index 0000000..3620009 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/range-input-appearance-native-vertical-rtl.optional.html.ini
@@ -0,0 +1,2 @@ +[range-input-appearance-native-vertical-rtl.optional.html] + expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/range-input-appearance-none-vertical-rtl.optional.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/range-input-appearance-none-vertical-rtl.optional.html index a4696e4..527038ea 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/range-input-appearance-none-vertical-rtl.optional.html +++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/range-input-appearance-none-vertical-rtl.optional.html
@@ -6,6 +6,7 @@ <meta charset="utf-8"> <link rel="mismatch" href="range-input-appearance-none-vertical.optional.html"> <link rel="mismatch" href="range-input-appearance-native-vertical.optional.html"> +<link rel="mismatch" href="range-input-appearance-none-horizontal-rtl.optional.html"> <!-- Note test description should be the same across all files to mismatch on. --> <p>The range input below should match the correct writing mode & direction.</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/range-input-appearance-none-vertical-rtl.optional.html.ini b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/range-input-appearance-none-vertical-rtl.optional.html.ini new file mode 100644 index 0000000..ef89e70f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/forms/range-input-appearance-none-vertical-rtl.optional.html.ini
@@ -0,0 +1,2 @@ +[range-input-appearance-none-vertical-rtl.optional.html] + expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/location-pseudo-classes-in-has.html.ini b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/location-pseudo-classes-in-has.html.ini new file mode 100644 index 0000000..934003d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/location-pseudo-classes-in-has.html.ini
@@ -0,0 +1,4 @@ +[location-pseudo-classes-in-has.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-child-of-class-prefix.html b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-child-of-class-prefix.html new file mode 100644 index 0000000..ac7757db --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-child-of-class-prefix.html
@@ -0,0 +1,26 @@ +<!DOCTYPE html> +<meta charset="utf-8" /> +<title>CSS Selectors Invalidation: :nth-child(... of class prefix)</title> +<link rel="author" title="Zach Hoffman" href="mailto:zach@zrhoffman.net"> +<link rel="match" href="nth-child-of-class-ref.html"> +<link rel="help" href="https://w3c.github.io/csswg-drafts/selectors-4/#child-index"> +<style> + p:nth-child(even of [class^=t]) { + color: green; + } +</style> +<div> + <p>Ignored</p> + <p>Ignored</p> + <p class="t1">Not ignored</p> + <p id="toggler" class="t2">Selectively ignored</p> + <p class="t3">Not ignored</p> + <p class="t4">Not ignored</p> + <p class="t5">Not ignored</p> + <p>Ignored</p> +</div> +<script> + document.documentElement.offsetTop; + toggler.setAttribute("class", "new-class"); +</script> +
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-child-of-id-prefix.html b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-child-of-id-prefix.html new file mode 100644 index 0000000..fadb8f38 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-child-of-id-prefix.html
@@ -0,0 +1,26 @@ +<!DOCTYPE html> +<meta charset="utf-8" /> +<title>CSS Selectors Invalidation: :nth-child(... of ID prefix)</title> +<link rel="author" title="Zach Hoffman" href="mailto:zach@zrhoffman.net"> +<link rel="match" href="nth-child-of-class-ref.html"> +<link rel="help" href="https://w3c.github.io/csswg-drafts/selectors-4/#child-index"> +<style> + p:nth-child(even of [id^=t]) { + color: green; + } +</style> +<div> + <p>Ignored</p> + <p>Ignored</p> + <p id="t1">Not ignored</p> + <p id="t2">Selectively ignored</p> + <p id="t3">Not ignored</p> + <p id="t4">Not ignored</p> + <p id="t5">Not ignored</p> + <p>Ignored</p> +</div> +<script> + document.documentElement.offsetTop; + t2.id = "new-id"; +</script> +
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-child-of-ids.html b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-child-of-ids.html new file mode 100644 index 0000000..0332052 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-child-of-ids.html
@@ -0,0 +1,26 @@ +<!DOCTYPE html> +<meta charset="utf-8" /> +<title>CSS Selectors Invalidation: :nth-child(... of IDs)</title> +<link rel="author" title="Zach Hoffman" href="mailto:zach@zrhoffman.net"> +<link rel="match" href="nth-child-of-class-ref.html"> +<link rel="help" href="https://w3c.github.io/csswg-drafts/selectors-4/#child-index"> +<style> + p:nth-child(even of #t1, #t2, #t3, #t4, #t5) { + color: green; + } +</style> +<div> + <p>Ignored</p> + <p>Ignored</p> + <p id="t1">Not ignored</p> + <p id="t2">Selectively ignored</p> + <p id="t3">Not ignored</p> + <p id="t4">Not ignored</p> + <p id="t5">Not ignored</p> + <p>Ignored</p> +</div> +<script> + document.documentElement.offsetTop; + t2.id = "new-id"; +</script> +
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-child-of-in-is.html b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-child-of-in-is.html new file mode 100644 index 0000000..31276e6 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-child-of-in-is.html
@@ -0,0 +1,25 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Selectors Invalidation: :is(:nth-child(... of class))</title> +<link rel="author" title="Zach Hoffman" href="mailto:zach@zrhoffman.net"> +<link rel="match" href="nth-child-of-class-ref.html"> +<link rel="help" href="https://w3c.github.io/csswg-drafts/selectors-4/#child-index"> +<style> + p:is(:nth-child(even of .c)) { + color: green; + } +</style> +<div> + <p>Ignored</p> + <p>Ignored</p> + <p class="c">Not ignored</p> + <p class="c" id="toggler">Selectively ignored</p> + <p class="c">Not ignored</p> + <p class="c">Not ignored</p> + <p class="c">Not ignored</p> + <p>Ignored</p> +</div> +<script> + document.documentElement.offsetTop; + toggler.classList.toggle("c"); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-child-of-is.html b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-child-of-is.html new file mode 100644 index 0000000..e230a30d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-child-of-is.html
@@ -0,0 +1,25 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Selectors Invalidation: :nth-child(... of :is)</title> +<link rel="author" title="Zach Hoffman" href="mailto:zach@zrhoffman.net"> +<link rel="match" href="nth-child-of-class-ref.html"> +<link rel="help" href="https://w3c.github.io/csswg-drafts/selectors-4/#child-index"> +<style> + p:nth-child(even of :is(.c)) { + color: green; + } +</style> +<div> + <p>Ignored</p> + <p>Ignored</p> + <p class="c">Not ignored</p> + <p class="c" id="toggler">Selectively ignored</p> + <p class="c">Not ignored</p> + <p class="c">Not ignored</p> + <p class="c">Not ignored</p> + <p>Ignored</p> +</div> +<script> + document.documentElement.offsetTop; + toggler.classList.toggle("c"); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-child-of-pseudo-class-ref.html b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-child-of-pseudo-class-ref.html new file mode 100644 index 0000000..b06f47a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-child-of-pseudo-class-ref.html
@@ -0,0 +1,13 @@ +<!doctype html> +<meta charset=utf-8> +<title>CSS Test Reference</title> +<div> + <p>Ignored</p> + <p>Ignored</p> + <p style="color: green">Not ignored</p> + <p>Selectively ignored</p> + <p style="color: green">Not ignored</p> + <p>Not ignored</p> + <p style="color: green">Not ignored</p> + <p>Ignored</p> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-child-of-pseudo-class.html b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-child-of-pseudo-class.html new file mode 100644 index 0000000..2a0b071 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-child-of-pseudo-class.html
@@ -0,0 +1,31 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Selectors Invalidation: :nth-child(... of pseudo-class)</title> +<link rel="author" title="Zach Hoffman" href="mailto:zach@zrhoffman.net"> +<link rel="match" href="nth-child-of-pseudo-class-ref.html"> +<link rel="help" href="https://drafts.csswg.org/selectors-4/#child-index"> +<style> + p:nth-child(odd of :defined) { + color: green; + } + + not-defined, my-element { + display: block; + margin-block: 1em; + margin-inline: 0; + } +</style> +<div> + <not-defined>Ignored</not-defined> + <not-defined>Ignored</not-defined> + <p>Not ignored</p> + <my-element>Selectively ignored</my-element> + <p>Not ignored</p> + <p>Not ignored</p> + <p>Not ignored</p> + <not-defined>Ignored</not-defined> +</div> +<script> + document.documentElement.offsetTop; + customElements.define("my-element", class MyElement extends HTMLElement{}); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-last-child-of-class-prefix.html b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-last-child-of-class-prefix.html new file mode 100644 index 0000000..f9fc196c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-last-child-of-class-prefix.html
@@ -0,0 +1,25 @@ +<!DOCTYPE html> +<meta charset="utf-8" /> +<title>CSS Selectors Invalidation: :nth-last-child(... of class prefix)</title> +<link rel="author" title="Zach Hoffman" href="mailto:zach@zrhoffman.net"> +<link rel="match" href="nth-last-child-of-class-ref.html"> +<link rel="help" href="https://w3c.github.io/csswg-drafts/selectors-4/#child-index"> +<style> + p:nth-last-child(even of [class^=t]) { + color: green; + } +</style> +<div> + <p>Ignored</p> + <p class="t5">Not ignored</p> + <p class="t4">Not ignored</p> + <p class="t3">Not ignored</p> + <p id="toggler" class="t2">Selectively ignored</p> + <p class="t1">Not ignored</p> + <p>Ignored</p> + <p>Ignored</p> +</div> +<script> + document.documentElement.offsetTop; + toggler.setAttribute("class", "new-class"); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-last-child-of-id-prefix.html b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-last-child-of-id-prefix.html new file mode 100644 index 0000000..1a9e6a9 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-last-child-of-id-prefix.html
@@ -0,0 +1,25 @@ +<!DOCTYPE html> +<meta charset="utf-8" /> +<title>CSS Selectors Invalidation: :nth-last-child(... of ID prefix)</title> +<link rel="author" title="Zach Hoffman" href="mailto:zach@zrhoffman.net"> +<link rel="match" href="nth-last-child-of-class-ref.html"> +<link rel="help" href="https://w3c.github.io/csswg-drafts/selectors-4/#child-index"> +<style> + p:nth-last-child(even of [id^=t]) { + color: green; + } +</style> +<div> + <p>Ignored</p> + <p id="t5">Not ignored</p> + <p id="t4">Not ignored</p> + <p id="t3">Not ignored</p> + <p id="t2">Selectively ignored</p> + <p id="t1">Not ignored</p> + <p>Ignored</p> + <p>Ignored</p> +</div> +<script> + document.documentElement.offsetTop; + t2.id = "new-id"; +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-last-child-of-ids.html b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-last-child-of-ids.html new file mode 100644 index 0000000..cd682ed --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-last-child-of-ids.html
@@ -0,0 +1,25 @@ +<!DOCTYPE html> +<meta charset="utf-8" /> +<title>CSS Selectors Invalidation: :nth-last-child(... of IDs)</title> +<link rel="author" title="Zach Hoffman" href="mailto:zach@zrhoffman.net"> +<link rel="match" href="nth-last-child-of-class-ref.html"> +<link rel="help" href="https://w3c.github.io/csswg-drafts/selectors-4/#child-index"> +<style> + p:nth-last-child(even of #t1, #t2, #t3, #t4, #t5) { + color: green; + } +</style> +<div> + <p>Ignored</p> + <p id="t5">Not ignored</p> + <p id="t4">Not ignored</p> + <p id="t3">Not ignored</p> + <p id="t2">Selectively ignored</p> + <p id="t1">Not ignored</p> + <p>Ignored</p> + <p>Ignored</p> +</div> +<script> + document.documentElement.offsetTop; + t2.id = "new-id"; +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-last-child-of-in-is.html b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-last-child-of-in-is.html new file mode 100644 index 0000000..90c8860 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-last-child-of-in-is.html
@@ -0,0 +1,25 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Selectors Invalidation: :is(:nth-last-child(... of class))</title> +<link rel="author" title="Zach Hoffman" href="mailto:zach@zrhoffman.net"> +<link rel="match" href="nth-last-child-of-class-ref.html"> +<link rel="help" href="https://w3c.github.io/csswg-drafts/selectors-4/#child-index"> +<style> + p:is(:nth-last-child(even of .c)) { + color: green; + } +</style> +<div> + <p>Ignored</p> + <p class="c">Not ignored</p> + <p class="c">Not ignored</p> + <p class="c">Not ignored</p> + <p class="c" id="toggler">Selectively ignored</p> + <p class="c">Not ignored</p> + <p>Ignored</p> + <p>Ignored</p> +</div> +<script> + document.documentElement.offsetTop; + toggler.classList.toggle("c"); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-last-child-of-is.html b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-last-child-of-is.html new file mode 100644 index 0000000..ac1ec31 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-last-child-of-is.html
@@ -0,0 +1,25 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Selectors Invalidation: :nth-last-child(... of :is)</title> +<link rel="author" title="Zach Hoffman" href="mailto:zach@zrhoffman.net"> +<link rel="match" href="nth-last-child-of-class-ref.html"> +<link rel="help" href="https://w3c.github.io/csswg-drafts/selectors-4/#child-index"> +<style> + p:nth-last-child(even of :is(.c)) { + color: green; + } +</style> +<div> + <p>Ignored</p> + <p class="c">Not ignored</p> + <p class="c">Not ignored</p> + <p class="c">Not ignored</p> + <p class="c" id="toggler">Selectively ignored</p> + <p class="c">Not ignored</p> + <p>Ignored</p> + <p>Ignored</p> +</div> +<script> + document.documentElement.offsetTop; + toggler.classList.toggle("c"); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-last-child-of-pseudo-class-ref.html b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-last-child-of-pseudo-class-ref.html new file mode 100644 index 0000000..370e888 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-last-child-of-pseudo-class-ref.html
@@ -0,0 +1,13 @@ +<!doctype html> +<meta charset=utf-8> +<title>CSS Test Reference</title> +<div> + <p>Ignored</p> + <p style="color: green">Not ignored</p> + <p>Not ignored</p> + <p style="color: green">Not ignored</p> + <p>Selectively ignored</p> + <p style="color: green">Not ignored</p> + <p>Ignored</p> + <p>Ignored</p> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-last-child-of-pseudo-class.html b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-last-child-of-pseudo-class.html new file mode 100644 index 0000000..1907532 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/nth-last-child-of-pseudo-class.html
@@ -0,0 +1,31 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Selectors Invalidation: :nth-last-child(... of pseudo-class)</title> +<link rel="author" title="Zach Hoffman" href="mailto:zach@zrhoffman.net"> +<link rel="match" href="nth-last-child-of-pseudo-class-ref.html"> +<link rel="help" href="https://drafts.csswg.org/selectors-4/#child-index"> +<style> + p:nth-last-child(odd of :defined) { + color: green; + } + + not-defined, my-element { + display: block; + margin-block: 1em; + margin-inline: 0; + } +</style> +<div> + <not-defined>Ignored</not-defined> + <p>Not ignored</p> + <p>Not ignored</p> + <p>Not ignored</p> + <my-element>Selectively ignored</my-element> + <p>Not ignored</p> + <not-defined>Ignored</not-defined> + <not-defined>Ignored</not-defined> +</div> +<script> + document.documentElement.offsetTop; + customElements.define("my-element", class MyElement extends HTMLElement{}); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/domparsing/DOMParser-parseFromString-url-base-pushstate.html.ini b/third_party/blink/web_tests/external/wpt/domparsing/DOMParser-parseFromString-url-base-pushstate.html.ini new file mode 100644 index 0000000..fd8f202 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/domparsing/DOMParser-parseFromString-url-base-pushstate.html.ini
@@ -0,0 +1,5 @@ +[DOMParser-parseFromString-url-base-pushstate.html] + expected: + if (product == "content_shell") and (os == "win") and (port == "win10.20h2"): [ERROR, CRASH] + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/domparsing/DOMParser-parseFromString-url-pushstate.html.ini b/third_party/blink/web_tests/external/wpt/domparsing/DOMParser-parseFromString-url-pushstate.html.ini new file mode 100644 index 0000000..866ea60 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/domparsing/DOMParser-parseFromString-url-pushstate.html.ini
@@ -0,0 +1,4 @@ +[DOMParser-parseFromString-url-pushstate.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/event-order/after-load-hash-twice.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/event-order/after-load-hash-twice.html.ini new file mode 100644 index 0000000..e58354c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/event-order/after-load-hash-twice.html.ini
@@ -0,0 +1,4 @@ +[after-load-hash-twice.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/event-order/after-load-hash.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/event-order/after-load-hash.html.ini new file mode 100644 index 0000000..adb8612 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/event-order/after-load-hash.html.ini
@@ -0,0 +1,4 @@ +[after-load-hash.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/event-order/before-load-hash-twice.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/event-order/before-load-hash-twice.html.ini new file mode 100644 index 0000000..351c44e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/event-order/before-load-hash-twice.html.ini
@@ -0,0 +1,4 @@ +[before-load-hash-twice.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/event-order/before-load-hash.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/event-order/before-load-hash.html.ini new file mode 100644 index 0000000..cb8aab48 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/event-order/before-load-hash.html.ini
@@ -0,0 +1,4 @@ +[before-load-hash.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/event-order/pushState-inside-popstate.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/event-order/pushState-inside-popstate.html.ini new file mode 100644 index 0000000..cd21c8b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/event-order/pushState-inside-popstate.html.ini
@@ -0,0 +1,4 @@ +[pushState-inside-popstate.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/hashchange_event.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/hashchange_event.html.ini new file mode 100644 index 0000000..e20480cc --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/hashchange_event.html.ini
@@ -0,0 +1,4 @@ +[hashchange_event.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-samedoc.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-samedoc.html.ini new file mode 100644 index 0000000..9a4c89e2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-samedoc.html.ini
@@ -0,0 +1,4 @@ +[scroll-restoration-fragment-scrolling-samedoc.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/anchor-fragment-history-back-on-click.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/anchor-fragment-history-back-on-click.html.ini new file mode 100644 index 0000000..c1e4f38 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/anchor-fragment-history-back-on-click.html.ini
@@ -0,0 +1,4 @@ +[anchor-fragment-history-back-on-click.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/cross-document-traversal-cross-document-traversal.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/cross-document-traversal-cross-document-traversal.html.ini index 8452eaf..6d99cc6d 100644 --- a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/cross-document-traversal-cross-document-traversal.html.ini +++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/cross-document-traversal-cross-document-traversal.html.ini
@@ -1,3 +1,15 @@ [cross-document-traversal-cross-document-traversal.html] [cross-document traversals in opposite directions, second traversal invalid at queuing time but valid at the time it is run: the result is going nowhere] expected: FAIL + + [cross-document traversals in opposite directions: the result is going nowhere] + expected: + if (product == "content_shell") and (os == "linux") and (flag_specific == ""): [PASS, FAIL] + + [cross-document traversals in the same (back) direction: the result is going -2 with only one load event] + expected: + if (product == "content_shell") and (os == "linux") and (flag_specific == ""): [PASS, FAIL] + + [cross-document traversals in the same (forward) direction: the result is going +2 with only one load event] + expected: + if (product == "content_shell") and (os == "linux") and (flag_specific == ""): [PASS, FAIL]
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/forward-to-pruned-entry.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/forward-to-pruned-entry.html.ini new file mode 100644 index 0000000..4c02c03a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/forward-to-pruned-entry.html.ini
@@ -0,0 +1,4 @@ +[forward-to-pruned-entry.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/004.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/004.html.ini new file mode 100644 index 0000000..007d46d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/004.html.ini
@@ -0,0 +1,4 @@ +[004.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/fragment-and-encoding-2.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/fragment-and-encoding-2.html.ini new file mode 100644 index 0000000..a684600 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/fragment-and-encoding-2.html.ini
@@ -0,0 +1,4 @@ +[fragment-and-encoding-2.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/fragment-and-encoding.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/fragment-and-encoding.html.ini new file mode 100644 index 0000000..e696b087f8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/fragment-and-encoding.html.ini
@@ -0,0 +1,4 @@ +[fragment-and-encoding.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-frag-non-utf8-encoded-document.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-frag-non-utf8-encoded-document.html.ini new file mode 100644 index 0000000..b111890 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-frag-non-utf8-encoded-document.html.ini
@@ -0,0 +1,4 @@ +[scroll-frag-non-utf8-encoded-document.html] + expected: + if product == "chrome": OK + TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-frag-percent-encoded.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-frag-percent-encoded.html.ini new file mode 100644 index 0000000..2a232a79 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-frag-percent-encoded.html.ini
@@ -0,0 +1,4 @@ +[scroll-frag-percent-encoded.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-position-vertical-lr.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-position-vertical-lr.html.ini new file mode 100644 index 0000000..77a05d77 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-position-vertical-lr.html.ini
@@ -0,0 +1,4 @@ +[scroll-position-vertical-lr.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-position-vertical-rl.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-position-vertical-rl.html.ini new file mode 100644 index 0000000..b26b2f5a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-position-vertical-rl.html.ini
@@ -0,0 +1,4 @@ +[scroll-position-vertical-rl.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-position.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-position.html.ini new file mode 100644 index 0000000..446f96a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-position.html.ini
@@ -0,0 +1,4 @@ +[scroll-position.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-anchor-name.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-anchor-name.html.ini new file mode 100644 index 0000000..77f6f66 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-anchor-name.html.ini
@@ -0,0 +1,4 @@ +[scroll-to-anchor-name.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-id-top.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-id-top.html.ini new file mode 100644 index 0000000..e908c3a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-id-top.html.ini
@@ -0,0 +1,4 @@ +[scroll-to-id-top.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-top.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-top.html.ini new file mode 100644 index 0000000..135b399 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-top.html.ini
@@ -0,0 +1,4 @@ +[scroll-to-top.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/008.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/008.html.ini new file mode 100644 index 0000000..83a2a33 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/008.html.ini
@@ -0,0 +1,4 @@ +[008.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/011.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/011.html.ini new file mode 100644 index 0000000..c44c7e56 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/011.html.ini
@@ -0,0 +1,4 @@ +[011.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/012.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/012.html.ini new file mode 100644 index 0000000..bb5eebc6 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/012.html.ini
@@ -0,0 +1,4 @@ +[012.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/combination_history_001.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/combination_history_001.html.ini new file mode 100644 index 0000000..e862d3e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/combination_history_001.html.ini
@@ -0,0 +1,4 @@ +[combination_history_001.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/combination_history_002.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/combination_history_002.html.ini new file mode 100644 index 0000000..83feb91 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/combination_history_002.html.ini
@@ -0,0 +1,4 @@ +[combination_history_002.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/combination_history_003.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/combination_history_003.html.ini new file mode 100644 index 0000000..468e1c4 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/combination_history_003.html.ini
@@ -0,0 +1,4 @@ +[combination_history_003.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/combination_history_004.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/combination_history_004.html.ini new file mode 100644 index 0000000..8f9479d4 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/combination_history_004.html.ini
@@ -0,0 +1,4 @@ +[combination_history_004.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/combination_history_005.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/combination_history_005.html.ini new file mode 100644 index 0000000..f78a8d1b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/combination_history_005.html.ini
@@ -0,0 +1,4 @@ +[combination_history_005.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/combination_history_006.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/combination_history_006.html.ini new file mode 100644 index 0000000..e8d5d7a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/combination_history_006.html.ini
@@ -0,0 +1,4 @@ +[combination_history_006.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/combination_history_007.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/combination_history_007.html.ini new file mode 100644 index 0000000..d1a7c40 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/combination_history_007.html.ini
@@ -0,0 +1,4 @@ +[combination_history_007.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_back.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_back.html.ini new file mode 100644 index 0000000..0a54f6d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_back.html.ini
@@ -0,0 +1,4 @@ +[history_back.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_back_cross_realm_method.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_back_cross_realm_method.html.ini new file mode 100644 index 0000000..34c78a9 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_back_cross_realm_method.html.ini
@@ -0,0 +1,4 @@ +[history_back_cross_realm_method.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_forward.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_forward.html.ini new file mode 100644 index 0000000..456bc6f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_forward.html.ini
@@ -0,0 +1,4 @@ +[history_forward.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_forward_cross_realm_method.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_forward_cross_realm_method.html.ini new file mode 100644 index 0000000..d14bf0c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_forward_cross_realm_method.html.ini
@@ -0,0 +1,4 @@ +[history_forward_cross_realm_method.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_go_cross_realm_method.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_go_cross_realm_method.html.ini new file mode 100644 index 0000000..c92cf19 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_go_cross_realm_method.html.ini
@@ -0,0 +1,4 @@ +[history_go_cross_realm_method.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_go_minus.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_go_minus.html.ini new file mode 100644 index 0000000..a4ce81e9 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_go_minus.html.ini
@@ -0,0 +1,4 @@ +[history_go_minus.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_go_plus.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_go_plus.html.ini new file mode 100644 index 0000000..f87e320 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_go_plus.html.ini
@@ -0,0 +1,4 @@ +[history_go_plus.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_pushstate.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_pushstate.html.ini new file mode 100644 index 0000000..657fb7f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_pushstate.html.ini
@@ -0,0 +1,4 @@ +[history_pushstate.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_replacestate.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_replacestate.html.ini new file mode 100644 index 0000000..72f29fe2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_replacestate.html.ini
@@ -0,0 +1,4 @@ +[history_replacestate.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_state.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_state.html.ini new file mode 100644 index 0000000..6ed910d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-history-interface/history_state.html.ini
@@ -0,0 +1,4 @@ +[history_state.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-location-interface/location_assign.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-location-interface/location_assign.html.ini new file mode 100644 index 0000000..bddcfdb --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-location-interface/location_assign.html.ini
@@ -0,0 +1,4 @@ +[location_assign.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-location-interface/location_replace.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-location-interface/location_replace.html.ini new file mode 100644 index 0000000..7d4aebe --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-location-interface/location_replace.html.ini
@@ -0,0 +1,4 @@ +[location_replace.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/history/the-location-interface/location_search.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-location-interface/location_search.html.ini new file mode 100644 index 0000000..bb842c5 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/history/the-location-interface/location_search.html.ini
@@ -0,0 +1,4 @@ +[location_search.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/proxy-getOwnPropertyDescriptor.html.ini b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/proxy-getOwnPropertyDescriptor.html.ini new file mode 100644 index 0000000..1469714 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/browsers/the-window-object/proxy-getOwnPropertyDescriptor.html.ini
@@ -0,0 +1,4 @@ +[proxy-getOwnPropertyDescriptor.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/header-parsing-failures.https.html.ini b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/header-parsing-failures.https.html.ini new file mode 100644 index 0000000..dcd24ce --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/header-parsing-failures.https.html.ini
@@ -0,0 +1,3 @@ +[header-parsing-failures.https.html?12-last] + expected: + if product == "chrome": [ERROR, OK]
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/usvstring-reflection.https.html.ini b/third_party/blink/web_tests/external/wpt/html/dom/usvstring-reflection.https.html.ini index fb41c30..b77c494 100644 --- a/third_party/blink/web_tests/external/wpt/html/dom/usvstring-reflection.https.html.ini +++ b/third_party/blink/web_tests/external/wpt/html/dom/usvstring-reflection.https.html.ini
@@ -1,3 +1,6 @@ [usvstring-reflection.https.html] + expected: + if product == "chrome": OK + ERROR [RTCDataChannel.send: unpaired surrogate codepoint should be replaced with U+FFFD.] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/editing/the-hidden-attribute/beforematch-element-fragment-navigation.html.ini b/third_party/blink/web_tests/external/wpt/html/editing/the-hidden-attribute/beforematch-element-fragment-navigation.html.ini new file mode 100644 index 0000000..1eb3e88 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/editing/the-hidden-attribute/beforematch-element-fragment-navigation.html.ini
@@ -0,0 +1,4 @@ +[beforematch-element-fragment-navigation.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-base-url-2.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-base-url-2.html.ini new file mode 100644 index 0000000..74170a4 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-base-url-2.html.ini
@@ -0,0 +1,4 @@ +[iframe-loading-lazy-base-url-2.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-base-url-2.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-base-url-2.html.ini index b0363e4..658d1cf 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-base-url-2.html.ini +++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-base-url-2.html.ini
@@ -1,5 +1,6 @@ [image-loading-lazy-base-url-2.html] expected: - if product == "chrome": [OK, ERROR] + if product == "chrome": OK + ERROR [When a loading=lazy image is loaded, it loads relative to the document's base URL computed at parse-time.] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/attributes-common-to-form-controls/formAction_document_address.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/forms/attributes-common-to-form-controls/formAction_document_address.html.ini new file mode 100644 index 0000000..8f11654c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/forms/attributes-common-to-form-controls/formAction_document_address.html.ini
@@ -0,0 +1,4 @@ +[formAction_document_address.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-details-element/auto-expand-details-element-fragment.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-details-element/auto-expand-details-element-fragment.html.ini new file mode 100644 index 0000000..770801aa --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-details-element/auto-expand-details-element-fragment.html.ini
@@ -0,0 +1,4 @@ +[auto-expand-details-element-fragment.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html.ini b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html.ini new file mode 100644 index 0000000..7515954 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html.ini
@@ -0,0 +1,4 @@ +[anchor-with-inline-element.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js.ini b/third_party/blink/web_tests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js.ini new file mode 100644 index 0000000..17ee31d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js.ini
@@ -0,0 +1,4 @@ +[url-fragment.window.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/content-visibility-auto-offscreen.html.ini b/third_party/blink/web_tests/external/wpt/layout-instability/content-visibility-auto-offscreen.html.ini new file mode 100644 index 0000000..53a6139 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/layout-instability/content-visibility-auto-offscreen.html.ini
@@ -0,0 +1,4 @@ +[content-visibility-auto-offscreen.html] + [off-screen content-visibility:auto] + expected: + if product == "chrome": [FAIL, PASS]
diff --git a/third_party/blink/web_tests/external/wpt/long-animation-frame/tentative/loaf-desired-exec-time.html b/third_party/blink/web_tests/external/wpt/long-animation-frame/tentative/loaf-desired-exec-time.html index 5fecb20fb..d47ca28 100644 --- a/third_party/blink/web_tests/external/wpt/long-animation-frame/tentative/loaf-desired-exec-time.html +++ b/third_party/blink/web_tests/external/wpt/long-animation-frame/tentative/loaf-desired-exec-time.html
@@ -93,9 +93,9 @@ const scripts = entry.scripts.filter( s => s.name === "Window.requestAnimationFrame"); for (const script of scripts) { - assert_less_than_equal(Math.abs(script.desiredExecutionStart - rafTime), 1); + assert_approx_equals(script.desiredExecutionStart, rafTime, 5); } - assert_less_than_equal(Math.abs(entry.desiredRenderStart - rafTime), 1); + assert_approx_equals(entry.desiredRenderStart, rafTime, 5); }, "desiredExecutionStart & desiredRenderStart for requestAnimationFrame " + "should be the same as the rAF argument"); @@ -113,7 +113,7 @@ timeAfterWait = performance.now(); }), 0); const [entry, rafTime] = await Promise.all([entryPromise, rafPromise]); - assert_less_than_equal(Math.abs(entry.desiredRenderStart - rafTime), 1); + assert_approx_equals(entry.desiredRenderStart, rafTime, 5); }, "desiredRenderStart and renderStart should reflect main thread delays"); </script> </body>
diff --git a/third_party/blink/web_tests/external/wpt/long-animation-frame/tentative/resources/utils.js b/third_party/blink/web_tests/external/wpt/long-animation-frame/tentative/resources/utils.js index 76c5055d..394d817 100644 --- a/third_party/blink/web_tests/external/wpt/long-animation-frame/tentative/resources/utils.js +++ b/third_party/blink/web_tests/external/wpt/long-animation-frame/tentative/resources/utils.js
@@ -11,7 +11,8 @@ return new Promise(resolve => { const observer = new PerformanceObserver(entries => { const entry = entries.getEntries()[0]; - if (entry.duration >= very_long_frame_duration) { + // TODO: understand why we need this 5ms epsilon. + if (entry.duration > very_long_frame_duration - 5) { observer.disconnect(); resolve(entry); }
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/anchor-click.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/anchor-click.html.ini index e5cbcf9d4..dd56601 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/anchor-click.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/anchor-click.html.ini
@@ -1,3 +1,6 @@ [anchor-click.html] + expected: + if product == "chrome": OK + ERROR [currententrychange fires for link click] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/history-pushState.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/history-pushState.html.ini index 5a4f4c96..32a11b4 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/history-pushState.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/history-pushState.html.ini
@@ -1,3 +1,6 @@ [history-pushState.html] + expected: + if product == "chrome": OK + ERROR [currententrychange fires for history.pushState()] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/history-replaceState.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/history-replaceState.html.ini index 9915445..c486465 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/history-replaceState.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/history-replaceState.html.ini
@@ -1,3 +1,6 @@ [history-replaceState.html] + expected: + if product == "chrome": OK + ERROR [currententrychange fires for history.replaceState()] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/location-api.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/location-api.html.ini index d8ac712..b22e79e 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/location-api.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/location-api.html.ini
@@ -1,3 +1,6 @@ [location-api.html] + expected: + if product == "chrome": OK + ERROR [currententrychange fires for location API navigations] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/navigation-back-forward-same-doc.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/navigation-back-forward-same-doc.html.ini index da76b67..ab03498 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/navigation-back-forward-same-doc.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/navigation-back-forward-same-doc.html.ini
@@ -1,3 +1,6 @@ [navigation-back-forward-same-doc.html] + expected: + if product == "chrome": OK + ERROR [currententrychange fires for same-document navigation.back() and navigation.forward()] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/navigation-navigate-replace-same-doc.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/navigation-navigate-replace-same-doc.html.ini index 4a43170..b5e023f 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/navigation-navigate-replace-same-doc.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/navigation-navigate-replace-same-doc.html.ini
@@ -1,3 +1,6 @@ [navigation-navigate-replace-same-doc.html] + expected: + if product == "chrome": OK + ERROR [currententrychange fires for navigation.navigate() with replace] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/navigation-navigate-same-doc.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/navigation-navigate-same-doc.html.ini index 0c7589d43..48cebc9 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/navigation-navigate-same-doc.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/navigation-navigate-same-doc.html.ini
@@ -1,3 +1,6 @@ [navigation-navigate-same-doc.html] + expected: + if product == "chrome": OK + ERROR [currententrychange fires for navigation.navigate()] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/properties.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/properties.html.ini new file mode 100644 index 0000000..c533d30 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/currententrychange-event/properties.html.ini
@@ -0,0 +1,4 @@ +[properties.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/focus-reset/autofocus.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/focus-reset/autofocus.html.ini new file mode 100644 index 0000000..9ab8e7b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/focus-reset/autofocus.html.ini
@@ -0,0 +1,4 @@ +[autofocus.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/focus-reset/change-focus-again-in-blur-during-intercept.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/focus-reset/change-focus-again-in-blur-during-intercept.html.ini new file mode 100644 index 0000000..65b986e2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/focus-reset/change-focus-again-in-blur-during-intercept.html.ini
@@ -0,0 +1,5 @@ +[change-focus-again-in-blur-during-intercept.html] + expected: + if (product == "content_shell") and (os == "mac"): [ERROR, TIMEOUT] + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/focus-reset/change-focus-back-to-origial-during-intercept.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/focus-reset/change-focus-back-to-origial-during-intercept.html.ini new file mode 100644 index 0000000..98e604c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/focus-reset/change-focus-back-to-origial-during-intercept.html.ini
@@ -0,0 +1,4 @@ +[change-focus-back-to-origial-during-intercept.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/focus-reset/change-focus-during-intercept.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/focus-reset/change-focus-during-intercept.html.ini new file mode 100644 index 0000000..79fa09f7 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/focus-reset/change-focus-during-intercept.html.ini
@@ -0,0 +1,4 @@ +[change-focus-during-intercept.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/focus-reset/change-focus-then-remove-during-intercept.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/focus-reset/change-focus-then-remove-during-intercept.html.ini new file mode 100644 index 0000000..4ac9465 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/focus-reset/change-focus-then-remove-during-intercept.html.ini
@@ -0,0 +1,4 @@ +[change-focus-then-remove-during-intercept.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/focus-reset/focus-reset-timing.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/focus-reset/focus-reset-timing.html.ini new file mode 100644 index 0000000..914004d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/focus-reset/focus-reset-timing.html.ini
@@ -0,0 +1,4 @@ +[focus-reset-timing.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/event-constructor.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/event-constructor.html.ini new file mode 100644 index 0000000..c328cff --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/event-constructor.html.ini
@@ -0,0 +1,4 @@ +[event-constructor.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-after-dispatch.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-after-dispatch.html.ini new file mode 100644 index 0000000..3c70b38 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-after-dispatch.html.ini
@@ -0,0 +1,4 @@ +[intercept-after-dispatch.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-handler-null-or-undefined.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-handler-null-or-undefined.html.ini new file mode 100644 index 0000000..7b31167 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-handler-null-or-undefined.html.ini
@@ -0,0 +1,4 @@ +[intercept-handler-null-or-undefined.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-handler-returns-non-promise.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-handler-returns-non-promise.html.ini new file mode 100644 index 0000000..c2c19bb3 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-handler-returns-non-promise.html.ini
@@ -0,0 +1,4 @@ +[intercept-handler-returns-non-promise.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-handler-throws.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-handler-throws.html.ini new file mode 100644 index 0000000..f58cd8ce --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-handler-throws.html.ini
@@ -0,0 +1,4 @@ +[intercept-handler-throws.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-history-pushState.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-history-pushState.html.ini new file mode 100644 index 0000000..9eec74af --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-history-pushState.html.ini
@@ -0,0 +1,4 @@ +[intercept-history-pushState.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-history-replaceState.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-history-replaceState.html.ini new file mode 100644 index 0000000..fcc730966 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-history-replaceState.html.ini
@@ -0,0 +1,4 @@ +[intercept-history-replaceState.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-multiple-times-reject.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-multiple-times-reject.html.ini new file mode 100644 index 0000000..d285eee4 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-multiple-times-reject.html.ini
@@ -0,0 +1,4 @@ +[intercept-multiple-times-reject.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-multiple-times.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-multiple-times.html.ini new file mode 100644 index 0000000..2a9906a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-multiple-times.html.ini
@@ -0,0 +1,4 @@ +[intercept-multiple-times.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-on-synthetic-event.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-on-synthetic-event.html.ini new file mode 100644 index 0000000..cf7e7b1 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-on-synthetic-event.html.ini
@@ -0,0 +1,4 @@ +[intercept-on-synthetic-event.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-popstate.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-popstate.html.ini new file mode 100644 index 0000000..906fcf3 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-popstate.html.ini
@@ -0,0 +1,4 @@ +[intercept-popstate.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-reject.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-reject.html.ini new file mode 100644 index 0000000..82d53a98 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-reject.html.ini
@@ -0,0 +1,4 @@ +[intercept-reject.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-resolve.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-resolve.html.ini new file mode 100644 index 0000000..10517d39 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/intercept-resolve.html.ini
@@ -0,0 +1,4 @@ +[intercept-resolve.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigate-destination-getState-back-forward.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigate-destination-getState-back-forward.html.ini new file mode 100644 index 0000000..16f25fe --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigate-destination-getState-back-forward.html.ini
@@ -0,0 +1,4 @@ +[navigate-destination-getState-back-forward.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigate-history-back-after-fragment.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigate-history-back-after-fragment.html.ini index 16dd23c..8448c4d3 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigate-history-back-after-fragment.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigate-history-back-after-fragment.html.ini
@@ -1,3 +1,6 @@ [navigate-history-back-after-fragment.html] + expected: + if product == "chrome": OK + ERROR [history.back() fires the navigate event and sets hashChange when reversing a fragment navigation] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigate-history-back-after-pushState.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigate-history-back-after-pushState.html.ini index b2f4b54..462cf385 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigate-history-back-after-pushState.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigate-history-back-after-pushState.html.ini
@@ -1,3 +1,6 @@ [navigate-history-back-after-pushState.html] + expected: + if product == "chrome": OK + ERROR [history.back() fires the navigate event when reversing a pushState()] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigate-location.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigate-location.html.ini new file mode 100644 index 0000000..99ea7b7 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigate-location.html.ini
@@ -0,0 +1,4 @@ +[navigate-location.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigate-navigation-back-same-document.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigate-navigation-back-same-document.html.ini index 51c385c..ddc4009a 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigate-navigation-back-same-document.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigate-navigation-back-same-document.html.ini
@@ -1,3 +1,6 @@ [navigate-navigation-back-same-document.html] + expected: + if product == "chrome": OK + ERROR [navigate event for navigation.back() - same-document] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigate-navigation-navigate.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigate-navigation-navigate.html.ini new file mode 100644 index 0000000..54894206 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigate-navigation-navigate.html.ini
@@ -0,0 +1,4 @@ +[navigate-navigation-navigate.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigatesuccess-same-document.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigatesuccess-same-document.html.ini new file mode 100644 index 0000000..985adb6 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/navigatesuccess-same-document.html.ini
@@ -0,0 +1,4 @@ +[navigatesuccess-same-document.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/signal-abort-intercept.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/signal-abort-intercept.html.ini new file mode 100644 index 0000000..2242a89 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/signal-abort-intercept.html.ini
@@ -0,0 +1,4 @@ +[signal-abort-intercept.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/signal-abort-window-stop-after-intercept.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/signal-abort-window-stop-after-intercept.html.ini new file mode 100644 index 0000000..b744634a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigate-event/signal-abort-window-stop-after-intercept.html.ini
@@ -0,0 +1,4 @@ +[signal-abort-window-stop-after-intercept.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-history-entry/current-basic.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-history-entry/current-basic.html.ini index 389a106..109d7d7 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-history-entry/current-basic.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-history-entry/current-basic.html.ini
@@ -1,3 +1,6 @@ [current-basic.html] + expected: + if product == "chrome": OK + ERROR [Basic tests for navigation.currentEntry] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-history-entry/entries-after-navigations-in-multiple-windows.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-history-entry/entries-after-navigations-in-multiple-windows.html.ini index ee9970df..9d5b3c3 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-history-entry/entries-after-navigations-in-multiple-windows.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-history-entry/entries-after-navigations-in-multiple-windows.html.ini
@@ -1,3 +1,6 @@ [entries-after-navigations-in-multiple-windows.html] + expected: + if product == "chrome": OK + ERROR [navigation.entries() behavior when multiple windows navigate.] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-history-entry/entries-when-inactive.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-history-entry/entries-when-inactive.html.ini index 455aada..119d19f 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-history-entry/entries-when-inactive.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-history-entry/entries-when-inactive.html.ini
@@ -1,3 +1,6 @@ [entries-when-inactive.html] + expected: + if product == "chrome": OK + ERROR [A non-active entry in navigation.entries() should not be modified when a different entry is modified] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-history-entry/index-not-in-entries.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-history-entry/index-not-in-entries.html.ini index f6d0eb8c..28d35d6 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-history-entry/index-not-in-entries.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-history-entry/index-not-in-entries.html.ini
@@ -1,3 +1,6 @@ [index-not-in-entries.html] + expected: + if product == "chrome": OK + ERROR [entry.index should return -1 when not in navigation.entries()] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-history-entry/sameDocument-after-fragment-navigate.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-history-entry/sameDocument-after-fragment-navigate.html.ini index 6de4e00..75d24b8 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-history-entry/sameDocument-after-fragment-navigate.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-history-entry/sameDocument-after-fragment-navigate.html.ini
@@ -1,3 +1,6 @@ [sameDocument-after-fragment-navigate.html] + expected: + if product == "chrome": OK + ERROR [entry.sameDocument after same-document navigations] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/back-forward-multiple-frames.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/back-forward-multiple-frames.html.ini index 30f7107f..84f3ee8 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/back-forward-multiple-frames.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/back-forward-multiple-frames.html.ini
@@ -1,3 +1,6 @@ [back-forward-multiple-frames.html] + expected: + if product == "chrome": OK + ERROR [navigation.back() and navigation.forward() can navigate multiple frames] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/disambigaute-back.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/disambigaute-back.html.ini index 816e0f7..3103715f 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/disambigaute-back.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/disambigaute-back.html.ini
@@ -1,3 +1,6 @@ [disambigaute-back.html] + expected: + if product == "chrome": OK + ERROR [navigation.back() goes to the nearest back entry] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/disambigaute-forward.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/disambigaute-forward.html.ini index 01cbd1f..db408b2 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/disambigaute-forward.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/disambigaute-forward.html.ini
@@ -1,3 +1,6 @@ [disambigaute-forward.html] + expected: + if product == "chrome": OK + ERROR [navigation.forward() goes to the nearest forward entry] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/disambigaute-traverseTo-back-multiple.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/disambigaute-traverseTo-back-multiple.html.ini index bb09c4e8..37d0cd7 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/disambigaute-traverseTo-back-multiple.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/disambigaute-traverseTo-back-multiple.html.ini
@@ -1,3 +1,6 @@ [disambigaute-traverseTo-back-multiple.html] + expected: + if product == "chrome": OK + ERROR [navigation.traverseTo() goes to the nearest entry when going back] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/disambigaute-traverseTo-forward-multiple.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/disambigaute-traverseTo-forward-multiple.html.ini index 29f5dd2..114936e1 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/disambigaute-traverseTo-forward-multiple.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/disambigaute-traverseTo-forward-multiple.html.ini
@@ -1,3 +1,6 @@ [disambigaute-traverseTo-forward-multiple.html] + expected: + if product == "chrome": OK + ERROR [navigation.traverseTo() goes to the nearest entry when going forward] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/forward-to-pruned-entry.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/forward-to-pruned-entry.html.ini index 6717c3e..1e91ccf 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/forward-to-pruned-entry.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/forward-to-pruned-entry.html.ini
@@ -1,3 +1,6 @@ [forward-to-pruned-entry.html] + expected: + if product == "chrome": OK + ERROR [If forward pruning clobbers the target of a traverse, abort] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-history-push-not-loaded.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-history-push-not-loaded.html.ini index 0f458074..e0d2f4d 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-history-push-not-loaded.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-history-push-not-loaded.html.ini
@@ -1,3 +1,6 @@ [navigate-history-push-not-loaded.html] + expected: + if product == "chrome": OK + ERROR [navigate() with history: 'push' in a document that has not yet had its load event] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-history-state-replace.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-history-state-replace.html.ini new file mode 100644 index 0000000..84d2e28 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-history-state-replace.html.ini
@@ -0,0 +1,4 @@ +[navigate-history-state-replace.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-history-state.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-history-state.html.ini new file mode 100644 index 0000000..30029fd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-history-state.html.ini
@@ -0,0 +1,4 @@ +[navigate-history-state.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-info-and-state.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-info-and-state.html.ini new file mode 100644 index 0000000..593762e19 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-info-and-state.html.ini
@@ -0,0 +1,4 @@ +[navigate-info-and-state.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-intercept-history-state.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-intercept-history-state.html.ini new file mode 100644 index 0000000..0932ed0 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-intercept-history-state.html.ini
@@ -0,0 +1,4 @@ +[navigate-intercept-history-state.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-same-document.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-same-document.html.ini new file mode 100644 index 0000000..2bfbcaff --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-same-document.html.ini
@@ -0,0 +1,4 @@ +[navigate-same-document.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-state-repeated-await.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-state-repeated-await.html.ini new file mode 100644 index 0000000..0d68c4f1 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-state-repeated-await.html.ini
@@ -0,0 +1,4 @@ +[navigate-state-repeated-await.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-state-repeated.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-state-repeated.html.ini new file mode 100644 index 0000000..0aa54ac10 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/navigate-state-repeated.html.ini
@@ -0,0 +1,4 @@ +[navigate-state-repeated.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/forward-intercept-rejected.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/forward-intercept-rejected.html.ini index d3171b1..7a5d680 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/forward-intercept-rejected.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/forward-intercept-rejected.html.ini
@@ -1,3 +1,6 @@ [forward-intercept-rejected.html] + expected: + if product == "chrome": OK + ERROR [forward() promise rejection with rejected intercept()] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/forward-intercept.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/forward-intercept.html.ini index b10cd096..4cca6be 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/forward-intercept.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/forward-intercept.html.ini
@@ -1,3 +1,6 @@ [forward-intercept.html] + expected: + if product == "chrome": OK + ERROR [forward() and intercept() with a fulfilled promise] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/forward.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/forward.html.ini index 840be07..eff67b9 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/forward.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/forward.html.ini
@@ -1,3 +1,6 @@ [forward.html] + expected: + if product == "chrome": OK + ERROR [forward() promises] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate-intercept-interrupted.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate-intercept-interrupted.html.ini index 0be3840..567ef9b 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate-intercept-interrupted.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate-intercept-interrupted.html.ini
@@ -1,3 +1,6 @@ [navigate-intercept-interrupted.html] + expected: + if product == "chrome": OK + ERROR [interrupted navigate() promises with intercept()] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate-intercept-rejected.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate-intercept-rejected.html.ini new file mode 100644 index 0000000..484668a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate-intercept-rejected.html.ini
@@ -0,0 +1,4 @@ +[navigate-intercept-rejected.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate-intercept.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate-intercept.html.ini new file mode 100644 index 0000000..9af9b0c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate-intercept.html.ini
@@ -0,0 +1,4 @@ +[navigate-intercept.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate-interrupted.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate-interrupted.html.ini index e6e485d..3bf3cf9 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate-interrupted.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate-interrupted.html.ini
@@ -1,3 +1,6 @@ [navigate-interrupted.html] + expected: + if product == "chrome": OK + ERROR [interrupted navigate() promises] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate.html.ini new file mode 100644 index 0000000..1efa6e82 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/return-value/navigate.html.ini
@@ -0,0 +1,4 @@ +[navigate.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/sandboxing-back-parent.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/sandboxing-back-parent.html.ini new file mode 100644 index 0000000..24e628e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/sandboxing-back-parent.html.ini
@@ -0,0 +1,4 @@ +[sandboxing-back-parent.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/sandboxing-navigate-parent.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/sandboxing-navigate-parent.html.ini new file mode 100644 index 0000000..264f0886 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/sandboxing-navigate-parent.html.ini
@@ -0,0 +1,4 @@ +[sandboxing-navigate-parent.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/traverseTo-after-adding-iframe.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/traverseTo-after-adding-iframe.html.ini index 9253fb2..35e01d0 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/traverseTo-after-adding-iframe.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/traverseTo-after-adding-iframe.html.ini
@@ -1,3 +1,6 @@ [traverseTo-after-adding-iframe.html] + expected: + if product == "chrome": OK + ERROR [navigation.traverseTo() should work in an iframe that is not present in all history entries] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/traverseTo-multiple-steps.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/traverseTo-multiple-steps.html.ini index 9d0b716..0d5074f 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/traverseTo-multiple-steps.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/navigation-methods/traverseTo-multiple-steps.html.ini
@@ -1,3 +1,6 @@ [traverseTo-multiple-steps.html] + expected: + if product == "chrome": OK + ERROR [goto() can precisely traverse multiple steps in the joint session history] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/anchor-download-intercept-reject.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/anchor-download-intercept-reject.html.ini new file mode 100644 index 0000000..50eadda --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/anchor-download-intercept-reject.html.ini
@@ -0,0 +1,9 @@ +[anchor-download-intercept-reject.html] + expected: + if product == "chrome": OK + ERROR + +[anchor-download-intercept-reject.html?currententrychange] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/anchor-download-intercept.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/anchor-download-intercept.html.ini new file mode 100644 index 0000000..ca186c80 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/anchor-download-intercept.html.ini
@@ -0,0 +1,9 @@ +[anchor-download-intercept.html] + expected: + if product == "chrome": OK + ERROR + +[anchor-download-intercept.html?currententrychange] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/currententrychange-before-popstate-intercept.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/currententrychange-before-popstate-intercept.html.ini index 32d4103..e1d533d 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/currententrychange-before-popstate-intercept.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/currententrychange-before-popstate-intercept.html.ini
@@ -1,3 +1,6 @@ [currententrychange-before-popstate-intercept.html] + expected: + if product == "chrome": OK + ERROR [currententrychange fires before popstate for navigation.back() and navigation.forward()] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/currententrychange-dispose-ordering.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/currententrychange-dispose-ordering.html.ini index b82ac250..81369a825 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/currententrychange-dispose-ordering.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/currententrychange-dispose-ordering.html.ini
@@ -1,3 +1,6 @@ [currententrychange-dispose-ordering.html] + expected: + if product == "chrome": OK + ERROR [Ordering between Navigation currententrychange and NavigationHistoryEntry dispose events] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/intercept-async.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/intercept-async.html.ini new file mode 100644 index 0000000..b9cd9f86 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/intercept-async.html.ini
@@ -0,0 +1,9 @@ +[intercept-async.html] + expected: + if product == "chrome": OK + ERROR + +[intercept-async.html?currententrychange] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/location-href-double-intercept.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/location-href-double-intercept.html.ini new file mode 100644 index 0000000..e746862 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/location-href-double-intercept.html.ini
@@ -0,0 +1,9 @@ +[location-href-double-intercept.html] + expected: + if product == "chrome": OK + ERROR + +[location-href-double-intercept.html?currententrychange] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/location-href-intercept-reentrant.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/location-href-intercept-reentrant.html.ini new file mode 100644 index 0000000..6c752fcb --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/location-href-intercept-reentrant.html.ini
@@ -0,0 +1,9 @@ +[location-href-intercept-reentrant.html] + expected: + if product == "chrome": OK + ERROR + +[location-href-intercept-reentrant.html?currententrychange] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/location-href-intercept-reject.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/location-href-intercept-reject.html.ini new file mode 100644 index 0000000..139fb71 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/location-href-intercept-reject.html.ini
@@ -0,0 +1,9 @@ +[location-href-intercept-reject.html] + expected: + if product == "chrome": OK + ERROR + +[location-href-intercept-reject.html?currententrychange] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/location-href-intercept.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/location-href-intercept.html.ini new file mode 100644 index 0000000..2b92f453 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/location-href-intercept.html.ini
@@ -0,0 +1,9 @@ +[location-href-intercept.html] + expected: + if product == "chrome": OK + ERROR + +[location-href-intercept.html?currententrychange] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/navigate-double-intercept.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/navigate-double-intercept.html.ini new file mode 100644 index 0000000..6d6ca4d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/navigate-double-intercept.html.ini
@@ -0,0 +1,9 @@ +[navigate-double-intercept.html] + expected: + if product == "chrome": OK + ERROR + +[navigate-double-intercept.html?currententrychange] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/navigate-in-transition-finished.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/navigate-in-transition-finished.html.ini new file mode 100644 index 0000000..9c071ea8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/navigate-in-transition-finished.html.ini
@@ -0,0 +1,9 @@ +[navigate-in-transition-finished.html] + expected: + if product == "chrome": OK + ERROR + +[navigate-in-transition-finished.html?currententrychange] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/navigate-intercept-stop.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/navigate-intercept-stop.html.ini new file mode 100644 index 0000000..d2c2728 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/navigate-intercept-stop.html.ini
@@ -0,0 +1,9 @@ +[navigate-intercept-stop.html] + expected: + if product == "chrome": OK + ERROR + +[navigate-intercept-stop.html?currententrychange] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/navigate-intercept.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/navigate-intercept.html.ini new file mode 100644 index 0000000..4b67c25 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/navigate-intercept.html.ini
@@ -0,0 +1,9 @@ +[navigate-intercept.html] + expected: + if product == "chrome": OK + ERROR + +[navigate-intercept.html?currententrychange] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/navigate-same-document-intercept-reentrant.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/navigate-same-document-intercept-reentrant.html.ini new file mode 100644 index 0000000..1b75f98 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/navigate-same-document-intercept-reentrant.html.ini
@@ -0,0 +1,9 @@ +[navigate-same-document-intercept-reentrant.html] + expected: + if product == "chrome": OK + ERROR + +[navigate-same-document-intercept-reentrant.html?currententrychange] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/navigate-same-document-intercept-reject.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/navigate-same-document-intercept-reject.html.ini new file mode 100644 index 0000000..fae9e8f4 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/navigate-same-document-intercept-reject.html.ini
@@ -0,0 +1,9 @@ +[navigate-same-document-intercept-reject.html] + expected: + if product == "chrome": OK + ERROR + +[navigate-same-document-intercept-reject.html?currententrychange] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/navigate-same-document.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/navigate-same-document.html.ini new file mode 100644 index 0000000..dd595486 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/navigate-same-document.html.ini
@@ -0,0 +1,9 @@ +[navigate-same-document.html] + expected: + if product == "chrome": OK + ERROR + +[navigate-same-document.html?currententrychange] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/transition-finished-mark-as-handled.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/transition-finished-mark-as-handled.html.ini new file mode 100644 index 0000000..e6d8a84 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/ordering-and-transition/transition-finished-mark-as-handled.html.ini
@@ -0,0 +1,4 @@ +[transition-finished-mark-as-handled.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-for-full-session-history.tentative.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-for-full-session-history.tentative.html.ini index d229023f..5aec1ae 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-for-full-session-history.tentative.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-for-full-session-history.tentative.html.ini
@@ -1,3 +1,6 @@ [dispose-for-full-session-history.tentative.html] + expected: + if product == "chrome": OK + ERROR [Dispose should fire when an entry is removed from session history due to too many entries] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-same-document-intercept.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-same-document-intercept.html.ini index 9f1b6e1..e0deccd 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-same-document-intercept.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-same-document-intercept.html.ini
@@ -1,3 +1,6 @@ [dispose-same-document-intercept.html] + expected: + if product == "chrome": OK + ERROR [dispose events when forward-pruning same-document entries] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-same-document-navigate-during.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-same-document-navigate-during.html.ini index 977a30b..37b1840 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-same-document-navigate-during.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-same-document-navigate-during.html.ini
@@ -1,3 +1,6 @@ [dispose-same-document-navigate-during.html] + expected: + if product == "chrome": OK + ERROR [navigate() during a same-document-navigation-initiated dispose works (since it's after the previous navigation)] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-same-document-replace-with-intercept.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-same-document-replace-with-intercept.html.ini index 2cc394d..95d50fa9 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-same-document-replace-with-intercept.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-same-document-replace-with-intercept.html.ini
@@ -1,3 +1,6 @@ [dispose-same-document-replace-with-intercept.html] + expected: + if product == "chrome": OK + ERROR [dispose events when doing a same-document replace using navigation.navigate() and intercept()] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-same-document-replaceState.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-same-document-replaceState.html.ini index f1d7975..fbe0ea8 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-same-document-replaceState.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-same-document-replaceState.html.ini
@@ -1,3 +1,6 @@ [dispose-same-document-replaceState.html] + expected: + if product == "chrome": OK + ERROR [dispose events when doing a same-document replace using history.replaceState()] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-same-document.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-same-document.html.ini index 683c3eb..0d4d57ed 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-same-document.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-same-document.html.ini
@@ -1,3 +1,6 @@ [dispose-same-document.html] + expected: + if product == "chrome": OK + ERROR [dispose events when forward-pruning same-document entries] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-skip-current-on-truncate.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-skip-current-on-truncate.html.ini index e06d5e8..494cb739 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-skip-current-on-truncate.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/per-entry-events/dispose-skip-current-on-truncate.html.ini
@@ -1,3 +1,6 @@ [dispose-skip-current-on-truncate.html] + expected: + if product == "chrome": OK + ERROR [Removing a currentEntry from the joint session history shouldn't dispose it] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/after-transition-push.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/after-transition-push.html.ini new file mode 100644 index 0000000..b048227 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/after-transition-push.html.ini
@@ -0,0 +1,4 @@ +[after-transition-push.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/after-transition-reload.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/after-transition-reload.html.ini new file mode 100644 index 0000000..3ddd39e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/after-transition-reload.html.ini
@@ -0,0 +1,4 @@ +[after-transition-reload.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/after-transition-replace.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/after-transition-replace.html.ini new file mode 100644 index 0000000..47de61fc --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/after-transition-replace.html.ini
@@ -0,0 +1,4 @@ +[after-transition-replace.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/manual-scroll-fragment-does-not-exist.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/manual-scroll-fragment-does-not-exist.html.ini new file mode 100644 index 0000000..3e456fa --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/manual-scroll-fragment-does-not-exist.html.ini
@@ -0,0 +1,5 @@ +[manual-scroll-fragment-does-not-exist.html] + expected: + if (product == "content_shell") and (os == "linux") and (flag_specific == "disable-site-isolation-trials"): [ERROR, CRASH] + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/manual-scroll-push.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/manual-scroll-push.html.ini new file mode 100644 index 0000000..e5a5651b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/manual-scroll-push.html.ini
@@ -0,0 +1,4 @@ +[manual-scroll-push.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/manual-scroll-reload.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/manual-scroll-reload.html.ini new file mode 100644 index 0000000..d23dfff --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/manual-scroll-reload.html.ini
@@ -0,0 +1,4 @@ +[manual-scroll-reload.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/manual-scroll-replace.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/manual-scroll-replace.html.ini new file mode 100644 index 0000000..c424e68b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/manual-scroll-replace.html.ini
@@ -0,0 +1,4 @@ +[manual-scroll-replace.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/scroll-on-synthetic-event.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/scroll-on-synthetic-event.html.ini new file mode 100644 index 0000000..d5d44fb --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/scroll-on-synthetic-event.html.ini
@@ -0,0 +1,4 @@ +[scroll-on-synthetic-event.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/scroll-without-intercept.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/scroll-without-intercept.html.ini new file mode 100644 index 0000000..5f381183 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/scroll-behavior/scroll-without-intercept.html.ini
@@ -0,0 +1,4 @@ +[scroll-without-intercept.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/state/history-pushState.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/state/history-pushState.html.ini new file mode 100644 index 0000000..a268f354 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/state/history-pushState.html.ini
@@ -0,0 +1,4 @@ +[history-pushState.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/state/history-replaceState.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/state/history-replaceState.html.ini new file mode 100644 index 0000000..47eb9db --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/state/history-replaceState.html.ini
@@ -0,0 +1,4 @@ +[history-replaceState.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/state/same-document-away-and-back-navigation-api.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/state/same-document-away-and-back-navigation-api.html.ini index 5b38149e..70cc531 100644 --- a/third_party/blink/web_tests/external/wpt/navigation-api/state/same-document-away-and-back-navigation-api.html.ini +++ b/third_party/blink/web_tests/external/wpt/navigation-api/state/same-document-away-and-back-navigation-api.html.ini
@@ -1,3 +1,6 @@ [same-document-away-and-back-navigation-api.html] + expected: + if product == "chrome": OK + ERROR [entry.getState() behavior after navigating away using the navigation API, then back] expected: FAIL
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/updateCurrentEntry-method/history-pushState.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/updateCurrentEntry-method/history-pushState.html.ini new file mode 100644 index 0000000..a268f354 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/updateCurrentEntry-method/history-pushState.html.ini
@@ -0,0 +1,4 @@ +[history-pushState.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-api/updateCurrentEntry-method/history-replaceState.html.ini b/third_party/blink/web_tests/external/wpt/navigation-api/updateCurrentEntry-method/history-replaceState.html.ini new file mode 100644 index 0000000..47eb9db --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-api/updateCurrentEntry-method/history-replaceState.html.ini
@@ -0,0 +1,4 @@ +[history-replaceState.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-timing/nav2-test-navigate-within-document.html.ini b/third_party/blink/web_tests/external/wpt/navigation-timing/nav2-test-navigate-within-document.html.ini new file mode 100644 index 0000000..dd7df80 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-timing/nav2-test-navigate-within-document.html.ini
@@ -0,0 +1,4 @@ +[nav2-test-navigate-within-document.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/navigation-timing/test-navigate-within-document.html.ini b/third_party/blink/web_tests/external/wpt/navigation-timing/test-navigate-within-document.html.ini new file mode 100644 index 0000000..2783e47 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/navigation-timing/test-navigate-within-document.html.ini
@@ -0,0 +1,4 @@ +[test-navigate-within-document.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K+1/gen/top.meta/unset/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K-1/gen/top.meta/unset/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.http-rp/unset/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/same-origin/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/a-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/a-tag.http.html.ini new file mode 100644 index 0000000..628c5f1c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/a-tag.http.html.ini
@@ -0,0 +1,4 @@ +[a-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/fetch.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/fetch.http.html.ini new file mode 100644 index 0000000..7b445ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/fetch.http.html.ini
@@ -0,0 +1,4 @@ +[fetch.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/iframe-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/iframe-tag.http.html.ini new file mode 100644 index 0000000..c4b44147 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/iframe-tag.http.html.ini
@@ -0,0 +1,4 @@ +[iframe-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/img-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/img-tag.http.html.ini new file mode 100644 index 0000000..de8b8bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/img-tag.http.html.ini
@@ -0,0 +1,4 @@ +[img-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/script-tag.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/script-tag.http.html.ini new file mode 100644 index 0000000..d829c9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/script-tag.http.html.ini
@@ -0,0 +1,4 @@ +[script-tag.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/sharedworker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/sharedworker-classic.http.html.ini new file mode 100644 index 0000000..8685f14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/sharedworker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[sharedworker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/worker-classic.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/worker-classic.http.html.ini new file mode 100644 index 0000000..43ad990d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/worker-classic.http.html.ini
@@ -0,0 +1,4 @@ +[worker-classic.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/worker-module.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/worker-module.http.html.ini new file mode 100644 index 0000000..6cc87a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/worker-module.http.html.ini
@@ -0,0 +1,4 @@ +[worker-module.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/xhr.http.html.ini b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/xhr.http.html.ini new file mode 100644 index 0000000..77af235 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/referrer-policy/4K/gen/top.meta/unset/xhr.http.html.ini
@@ -0,0 +1,4 @@ +[xhr.http.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/scroll-to-text-fragment/same-document-tests.html.ini b/third_party/blink/web_tests/external/wpt/scroll-to-text-fragment/same-document-tests.html.ini new file mode 100644 index 0000000..12169178 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/scroll-to-text-fragment/same-document-tests.html.ini
@@ -0,0 +1,4 @@ +[same-document-tests.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/service-workers/service-worker/unregister-immediately-during-extendable-events.https.html.ini b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/unregister-immediately-during-extendable-events.https.html.ini index 79345ba..538577a80 100644 --- a/third_party/blink/web_tests/external/wpt/service-workers/service-worker/unregister-immediately-during-extendable-events.https.html.ini +++ b/third_party/blink/web_tests/external/wpt/service-workers/service-worker/unregister-immediately-during-extendable-events.https.html.ini
@@ -1,8 +1,10 @@ [unregister-immediately-during-extendable-events.https.html] expected: - if (product == "content_shell") and (os == "linux") and (flag_specific == ""): OK + if (product == "content_shell") and (os == "linux") and (flag_specific == "disable-site-isolation-trials"): [OK, TIMEOUT] + if (product == "content_shell") and (os == "win") and (port == "win11"): [OK, TIMEOUT] TIMEOUT [Clear-Site-Data must fail pending subresource fetch events.] expected: - if (product == "content_shell") and (os == "linux") and (flag_specific == ""): FAIL + if (product == "content_shell") and (os == "win") and (port == "win11"): FAIL + if (product == "content_shell") and (os == "linux"): FAIL TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/shadow-dom/scroll-to-the-fragment-in-shadow-tree.html.ini b/third_party/blink/web_tests/external/wpt/shadow-dom/scroll-to-the-fragment-in-shadow-tree.html.ini new file mode 100644 index 0000000..19164c4 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/shadow-dom/scroll-to-the-fragment-in-shadow-tree.html.ini
@@ -0,0 +1,4 @@ +[scroll-to-the-fragment-in-shadow-tree.html] + expected: + if product == "chrome": OK + ERROR
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/workers-in-cross-origin-iframe.html.ini b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/workers-in-cross-origin-iframe.html.ini new file mode 100644 index 0000000..bc3a810d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/workers-in-cross-origin-iframe.html.ini
@@ -0,0 +1,6 @@ +[workers-in-cross-origin-iframe.html] + expected: + if product == "chrome": TIMEOUT + [Dedicated workers in cross-origin iframe should be loaded after activation] + expected: + if product == "chrome": TIMEOUT
diff --git a/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/README.md b/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/README.md index 31a32b8..e3636a2 100644 --- a/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/README.md +++ b/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/README.md
@@ -1,4 +1,4 @@ -# requestStorageAccessForOrigin Tests -These tests are tentative. They are based on a proposed requestStorageAccessForOrigin extension to the Storage Access API which can be read about [in the explainer](https://github.com/privacycg/requestStorageAccessForOrigin). +# requestStorageAccessFor Tests +These tests are tentative. They are based on a proposed requestStorageAccessFor extension to the Storage Access API which can be read about [in the explainer](https://github.com/privacycg/requestStorageAccessForOrigin). Note that the spec is in progress, and available [rendered](https://privacycg.github.io/requestStorageAccessForOrigin/) and [in bikeshed source](https://github.com/privacycg/requestStorageAccessForOrigin/blob/main/index.bs).
diff --git a/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/requestStorageAccessFor-insecure.sub.window.js b/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/requestStorageAccessFor-insecure.sub.window.js new file mode 100644 index 0000000..18d752f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/requestStorageAccessFor-insecure.sub.window.js
@@ -0,0 +1,109 @@ +// META: script=/storage-access-api/helpers.js +// META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js +'use strict'; + +// Note that this file follows the pattern in: +// storage-access-api/requestStorageAccess.sub.window.js +// +// Some tests are run at the top-level, and an iframe is added to validate API +// behavior in that context. + +// Prefix each test case with an indicator so we know what context they are run +// in if they are used in multiple iframes. +let testPrefix = 'insecure-context'; + +// Keep track of if we run these tests in a nested context, we don't want to +// recurse forever. +let topLevelDocument = true; + +// The query string allows derivation of test conditions, like whether the tests +// are running in a top-level context. +const queryParams = window.location.search.substring(1).split('&'); +queryParams.forEach((param) => { + if (param.toLowerCase() == 'rootdocument=false') { + topLevelDocument = false; + } else if (param.split('=')[0].toLowerCase() == 'testcase') { + testPrefix = param.split('=')[1]; + } +}); + +// TODO(crbug.com/1410556): when/if requestStorageAccessFor is standardized, +// we should consider upstreaming these helpers. +function RunRequestStorageAccessForInDetachedFrame(site) { + const nestedFrame = document.createElement('iframe'); + document.body.append(nestedFrame); + const inner_doc = nestedFrame.contentDocument; + nestedFrame.remove(); + return inner_doc.requestStorageAccessFor(site); +} + +function RunRequestStorageAccessForViaDomParser(site) { + const parser = new DOMParser(); + const doc = parser.parseFromString('<html></html>', 'text/html'); + return doc.requestStorageAccessFor(site); +} + +// Common tests to run in all frames. +test( + () => { + assert_not_equals(document.requestStorageAccessFor, undefined); + }, + '[' + testPrefix + + '] document.requestStorageAccessFor() should be supported on the document interface'); + +if (topLevelDocument) { + promise_test( + t => { + return promise_rejects_dom(t, 'NotAllowedError', + document.requestStorageAccessFor('https://test.com'), + 'document.requestStorageAccessFor() call without user gesture'); + }, + '[' + testPrefix + + '] document.requestStorageAccessFor() should be rejected by default with no user gesture'); + + promise_test(async t => { + const description = + 'document.requestStorageAccessFor() call in a detached frame'; + // Can't use promise_rejects_dom here because the exception is from the wrong global. + return RunRequestStorageAccessForInDetachedFrame('https://foo.com') + .then(t.unreached_func('Should have rejected: ' + description)) + .catch((e) => { + assert_equals(e.name, 'InvalidStateError', description); + }); + }, '[non-fully-active] document.requestStorageAccessFor() should not resolve when run in a detached frame'); + + promise_test(async t => { + const description = + 'document.requestStorageAccessFor() in a detached DOMParser result'; + return RunRequestStorageAccessForViaDomParser('https://foo.com') + .then(t.unreached_func('Should have rejected: ' + description)) + .catch((e) => { + assert_equals(e.name, 'InvalidStateError', description); + }); + }, '[non-fully-active] document.requestStorageAccessFor() should not resolve when run in a detached DOMParser document'); + + // Create a test with a single-child same-origin iframe. + // This will validate that calls to requestStorageAccessFor are rejected + // in non-top-level contexts. + RunTestsInIFrame( + './resources/requestStorageAccessFor-iframe.html?testCase=frame-on-insecure-page&rootdocument=false'); + + promise_test( + async t => { + await RunCallbackWithGesture( + () => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessFor(document.location.origin), 'document.requestStorageAccessFor() call in insecure context')); + }, + '[' + testPrefix + + '] document.requestStorageAccessFor() should be rejected when called in an insecure context'); + +} else { + promise_test( + async t => { + await RunCallbackWithGesture( + () => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessFor(document.location.origin), + 'document.requestStorageAccessFor() call in a non-top-level context')); + }, + '[' + testPrefix + + '] document.requestStorageAccessFor() should be rejected when called in an iframe'); +}
diff --git a/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/requestStorageAccessFor.sub.https.window-expected.txt b/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/requestStorageAccessFor.sub.https.window-expected.txt new file mode 100644 index 0000000..3fbec3e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/requestStorageAccessFor.sub.https.window-expected.txt
@@ -0,0 +1,17 @@ +This is a testharness.js-based test. +PASS [top-level-context] document.requestStorageAccessFor() should be supported on the document interface +PASS [top-level-context] document.requestStorageAccessFor() should be rejected when called with no argument +PASS [top-level-context] document.requestStorageAccessFor() should be rejected by default with no user gesture +PASS [non-fully-active] document.requestStorageAccessFor() should not resolve when run in a detached frame +PASS [non-fully-active] document.requestStorageAccessFor() should not resolve when run in a detached DOMParser document +FAIL [top-level-context] document.requestStorageAccessFor() should be resolved without a user gesture with an existing permission promise_test: Unhandled rejection with value: object "NotAllowedError: requestStorageAccessFor not allowed" +PASS [top-level-context] document.requestStorageAccess() should be resolved without a user gesture after a successful requestStorageAccessFor() call +PASS [top-level-context] document.requestStorageAccessFor() should be resolved when called properly with a user gesture and the same site +PASS [top-level-context] document.requestStorageAccessFor() should be rejected when called with an invalid site +PASS [top-level-context] document.requestStorageAccessFor() should be rejected when called with an opaque origin +PASS [same-origin-frame] document.requestStorageAccessFor() should be supported on the document interface +PASS [same-origin-frame] document.requestStorageAccessFor() should be rejected when called with no argument +PASS [same-origin-frame] document.requestStorageAccessFor() should be rejected when called in an iframe +PASS [request-storage-access-integration] document.requestStorageAccess() should be resolved without a user gesture with an existing top-level-storage-access permission +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/requestStorageAccessFor.sub.https.window.js b/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/requestStorageAccessFor.sub.https.window.js new file mode 100644 index 0000000..9e16740c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/requestStorageAccessFor.sub.https.window.js
@@ -0,0 +1,178 @@ +// META: script=/storage-access-api/helpers.js +// META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js +'use strict'; + +// Note that this file follows the pattern in: +// storage-access-api/requestStorageAccess.sub.window.js +// +// Some tests are run at the top-level, and an iframe is added to validate API +// behavior in that context. + +// Prefix each test case with an indicator so we know what context they are run +// in if they are used in multiple iframes. +let testPrefix = 'top-level-context'; + +// Keep track of if we run these tests in a nested context, we don't want to +// recurse forever. +let topLevelDocument = true; + +// The query string allows derivation of test conditions, like whether the tests +// are running in a top-level context. +const queryParams = window.location.search.substring(1).split('&'); +queryParams.forEach((param) => { + if (param.toLowerCase() == 'rootdocument=false') { + topLevelDocument = false; + } else if (param.split('=')[0].toLowerCase() == 'testcase') { + testPrefix = param.split('=')[1]; + } +}); + +const requestedOrigin = 'https://foo.com'; + +// TODO(crbug.com/1351540): when/if requestStorageAccessFor is standardized, +// upstream with the Storage Access API helpers file. +function RunRequestStorageAccessForInDetachedFrame(origin) { + const nestedFrame = document.createElement('iframe'); + document.body.append(nestedFrame); + const inner_doc = nestedFrame.contentDocument; + nestedFrame.remove(); + return inner_doc.requestStorageAccessFor(origin); +} + +function RunRequestStorageAccessForViaDomParser(origin) { + const parser = new DOMParser(); + const doc = parser.parseFromString('<html></html>', 'text/html'); + return doc.requestStorageAccessFor(origin); +} + +// Common tests to run in all frames. +test( + () => { + assert_not_equals(document.requestStorageAccessFor, undefined); + }, + '[' + testPrefix + + '] document.requestStorageAccessFor() should be supported on the document interface'); + +// Promise tests should all start with the feature in "prompt" state. +promise_setup(async () => { + await test_driver.set_permission( + { name: 'top-level-storage-access', requestedOrigin }, 'prompt'); + await test_driver.set_permission({name: 'storage-access'}, 'prompt'); +}); + +promise_test( + t => { + return promise_rejects_js(t, TypeError, + document.requestStorageAccessFor(), + 'document.requestStorageAccessFor() call without origin argument'); + }, + '[' + testPrefix + + '] document.requestStorageAccessFor() should be rejected when called with no argument'); + +if (topLevelDocument) { + promise_test( + t => { + return promise_rejects_dom(t, 'NotAllowedError', + document.requestStorageAccessFor(requestedOrigin), + 'document.requestStorageAccessFor() call without user gesture'); + }, + '[' + testPrefix + + '] document.requestStorageAccessFor() should be rejected by default with no user gesture'); + + promise_test(async t => { + const description = + 'document.requestStorageAccessFor() call in a detached frame'; + // Can't use promise_rejects_dom here because the exception is from the wrong global. + return RunRequestStorageAccessForInDetachedFrame(requestedOrigin) + .then(t.unreached_func('Should have rejected: ' + description)) + .catch((e) => { + assert_equals(e.name, 'InvalidStateError', description); + }); + }, '[non-fully-active] document.requestStorageAccessFor() should not resolve when run in a detached frame'); + + promise_test(async t => { + const description = + 'document.requestStorageAccessFor() in a detached DOMParser result'; + return RunRequestStorageAccessForViaDomParser(requestedOrigin) + .then(t.unreached_func('Should have rejected: ' + description)) + .catch((e) => { + assert_equals(e.name, 'InvalidStateError', description); + }); + }, '[non-fully-active] document.requestStorageAccessFor() should not resolve when run in a detached DOMParser document'); + + promise_test( + async t => { + await test_driver.set_permission( + { name: 'top-level-storage-access', requestedOrigin }, 'granted'); + + await document.requestStorageAccessFor(requestedOrigin); + }, + '[' + testPrefix + + '] document.requestStorageAccessFor() should be resolved without a user gesture with an existing permission'); + + promise_test( + async t => { + const altOrigin = 'https://{{hosts[alt][www]}}:{{ports[https][0]}}'; + t.add_cleanup(async () => { + await test_driver.set_permission( + {name: 'top-level-storage-access', requestedOrigin: altOrigin}, + 'prompt'); + await test_driver.set_permission({name: 'storage-access'}, 'prompt'); + }); + await test_driver.set_permission( + {name: 'top-level-storage-access', requestedOrigin: altOrigin}, + 'granted'); + + await RunCallbackWithGesture(() => { + document.requestStorageAccessFor(altOrigin).then(() => { + RunTestsInIFrame( + 'https://{{hosts[alt][www]}}:{{ports[https][0]}}/top-level-storage-access-api/tentative/resources/requestStorageAccess-integration-iframe.https.html'); + }); + }); + }, + '[' + testPrefix + + '] document.requestStorageAccess() should be resolved without a user gesture after a successful requestStorageAccessFor() call'); + + // Create a test with a single-child same-origin iframe. + // This will validate that calls to requestStorageAccessFor are rejected + // in non-top-level contexts. + RunTestsInIFrame( + './resources/requestStorageAccessFor-iframe.https.html?testCase=same-origin-frame&rootdocument=false'); + + promise_test( + async t => { + await RunCallbackWithGesture( + () => document.requestStorageAccessFor(document.location.origin)); + }, + '[' + testPrefix + + '] document.requestStorageAccessFor() should be resolved when called properly with a user gesture and the same site'); + + promise_test( + async t => { + await RunCallbackWithGesture( + () => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessFor('bogus-url'), + 'document.requestStorageAccessFor() call with bogus URL')); + }, + '[' + testPrefix + + '] document.requestStorageAccessFor() should be rejected when called with an invalid site'); + + promise_test( + async t => { + await RunCallbackWithGesture( + () => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessFor('data:,Hello%2C%20World%21'), + 'document.requestStorageAccessFor() call with data URL')); + }, + '[' + testPrefix + + '] document.requestStorageAccessFor() should be rejected when called with an opaque origin'); + +} else { + promise_test( + async t => { + await RunCallbackWithGesture( + () => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessFor(document.location.origin), + 'document.requestStorageAccessFor() call in a non-top-level context')); + }, + '[' + testPrefix + + '] document.requestStorageAccessFor() should be rejected when called in an iframe'); +}
diff --git a/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/requestStorageAccessForOrigin-insecure.sub.window.js b/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/requestStorageAccessForOrigin-insecure.sub.window.js deleted file mode 100644 index 8cf72b8..0000000 --- a/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/requestStorageAccessForOrigin-insecure.sub.window.js +++ /dev/null
@@ -1,109 +0,0 @@ -// META: script=/storage-access-api/helpers.js -// META: script=/resources/testdriver.js -// META: script=/resources/testdriver-vendor.js -'use strict'; - -// Note that this file follows the pattern in: -// storage-access-api/requestStorageAccess.sub.window.js -// -// Some tests are run at the top-level, and an iframe is added to validate API -// behavior in that context. - -// Prefix each test case with an indicator so we know what context they are run -// in if they are used in multiple iframes. -let testPrefix = 'insecure-context'; - -// Keep track of if we run these tests in a nested context, we don't want to -// recurse forever. -let topLevelDocument = true; - -// The query string allows derivation of test conditions, like whether the tests -// are running in a top-level context. -const queryParams = window.location.search.substring(1).split('&'); -queryParams.forEach((param) => { - if (param.toLowerCase() == 'rootdocument=false') { - topLevelDocument = false; - } else if (param.split('=')[0].toLowerCase() == 'testcase') { - testPrefix = param.split('=')[1]; - } -}); - -// TODO(crbug.com/1410556): when/if requestStorageAccessForOrigin is standardized, -// we should consider upstreaming these helpers. -function RunRequestStorageAccessForOriginInDetachedFrame(site) { - const nestedFrame = document.createElement('iframe'); - document.body.append(nestedFrame); - const inner_doc = nestedFrame.contentDocument; - nestedFrame.remove(); - return inner_doc.requestStorageAccessForOrigin(site); -} - -function RunRequestStorageAccessForOriginViaDomParser(site) { - const parser = new DOMParser(); - const doc = parser.parseFromString('<html></html>', 'text/html'); - return doc.requestStorageAccessForOrigin(site); -} - -// Common tests to run in all frames. -test( - () => { - assert_not_equals(document.requestStorageAccessForOrigin, undefined); - }, - '[' + testPrefix + - '] document.requestStorageAccessForOrigin() should be supported on the document interface'); - -if (topLevelDocument) { - promise_test( - t => { - return promise_rejects_dom(t, 'NotAllowedError', - document.requestStorageAccessForOrigin('https://test.com'), - 'document.requestStorageAccessForOrigin() call without user gesture'); - }, - '[' + testPrefix + - '] document.requestStorageAccessForOrigin() should be rejected by default with no user gesture'); - - promise_test(async t => { - const description = - 'document.requestStorageAccessForOrigin() call in a detached frame'; - // Can't use promise_rejects_dom here because the exception is from the wrong global. - return RunRequestStorageAccessForOriginInDetachedFrame('https://foo.com') - .then(t.unreached_func('Should have rejected: ' + description)) - .catch((e) => { - assert_equals(e.name, 'InvalidStateError', description); - }); - }, '[non-fully-active] document.requestStorageAccessForOrigin() should not resolve when run in a detached frame'); - - promise_test(async t => { - const description = - 'document.requestStorageAccessForOrigin() in a detached DOMParser result'; - return RunRequestStorageAccessForOriginViaDomParser('https://foo.com') - .then(t.unreached_func('Should have rejected: ' + description)) - .catch((e) => { - assert_equals(e.name, 'InvalidStateError', description); - }); - }, '[non-fully-active] document.requestStorageAccessForOrigin() should not resolve when run in a detached DOMParser document'); - - // Create a test with a single-child same-origin iframe. - // This will validate that calls to requestStorageAccessForOrigin are rejected - // in non-top-level contexts. - RunTestsInIFrame( - './resources/requestStorageAccessForOrigin-iframe.html?testCase=frame-on-insecure-page&rootdocument=false'); - - promise_test( - async t => { - await RunCallbackWithGesture( - () => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessForOrigin(document.location.origin), 'document.requestStorageAccessForOrigin() call in insecure context')); - }, - '[' + testPrefix + - '] document.requestStorageAccessForOrigin() should be rejected when called in an insecure context'); - -} else { - promise_test( - async t => { - await RunCallbackWithGesture( - () => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessForOrigin(document.location.origin), - 'document.requestStorageAccessForOrigin() call in a non-top-level context')); - }, - '[' + testPrefix + - '] document.requestStorageAccessForOrigin() should be rejected when called in an iframe'); -}
diff --git a/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.https.window-expected.txt b/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.https.window-expected.txt deleted file mode 100644 index fbc4eb5..0000000 --- a/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.https.window-expected.txt +++ /dev/null
@@ -1,17 +0,0 @@ -This is a testharness.js-based test. -PASS [top-level-context] document.requestStorageAccessForOrigin() should be supported on the document interface -PASS [top-level-context] document.requestStorageAccessForOrigin() should be rejected when called with no argument -PASS [top-level-context] document.requestStorageAccessForOrigin() should be rejected by default with no user gesture -PASS [non-fully-active] document.requestStorageAccessForOrigin() should not resolve when run in a detached frame -PASS [non-fully-active] document.requestStorageAccessForOrigin() should not resolve when run in a detached DOMParser document -FAIL [top-level-context] document.requestStorageAccessForOrigin() should be resolved without a user gesture with an existing permission promise_test: Unhandled rejection with value: object "NotAllowedError: requestStorageAccessForOrigin not allowed" -PASS [top-level-context] document.requestStorageAccess() should be resolved without a user gesture after a successful requestStorageAccessForOrigin() call -PASS [top-level-context] document.requestStorageAccessForOrigin() should be resolved when called properly with a user gesture and the same site -PASS [top-level-context] document.requestStorageAccessForOrigin() should be rejected when called with an invalid site -PASS [top-level-context] document.requestStorageAccessForOrigin() should be rejected when called with an opaque origin -PASS [same-origin-frame] document.requestStorageAccessForOrigin() should be supported on the document interface -PASS [same-origin-frame] document.requestStorageAccessForOrigin() should be rejected when called with no argument -PASS [same-origin-frame] document.requestStorageAccessForOrigin() should be rejected when called in an iframe -PASS [request-storage-access-integration] document.requestStorageAccess() should be resolved without a user gesture with an existing top-level-storage-access permission -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.https.window.js b/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.https.window.js deleted file mode 100644 index 6fff9e9..0000000 --- a/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.https.window.js +++ /dev/null
@@ -1,178 +0,0 @@ -// META: script=/storage-access-api/helpers.js -// META: script=/resources/testdriver.js -// META: script=/resources/testdriver-vendor.js -'use strict'; - -// Note that this file follows the pattern in: -// storage-access-api/requestStorageAccess.sub.window.js -// -// Some tests are run at the top-level, and an iframe is added to validate API -// behavior in that context. - -// Prefix each test case with an indicator so we know what context they are run -// in if they are used in multiple iframes. -let testPrefix = 'top-level-context'; - -// Keep track of if we run these tests in a nested context, we don't want to -// recurse forever. -let topLevelDocument = true; - -// The query string allows derivation of test conditions, like whether the tests -// are running in a top-level context. -const queryParams = window.location.search.substring(1).split('&'); -queryParams.forEach((param) => { - if (param.toLowerCase() == 'rootdocument=false') { - topLevelDocument = false; - } else if (param.split('=')[0].toLowerCase() == 'testcase') { - testPrefix = param.split('=')[1]; - } -}); - -const requestedOrigin = 'https://foo.com'; - -// TODO(crbug.com/1351540): when/if requestStorageAccessForOrigin is standardized, -// upstream with the Storage Access API helpers file. -function RunRequestStorageAccessForOriginInDetachedFrame(site) { - const nestedFrame = document.createElement('iframe'); - document.body.append(nestedFrame); - const inner_doc = nestedFrame.contentDocument; - nestedFrame.remove(); - return inner_doc.requestStorageAccessForOrigin(site); -} - -function RunRequestStorageAccessForOriginViaDomParser(site) { - const parser = new DOMParser(); - const doc = parser.parseFromString('<html></html>', 'text/html'); - return doc.requestStorageAccessForOrigin(site); -} - -// Common tests to run in all frames. -test( - () => { - assert_not_equals(document.requestStorageAccessForOrigin, undefined); - }, - '[' + testPrefix + - '] document.requestStorageAccessForOrigin() should be supported on the document interface'); - -// Promise tests should all start with the feature in "prompt" state. -promise_setup(async () => { - await test_driver.set_permission( - { name: 'top-level-storage-access', requestedOrigin }, 'prompt'); - await test_driver.set_permission({name: 'storage-access'}, 'prompt'); -}); - -promise_test( - t => { - return promise_rejects_js(t, TypeError, - document.requestStorageAccessForOrigin(), - 'document.requestStorageAccessForOrigin() call without origin argument'); - }, - '[' + testPrefix + - '] document.requestStorageAccessForOrigin() should be rejected when called with no argument'); - -if (topLevelDocument) { - promise_test( - t => { - return promise_rejects_dom(t, 'NotAllowedError', - document.requestStorageAccessForOrigin(requestedOrigin), - 'document.requestStorageAccessForOrigin() call without user gesture'); - }, - '[' + testPrefix + - '] document.requestStorageAccessForOrigin() should be rejected by default with no user gesture'); - - promise_test(async t => { - const description = - 'document.requestStorageAccessForOrigin() call in a detached frame'; - // Can't use promise_rejects_dom here because the exception is from the wrong global. - return RunRequestStorageAccessForOriginInDetachedFrame(requestedOrigin) - .then(t.unreached_func('Should have rejected: ' + description)) - .catch((e) => { - assert_equals(e.name, 'InvalidStateError', description); - }); - }, '[non-fully-active] document.requestStorageAccessForOrigin() should not resolve when run in a detached frame'); - - promise_test(async t => { - const description = - 'document.requestStorageAccessForOrigin() in a detached DOMParser result'; - return RunRequestStorageAccessForOriginViaDomParser(requestedOrigin) - .then(t.unreached_func('Should have rejected: ' + description)) - .catch((e) => { - assert_equals(e.name, 'InvalidStateError', description); - }); - }, '[non-fully-active] document.requestStorageAccessForOrigin() should not resolve when run in a detached DOMParser document'); - - promise_test( - async t => { - await test_driver.set_permission( - { name: 'top-level-storage-access', requestedOrigin }, 'granted'); - - await document.requestStorageAccessForOrigin(requestedOrigin); - }, - '[' + testPrefix + - '] document.requestStorageAccessForOrigin() should be resolved without a user gesture with an existing permission'); - - promise_test( - async t => { - const altOrigin = 'https://{{hosts[alt][www]}}:{{ports[https][0]}}'; - t.add_cleanup(async () => { - await test_driver.set_permission( - {name: 'top-level-storage-access', requestedOrigin: altOrigin}, - 'prompt'); - await test_driver.set_permission({name: 'storage-access'}, 'prompt'); - }); - await test_driver.set_permission( - {name: 'top-level-storage-access', requestedOrigin: altOrigin}, - 'granted'); - - await RunCallbackWithGesture(() => { - document.requestStorageAccessForOrigin(altOrigin).then(() => { - RunTestsInIFrame( - 'https://{{hosts[alt][www]}}:{{ports[https][0]}}/top-level-storage-access-api/tentative/resources/requestStorageAccess-integration-iframe.https.html'); - }); - }); - }, - '[' + testPrefix + - '] document.requestStorageAccess() should be resolved without a user gesture after a successful requestStorageAccessForOrigin() call'); - - // Create a test with a single-child same-origin iframe. - // This will validate that calls to requestStorageAccessForOrigin are rejected - // in non-top-level contexts. - RunTestsInIFrame( - './resources/requestStorageAccessForOrigin-iframe.https.html?testCase=same-origin-frame&rootdocument=false'); - - promise_test( - async t => { - await RunCallbackWithGesture( - () => document.requestStorageAccessForOrigin(document.location.origin)); - }, - '[' + testPrefix + - '] document.requestStorageAccessForOrigin() should be resolved when called properly with a user gesture and the same site'); - - promise_test( - async t => { - await RunCallbackWithGesture( - () => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessForOrigin('bogus-url'), - 'document.requestStorageAccessForOrigin() call with bogus URL')); - }, - '[' + testPrefix + - '] document.requestStorageAccessForOrigin() should be rejected when called with an invalid site'); - - promise_test( - async t => { - await RunCallbackWithGesture( - () => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessForOrigin('data:,Hello%2C%20World%21'), - 'document.requestStorageAccessForOrigin() call with data URL')); - }, - '[' + testPrefix + - '] document.requestStorageAccessForOrigin() should be rejected when called with an opaque origin'); - -} else { - promise_test( - async t => { - await RunCallbackWithGesture( - () => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessForOrigin(document.location.origin), - 'document.requestStorageAccessForOrigin() call in a non-top-level context')); - }, - '[' + testPrefix + - '] document.requestStorageAccessForOrigin() should be rejected when called in an iframe'); -}
diff --git a/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/resources/requestStorageAccessFor-iframe.html b/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/resources/requestStorageAccessFor-iframe.html new file mode 100644 index 0000000..050196d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/resources/requestStorageAccessFor-iframe.html
@@ -0,0 +1,9 @@ +<!doctype html> +<meta charset=utf-8> + +<script src="/storage-access-api/helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<div id=log></div> +<script src="../requestStorageAccessFor-insecure.sub.window.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/resources/requestStorageAccessFor-iframe.https.html b/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/resources/requestStorageAccessFor-iframe.https.html new file mode 100644 index 0000000..14da63b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/resources/requestStorageAccessFor-iframe.https.html
@@ -0,0 +1,9 @@ +<!doctype html> +<meta charset=utf-8> + +<script src="/storage-access-api/helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<div id=log></div> +<script src="../requestStorageAccessFor.sub.https.window.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/resources/requestStorageAccessForOrigin-iframe.html b/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/resources/requestStorageAccessForOrigin-iframe.html deleted file mode 100644 index 43d16705..0000000 --- a/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/resources/requestStorageAccessForOrigin-iframe.html +++ /dev/null
@@ -1,9 +0,0 @@ -<!doctype html> -<meta charset=utf-8> - -<script src="/storage-access-api/helpers.js"></script> -<script src="/resources/testharness.js"></script> -<script src="/resources/testdriver.js"></script> -<script src="/resources/testdriver-vendor.js"></script> -<div id=log></div> -<script src="../requestStorageAccessForOrigin-insecure.sub.window.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/resources/requestStorageAccessForOrigin-iframe.https.html b/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/resources/requestStorageAccessForOrigin-iframe.https.html deleted file mode 100644 index db03b25..0000000 --- a/third_party/blink/web_tests/external/wpt/top-level-storage-access-api/tentative/resources/requestStorageAccessForOrigin-iframe.https.html +++ /dev/null
@@ -1,9 +0,0 @@ -<!doctype html> -<meta charset=utf-8> - -<script src="/storage-access-api/helpers.js"></script> -<script src="/resources/testharness.js"></script> -<script src="/resources/testdriver.js"></script> -<script src="/resources/testdriver-vendor.js"></script> -<div id=log></div> -<script src="../requestStorageAccessForOrigin.sub.https.window.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/finished.html.ini b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/finished.html.ini new file mode 100644 index 0000000..aaa39fe --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/finished.html.ini
@@ -0,0 +1,4 @@ +[finished.html] + [Test finished promise changes for animation duration changes] + expected: + if (product == "content_shell") and (os == "win") and (port == "win10.20h2"): FAIL
diff --git a/third_party/blink/web_tests/external/wpt/webmessaging/without-ports/021.html.ini b/third_party/blink/web_tests/external/wpt/webmessaging/without-ports/021.html.ini new file mode 100644 index 0000000..a93b3d7 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webmessaging/without-ports/021.html.ini
@@ -0,0 +1,4 @@ +[021.html] + [cross-origin test] + expected: + if (product == "content_shell") and (os == "mac"): FAIL
diff --git a/third_party/blink/web_tests/fast/text/text-wrap-balance-layout.html b/third_party/blink/web_tests/fast/text/text-wrap-balance-layout.html new file mode 100644 index 0000000..694296f --- /dev/null +++ b/third_party/blink/web_tests/fast/text/text-wrap-balance-layout.html
@@ -0,0 +1,32 @@ +<!DOCTYPE html> +<style> +.container { + font-size: 20px; + width: 60ch; + border: 1px solid blue; + text-wrap: balance; +} +</style> +<div class="container"> + Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Mauris ut elit lacus, non convallis odio. + Integer facilisis, dolor quis porttitor auctor, + nisi tellus aliquet urna, a dignissim orci nisl in nunc. + Vivamus elit risus, sagittis et lacinia quis, blandit ac elit. +</div> +<div class="container" style="width: 50ch"> + Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Mauris ut elit lacus, non convallis odio. + Integer facilisis, dolor quis porttitor auctor, + nisi tellus aliquet urna, a dignissim orci nisl in nunc. +</div> +<div class="container" style="width: 25ch"> + Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Mauris ut elit lacus, non convallis odio. +</div> +<div class="container" style="width: 17ch"> + Lorem ipsum dolor sit amet, consectetur adipiscing elit. +</div> +<div class="container" style="width: 40ch"> + Lorem ipsum dolor sit amet, consectetur adipiscing elit. +</div>
diff --git a/third_party/blink/web_tests/http/tests/devtools/application-panel/resources-panel-iframe-idb-expected.txt b/third_party/blink/web_tests/http/tests/devtools/application-panel/resources-panel-iframe-idb-expected.txt index b681ed8..d5d5f0a 100644 --- a/third_party/blink/web_tests/http/tests/devtools/application-panel/resources-panel-iframe-idb-expected.txt +++ b/third_party/blink/web_tests/http/tests/devtools/application-panel/resources-panel-iframe-idb-expected.txt
@@ -25,7 +25,7 @@ Cookies http://127.0.0.1:8000 http://devtools.oopif.test:8000 - Trust Tokens + Private State Tokens Interest Groups Shared Storage http://127.0.0.1:8000 @@ -67,7 +67,7 @@ Cookies http://127.0.0.1:8000 http://devtools.oopif.test:8000 - Trust Tokens + Private State Tokens Interest Groups Shared Storage http://127.0.0.1:8000 @@ -110,7 +110,7 @@ Cookies http://127.0.0.1:8000 http://devtools.oopif.test:8000 - Trust Tokens + Private State Tokens Interest Groups Shared Storage http://127.0.0.1:8000
diff --git a/third_party/blink/web_tests/http/tests/devtools/application-panel/resources-panel-on-navigation-expected.txt b/third_party/blink/web_tests/http/tests/devtools/application-panel/resources-panel-on-navigation-expected.txt index 35fee3f..a6b1e99 100644 --- a/third_party/blink/web_tests/http/tests/devtools/application-panel/resources-panel-on-navigation-expected.txt +++ b/third_party/blink/web_tests/http/tests/devtools/application-panel/resources-panel-on-navigation-expected.txt
@@ -20,7 +20,7 @@ database-for-test Cookies http://127.0.0.1:8000 - Trust Tokens + Private State Tokens Interest Groups Shared Storage http://127.0.0.1:8000 @@ -58,7 +58,7 @@ Web SQL Cookies http://127.0.0.1:8000 - Trust Tokens + Private State Tokens Interest Groups Shared Storage http://127.0.0.1:8000
diff --git a/third_party/blink/web_tests/http/tests/devtools/application-panel/resources-panel-resource-preview-expected.txt b/third_party/blink/web_tests/http/tests/devtools/application-panel/resources-panel-resource-preview-expected.txt index 68dc66f..d3952ae 100644 --- a/third_party/blink/web_tests/http/tests/devtools/application-panel/resources-panel-resource-preview-expected.txt +++ b/third_party/blink/web_tests/http/tests/devtools/application-panel/resources-panel-resource-preview-expected.txt
@@ -18,7 +18,7 @@ Web SQL Cookies http://127.0.0.1:8000 - Trust Tokens + Private State Tokens Interest Groups Shared Storage http://127.0.0.1:8000 @@ -58,7 +58,7 @@ Web SQL Cookies http://127.0.0.1:8000 - Trust Tokens + Private State Tokens Interest Groups Shared Storage http://127.0.0.1:8000 @@ -98,7 +98,7 @@ Web SQL Cookies http://127.0.0.1:8000 - Trust Tokens + Private State Tokens Interest Groups Shared Storage http://127.0.0.1:8000 @@ -138,7 +138,7 @@ Web SQL Cookies http://127.0.0.1:8000 - Trust Tokens + Private State Tokens Interest Groups Shared Storage http://127.0.0.1:8000
diff --git a/third_party/blink/web_tests/http/tests/devtools/application-panel/resources-panel-selection-on-reload-expected.txt b/third_party/blink/web_tests/http/tests/devtools/application-panel/resources-panel-selection-on-reload-expected.txt index 7d010f7..b09e41c 100644 --- a/third_party/blink/web_tests/http/tests/devtools/application-panel/resources-panel-selection-on-reload-expected.txt +++ b/third_party/blink/web_tests/http/tests/devtools/application-panel/resources-panel-selection-on-reload-expected.txt
@@ -20,7 +20,7 @@ database-for-test Cookies http://127.0.0.1:8000 - Trust Tokens + Private State Tokens Interest Groups Shared Storage http://127.0.0.1:8000 @@ -59,7 +59,7 @@ Web SQL Cookies http://127.0.0.1:8000 - Trust Tokens + Private State Tokens Interest Groups Shared Storage http://127.0.0.1:8000
diff --git a/third_party/blink/web_tests/http/tests/devtools/application-panel/resources-panel-websql-expected.txt b/third_party/blink/web_tests/http/tests/devtools/application-panel/resources-panel-websql-expected.txt index 18799d9..4dd8b221 100644 --- a/third_party/blink/web_tests/http/tests/devtools/application-panel/resources-panel-websql-expected.txt +++ b/third_party/blink/web_tests/http/tests/devtools/application-panel/resources-panel-websql-expected.txt
@@ -18,7 +18,7 @@ Web SQL Cookies http://127.0.0.1:8000 - Trust Tokens + Private State Tokens Interest Groups Shared Storage http://127.0.0.1:8000 @@ -57,7 +57,7 @@ inspector-test-db (selected) Cookies http://127.0.0.1:8000 - Trust Tokens + Private State Tokens Interest Groups Shared Storage http://127.0.0.1:8000 @@ -96,7 +96,7 @@ table1 Cookies http://127.0.0.1:8000 - Trust Tokens + Private State Tokens Interest Groups Shared Storage http://127.0.0.1:8000
diff --git a/third_party/blink/web_tests/platform/linux/fast/text/text-wrap-balance-layout-expected.png b/third_party/blink/web_tests/platform/linux/fast/text/text-wrap-balance-layout-expected.png new file mode 100644 index 0000000..90279fdd --- /dev/null +++ b/third_party/blink/web_tests/platform/linux/fast/text/text-wrap-balance-layout-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/long-animation-frame/tentative/loaf-promise-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/long-animation-frame/tentative/loaf-promise-expected.txt deleted file mode 100644 index 0d17ec748..0000000 --- a/third_party/blink/web_tests/platform/mac-mac11-arm64/external/wpt/long-animation-frame/tentative/loaf-promise-expected.txt +++ /dev/null
@@ -1,7 +0,0 @@ -This is a testharness.js-based test. -PASS LoAF script: Promise.resolve resolve-promise, fetch -PASS LoAF script: Promise.resolve resolve-promise, Response.text -FAIL LoAF script: Promise.resolve resolve-promise, import promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of undefined (reading 'length')" -PASS LoAF script: Promise.reject reject-promise, -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/long-animation-frame/tentative/loaf-script-block-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/long-animation-frame/tentative/loaf-script-block-expected.txt deleted file mode 100644 index 1d06305..0000000 --- a/third_party/blink/web_tests/platform/mac-mac12-arm64/external/wpt/long-animation-frame/tentative/loaf-script-block-expected.txt +++ /dev/null
@@ -1,8 +0,0 @@ -This is a testharness.js-based test. -PASS LoAF script: http://web-platform.test:8001/long-animation-frame/tentative/loaf-script-block.html classic-script, -PASS LoAF script: http://web-platform.test:8001/long-animation-frame/tentative/loaf-script-block.html module-script, -FAIL LoAF script: http://web-platform.test:8001/long-animation-frame/tentative/resources/busy.js classic-script, promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of undefined (reading 'length')" -PASS LoAF script: http://web-platform.test:8001/long-animation-frame/tentative/resources/busy.js module-script, -FAIL LoAF script: http://web-platform.test:8001/long-animation-frame/tentative/resources/busy.js?import execute-script, promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of undefined (reading 'length')" -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/platform/mac/fast/text/text-wrap-balance-layout-expected.png b/third_party/blink/web_tests/platform/mac/fast/text/text-wrap-balance-layout-expected.png new file mode 100644 index 0000000..4dd391f --- /dev/null +++ b/third_party/blink/web_tests/platform/mac/fast/text/text-wrap-balance-layout-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/text/text-wrap-balance-layout-expected.png b/third_party/blink/web_tests/platform/win/fast/text/text-wrap-balance-layout-expected.png new file mode 100644 index 0000000..303a1c0 --- /dev/null +++ b/third_party/blink/web_tests/platform/win/fast/text/text-wrap-balance-layout-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt index ff3382f..587b0ff 100644 --- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt +++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -2011,7 +2011,7 @@ method releaseEvents method replaceChildren method requestStorageAccess - method requestStorageAccessForOrigin + method requestStorageAccessFor method startViewTransition method webkitCancelFullScreen method webkitExitFullscreen
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 5e231669..39707467f 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -3757,6 +3757,7 @@ <int value="50" label="Personalization"/> <int value="51" label="Bruschetta app"/> <int value="52" label="System Info"/> + <int value="53" label="Local image search"/> </enum> <enum name="AppListShowSource"> @@ -4929,6 +4930,46 @@ <int value="5" label="INSUFFICIENT_RESOURCES"/> </enum> +<enum name="ArcVmDataMigrationFailedPathType"> + <int value="0" label="Unknown absolute path"/> + <int value="1" label="Other (src)"/> + <int value="2" label="Other (dest)"/> + <int value="3" label="Other (src or dest)"/> + <int value="4" label="Under /data/media/0/Android/data (src)"/> + <int value="5" label="Under /data/media/0/Android/data (dest)"/> + <int value="6" label="Under /data/media/0/Android/data (src or dest)"/> + <int value="7" label="Under /data/media/0/Android/obb (src)"/> + <int value="8" label="Under /data/media/0/Android/obb (dest)"/> + <int value="9" label="Under /data/media/0/Android/obb (src or dest)"/> + <int value="10" + label="Under /data/media/0 except for Android/{data,obb} (src)"/> + <int value="11" + label="Under /data/media/0 except for Android/{data,obb} (dest)"/> + <int value="12" + label="Under /data/media/0 except for Android/{data,obb} (src or dest)"/> + <int value="13" label="Under /data/app (src)"/> + <int value="14" label="Under /data/app (dest)"/> + <int value="15" label="Under /data/app (src or dest)"/> + <int value="16" label="Under /data/data (src)"/> + <int value="17" label="Under /data/data (dest)"/> + <int value="18" label="Under /data/data (src or dest)"/> + <int value="19" label="Under /data/user/0 (src)"/> + <int value="20" label="Under /data/user/0 (dest)"/> + <int value="21" label="Under /data/user/0 (src or dest)"/> + <int value="22" label="Under /data/user_de/0 (src)"/> + <int value="23" label="Under /data/user_de/0 (dest)"/> + <int value="24" label="Under /data/user_de/0 (src or dest)"/> +</enum> + +<enum name="ArcVmDataMigrationFinishReason"> + <summary> + Defines the reason why ARCVM /data migration is marked as finished. + </summary> + <int value="0" label="No Android /data to migrate"/> + <int value="1" label="Migration finished successfully"/> + <int value="2" label="Migration failed"/> +</enum> + <enum name="ArcVmDataMigrationSetupResult"> <summary> The types of the result of the setup of ARCVM /data migration. @@ -4940,6 +4981,15 @@ <int value="4" label="Failed to create thread for migration"/> </enum> +<enum name="ArcVmDataMigrationStatus"> + <summary>Defines the status of ARCVM /data migration.</summary> + <int value="0" label="The user has not been notified"/> + <int value="1" label="The user has been notified"/> + <int value="2" label="The user has confirmed the migration"/> + <int value="3" label="The migration has started"/> + <int value="4" label="The migration has finished"/> +</enum> + <enum name="ArmCpuPart"> <summary> Defines a subset of ARM CPU (implementer, part-number) pairs composed as a @@ -42233,8 +42283,7 @@ <int value="4329" label="ReplacedElementPaintedWithLargeOverflow"/> <int value="4330" label="FlexboxAbsPosJustifyContent"/> <int value="4331" label="MultipleFetchHandlersInServiceWorker"/> - <int value="4332" - label="StorageAccessAPI_requestStorageAccessForOrigin_Method"/> + <int value="4332" label="StorageAccessAPI_requestStorageAccessFor_Method"/> <int value="4333" label="PrivateAggregationApiAll"/> <int value="4334" label="PrivateAggregationApiFledge"/> <int value="4335" label="PrivateAggregationApiSharedStorage"/> @@ -61518,6 +61567,7 @@ <int value="-279208712" label="isolated-prerender-nsp-enabled"/> <int value="-278410617" label="TabScrollingButtonPosition:disabled"/> <int value="-278347667" label="default-tile-height"/> + <int value="-278230768" label="CameraAppTimeLapse:enabled"/> <int value="-277144896" label="enable-viewport-meta"/> <int value="-276946251" label="AppServiceShelf:disabled"/> <int value="-276907217" label="EventPath:enabled"/> @@ -62611,6 +62661,7 @@ <int value="334802038" label="OfflinePreviews:disabled"/> <int value="335976368" label="LoadCryptoTokenExtension:disabled"/> <int value="335976733" label="NotificationStackingBarRedesign:enabled"/> + <int value="336105835" label="CameraAppTimeLapse:disabled"/> <int value="336429189" label="DisallowUnsafeHttpDownloads:disabled"/> <int value="336830575" label="DeviceForceScheduledReboot:enabled"/> <int value="338662897" label="AndroidNightModeTabReparenting:disabled"/> @@ -76269,6 +76320,16 @@ label="The permission request is delivered to phone's Exo package"/> </enum> +<enum name="OncRecommendedFieldsWorkaroundAction"> + <int value="0" + label="Enabled by feature, ONC NetworkConfiguration not affected"/> + <int value="1" label="Enabled by feature, ONC NetworkConfiguration affected"/> + <int value="2" + label="Disabled by feature, ONC NetworkConfiguration not affected"/> + <int value="3" + label="Disabled by feature, ONC NetworkConfiguration affected"/> +</enum> + <enum name="OnDeviceToServerSpeechRecognitionFallbackReason"> <int value="0" label="Device does not support SODA"/> <int value="1" label="User's language is not supported by SODA"/>
diff --git a/tools/metrics/histograms/metadata/android/histograms.xml b/tools/metrics/histograms/metadata/android/histograms.xml index c06fd79..c61791f 100644 --- a/tools/metrics/histograms/metadata/android/histograms.xml +++ b/tools/metrics/histograms/metadata/android/histograms.xml
@@ -3251,17 +3251,6 @@ </summary> </histogram> -<histogram name="Android.SeccompStatus.PhotoPickerSandbox" - enum="AndroidSeccompSandboxStatus" expires_after="M99"> - <owner>peter@chromium.org</owner> - <owner>rsesek@chromium.org</owner> - <summary> - Reports the status of the seccomp-bpf sandbox in photo picker decoding - processes. Anything other than "Sandbox Engaged" indicates the - sandbox is not turned on. See https://crbug.com/477049. - </summary> -</histogram> - <histogram name="Android.SeccompStatus.RendererSandbox" enum="AndroidSeccompSandboxStatus" expires_after="2023-08-27"> <owner>rsesek@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/apps/histograms.xml b/tools/metrics/histograms/metadata/apps/histograms.xml index 7bd52155..05df695 100644 --- a/tools/metrics/histograms/metadata/apps/histograms.xml +++ b/tools/metrics/histograms/metadata/apps/histograms.xml
@@ -1713,8 +1713,10 @@ </histogram> <histogram name="Apps.AppListPlayStoreQueryState" - enum="AppListPlayStoreQueryState" expires_after="2023-07-30"> - <owner>hejq@chromium.org</owner> + enum="AppListPlayStoreQueryState" expires_after="2023-09-01"> + <owner>tby@chromium.org</owner> + <owner>ypitsishin@chromium.org</owner> + <owner>chrome-knowledge-eng@google.com</owner> <summary>The state of a Play Store app search request.</summary> </histogram>
diff --git a/tools/metrics/histograms/metadata/arc/histograms.xml b/tools/metrics/histograms/metadata/arc/histograms.xml index 33d4dbb..705cbbf 100644 --- a/tools/metrics/histograms/metadata/arc/histograms.xml +++ b/tools/metrics/histograms/metadata/arc/histograms.xml
@@ -1789,7 +1789,9 @@ <histogram name="Arc.PlayStoreSearch.QueryTime" units="ms" expires_after="2023-03-19"> - <owner>hejq@chromium.org</owner> + <owner>tby@chromium.org</owner> + <owner>ypitsishin@chromium.org</owner> + <owner>chrome-knowledge-eng@google.com</owner> <summary> Time between sending an Play Store app discovery request and the storing returned results. @@ -1805,25 +1807,31 @@ </summary> </histogram> -<histogram name="Arc.PlayStoreSearch.ReturnedAppsTotal" units="apps" - expires_after="2022-05-01"> - <owner>hejq@chromium.org</owner> +<histogram name="Arc.PlayStoreSearch.ReturnedAppsTotalV2" units="apps" + expires_after="2023-09-01"> + <owner>tby@chromium.org</owner> + <owner>ypitsishin@chromium.org</owner> + <owner>chrome-knowledge-eng@google.com</owner> <summary> The total number of returned apps of a Play Store app discovery query. </summary> </histogram> -<histogram name="Arc.PlayStoreSearch.ReturnedInstantApps" units="apps" - expires_after="2020-06-28"> - <owner>hejq@chromium.org</owner> +<histogram name="Arc.PlayStoreSearch.ReturnedInstantAppsV2" units="apps" + expires_after="2023-09-01"> + <owner>tby@chromium.org</owner> + <owner>ypitsishin@chromium.org</owner> + <owner>chrome-knowledge-eng@google.com</owner> <summary> The number of returned instant apps of a Play Store app discovery query. </summary> </histogram> -<histogram name="Arc.PlayStoreSearch.ReturnedUninstalledApps" units="apps" - expires_after="2020-06-28"> - <owner>hejq@chromium.org</owner> +<histogram name="Arc.PlayStoreSearch.ReturnedUninstalledAppsV2" units="apps" + expires_after="2023-09-01"> + <owner>tby@chromium.org</owner> + <owner>ypitsishin@chromium.org</owner> + <owner>chrome-knowledge-eng@google.com</owner> <summary> The number of returned uninstalled apps of a Play Store app discovery query. </summary> @@ -2276,6 +2284,7 @@ expires_after="2024-01-01"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> + <owner>arc-storage@google.com</owner> <summary> Duration of the ARCVM /data migration. This is reported once when a newly started migration is completed. @@ -2286,6 +2295,7 @@ enum="CrOSFileSystemMigrationEndStatus" expires_after="2024-01-01"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> + <owner>arc-storage@google.com</owner> <summary> The status of ARCVM /data migration when it ends. This is reported when a migration finishes successfully, fails, or gets cancelled halfway. @@ -2296,6 +2306,7 @@ expires_after="2024-01-01"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> + <owner>arc-storage@google.com</owner> <summary> The error code of a file operation failure that caused the ARCVM /data migration to fail. Reported when a migration thread encounters a file @@ -2309,6 +2320,7 @@ expires_after="2024-01-01"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> + <owner>arc-storage@google.com</owner> <summary> The type of file operation at which the ARCVM /data migration failed. Reported when a migration thread encounters a file operation error. This can @@ -2317,10 +2329,24 @@ </summary> </histogram> +<histogram name="Arc.VmDataMigration.FailedPathType" + enum="ArcVmDataMigrationFailedPathType" expires_after="2024-01-01"> + <owner>momohatt@google.com</owner> + <owner>youkichihosoi@google.com</owner> + <owner>arc-storage@google.com</owner> + <summary> + The location of files at which ARCVM /data migration failed. Reported when a + migration thread encounters a file operation error. This can be reported + multiple times for a migration when multiple threads fail at around the same + time. + </summary> +</histogram> + <histogram name="Arc.VmDataMigration.InitialFreeSpace" units="MB" expires_after="2024-01-01"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> + <owner>arc-storage@google.com</owner> <summary> The total amount of free disk space on the system when a new or resumed ARCVM /data migration is started. Reported when a migration failed with @@ -2328,10 +2354,34 @@ </summary> </histogram> +<histogram name="Arc.VmDataMigration.MigrationFinishReason{ArcUserTypes}" + enum="ArcVmDataMigrationFinishReason" expires_after="2024-01-01"> + <owner>momohatt@google.com</owner> + <owner>youkichihosoi@google.com</owner> + <owner>arc-storage@google.com</owner> + <summary> + The reason why ARCVM /data migration is marked as finished. {ArcUserTypes} + </summary> + <token key="ArcUserTypes" variants="ArcUserTypes"/> +</histogram> + +<histogram name="Arc.VmDataMigration.MigrationStatusOnArcStarted{ArcUserTypes}" + enum="ArcVmDataMigrationStatus" expires_after="2024-01-01"> + <owner>momohatt@google.com</owner> + <owner>youkichihosoi@google.com</owner> + <owner>arc-storage@google.com</owner> + <summary> + The status of ARCVM /data migration at the beginning of each ARC session. + {ArcUserTypes} + </summary> + <token key="ArcUserTypes" variants="ArcUserTypes"/> +</histogram> + <histogram name="Arc.VmDataMigration.NoSpaceFailureFreeSpace" units="MB" expires_after="2024-01-01"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> + <owner>arc-storage@google.com</owner> <summary> The total amount of free disk space on the system when the user encounters ENOSPC (no space error) during ARCVM /data migration. Reported when a @@ -2343,6 +2393,7 @@ expires_after="2024-01-01"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> + <owner>arc-storage@google.com</owner> <summary> The total number of bytes of xattr data that we are trying to store on a file when we encounter an ENOSPC (no space error) during ARCVM /data @@ -2394,6 +2445,7 @@ enum="ArcVmDataMigrationSetupResult" expires_after="2024-01-01"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> + <owner>arc-storage@google.com</owner> <summary> The result of the setup of ARCVM /data migration. Reported before triggering the migration tool. @@ -2404,6 +2456,7 @@ enum="CrOSFileSystemMigrationStartStatus" expires_after="2024-01-01"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> + <owner>arc-storage@google.com</owner> <summary> The status of ARCVM /data migration when it starts. This is reported when a new migration or a resumed migration is started. @@ -2414,6 +2467,7 @@ expires_after="2024-01-01"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> + <owner>arc-storage@google.com</owner> <summary> Total number of files to be migrated in ARCVM /data migration. Reported once at the beginning of a new migration. @@ -2424,6 +2478,7 @@ expires_after="2024-01-01"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> + <owner>arc-storage@google.com</owner> <summary> Total bytes to be migrated in ARCVM /data migration. Reported once at the beginning of a new migration.
diff --git a/tools/metrics/histograms/metadata/blink/histograms.xml b/tools/metrics/histograms/metadata/blink/histograms.xml index f20055e..1b3abddb0 100644 --- a/tools/metrics/histograms/metadata/blink/histograms.xml +++ b/tools/metrics/histograms/metadata/blink/histograms.xml
@@ -2332,6 +2332,17 @@ </summary> </histogram> +<histogram name="Blink.MemoryCache.PageSavedResourceStrongReferenceSize" + units="count" expires_after="2023-09-01"> + <owner>gjc@chromium.org</owner> + <owner>blink-network-stack@chromium.org</owner> + <summary> + Size of the resource strong references saved to the memory cache. Recorded + when the user navigates to a newpage under the same origin. Recorded only + with feature flag MemoryCacheStrongReference. + </summary> +</histogram> + <histogram name="Blink.MemoryCache.RevalidationPolicy.AsyncScript" enum="RevalidationPolicy" expires_after="2023-08-13"> <owner>hiroshige@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/cras/histograms.xml b/tools/metrics/histograms/metadata/cras/histograms.xml index 1c556e99..0665829c 100644 --- a/tools/metrics/histograms/metadata/cras/histograms.xml +++ b/tools/metrics/histograms/metadata/cras/histograms.xml
@@ -592,7 +592,7 @@ </histogram> <histogram name="Cras.StreamAddError" enum="CrasStreamAddError" - expires_after="2022-11-20"> + expires_after="2024-03-16"> <owner>hychao@chromium.org</owner> <owner>chromeos-audio@google.com</owner> <summary> @@ -666,7 +666,7 @@ <summary>Record the errors happen when CRAS server creats a stream.</summary> </histogram> -<histogram name="Cras.StreamEffects" units="value" expires_after="2022-09-20"> +<histogram name="Cras.StreamEffects" units="value" expires_after="2024-03-16"> <!-- Name completed by histogram_suffixes name="Cras.Direction" and name="Cras.ClientType" --> @@ -708,7 +708,7 @@ </histogram> <histogram name="Cras.StreamSamplingFormat" enum="AlsaSampleFormatType" - expires_after="2022-09-20"> + expires_after="2024-03-16"> <!-- Name completed by histogram_suffixes name="Cras.Direction" and name="Cras.ClientType" -->
diff --git a/tools/metrics/histograms/metadata/crostini/histograms.xml b/tools/metrics/histograms/metadata/crostini/histograms.xml index 9364101..f41b8cf2 100644 --- a/tools/metrics/histograms/metadata/crostini/histograms.xml +++ b/tools/metrics/histograms/metadata/crostini/histograms.xml
@@ -283,6 +283,18 @@ </summary> </histogram> +<histogram name="Crostini.InputMethodOnBlur" enum="InputMethodID2" + expires_after="2024-01-06"> + <owner>timloh@chromium.org</owner> + <owner>clumptini@google.com</owner> + <summary> + Breakdown of active input method by input method IDs. Recorded when a + Crostini window loses focus, including switching between Crostini windows + and some actions like opening the launcher. See InputMethod.ID2 for details + on the enum format. + </summary> +</histogram> + <histogram name="Crostini.InstallSource" enum="CrostiniInstallSource" expires_after="2023-04-10"> <obsolete>
diff --git a/tools/metrics/histograms/metadata/network/histograms.xml b/tools/metrics/histograms/metadata/network/histograms.xml index abe5417f..4c252974 100644 --- a/tools/metrics/histograms/metadata/network/histograms.xml +++ b/tools/metrics/histograms/metadata/network/histograms.xml
@@ -1715,6 +1715,19 @@ </token> </histogram> +<histogram name="Network.Ethernet.Policy.OncRecommendedFieldsWorkaroundAction" + enum="OncRecommendedFieldsWorkaroundAction" expires_after="2024-01-31"> + <owner>pmarko@google.com</owner> + <owner>suprnet@google.com</owner> + <summary> + The action taken when evaluating whether a workaround should be applied to + mark Ethernet ONC Policy fields as Recommended for backward compatiblity. + This histogram is emitted when the DeviceOpenNetworkConfiguration policy is + parsed (on chrome start and policy updates) and is found to contain an + Ethernet network configuration. + </summary> +</histogram> + <histogram name="Network.NetworkPortalDetectorHasProxy" enum="Boolean" expires_after="2023-09-18"> <owner>stevenjb@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/storage/histograms.xml b/tools/metrics/histograms/metadata/storage/histograms.xml index d4365e9..90b0b73 100644 --- a/tools/metrics/histograms/metadata/storage/histograms.xml +++ b/tools/metrics/histograms/metadata/storage/histograms.xml
@@ -147,8 +147,24 @@ </summary> </histogram> +<histogram name="API.TopLevelStorageAccess.RequestStorageAccessFor" + enum="RequestStorageResult" expires_after="2023-08-31"> + <owner>cfredric@chromium.org</owner> + <owner>mreichhoff@chromium.org</owner> + <summary> + Records invocations of document.requestStorageAccessFor and reasons the + request was approved or rejected. Recorded for every call to the function, + regardless of outcome. Note that API.StorageAccess.RequestStorageAccess is + similar, but for the other variant of this API. + </summary> +</histogram> + <histogram name="API.TopLevelStorageAccess.RequestStorageAccessForOrigin" enum="RequestStorageResult" expires_after="2023-08-31"> + <obsolete> + The function was renamed. See + API.TopLevelStorageAccess.RequestStorageAccessFor. + </obsolete> <owner>cfredric@chromium.org</owner> <owner>mreichhoff@chromium.org</owner> <summary>
diff --git a/ui/file_manager/file_manager/widgets/xf_path_display.ts b/ui/file_manager/file_manager/widgets/xf_path_display.ts index f86bf2e0..2521eb42 100644 --- a/ui/file_manager/file_manager/widgets/xf_path_display.ts +++ b/ui/file_manager/file_manager/widgets/xf_path_display.ts
@@ -37,7 +37,7 @@ return html` ${repeat(head, (e) => html` <div class="folder" tabindex="0">${e}</div> - <div class="separator">></div>`)} + <div class="separator"></div>`)} <div class="folder" tabindex="0">${tail}</div> `; } @@ -82,7 +82,13 @@ min-width: auto; } div.separator { - padding: 0px 0.5ex; + -webkit-mask-image: url(/foreground/images/files/ui/arrow_right.svg); + -webkit-mask-position: center; + -webkit-mask-repeat: no-repeat; + background-color: var(--cros-text-color-secondary); + width: 20px; + height: 20px; + padding: 0 2px; } `; }
diff --git a/ui/file_manager/file_manager/widgets/xf_path_display_unittest.ts b/ui/file_manager/file_manager/widgets/xf_path_display_unittest.ts index 54fe46d..3322cc3d 100644 --- a/ui/file_manager/file_manager/widgets/xf_path_display_unittest.ts +++ b/ui/file_manager/file_manager/widgets/xf_path_display_unittest.ts
@@ -9,7 +9,6 @@ import {XfPathDisplayElement} from './xf_path_display.js'; - /** * Creates new <xf-search-options> element for each test. */ @@ -25,7 +24,7 @@ for (let i = 0; i < divList.length; ++i) { const divNode = divList[i]; if (divNode) { - text.push(divNode.innerText); + text.push(divNode.className === 'separator' ? '/' : divNode.innerText); } } return text.join(''); @@ -53,7 +52,7 @@ for (const path of pathList) { element.path = path; await waitForElementUpdate(element); - assertEquals(path.replaceAll('/', '>'), getFolderText(element)); + assertEquals(path, getFolderText(element)); } done(); }
diff --git a/ui/file_manager/file_manager/widgets/xf_select.ts b/ui/file_manager/file_manager/widgets/xf_select.ts index 133ecd2..39eed9e 100644 --- a/ui/file_manager/file_manager/widgets/xf_select.ts +++ b/ui/file_manager/file_manager/widgets/xf_select.ts
@@ -332,7 +332,7 @@ margin-inline: 4px; min-width: auto; outline: none; - padding: 0px 8px; + padding: 0px 8px 0 12px; white-space: nowrap; } .xf-select-icon {
diff --git a/ui/file_manager/integration_tests/file_manager/search.js b/ui/file_manager/integration_tests/file_manager/search.js index 5a46ddb..d0d8df33 100644 --- a/ui/file_manager/integration_tests/file_manager/search.js +++ b/ui/file_manager/integration_tests/file_manager/search.js
@@ -115,6 +115,9 @@ // Click on the clear search button. await remoteCall.waitAndClickElement(appId, '#search-box .clear'); + // Wait for the search box to fully collapse. + await remoteCall.waitForElement(appId, '#search-wrapper[collapsed]'); + // Wait for file list to display all files. await remoteCall.waitForFiles( appId, TestEntryInfo.getExpectedRows(BASIC_LOCAL_ENTRY_SET));
diff --git a/ui/gfx/switches.cc b/ui/gfx/switches.cc index 78781a2..cbdfb60 100644 --- a/ui/gfx/switches.cc +++ b/ui/gfx/switches.cc
@@ -69,7 +69,7 @@ #if BUILDFLAG(IS_CHROMEOS) BASE_FEATURE(kVariableGoogleSansFont, "VariableGoogleSansFont", - base::FEATURE_ENABLED_BY_DEFAULT); + base::FEATURE_DISABLED_BY_DEFAULT); GFX_SWITCHES_EXPORT bool UseVariableGoogleSansFont() { return base::FeatureList::IsEnabled(kVariableGoogleSansFont);
diff --git a/ui/message_center/views/notification_input_container.cc b/ui/message_center/views/notification_input_container.cc index c7a866c..45e2917 100644 --- a/ui/message_center/views/notification_input_container.cc +++ b/ui/message_center/views/notification_input_container.cc
@@ -184,12 +184,8 @@ views::InkDrop::Get(this)->SetMode( views::InkDropHost::InkDropMode::ON_NO_GESTURE_HANDLER); views::InkDrop::Get(this)->SetVisibleOpacity(1); - views::InkDrop::Get(this)->SetBaseColorCallback(base::BindRepeating( - [](views::View* host) { - return host->GetColorProvider()->GetColor( - ui::kColorNotificationInputBackground); - }, - this)); + views::InkDrop::Get(this)->SetBaseColorId( + ui::kColorNotificationInputBackground); return AddChildView(std::make_unique<views::InkDropContainerView>()); }
diff --git a/ui/message_center/views/notification_view.cc b/ui/message_center/views/notification_view.cc index 70320ec..a15e1506 100644 --- a/ui/message_center/views/notification_view.cc +++ b/ui/message_center/views/notification_view.cc
@@ -261,12 +261,8 @@ views::InkDrop::Get(host)->GetVisibleOpacity()); }, this)); - views::InkDrop::Get(this)->SetBaseColorCallback(base::BindRepeating( - [](NotificationViewBase* host) { - return host->GetColorProvider()->GetColor( - ui::kColorNotificationBackgroundActive); - }, - this)); + views::InkDrop::Get(this)->SetBaseColorId( + ui::kColorNotificationBackgroundActive); auto header_row = CreateHeaderRowBuilder().Build(); // Font list for text views.
diff --git a/weblayer/browser/weblayer_variations_service_client.cc b/weblayer/browser/weblayer_variations_service_client.cc index 7efae1f..d358a6d 100644 --- a/weblayer/browser/weblayer_variations_service_client.cc +++ b/weblayer/browser/weblayer_variations_service_client.cc
@@ -58,4 +58,7 @@ return false; } +void WebLayerVariationsServiceClient:: + RemoveGoogleGroupsFromPrefsForDeletedProfiles(PrefService* local_state) {} + } // namespace weblayer
diff --git a/weblayer/browser/weblayer_variations_service_client.h b/weblayer/browser/weblayer_variations_service_client.h index c692f98..9a7ef45 100644 --- a/weblayer/browser/weblayer_variations_service_client.h +++ b/weblayer/browser/weblayer_variations_service_client.h
@@ -38,6 +38,8 @@ version_info::Channel GetChannel() override; bool OverridesRestrictParameter(std::string* parameter) override; bool IsEnterprise() override; + void RemoveGoogleGroupsFromPrefsForDeletedProfiles( + PrefService* local_state) override; raw_ptr<SystemNetworkContextManager> network_context_manager_; };