diff --git a/DEPS b/DEPS index 19f6c858..3c51947c 100644 --- a/DEPS +++ b/DEPS
@@ -313,11 +313,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': '9c21f2111e58e1c9028fb8a2d1e55b124c52b4c3', + 'v8_revision': 'e0c3f9d7300c1d4e74ec3fef3b4964a83e570711', # 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': '6b71ba83ee75da8ade695a8d5a63523f45ac4c43', + 'angle_revision': '02ffcb3667ca95a4fe94f87c4f7901c8e37a4ab9', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -325,7 +325,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. - 'pdfium_revision': '6aadd6ed35dcf9abbef5fb8ad13ac81d6ed92566', + 'pdfium_revision': 'eb224879e6253050b50bed55485dfff8a15798a3', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling BoringSSL # and whatever else without interference from each other. @@ -525,7 +525,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling llvm-libc # and whatever else without interference from each other. - 'llvm_libc_revision': '71f9245792872176918a1f82dfe2e9ccfb0d30df', + 'llvm_libc_revision': '8ab123717dc94883b2f0e248ad17dd7c1758f51f', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling llvm-libc # and whatever else without interference from each other. @@ -1201,7 +1201,7 @@ 'packages': [ { 'package': 'chromium/chrome/android/orderfiles/arm64', - 'version': 'dOZRElEBFk3xjr8iaeEQcbsXXgFE_3nygty36be2yBEC', + 'version': 'YlRVotS1PzzbwhERwNrZlXzyznlgqTLNs28X5fZdAlEC', }, ], 'condition': 'checkout_android and non_git_source', @@ -1212,7 +1212,7 @@ 'packages': [ { 'package': 'chromium/android_webview/tools/orderfiles/arm', - 'version': 'wLE7Xf7pEna3zCkq5mrnoKVm91ZxeU_XonEwoRf4q6EC', + 'version': '_0v0WiX8gGnpK6qjPZ-RJoNUpq8tccFJea9hGQ7o51sC', }, ], 'condition': 'checkout_android and non_git_source', @@ -1223,7 +1223,7 @@ 'packages': [ { 'package': 'chromium/android_webview/tools/orderfiles/arm64', - 'version': 'bewkF8j9Gh1WLuddq6AhVnUot_8q_GtyMNyEnHEqudEC', + 'version': 'ZszYb-RAvgLz0Frd7GrFdUze9v8YEmHnj9TJ8uuMC5kC', }, ], 'condition': 'checkout_android and non_git_source', @@ -1608,7 +1608,7 @@ 'packages': [ { 'package': 'chromium/chrome/test/data/variations/cipd', - 'version': 'RF1-cM8oBYBTN5TZlUVVuxCBnY0IIEscdDcH-TOLUL4C', + 'version': '7uAZe2nqo-Xkdt0SaczG8hNoeMMnqa3V8yI9VFcdKMAC', }, ], 'dep_type': 'cipd', @@ -1619,7 +1619,7 @@ 'src/clank': { 'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' + - '5c6055aa5052256bc67ff1a033d2852d0b205282', + 'e67804499e959e716c333a340acfd3da0e0dc880', 'condition': 'checkout_android and checkout_src_internal', }, @@ -2055,7 +2055,7 @@ Var('chromium_git') + '/chromium/web-tests.git' + '@' + Var('crossbench_web_tests_revision'), 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '3008b57e5d18ee9c92baf851dd33c61cfd6fad21', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '8d28f8ce962fe60029967fad483c23c885e7fb3b', 'src/third_party/devtools-frontend/src': Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), @@ -2605,7 +2605,7 @@ Var('pdfium_git') + '/pdfium.git' + '@' + Var('pdfium_revision'), 'src/third_party/perfetto': - Var('chromium_git') + '/external/github.com/google/perfetto.git' + '@' + '6a960b04f6e20ace0f0e084be42a660f7ff6490a', + Var('chromium_git') + '/external/github.com/google/perfetto.git' + '@' + 'f85bf07763e947a46473bdd07bd5245880d6d404', 'src/base/tracing/test/data': { 'bucket': 'perfetto', @@ -2924,7 +2924,7 @@ 'dep_type': 'cipd', }, - 'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@b10e3ee329697e6e9aa186c135aa241a8889352b', + 'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@58c67380fb299c019ac5d2003168baebce0b1a64', 'src/third_party/glslang/src': '{chromium_git}/external/github.com/KhronosGroup/glslang@8e1494f9d742a27b54193ecd9475dcb2ef23b8b7', 'src/third_party/spirv-cross/src': '{chromium_git}/external/github.com/KhronosGroup/SPIRV-Cross@b8fcf307f1f347089e3c46eb4451d27f32ebc8d3', 'src/third_party/spirv-headers/src': '{chromium_git}/external/github.com/KhronosGroup/SPIRV-Headers@9268f3057354a2cb65991ba5f38b16d81e803692', @@ -2933,7 +2933,7 @@ 'src/third_party/vulkan-loader/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Loader@40fdef426201fa25c5847e18d96d8f28f29a5195', 'src/third_party/vulkan-tools/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Tools@17c41541e8e43364af6ccb4a6ce167274152cd7a', 'src/third_party/vulkan-utility-libraries/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Utility-Libraries@913a3fa7a6b47eee715c3c7759c9d0bbff5a6da7', - 'src/third_party/vulkan-validation-layers/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-ValidationLayers@be9745e8019aac26785339c366ea8ea1c0bd87e5', + 'src/third_party/vulkan-validation-layers/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-ValidationLayers@230079d279da34e2b3bb19d4b28a7947ef760086', 'src/third_party/vulkan_memory_allocator': Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git' + '@' + 'cb0597213b0fcb999caa9ed08c2f88dc45eb7d50', @@ -2976,7 +2976,7 @@ Var('chromium_git') + '/webpagereplay.git' + '@' + Var('webpagereplay_revision'), 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + 'e311af088e81d4f545696d1162dbbc02cd146f2e', + Var('webrtc_git') + '/src.git' + '@' + '91d56800aaf10a457cdaaffc745329728e7b0989', # 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. @@ -3470,13 +3470,13 @@ 'src/chrome/app/theme/default_100_percent/google_chrome': { 'url': Var('chrome_git') + '/chrome/theme/default_100_percent/google_chrome.git' + '@' + - 'e080feee1bd6b3ac5ccff65059ac093f7d46ad08', + '662d6ea16a230560e47522daa2dc12497beb5157', 'condition': 'checkout_src_internal', }, 'src/chrome/app/theme/default_200_percent/google_chrome': { 'url': Var('chrome_git') + '/chrome/theme/default_200_percent/google_chrome.git' + '@' + - '252c8851666cf517fa400ef87ff00d02eae3ee49', + 'ff9817fe7776a144405959f00fcaf2b1add3154d', 'condition': 'checkout_src_internal', }, @@ -4235,8 +4235,10 @@ 'name': 'lastchange_dawn', 'pattern': '.', 'action': ['python3', 'src/build/util/lastchange.py', + '-m', 'DAWN_COMMIT_HASH', '-s', 'src/third_party/dawn', - '--revision', 'src/gpu/webgpu/DAWN_VERSION'], + '--revision', 'src/gpu/webgpu/DAWN_VERSION', + '--header', 'src/gpu/webgpu/dawn_commit_hash.h'], }, # Pull dsymutil binaries using checked-in hashes. {
diff --git a/android_webview/browser/aw_browser_context.cc b/android_webview/browser/aw_browser_context.cc index f543e4d..0262d23 100644 --- a/android_webview/browser/aw_browser_context.cc +++ b/android_webview/browser/aw_browser_context.cc
@@ -50,7 +50,6 @@ #include "base/memory/scoped_refptr.h" #include "base/metrics/histogram_functions.h" #include "base/path_service.h" -#include "base/strings/string_split.h" #include "base/task/single_thread_task_runner.h" #include "base/task/thread_pool.h" #include "base/threading/thread_restrictions.h" @@ -511,20 +510,17 @@ return nullptr; } -net::HttpRequestHeaders AwBrowserContext::GetExtraHeadersForUrl( - const GURL& url) { +std::string AwBrowserContext::GetExtraHeadersForUrl(const GURL& url) { // This method of mapping headers to urls supports the WebView.loadUrl with // extra headers method, and should only be used to support this flow, but not // for any other purposes of attaching extra headers to requests. DCHECK_CURRENTLY_ON(BrowserThread::UI); if (!url.is_valid()) { - return net::HttpRequestHeaders(); + return std::string(); } - auto iter = extra_headers_for_urls_.find(url.spec()); - if (iter == extra_headers_for_urls_.end()) { - return net::HttpRequestHeaders(); - } - return iter->second; + std::map<std::string, std::string>::iterator iter = + extra_headers_for_urls_.find(url.spec()); + return iter != extra_headers_for_urls_.end() ? iter->second : std::string(); } void AwBrowserContext::RebuildTable( @@ -658,17 +654,7 @@ return; } if (!headers.empty()) { - net::HttpRequestHeaders new_headers; - for (std::string_view header : base::SplitStringPieceUsingSubstr( - headers, "\r\n", base::TRIM_WHITESPACE, - base::SPLIT_WANT_NONEMPTY)) { - size_t pos = header.find(':'); - if (pos != std::string::npos) { - new_headers.SetHeader(header.substr(0, pos), - net::HttpUtil::TrimLWS(header.substr(pos + 1))); - } - extra_headers_for_urls_[url.spec()] = new_headers; - } + extra_headers_for_urls_[url.spec()] = headers; } else { extra_headers_for_urls_.erase(url.spec()); }
diff --git a/android_webview/browser/aw_browser_context.h b/android_webview/browser/aw_browser_context.h index 41f199a..8389f6b 100644 --- a/android_webview/browser/aw_browser_context.h +++ b/android_webview/browser/aw_browser_context.h
@@ -154,7 +154,7 @@ override; std::unique_ptr<content::ZoomLevelDelegate> CreateZoomLevelDelegate( const base::FilePath& partition_path) override; - net::HttpRequestHeaders GetExtraHeadersForUrl(const GURL& url) override; + std::string GetExtraHeadersForUrl(const GURL& url) override; // visitedlink::VisitedLinkDelegate implementation. void RebuildTable(const scoped_refptr<URLEnumerator>& enumerator) override; @@ -288,7 +288,7 @@ // Map of extra headers for specific URLs supplied through the loadUrl(String, // Map) API. - std::map<std::string, net::HttpRequestHeaders> extra_headers_for_urls_; + std::map<std::string, std::string> extra_headers_for_urls_; base::android::ScopedJavaGlobalRef<jobject> obj_;
diff --git a/android_webview/browser/aw_field_trials.cc b/android_webview/browser/aw_field_trials.cc index d97f8c9..fa61a66 100644 --- a/android_webview/browser/aw_field_trials.cc +++ b/android_webview/browser/aw_field_trials.cc
@@ -4,6 +4,7 @@ #include "android_webview/browser/aw_field_trials.h" +#include "android_webview/browser/metrics/aw_metrics_service_client.h" #include "android_webview/common/aw_features.h" #include "android_webview/common/aw_switches.h" #include "base/allocator/partition_alloc_features.h" @@ -37,12 +38,11 @@ void AwFieldTrials::OnVariationsSetupComplete() { // Persistent histograms must be enabled ASAP, but depends on Features. - base::FilePath metrics_dir; - if (base::PathService::Get(base::DIR_ANDROID_APP_DATA, &metrics_dir)) { - InstantiatePersistentHistogramsWithFeaturesAndCleanup(metrics_dir); - } else { - NOTREACHED(); - } + android_webview::AwMetricsServiceClient* metrics_service_client = + android_webview::AwMetricsServiceClient::GetInstance(); + metrics_service_client->SetUpMetricsDir(); + InstantiatePersistentHistogramsWithFeaturesAndCleanup( + metrics_service_client->GetMetricsDir()); } // TODO(crbug.com/40271903): Consider to migrate all WebView feature overrides
diff --git a/android_webview/browser/metrics/aw_component_metrics_provider_delegate_unittests.cc b/android_webview/browser/metrics/aw_component_metrics_provider_delegate_unittests.cc index 16f77382..42adb49 100644 --- a/android_webview/browser/metrics/aw_component_metrics_provider_delegate_unittests.cc +++ b/android_webview/browser/metrics/aw_component_metrics_provider_delegate_unittests.cc
@@ -50,6 +50,7 @@ AwMetricsServiceClient::RegisterMetricsPrefs(prefs_->registry()); client_->Initialize(prefs_.get()); + client_->SetUpMetricsDir(); } AwMetricsServiceClient* GetClient() { return client_.get(); } @@ -79,4 +80,4 @@ EXPECT_EQ(fake_component_cohort_id, components[0].cohort_id); } -} // namespace android_webview \ No newline at end of file +} // namespace android_webview
diff --git a/android_webview/browser/metrics/aw_metrics_service_client.cc b/android_webview/browser/metrics/aw_metrics_service_client.cc index 9b39c7d..378f1e9 100644 --- a/android_webview/browser/metrics/aw_metrics_service_client.cc +++ b/android_webview/browser/metrics/aw_metrics_service_client.cc
@@ -126,6 +126,7 @@ // ChromeMetricsServiceClient. std::unique_ptr<metrics::FileMetricsProvider> CreateFileMetricsProvider( PrefService* pref_service, + base::FilePath metrics_dir, bool metrics_reporting_enabled) { using metrics::FileMetricsProvider; @@ -136,11 +137,8 @@ std::make_unique<FileMetricsProvider>(pref_service, /*is_fre=*/false); - base::FilePath user_data_dir; - base::PathService::Get(base::DIR_ANDROID_APP_DATA, &user_data_dir); - FileMetricsProvider::Params browser_metrics_params( - user_data_dir.AppendASCII(kBrowserMetricsName), + metrics_dir.AppendASCII(kBrowserMetricsName), FileMetricsProvider::SOURCE_HISTOGRAMS_ATOMIC_DIR, IsSamplesCounterEnabled() ? FileMetricsProvider::ASSOCIATE_INTERNAL_PROFILE_SAMPLES_COUNTER @@ -161,7 +159,7 @@ // 1. Data from the previous run if crashpad_handler didn't exit cleanly. // base::FilePath crashpad_metrics_file = // base::GlobalHistogramAllocator::ConstructFilePath( - // user_data_dir, kCrashpadHistogramAllocatorName); + // metrics_dir, kCrashpadHistogramAllocatorName); // file_metrics_provider->RegisterSource( // FileMetricsProvider::Params( // crashpad_metrics_file, @@ -174,7 +172,7 @@ // because they update the file itself. // base::FilePath crashpad_active_path = // base::GlobalHistogramAllocator::ConstructFilePathForActiveFile( - // user_data_dir, kCrashpadHistogramAllocatorName); + // metrics_dir, kCrashpadHistogramAllocatorName); // file_metrics_provider->RegisterSource( // FileMetricsProvider::Params( // crashpad_active_path, @@ -286,15 +284,18 @@ // Registration of providers has to wait until consent is determined. To // do otherwise means the providers would always be configured with reporting // disabled (because when this is called in production consent hasn't been - // determined). If consent has not been determined, this does nothing. + // determined). + // We also need the metrics directory to have been set up by calling + // SetUpMetricsDir(). + // If consent has not been determined or the metrics directory not set, this + // does nothing. MaybeStartMetrics(); } -// TODO:(crbug.com/1148351) Make the initialization consistent with Chrome. void AwMetricsServiceClient::MaybeStartMetrics() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - if (!IsConsentDetermined()) { + if (!IsReadyToStart()) { return; } @@ -327,8 +328,9 @@ } else { // Even though reporting is not enabled, CreateFileMetricsProvider() is // called. This ensures on disk state is removed. - metrics_service_->RegisterMetricsProvider(CreateFileMetricsProvider( - pref_service_, /* metrics_reporting_enabled */ false)); + metrics_service_->RegisterMetricsProvider( + CreateFileMetricsProvider(pref_service_, metrics_dir_, + /* metrics_reporting_enabled */ false)); pref_service_->ClearPref(metrics::prefs::kMetricsClientID); pref_service_->ClearPref(metrics::prefs::kMetricsProvisionalClientID); pref_service_->ClearPref(metrics::prefs::kMetricsLogRecordId); @@ -350,7 +352,8 @@ metrics_service_->RegisterMetricsProvider( std::make_unique<metrics::FormFactorMetricsProvider>()); metrics_service_->RegisterMetricsProvider(CreateFileMetricsProvider( - pref_service_, metrics_state_manager_->IsMetricsReportingEnabled())); + pref_service_, metrics_dir_, + metrics_state_manager_->IsMetricsReportingEnabled())); metrics_service_->RegisterMetricsProvider( std::make_unique<metrics::CallStackProfileMetricsProvider>()); metrics_service_->RegisterMetricsProvider( @@ -394,8 +397,8 @@ overridden_upload_interval_ = upload_interval; } -bool AwMetricsServiceClient::IsConsentDetermined() const { - return init_finished_ && set_consent_finished_; +bool AwMetricsServiceClient::IsReadyToStart() const { + return init_finished_ && set_consent_finished_ && !metrics_dir_.empty(); } bool AwMetricsServiceClient::IsConsentGiven() const { @@ -623,6 +626,19 @@ return std::string(); } +void AwMetricsServiceClient::SetUpMetricsDir() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (!base::PathService::Get(base::DIR_ANDROID_APP_DATA, &metrics_dir_)) { + NOTREACHED(); + } + + MaybeStartMetrics(); +} + +base::FilePath AwMetricsServiceClient::GetMetricsDir() { + return metrics_dir_; +} + void AwMetricsServiceClient::OnApplicationNotIdle() { auto* metrics_service = GetMetricsServiceIfStarted(); if (!metrics_service) {
diff --git a/android_webview/browser/metrics/aw_metrics_service_client.h b/android_webview/browser/metrics/aw_metrics_service_client.h index 3f9f87cf..3a169d3d 100644 --- a/android_webview/browser/metrics/aw_metrics_service_client.h +++ b/android_webview/browser/metrics/aw_metrics_service_client.h
@@ -65,15 +65,18 @@ // // startup // │ -// ├────────────┐ -// │ ▼ -// │ query GMS for consent -// ▼ │ -// Initialize() │ -// │ ▼ -// │ SetHaveMetricsConsent() -// │ │ -// │ ┌──────────┘ +// ├───────────────┐ +// │ ▼ +// │ query GMS for consent +// ▼ │ +// Initialize() │ +// │ │ +// ▼ │ +// SetUpMetricsDir() │ +// │ ▼ +// │ SetHaveMetricsConsent() +// │ │ +// │ ┌─────────────┘ // ▼ ▼ // MaybeStartMetrics() // │ @@ -85,11 +88,13 @@ // SetHaveMetricsConsent(). Querying GMS is slow, so SetHaveMetricsConsent() // typically happens after Initialize(), but it may happen before. // +// Initialize() is called before Finch is set up, and SetUpMetricsDir() is +// called afterward to allow it to check base::Feature flags. +// // Each path sets a flag, |init_finished_| or |set_consent_finished_|, to show -// that path has finished, and then calls MaybeStartMetrics(). When -// MaybeStartMetrics() is called the first time, it sees only one flag is true, -// and does nothing. When MaybeStartMetrics() is called the second time, it -// decides whether to start metrics. +// that path has finished, and |metrics_dir_| must also have been set. Each of +// the steps ends by calling MaybeStartMetrics(), which does nothing unless all +// three steps have happened. // // If consent was granted, MaybeStartMetrics() determines sampling by hashing // the client ID (generating a new ID if there was none). If this client is in @@ -145,10 +150,6 @@ void SetFastStartupForTesting(bool fast_startup_for_testing); void SetUploadIntervalForTesting(const base::TimeDelta& upload_interval); - // Whether or not consent state has been determined, regardless of whether - // it is positive or negative. - bool IsConsentDetermined() const; - // EnabledStateProvider: bool IsConsentGiven() const override; bool IsReportingEnabled() const override; @@ -228,6 +229,14 @@ // Returns the installer type of the app. Virtual for testing. virtual InstallerPackageType GetInstallerPackageType(); + // Path where files related to metrics are stored. + base::FilePath GetMetricsDir(); + + // Set up the path used to store metrics. Separate from `Initialize` to enable + // this to check feature flags, which aren't initialized yet when `Initialize` + // runs. + void SetUpMetricsDir(); + // WebViewAppStateObserver void OnAppStateChanged(WebViewAppStateObserver::State state) override; @@ -255,6 +264,7 @@ virtual bool CanRecordPackageNameForAppType(); private: + bool IsReadyToStart() const; void MaybeStartMetrics(); void RegisterForNotifications(); @@ -302,6 +312,7 @@ bool app_in_foreground_ = false; base::Time time_created_; std::unique_ptr<Delegate> delegate_; + base::FilePath metrics_dir_; base::WeakPtrFactory<AwMetricsServiceClient> weak_ptr_factory_{this}; };
diff --git a/android_webview/browser/metrics/aw_metrics_service_client_sample_rate_unittest.cc b/android_webview/browser/metrics/aw_metrics_service_client_sample_rate_unittest.cc index d542c7d..84425f39 100644 --- a/android_webview/browser/metrics/aw_metrics_service_client_sample_rate_unittest.cc +++ b/android_webview/browser/metrics/aw_metrics_service_client_sample_rate_unittest.cc
@@ -87,6 +87,7 @@ std::make_unique<AwMetricsServiceClientSampleRateTestDelegate>()); client->SetHaveMetricsConsent(/*user_consent=*/true, /*app_consent=*/true); client->Initialize(prefs.get()); + client->SetUpMetricsDir(); client->SetUnfilteredSampleRatePerMille(test.sampling_rate_per_mille); EXPECT_EQ(client->ShouldApplyMetricsFiltering(), test.expected_filtering);
diff --git a/android_webview/browser/metrics/aw_metrics_service_client_unittest.cc b/android_webview/browser/metrics/aw_metrics_service_client_unittest.cc index acb991d..f178b46 100644 --- a/android_webview/browser/metrics/aw_metrics_service_client_unittest.cc +++ b/android_webview/browser/metrics/aw_metrics_service_client_unittest.cc
@@ -117,6 +117,7 @@ std::unique_ptr<TestClient> CreateAndInitTestClient(PrefService* prefs) { auto client = std::make_unique<TestClient>(); client->Initialize(prefs); + client->SetUpMetricsDir(); return client; } @@ -169,8 +170,7 @@ // MetricsService::OnAppEnterForeground(). TEST_F(AwMetricsServiceClientTest, DoNotWatchForCrashesBeforeFieldTrialSetUp) { auto prefs = CreateTestPrefs(); - auto client = std::make_unique<TestClient>(); - client->Initialize(prefs.get()); + auto client = CreateAndInitTestClient(prefs.get()); EXPECT_TRUE(client->metrics_state_manager() ->clean_exit_beacon() ->GetUserDataDirForTesting() @@ -186,6 +186,7 @@ auto client = std::make_unique<TestClient>(); client->SetHaveMetricsConsent(true, true); client->Initialize(prefs.get()); + client->SetUpMetricsDir(); EXPECT_TRUE(client->IsRecordingActive()); EXPECT_TRUE(prefs->HasPrefPath(metrics::prefs::kMetricsClientID)); EXPECT_TRUE( @@ -197,6 +198,7 @@ auto client = std::make_unique<TestClient>(); client->SetHaveMetricsConsent(false, false); client->Initialize(prefs.get()); + client->SetUpMetricsDir(); EXPECT_FALSE(client->IsRecordingActive()); EXPECT_FALSE(prefs->HasPrefPath(metrics::prefs::kMetricsClientID)); EXPECT_FALSE( @@ -283,13 +285,12 @@ metrics::ForceEnableMetricsReportingForTesting(); auto prefs = CreateTestPrefs(); - auto client = std::make_unique<TestClient>(); + auto client = CreateAndInitTestClient(prefs.get()); // Flag should have higher precedence than sampling or user consent (but not // app consent, so we set that to 'true' for this case). - client->SetHaveMetricsConsent(false, /* app_consent */ true); client->SetInUnfilteredSample(false); - client->Initialize(prefs.get()); + client->SetHaveMetricsConsent(false, /* app_consent */ true); EXPECT_TRUE(client->IsReportingEnabled()); EXPECT_TRUE(client->IsRecordingActive()); @@ -300,13 +301,12 @@ metrics::ForceEnableMetricsReportingForTesting(); auto prefs = CreateTestPrefs(); - auto client = std::make_unique<TestClient>(); + auto client = CreateAndInitTestClient(prefs.get()); // This is a sanity check: flip consent and sampling to true, just to make // sure the flag continues to work. - client->SetHaveMetricsConsent(true, true); client->SetInUnfilteredSample(true); - client->Initialize(prefs.get()); + client->SetHaveMetricsConsent(true, true); EXPECT_TRUE(client->IsReportingEnabled()); EXPECT_TRUE(client->IsRecordingActive()); @@ -317,11 +317,10 @@ metrics::ForceEnableMetricsReportingForTesting(); auto prefs = CreateTestPrefs(); - auto client = std::make_unique<TestClient>(); + auto client = CreateAndInitTestClient(prefs.get()); // Even with the flag, app consent should be respected. client->SetHaveMetricsConsent(true, /* app_consent */ false); - client->Initialize(prefs.get()); EXPECT_FALSE(client->IsReportingEnabled()); EXPECT_FALSE(client->IsRecordingActive()); @@ -339,13 +338,12 @@ ASSERT_TRUE(base::PathExists(upload_dir)); auto prefs = CreateTestPrefs(); - auto client = std::make_unique<TestClient>(); + auto client = CreateAndInitTestClient(prefs.get()); // No consent should delete data regardless of sampling. + client->SetInUnfilteredSample(true); client->SetHaveMetricsConsent(/* user_consent= */ false, /* app_consent= */ false); - client->SetInUnfilteredSample(true); - client->Initialize(prefs.get()); task_environment()->RunUntilIdle(); EXPECT_FALSE(base::PathExists(upload_dir)); @@ -364,13 +362,12 @@ ASSERT_TRUE(base::PathExists(upload_dir)); auto prefs = CreateTestPrefs(); - auto client = std::make_unique<TestClient>(); + auto client = CreateAndInitTestClient(prefs.get()); // We should still set up the data even if the client is filtered. + client->SetInUnfilteredSample(false); client->SetHaveMetricsConsent(/* user_consent= */ true, /* app_consent= */ true); - client->SetInUnfilteredSample(false); - client->Initialize(prefs.get()); task_environment()->RunUntilIdle(); EXPECT_TRUE(base::PathExists(upload_dir)); @@ -379,16 +376,14 @@ TEST_F(AwMetricsServiceClientTest, MetricsServiceCreatedFromInitializeWithNoConsent) { auto prefs = CreateTestPrefs(); - auto client = std::make_unique<TestClient>(); - client->Initialize(prefs.get()); + auto client = CreateAndInitTestClient(prefs.get()); EXPECT_FALSE(client->IsReportingEnabled()); EXPECT_TRUE(client->GetMetricsService()); } TEST_F(AwMetricsServiceClientTest, GetMetricsServiceIfStarted) { auto prefs = CreateTestPrefs(); - auto client = std::make_unique<TestClient>(); - client->Initialize(prefs.get()); + auto client = CreateAndInitTestClient(prefs.get()); EXPECT_EQ(nullptr, client->GetMetricsServiceIfStarted()); client->SetHaveMetricsConsent(/* user_consent= */ true, /* app_consent= */ true); @@ -413,6 +408,7 @@ auto client = std::make_unique<SampleBucketValueTestClient>(); client->SetHaveMetricsConsent(/*user_consent=*/true, /*app_consent=*/true); client->Initialize(prefs.get()); + client->SetUpMetricsDir(); EXPECT_EQ(client->GetSampleBucketValue(), test.expected_sample_bucket_value); @@ -422,12 +418,12 @@ TEST_F(AwMetricsServiceClientTest, TestShouldApplyMetricsFilteringFeatureOn_AllMetrics) { auto prefs = CreateTestPrefs(); - auto client = std::make_unique<TestClient>(); - // Both metrics consent and app consent true; - client->SetHaveMetricsConsent(true, true); + auto client = CreateAndInitTestClient(prefs.get()); + client->SetUnfilteredSampleRatePerMille(20); client->SetSampleBucketValue(19); - client->Initialize(prefs.get()); + // Both metrics consent and app consent true; + client->SetHaveMetricsConsent(true, true); EXPECT_TRUE(client->IsReportingEnabled()); EXPECT_TRUE(client->IsRecordingActive()); @@ -437,13 +433,12 @@ TEST_F(AwMetricsServiceClientTest, TestShouldApplyMetricsFilteringFeatureOn_OnlyCriticalMetrics) { auto prefs = CreateTestPrefs(); - auto client = std::make_unique<TestClient>(); - // Both metrics consent and app consent true; - client->SetHaveMetricsConsent(true, true); + auto client = CreateAndInitTestClient(prefs.get()); + client->SetUnfilteredSampleRatePerMille(20); client->SetSampleBucketValue(20); - - client->Initialize(prefs.get()); + // Both metrics consent and app consent true; + client->SetHaveMetricsConsent(true, true); EXPECT_TRUE(client->IsReportingEnabled()); EXPECT_TRUE(client->IsRecordingActive());
diff --git a/android_webview/browser/network_service/aw_url_loader_throttle.cc b/android_webview/browser/network_service/aw_url_loader_throttle.cc index 9f5c077..a1a6cf3 100644 --- a/android_webview/browser/network_service/aw_url_loader_throttle.cc +++ b/android_webview/browser/network_service/aw_url_loader_throttle.cc
@@ -52,13 +52,13 @@ void AwURLLoaderThrottle::AddExtraHeadersIfNeeded( const GURL& url, net::HttpRequestHeaders* headers) { - net::HttpRequestHeaders extra_headers = - aw_browser_context_->GetExtraHeadersForUrl(url); - if (extra_headers.IsEmpty()) { + std::string extra_headers = aw_browser_context_->GetExtraHeadersForUrl(url); + if (extra_headers.empty()) return; - } - for (net::HttpRequestHeaders::Iterator it(extra_headers); it.GetNext();) { + net::HttpRequestHeaders temp_headers; + temp_headers.AddHeadersFromString(extra_headers); + for (net::HttpRequestHeaders::Iterator it(temp_headers); it.GetNext();) { if (headers->HasHeader(it.name())) continue;
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java index 31cfd9f..fce7312 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwContents.java +++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -1152,7 +1152,7 @@ mAutofillProvider.setWebContents(mWebContents); } selectionActionMenuDelegate.setAutofillSelectionMenuItemHelper( - new AutofillSelectionMenuItemHelper(mContext, mAutofillProvider)); + new AutofillSelectionMenuItemHelper(mAutofillProvider)); AwContentsJni.get().initializeAndroidAutofill(mNativeAwContents); }
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/ArchivedTabsDialogCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/ArchivedTabsDialogCoordinator.java index daddead..270e1100 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/ArchivedTabsDialogCoordinator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/ArchivedTabsDialogCoordinator.java
@@ -68,7 +68,6 @@ import org.chromium.chrome.browser.tasks.tab_management.TabSwitcherMessageManager.MessageType; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeControllerFactory; -import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.chrome.browser.undo_tab_close_snackbar.SavedTabGroupUndoBarController; import org.chromium.components.browser_ui.desktop_windowing.DesktopWindowStateManager; @@ -423,7 +422,7 @@ mCurrentTabGroupModelFilterSupplier; private final DestroyChecker mDestroyChecker = new DestroyChecker(); - private @Nullable EdgeToEdgePadAdjuster mEdgeToEdgePadAdjuster; + private EdgeToEdgePadAdjuster mEdgeToEdgePadAdjuster; private TabListRecyclerView mDialogRecyclerView; private WeakReference<TabListRecyclerView> mTabSwitcherRecyclerView; private @TabActionState int mTabActionState = TabActionState.CLOSABLE; @@ -516,11 +515,9 @@ mActionConfirmationDialog = new ActionConfirmationDialog(mActivity, mModalDialogManager); mEdgeToEdgeSupplier = edgeToEdgeSupplier; - if (EdgeToEdgeUtils.isDrawKeyNativePageToEdgeEnabled()) { - mEdgeToEdgePadAdjuster = - EdgeToEdgeControllerFactory.createForViewAndObserveSupplier( - getCloseAllTabsButtonContainer(), mEdgeToEdgeSupplier); - } + mEdgeToEdgePadAdjuster = + EdgeToEdgeControllerFactory.createForViewAndObserveSupplier( + getCloseAllTabsButtonContainer(), mEdgeToEdgeSupplier); mTabGroupSyncService = tabGroupSyncService; mPaneManagerSupplier = paneManagerSupplier;
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupListCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupListCoordinator.java index c68190e..ee73128 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupListCoordinator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupListCoordinator.java
@@ -36,7 +36,6 @@ import org.chromium.chrome.browser.tabmodel.TabGroupModelFilter; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeControllerFactory; -import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils; import org.chromium.chrome.tab_ui.R; import org.chromium.components.collaboration.CollaborationService; import org.chromium.components.collaboration.messaging.MessagingBackendService; @@ -72,7 +71,7 @@ private final TabListFaviconProvider mTabListFaviconProvider; private final TabGroupListMediator mTabGroupListMediator; - private @Nullable EdgeToEdgePadAdjuster mEdgeToEdgePadAdjuster; + private EdgeToEdgePadAdjuster mEdgeToEdgePadAdjuster; /** * @param context Used to load resources and views. @@ -196,11 +195,9 @@ tabGroupRemovedMessageMediator, persistentVersioningMessageMediator); - if (EdgeToEdgeUtils.isDrawKeyNativePageToEdgeEnabled()) { - mEdgeToEdgePadAdjuster = - EdgeToEdgeControllerFactory.createForViewAndObserveSupplier( - mView.getRecyclerView(), edgeToEdgeSupplier); - } + mEdgeToEdgePadAdjuster = + EdgeToEdgeControllerFactory.createForViewAndObserveSupplier( + mView.getRecyclerView(), edgeToEdgeSupplier); } /** Returns the root view of this component, allowing the parent to anchor in the hierarchy. */ @@ -209,6 +206,7 @@ } /** Permanently cleans up this component. */ + @SuppressWarnings("NullAway") public void destroy() { mTabGroupListMediator.destroy(); mSimpleRecyclerViewAdapter.destroy();
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEditorCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEditorCoordinator.java index 5d0d8906..6703748 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEditorCoordinator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEditorCoordinator.java
@@ -39,7 +39,6 @@ import org.chromium.chrome.browser.tasks.tab_management.TabUiMetricsHelper.TabListEditorExitMetricGroups; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeControllerFactory; -import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.chrome.browser.undo_tab_close_snackbar.UndoBarExplicitTrigger; import org.chromium.chrome.tab_ui.R; @@ -625,9 +624,7 @@ PropertyModelChangeProcessor.create( mModel, mTabListEditorLayout, TabListEditorLayoutBinder::bind); - if (EdgeToEdgeUtils.isDrawKeyNativePageToEdgeEnabled() - && mEdgeToEdgeSupplier != null - && mDisplayGroups) { + if (mEdgeToEdgeSupplier != null && mDisplayGroups) { assert mTabListMode != TabListMode.STRIP : "STRIP tab lists should not be padded for edge-to-edge."; mEdgeToEdgePadAdjuster =
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherPaneCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherPaneCoordinator.java index a8feea4..62ead18 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherPaneCoordinator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherPaneCoordinator.java
@@ -77,7 +77,6 @@ import org.chromium.chrome.browser.tasks.tab_management.TabSwitcherMessageManager.MessageUpdateObserver; import org.chromium.chrome.browser.tasks.tab_management.pinned_tabs_strip.PinnedTabStripCoordinator; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController; -import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils; import org.chromium.chrome.browser.undo_tab_close_snackbar.UndoBarThrottle; import org.chromium.chrome.tab_ui.R; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; @@ -192,8 +191,7 @@ private @Nullable Function<Integer, View> mFetchViewByIndex; private @Nullable Supplier<Pair<Integer, Integer>> mGetVisibleIndex; - /** Not null when drawing the hub edge to edge. */ - private @Nullable EdgeToEdgePadAdjuster mEdgeToEdgePadAdjuster; + private EdgeToEdgePadAdjuster mEdgeToEdgePadAdjuster; private TabListCoordinator.@Nullable DragObserver mDragObserver; private @Nullable TabSwitcherGroupSuggestionService mTabSwitcherGroupSuggestionService; @@ -451,20 +449,18 @@ PropertyModelChangeProcessor.create( containerViewModel, recyclerView, TabListContainerViewBinder::bind); - if (EdgeToEdgeUtils.isDrawKeyNativePageToEdgeEnabled()) { - mEdgeToEdgePadAdjuster = - new EdgeToEdgePadAdjuster() { - @Override - public void overrideBottomInset(int inset) { - mEdgeToEdgeBottomInsets = inset; - updateBottomPadding(); - } + mEdgeToEdgePadAdjuster = + new EdgeToEdgePadAdjuster() { + @Override + public void overrideBottomInset(int inset) { + mEdgeToEdgeBottomInsets = inset; + updateBottomPadding(); + } - @Override - public void destroy() {} - }; - mEdgeToEdgeSupplier.addObserver(mOnEdgeToEdgeControllerChangedCallback); - } + @Override + public void destroy() {} + }; + mEdgeToEdgeSupplier.addObserver(mOnEdgeToEdgeControllerChangedCallback); RecordHistogram.recordTimesHistogram( "Android.TabSwitcher.SetupRecyclerView.Time", @@ -935,7 +931,6 @@ } /** Return the Edge to edge pad adjuster. */ - @Nullable EdgeToEdgePadAdjuster getEdgeToEdgePadAdjusterForTesting() { return mEdgeToEdgePadAdjuster; } @@ -968,13 +963,9 @@ } private void updateBottomPadding() { - int bottomPadding = 0; - if (EdgeToEdgeUtils.isDrawKeyNativePageToEdgeEnabled()) { - bottomPadding = mEdgeToEdgeBottomInsets; - mContainerViewModel.set( - TabListContainerProperties.IS_CLIP_TO_PADDING, bottomPadding == 0); - } - mContainerViewModel.set(TabListContainerProperties.BOTTOM_PADDING, bottomPadding); + mContainerViewModel.set( + TabListContainerProperties.IS_CLIP_TO_PADDING, mEdgeToEdgeBottomInsets == 0); + mContainerViewModel.set(TabListContainerProperties.BOTTOM_PADDING, mEdgeToEdgeBottomInsets); } private void onFilterChange(@Nullable TabGroupModelFilter filter) {
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java index 3b4bf69..cbeac7c6 100644 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java
@@ -67,7 +67,6 @@ import org.chromium.chrome.browser.toolbar.top.Toolbar; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeControllerFactory; -import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.chrome.browser.ui.native_page.TouchEnabledDelegate; import org.chromium.chrome.browser.ui.signin.PersonalizedSigninPromoView; @@ -177,7 +176,7 @@ private final Callback<Integer> mTabStripHeightChangeCallback; // Used to handle padding adjustment when edge to edge is enabled. - private @Nullable EdgeToEdgePadAdjuster mEdgePadAdjuster; + private final EdgeToEdgePadAdjuster mEdgePadAdjuster; private final boolean mIsNewTabPageCustomizationEnabled; private @Nullable ImageButton mNtpCustomizationButton; private @Nullable NtpCustomizationConfigManager mNtpCustomizationConfigManager; @@ -627,11 +626,9 @@ FeedSurfaceTracker.getInstance().trackSurface(this); // Set up edge to edge - if (EdgeToEdgeUtils.isDrawKeyNativePageToEdgeEnabled()) { - mEdgePadAdjuster = - EdgeToEdgeControllerFactory.createForViewAndObserveSupplier( - mRecyclerView, edgeToEdgeControllerSupplier); - } + mEdgePadAdjuster = + EdgeToEdgeControllerFactory.createForViewAndObserveSupplier( + mRecyclerView, edgeToEdgeControllerSupplier); // Creates streams, initiates content changes. mMediator.updateContent();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java index 3dbbc8f..295090d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java
@@ -66,6 +66,7 @@ import org.chromium.chrome.browser.ui.edge_to_edge.SimpleEdgeToEdgeController; import org.chromium.components.browser_ui.styles.SemanticColorUtils; import org.chromium.components.browser_ui.util.AutomotiveUtils; +import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.ImmutableWeakReference; import org.chromium.ui.base.UiAndroidFeatureList; import org.chromium.ui.display.DisplaySwitches; @@ -138,6 +139,8 @@ private @Nullable EdgeToEdgeControllerCreator mEdgeToEdgeControllerCreator; private NtpThemeStateProvider.@Nullable Observer mNtpThemeStateObserver; + private static boolean sIsTabletDeterminationMismatchRecord; + @Override protected void attachBaseContext(Context newBase) { super.attachBaseContext(newBase); @@ -173,7 +176,17 @@ config.fontScale = 0; // NightMode and other applyOverrides must be done before onCreate in attachBaseContext. // https://crbug.com/1139760 - if (applyOverrides(newBase, config)) applyOverrideConfiguration(config); + if (applyOverrides(newBase, config)) { + applyOverrideConfiguration(config); + if (!sIsTabletDeterminationMismatchRecord) { + sIsTabletDeterminationMismatchRecord = true; + RecordHistogram.recordBooleanHistogram( + "Android.TabletDeterminationMismatch", + DeviceFormFactor.isNonMultiDisplayContextOnTablet(newBase) + != (DisplayUtil.getCurrentSmallestScreenWidth(newBase) + >= DeviceFormFactor.MINIMUM_TABLET_WIDTH_DP)); + } + } } @Override @@ -456,7 +469,7 @@ @CallSuper protected boolean applyOverrides(Context baseContext, Configuration overrideConfig) { boolean isSmallestScreenWidthDpOverridden = false; - if (UiAndroidFeatureList.sFormFactorUseMaxWindowMetrics.isEnabled()) { + if (UiAndroidFeatureList.sRefactorMinWidthContextOverride.isEnabled()) { // We override the smallestScreenWidthDp here for two reasons: // 1. To prevent multi-window from hiding the tabstrip when on a tablet. // 2. To ensure mIsTablet only needs to be set once. Since the override lasts for the
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/OWNERS b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/OWNERS index a1b5c01..7dc91d6d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/OWNERS +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/OWNERS
@@ -3,3 +3,4 @@ skavuluru@google.com twellington@chromium.org zheliooo@google.com +per-file TabContextMenuCoordinator*=jhimawan@google.com \ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/OWNERS b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/OWNERS index 5ba65af6..14d80d3 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/OWNERS +++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/OWNERS
@@ -1,2 +1,3 @@ twellington@chromium.org sinansahin@google.com +jhimawan@google.com
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitializationActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitializationActivity.java index a1a607e..d791dfe 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitializationActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitializationActivity.java
@@ -151,8 +151,8 @@ @Override @CallSuper protected boolean applyOverrides(Context baseContext, Configuration overrideConfig) { - super.applyOverrides(baseContext, overrideConfig); - if (!UiAndroidFeatureList.sFormFactorUseMaxWindowMetrics.isEnabled()) { + boolean result = super.applyOverrides(baseContext, overrideConfig); + if (!UiAndroidFeatureList.sRefactorMinWidthContextOverride.isEnabled()) { // We override the smallestScreenWidthDp here for two reasons: // 1. To prevent multi-window from hiding the tabstrip when on a tablet. @@ -163,7 +163,7 @@ DisplayUtil.getCurrentSmallestScreenWidth(baseContext); return true; } - return false; + return result; } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/IncognitoNewTabPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/IncognitoNewTabPage.java index 7ea108e..7f19924 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/IncognitoNewTabPage.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/IncognitoNewTabPage.java
@@ -21,7 +21,6 @@ import org.chromium.chrome.browser.tab_ui.InvalidationAwareThumbnailProvider; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeControllerFactory; -import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils; import org.chromium.chrome.browser.ui.native_page.BasicNativePage; import org.chromium.chrome.browser.ui.native_page.NativePageHost; import org.chromium.chrome.browser.url_constants.UrlConstantResolver; @@ -45,7 +44,7 @@ private boolean mIsLoaded; private final IncognitoNewTabPageManager mIncognitoNewTabPageManager; - private @Nullable EdgeToEdgePadAdjuster mEdgeToEdgePadAdjuster; + private EdgeToEdgePadAdjuster mEdgeToEdgePadAdjuster; private void showIncognitoLearnMore() { HelpAndFeedbackLauncherImpl.getForProfile(mProfile) @@ -95,11 +94,9 @@ initWithView(mIncognitoNewTabPageView); - if (EdgeToEdgeUtils.isDrawKeyNativePageToEdgeEnabled()) { - mEdgeToEdgePadAdjuster = - EdgeToEdgeControllerFactory.createForViewAndObserveSupplier( - mIncognitoNewTabPageView.getScrollView(), edgeToEdgeControllerSupplier); - } + mEdgeToEdgePadAdjuster = + EdgeToEdgeControllerFactory.createForViewAndObserveSupplier( + mIncognitoNewTabPageView.getScrollView(), edgeToEdgeControllerSupplier); } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsPage.java index d377c8d..2310dc9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsPage.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsPage.java
@@ -25,7 +25,6 @@ import org.chromium.chrome.browser.tab_ui.InvalidationAwareThumbnailProvider; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeControllerFactory; -import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils; import org.chromium.chrome.browser.ui.native_page.BasicSmoothTransitionDelegate; import org.chromium.chrome.browser.ui.native_page.NativePage; import org.chromium.chrome.browser.ui.native_page.TouchEnabledDelegate; @@ -73,7 +72,7 @@ private final ObservableSupplier<EdgeToEdgeController> mEdgeToEdgeSupplier; private final Callback<Integer> mTabStripHeightChangeCallback; private @Nullable SmoothTransitionDelegate mSmoothTransitionDelegate; - private @Nullable EdgeToEdgePadAdjuster mPadAdjuster; + private EdgeToEdgePadAdjuster mPadAdjuster; private boolean mIsTouchEnabled = true; /** @@ -139,11 +138,9 @@ mView.getPaddingBottom()); mTabStripHeightSupplier.addObserver(mTabStripHeightChangeCallback); mEdgeToEdgeSupplier = edgeToEdgeSupplier; - if (EdgeToEdgeUtils.isDrawKeyNativePageToEdgeEnabled()) { - mPadAdjuster = - EdgeToEdgeControllerFactory.createForViewAndObserveSupplier( - mListView, mEdgeToEdgeSupplier); - } + mPadAdjuster = + EdgeToEdgeControllerFactory.createForViewAndObserveSupplier( + mListView, mEdgeToEdgeSupplier); onUpdated(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java index 947bff7..61d47cda 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java
@@ -318,7 +318,7 @@ @CallSuper protected boolean applyOverrides(Context baseContext, Configuration overrideConfig) { super.applyOverrides(baseContext, overrideConfig); - if (!UiAndroidFeatureList.sFormFactorUseMaxWindowMetrics.isEnabled()) { + if (!UiAndroidFeatureList.sRefactorMinWidthContextOverride.isEnabled()) { // We override the smallestScreenWidthDp here to ensure mIsTablet which relies on // smallestScreenWidthDp is set based on display size instead of window size.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java index 028433d1..c73f5b2 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java
@@ -2256,8 +2256,7 @@ AutofillSelectionActionMenuDelegate selectionActionMenuDelegate = new AutofillSelectionActionMenuDelegate(); selectionActionMenuDelegate.setAutofillSelectionMenuItemHelper( - new AutofillSelectionMenuItemHelper( - ContextUtils.getApplicationContext(), mAutofillProvider)); + new AutofillSelectionMenuItemHelper(mAutofillProvider)); controller.setSelectionActionMenuDelegate(selectionActionMenuDelegate); }
diff --git a/chrome/app/chrome_command_ids.h b/chrome/app/chrome_command_ids.h index 5549c40..d73630ab 100644 --- a/chrome/app/chrome_command_ids.h +++ b/chrome/app/chrome_command_ids.h
@@ -586,6 +586,7 @@ #define IDC_GLIC_STATUS_ICON_MENU_SETTINGS 53313 #define IDC_GLIC_STATUS_ICON_MENU_EXIT 53314 #define IDC_GLIC_STATUS_ICON_MENU_CLOSE 53315 +#define IDC_GLIC_STATUS_ICON_MENU_TOGGLE 53316 // Glic button context menu and tabstrip context menu #define IDC_GLIC_TOGGLE_PIN 53320
diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd index 13e0068..3d3755c0 100644 --- a/chrome/app/chromium_strings.grd +++ b/chrome/app/chromium_strings.grd
@@ -2801,12 +2801,27 @@ <message name="IDS_GLIC_STATUS_ICON_TOOLTIP_CLOSE_BETA" translateable="false" desc="This is the tooltip that is shown when the glic status icon is hovered and the Glic window is open. It indicates that this is the Beta version of the browser."> Close Gemini (Beta) </message> + <message name="IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE" translateable="false" desc="This is the tooltip that is shown when the glic status icon is hovered."> + Toggle Gemini in Chromium + </message> + <message name="IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE_CANARY" translateable="false" desc="This is the tooltip that is shown when the glic status icon is hovered. It indicates that this is the Canary version of the browser."> + Toggle Gemini (Canary) + </message> + <message name="IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE_DEV" translateable="false" desc="This is the tooltip that is shown when the glic status icon is hovered. It indicates that this is the Dev version of the browser."> + Toggle Gemini (Dev) + </message> + <message name="IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE_BETA" translateable="false" desc="This is the tooltip that is shown when the glic status icon is hovered. It indicates that this is the Beta version of the browser."> + Toggle Gemini (Beta) + </message> <message name="IDS_GLIC_STATUS_ICON_MENU_SHOW" translateable="false" desc="This is the menu item for showing the glic UI."> Open Gemini in Chromium </message> <message name="IDS_GLIC_STATUS_ICON_MENU_CLOSE" translateable="false" desc="This is the menu item for closing the Glic window."> Close Gemini in Chromium </message> + <message name="IDS_GLIC_STATUS_ICON_MENU_TOGGLE" translateable="false" desc="This is the menu item for toggling the glic UI."> + Toggle Gemini in Chromium + </message> <message name ="IDS_GLIC_INELIGIBLE_PROFILE_NOTICE" translateable="false" desc="This is the text of the glic ineligible profile notice."> To use Gemini in Chromium, sign in with a different Google Account </message>
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index dcf0a06..4174303 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -8582,13 +8582,13 @@ <message name="IDS_NTP_COMPOSE_DEEP_SEARCH" desc="The label for the deep search button in the context menu in the composebox as well as the chip that indicates that the user is in deep search mode."> Deep Search </message> - <message name="IDS_NTP_COMPOSE_CREATE_IMAGES" desc="The label for the create images button in the context menu in the composebox as well as the chip that indicates that the user is in create images mode." translateable="false"> + <message name="IDS_NTP_COMPOSE_CREATE_IMAGES" desc="The label for the create images button in the context menu in the composebox as well as the chip that indicates that the user is in create images mode."> Create images </message> - <message name="IDS_COMPOSE_DEEP_SEARCH_PLACEHOLDER" desc="Placeholder text for the composebox when in deep search mode." translateable="false"> + <message name="IDS_COMPOSE_DEEP_SEARCH_PLACEHOLDER" desc="Placeholder text for the composebox when in deep search mode."> Research anything </message> - <message name="IDS_COMPOSE_CREATE_IMAGE_PLACEHOLDER" desc="Placeholder text for the composebox when in create image mode." translateable="false"> + <message name="IDS_COMPOSE_CREATE_IMAGE_PLACEHOLDER" desc="Placeholder text for the composebox when in create image mode."> Describe your image </message>
diff --git a/chrome/app/generated_resources_grd/IDS_COMPOSE_CREATE_IMAGE_PLACEHOLDER.png.sha1 b/chrome/app/generated_resources_grd/IDS_COMPOSE_CREATE_IMAGE_PLACEHOLDER.png.sha1 index 46fcbc32..7ab1aa1 100644 --- a/chrome/app/generated_resources_grd/IDS_COMPOSE_CREATE_IMAGE_PLACEHOLDER.png.sha1 +++ b/chrome/app/generated_resources_grd/IDS_COMPOSE_CREATE_IMAGE_PLACEHOLDER.png.sha1
@@ -1 +1 @@ -09ab06858c4c656382cfeee67c62e486fb384df1 \ No newline at end of file +8e70e9330f6e8d6255623376cfc29c0f171806d4 \ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_COMPOSE_DEEP_SEARCH_PLACEHOLDER.png.sha1 b/chrome/app/generated_resources_grd/IDS_COMPOSE_DEEP_SEARCH_PLACEHOLDER.png.sha1 index 3c9e3b891..80bf70ba 100644 --- a/chrome/app/generated_resources_grd/IDS_COMPOSE_DEEP_SEARCH_PLACEHOLDER.png.sha1 +++ b/chrome/app/generated_resources_grd/IDS_COMPOSE_DEEP_SEARCH_PLACEHOLDER.png.sha1
@@ -1 +1 @@ -e7c19f6d6878392a429cf078164beff686815682 \ No newline at end of file +673f202ef04c5804cfbf6ed6e6fcdc42c8102a8b \ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_NTP_COMPOSE_CREATE_IMAGES.png.sha1 b/chrome/app/generated_resources_grd/IDS_NTP_COMPOSE_CREATE_IMAGES.png.sha1 index f4c965f6b..c1dd8cfd 100644 --- a/chrome/app/generated_resources_grd/IDS_NTP_COMPOSE_CREATE_IMAGES.png.sha1 +++ b/chrome/app/generated_resources_grd/IDS_NTP_COMPOSE_CREATE_IMAGES.png.sha1
@@ -1 +1 @@ -c144631da369c9f3af49acfddb9325701a3ee592 \ No newline at end of file +ef57ed04d4adaf03a3e50d952355762ed0835d58 \ No newline at end of file
diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_strings.grd index 521d2dd..72a3ba7 100644 --- a/chrome/app/google_chrome_strings.grd +++ b/chrome/app/google_chrome_strings.grd
@@ -2823,12 +2823,27 @@ <message name="IDS_GLIC_STATUS_ICON_TOOLTIP_CLOSE_BETA" desc="This is the tooltip that is shown when the Gemini status icon is hovered and the Gemini window is open. It indicates that this is the Beta version of the browser."> Close Gemini in Chrome Beta </message> + <message name="IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE" desc="This is the tooltip that is shown when the Gemini status icon is hovered."> + Toggle Gemini in Chrome + </message> + <message name="IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE_CANARY" desc="This is the tooltip that is shown when the Gemini status icon is hovered. It indicates that this is the Canary version of the browser."> + Toggle Gemini in Chrome Canary + </message> + <message name="IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE_DEV" desc="This is the tooltip that is shown when the Gemini status icon is hovered. It indicates that this is the Dev version of the browser."> + Toggle Gemini in Chrome Dev + </message> + <message name="IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE_BETA" desc="This is the tooltip that is shown when the Gemini status icon is hovered. It indicates that this is the Beta version of the browser."> + Toggle Gemini in Chrome Beta + </message> <message name="IDS_GLIC_STATUS_ICON_MENU_SHOW" desc="This is the menu item for showing the Gemini experience in Chrome."> Open Gemini in Chrome </message> <message name="IDS_GLIC_STATUS_ICON_MENU_CLOSE" desc="This is the menu item for closing the Gemini window."> Close Gemini in Chrome </message> + <message name="IDS_GLIC_STATUS_ICON_MENU_TOGGLE" desc="This is the menu item for toggling the Gemini UI."> + Toggle Gemini in Chrome + </message> <message name ="IDS_GLIC_INELIGIBLE_PROFILE_NOTICE" desc="This is the text of the Gemini ineligible profile notice."> To use Gemini in Chrome, sign in with a different Google Account </message>
diff --git a/chrome/app/google_chrome_strings_grd/IDS_GLIC_STATUS_ICON_MENU_TOGGLE.png.sha1 b/chrome/app/google_chrome_strings_grd/IDS_GLIC_STATUS_ICON_MENU_TOGGLE.png.sha1 new file mode 100644 index 0000000..1972394f --- /dev/null +++ b/chrome/app/google_chrome_strings_grd/IDS_GLIC_STATUS_ICON_MENU_TOGGLE.png.sha1
@@ -0,0 +1 @@ +860909912b0b9b51bd39c2d9cfa2a25e389e514c \ No newline at end of file
diff --git a/chrome/app/google_chrome_strings_grd/IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE.png.sha1 b/chrome/app/google_chrome_strings_grd/IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE.png.sha1 new file mode 100644 index 0000000..c49b6253 --- /dev/null +++ b/chrome/app/google_chrome_strings_grd/IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE.png.sha1
@@ -0,0 +1 @@ +ee5fd028701e7dc618044d1bec392a74eec9f1f2 \ No newline at end of file
diff --git a/chrome/app/google_chrome_strings_grd/IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE_BETA.png.sha1 b/chrome/app/google_chrome_strings_grd/IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE_BETA.png.sha1 new file mode 100644 index 0000000..c49b6253 --- /dev/null +++ b/chrome/app/google_chrome_strings_grd/IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE_BETA.png.sha1
@@ -0,0 +1 @@ +ee5fd028701e7dc618044d1bec392a74eec9f1f2 \ No newline at end of file
diff --git a/chrome/app/google_chrome_strings_grd/IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE_CANARY.png.sha1 b/chrome/app/google_chrome_strings_grd/IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE_CANARY.png.sha1 new file mode 100644 index 0000000..c49b6253 --- /dev/null +++ b/chrome/app/google_chrome_strings_grd/IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE_CANARY.png.sha1
@@ -0,0 +1 @@ +ee5fd028701e7dc618044d1bec392a74eec9f1f2 \ No newline at end of file
diff --git a/chrome/app/google_chrome_strings_grd/IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE_DEV.png.sha1 b/chrome/app/google_chrome_strings_grd/IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE_DEV.png.sha1 new file mode 100644 index 0000000..c49b6253 --- /dev/null +++ b/chrome/app/google_chrome_strings_grd/IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE_DEV.png.sha1
@@ -0,0 +1 @@ +ee5fd028701e7dc618044d1bec392a74eec9f1f2 \ No newline at end of file
diff --git a/chrome/app/theme/default_100_percent/google_chrome b/chrome/app/theme/default_100_percent/google_chrome index e080fee..662d6ea 160000 --- a/chrome/app/theme/default_100_percent/google_chrome +++ b/chrome/app/theme/default_100_percent/google_chrome
@@ -1 +1 @@ -Subproject commit e080feee1bd6b3ac5ccff65059ac093f7d46ad08 +Subproject commit 662d6ea16a230560e47522daa2dc12497beb5157
diff --git a/chrome/app/theme/default_200_percent/google_chrome b/chrome/app/theme/default_200_percent/google_chrome index 252c885..ff9817f 160000 --- a/chrome/app/theme/default_200_percent/google_chrome +++ b/chrome/app/theme/default_200_percent/google_chrome
@@ -1 +1 @@ -Subproject commit 252c8851666cf517fa400ef87ff00d02eae3ee49 +Subproject commit ff9817fe7776a144405959f00fcaf2b1add3154d
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index d39a9de..3412057 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -294,8 +294,6 @@ "command_updater_impl.h", "commerce/product_specifications/product_specifications_service_factory.cc", "commerce/product_specifications/product_specifications_service_factory.h", - "complex_tasks/task_tab_helper.cc", - "complex_tasks/task_tab_helper.h", "component_updater/afp_blocked_domain_list_component_installer.cc", "component_updater/afp_blocked_domain_list_component_installer.h", "component_updater/chrome_component_updater_configurator.cc", @@ -857,6 +855,8 @@ "offline_items_collection/offline_content_aggregator_factory.h", "omnibox/contextual_session_service_factory.cc", "omnibox/contextual_session_service_factory.h", + "omnibox/contextual_session_web_contents_helper.cc", + "omnibox/contextual_session_web_contents_helper.h", "origin_trials/origin_trials_factory.cc", "origin_trials/origin_trials_factory.h", "page_content_annotations/annotate_page_content_request.cc", @@ -1892,6 +1892,8 @@ "//chrome/browser/commerce", "//chrome/browser/commerce:impl", "//chrome/browser/companion/text_finder", + "//chrome/browser/complex_tasks", + "//chrome/browser/complex_tasks:impl", "//chrome/browser/content_extraction", "//chrome/browser/content_settings", "//chrome/browser/content_settings:content_settings_factory", @@ -3651,6 +3653,11 @@ # headers get componentized: # - c/b/android/tab_android.h "//chrome/browser/dom_distiller:impl", + + # TODO(crbug.com/353332589): Remove this circular dependency when the following + # headers get componentized: + # - c/b/android/tab_android.h + "//chrome/browser/complex_tasks:impl", ] if (safe_browsing_mode == 2) {
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 87a9c7d..9150506 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -6182,12 +6182,6 @@ flag_descriptions::kGridTabSwitcherUpdateDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kGridTabSwitcherUpdate)}, - // Predictive back gesture - {"allow-tab-closing-upon-minimization", - flag_descriptions::kAllowTabClosingUponMinimizationName, - flag_descriptions::kAllowTabClosingUponMinimizationDescription, kOsAndroid, - FEATURE_VALUE_TYPE(chrome::android::kAllowTabClosingUponMinimization)}, - // Pinned tabs. {"android-pinned-tabs", flag_descriptions::kAndroidPinnedTabsName, flag_descriptions::kAndroidPinnedTabsDescription, kOsAndroid, @@ -6222,10 +6216,10 @@ flag_descriptions::kToolbarPhoneAnimationRefactorDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kToolbarPhoneAnimationRefactor)}, - {"form-factor-use-window-metrics", - flag_descriptions::kFormFactorUseMaxWindowMetricsName, - flag_descriptions::kFormFactorUseMaxWindowMetricsDescription, kOsAndroid, - FEATURE_VALUE_TYPE(ui::kFormFactorUseMaxWindowMetrics)}, + {"refactor-min-width-context-override", + flag_descriptions::kRefactorMinWidthContextOverrideName, + flag_descriptions::kRefactorMinWidthContextOverrideDescription, kOsAndroid, + FEATURE_VALUE_TYPE(ui::kRefactorMinWidthContextOverride)}, {"toolbar-tablet-resize-refactor", flag_descriptions::kToolbarTabletResizeRefactorName, @@ -13254,6 +13248,15 @@ flag_descriptions::kUserValueDefaultBrowserStringsDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kUserValueDefaultBrowserStrings)}, +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ + BUILDFLAG(IS_CHROMEOS) + {"read-anything-read-aloud-ts-text-segmentation", + flag_descriptions::kReadAnythingReadAloudTsTextSegmentationName, + flag_descriptions::kReadAnythingReadAloudTsTextSegmentationDescription, + kOsDesktop, + FEATURE_VALUE_TYPE(features::kReadAnythingReadAloudTSTextSegmentation)}, +#endif + // Add new entries above this line. // NOTE: Adding a new flag requires adding a corresponding entry to enum
diff --git a/chrome/browser/actor/actor_keyed_service.cc b/chrome/browser/actor/actor_keyed_service.cc index ed2cb94..081e104 100644 --- a/chrome/browser/actor/actor_keyed_service.cc +++ b/chrome/browser/actor/actor_keyed_service.cc
@@ -130,7 +130,12 @@ inactive_tasks_.clear(); } -TaskId ActorKeyedService::CreateTask(webui::mojom::TaskOptionsPtr options) { +TaskId ActorKeyedService::CreateTask() { + return CreateTaskWithOptions(nullptr); +} + +TaskId ActorKeyedService::CreateTaskWithOptions( + webui::mojom::TaskOptionsPtr options) { TRACE_EVENT0("actor", "ActorKeyedService::CreateTask"); base::UmaHistogramBoolean("Actor.Task.Created", true); auto execution_engine = std::make_unique<ExecutionEngine>(profile_.get());
diff --git a/chrome/browser/actor/actor_keyed_service.h b/chrome/browser/actor/actor_keyed_service.h index 16456c1..6978c76 100644 --- a/chrome/browser/actor/actor_keyed_service.h +++ b/chrome/browser/actor/actor_keyed_service.h
@@ -16,7 +16,7 @@ #include "chrome/browser/actor/aggregated_journal.h" #include "chrome/common/actor/action_result.h" #include "chrome/common/actor/task_id.h" -#include "chrome/common/actor_webui.mojom.h" +#include "chrome/common/actor_webui.mojom-forward.h" #include "chrome/common/buildflags.h" #include "components/keyed_service/core/keyed_service.h" #include "components/password_manager/core/browser/actor_login/actor_login_types.h" @@ -76,7 +76,8 @@ // Starts a new task with an execution engine and returns the new task's id. // `options`, when provided, contains information used to initialize the // task. - TaskId CreateTask(webui::mojom::TaskOptionsPtr options = nullptr); + TaskId CreateTask(); + TaskId CreateTaskWithOptions(webui::mojom::TaskOptionsPtr options); // Executes the given ToolRequest actions using the execution engine for the // given task id.
diff --git a/chrome/browser/actor/tools/observation_delay_controller.cc b/chrome/browser/actor/tools/observation_delay_controller.cc index fd85b31..d4e20bb 100644 --- a/chrome/browser/actor/tools/observation_delay_controller.cc +++ b/chrome/browser/actor/tools/observation_delay_controller.cc
@@ -22,6 +22,8 @@ #include "chrome/common/actor/task_id.h" #include "chrome/common/chrome_features.h" #include "chrome/common/chrome_render_frame.mojom.h" +#include "components/tabs/public/tab_handle_factory.h" +#include "components/tabs/public/tab_interface.h" #include "content/public/browser/navigation_handle.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h" @@ -84,11 +86,24 @@ } } +ObservationDelayController::ObservationDelayController( + TaskId task_id, + AggregatedJournal& journal) + : journal_(journal), task_id_(task_id) { + journal.Log( + GURL::EmptyGURL(), task_id, mojom::JournalTrack::kActor, + "ObservationDelay: Created", + JournalDetailsBuilder().Add("May Use PageStability", false).Build()); +} + ObservationDelayController::~ObservationDelayController() = default; -void ObservationDelayController::Wait(ReadyCallback callback) { +void ObservationDelayController::Wait(tabs::TabInterface& target_tab, + ReadyCallback callback) { ready_callback_ = std::move(callback); + WebContentsObserver::Observe(target_tab.GetContents()); + wait_journal_entry_ = journal_->CreatePendingAsyncEntry( GURL::EmptyGURL(), task_id_, mojom::JournalTrack::kActor, "ObservationDelay: Wait", {});
diff --git a/chrome/browser/actor/tools/observation_delay_controller.h b/chrome/browser/actor/tools/observation_delay_controller.h index 228cbc2..95bf2b3 100644 --- a/chrome/browser/actor/tools/observation_delay_controller.h +++ b/chrome/browser/actor/tools/observation_delay_controller.h
@@ -16,6 +16,7 @@ #include "chrome/browser/actor/aggregated_journal.h" #include "chrome/common/actor.mojom.h" #include "chrome/common/actor/task_id.h" +#include "components/tabs/public/tab_interface.h" #include "content/public/browser/navigation_handle.h" #include "content/public/browser/web_contents_observer.h" #include "mojo/public/cpp/bindings/remote.h" @@ -52,11 +53,20 @@ TaskId task_id, AggregatedJournal& journal, std::optional<PageStabilityConfig> page_stability_config); + // Constructor for when we're not watching for page stability and do not have + // a target RenderFrameHost available. + ObservationDelayController(TaskId task_id, AggregatedJournal& journal); ~ObservationDelayController() override; // Note: Callback will always be executed asynchronously. It may be run after // this object is deleted so must manage its own lifetime. - void Wait(ReadyCallback callback); + // Note: If a RenderFrame was provided in the constructor, `target_tab` should + // contain it. + // + // `target_tab`: The tab on which to wait. The WebContents of this tab will be + // observed by this controller, overwriting any previously observed + // WebContents. + void Wait(tabs::TabInterface& target_tab, ReadyCallback callback); // content::WebContentsObserver void DidStopLoading() override;
diff --git a/chrome/browser/actor/tools/observation_delay_controller_browsertest.cc b/chrome/browser/actor/tools/observation_delay_controller_browsertest.cc index 29c3b6429..ee63b8f 100644 --- a/chrome/browser/actor/tools/observation_delay_controller_browsertest.cc +++ b/chrome/browser/actor/tools/observation_delay_controller_browsertest.cc
@@ -331,7 +331,7 @@ // Start waiting on the controller. It should be blocked in page stability. TestFuture<void> result; - controller.Wait(result.GetCallback()); + controller.Wait(*active_tab(), result.GetCallback()); ASSERT_TRUE(DoesReachSteadyState(controller, State::kWaitForPageStability)); TestNavigationManager manager(web_contents(), url2); @@ -365,7 +365,7 @@ // Start waiting on the controller. It should be blocked in page stability. TestFuture<void> result; - controller.Wait(result.GetCallback()); + controller.Wait(*active_tab(), result.GetCallback()); ASSERT_TRUE(DoesReachSteadyState(controller, State::kWaitForPageStability)); EXPECT_FALSE(result.IsReady()); @@ -397,7 +397,7 @@ // Start waiting, since a fetch is in progress we should be waiting for page // stability. TestFuture<void> result; - controller.Wait(result.GetCallback()); + controller.Wait(*active_tab(), result.GetCallback()); ASSERT_TRUE(DoesReachSteadyState(controller, State::kWaitForPageStability)); EXPECT_FALSE(result.IsReady()); @@ -441,7 +441,7 @@ // Start waiting, since a fetch is in progress we should be waiting for page // stability. TestFuture<void> result; - controller.Wait(result.GetCallback()); + controller.Wait(*active_tab(), result.GetCallback()); ASSERT_TRUE(DoesReachSteadyState(controller, State::kWaitForPageStability)); EXPECT_FALSE(result.IsReady());
diff --git a/chrome/browser/actor/tools/tab_management_tool.cc b/chrome/browser/actor/tools/tab_management_tool.cc index b27b3ed..947efdf 100644 --- a/chrome/browser/actor/tools/tab_management_tool.cc +++ b/chrome/browser/actor/tools/tab_management_tool.cc
@@ -11,10 +11,12 @@ #include "chrome/browser/actor/tools/tool_callbacks.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_window/public/browser_window_interface.h" +#include "chrome/browser/ui/tabs/tab_strip_model_observer.h" #include "chrome/common/actor.mojom.h" #include "chrome/common/actor/action_result.h" #include "components/sessions/core/session_id.h" #include "components/tabs/public/tab_interface.h" +#include "content/public/browser/page_navigator.h" #include "content/public/browser/web_contents.h" #include "third_party/abseil-cpp/absl/strings/str_format.h" #include "ui/base/window_open_disposition.h" @@ -104,14 +106,18 @@ TabManagementTool::GetObservationDelayer( std::optional<ObservationDelayController::PageStabilityConfig> page_stability_config) { - return nullptr; + if (action_ != kCreate) { + return nullptr; + } + + return std::make_unique<ObservationDelayController>(task_id(), journal()); } void TabManagementTool::UpdateTaskAfterInvoke(ActorTask& task, mojom::ActionResultPtr result, InvokeCallback callback) const { - if (action_ == kCreate && did_create_tab_handle_) { - task.AddTab(*did_create_tab_handle_, std::move(callback)); + if (action_ == kCreate && target_tab_) { + task.AddTab(*target_tab_, std::move(callback)); } else { std::move(callback).Run(std::move(result)); } @@ -125,10 +131,14 @@ TabStripModel* tab_strip_model, const TabStripModelChange& change, const TabStripSelectionChange& selection) { + if (action_ != kCreate) { + return; + } + if (change.type() == TabStripModelChange::kInserted) { if (callback_) { CHECK_GT(change.GetInsert()->contents.size(), 0ul); - did_create_tab_handle_ = change.GetInsert()->contents[0].tab->GetHandle(); + target_tab_ = change.GetInsert()->contents[0].tab->GetHandle(); PostResponseTask(std::move(callback_), MakeOkResult()); } }
diff --git a/chrome/browser/actor/tools/tab_management_tool.h b/chrome/browser/actor/tools/tab_management_tool.h index 0f3b60a6..8502be35 100644 --- a/chrome/browser/actor/tools/tab_management_tool.h +++ b/chrome/browser/actor/tools/tab_management_tool.h
@@ -66,10 +66,8 @@ InvokeCallback callback_; - // If a tab was created, this will store the handle. - std::optional<tabs::TabHandle> did_create_tab_handle_; - - // Used for activate or close action. + // Used for activate or close action. For the create action, this will be + // updated to the newly created tab after `Invoke()` is called. std::optional<tabs::TabHandle> target_tab_; // If creating a tab, whether to create in the foreground.
diff --git a/chrome/browser/actor/tools/tab_management_tool_browsertest.cc b/chrome/browser/actor/tools/tab_management_tool_browsertest.cc index 70f43f7..c90045f7 100644 --- a/chrome/browser/actor/tools/tab_management_tool_browsertest.cc +++ b/chrome/browser/actor/tools/tab_management_tool_browsertest.cc
@@ -3,13 +3,17 @@ // found in the LICENSE file. #include "base/test/test_future.h" +#include "chrome/browser/actor/actor_keyed_service.h" #include "chrome/browser/actor/actor_test_util.h" #include "chrome/browser/actor/tools/tab_management_tool_request.h" #include "chrome/browser/actor/tools/tool_request.h" #include "chrome/browser/actor/tools/tools_test_util.h" +#include "chrome/browser/page_content_annotations/multi_source_page_context_fetcher.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/actor.mojom.h" +#include "components/tabs/public/tab_interface.h" #include "content/public/browser/web_contents.h" #include "content/public/test/browser_test.h" #include "content/public/test/browser_test_utils.h" @@ -109,5 +113,34 @@ } } +// This test ensures that the CreateTab action waits long enough after acting +// for a screenshot to be successfully taken. +IN_PROC_BROWSER_TEST_F( + ActorTabManagementToolBrowserTest, + TabManagementTool_CreateForegroundTabAndEnsureScreenshotIsTaken) { + const GURL start_tab_url = + embedded_test_server()->GetURL("/actor/blank.html"); + ASSERT_TRUE(content::NavigateToURL(web_contents(), start_tab_url)); + + std::unique_ptr<ToolRequest> action = + MakeCreateTabRequest(browser()->session_id(), /*foreground=*/true); + ActResultFuture act_result; + actor_task().Act(ToRequestList(action), act_result.GetCallback()); + ExpectOkResult(act_result); + + ActorKeyedService* actor_keyed_service = + ActorKeyedService::Get(browser()->profile()); + + TestFuture<ActorKeyedService::TabObservationResult> future; + actor_keyed_service->RequestTabObservation( + *tabs::TabInterface::GetFromContents(web_contents()), actor_task().id(), + future.GetCallback()); + + const ActorKeyedService::TabObservationResult& observation_result = + future.Get(); + ASSERT_TRUE(observation_result.has_value()); + ASSERT_TRUE(observation_result.value()->screenshot_result.has_value()); +} + } // namespace } // namespace actor
diff --git a/chrome/browser/actor/tools/tool_controller.cc b/chrome/browser/actor/tools/tool_controller.cc index 43f5804..50cdab5 100644 --- a/chrome/browser/actor/tools/tool_controller.cc +++ b/chrome/browser/actor/tools/tool_controller.cc
@@ -225,19 +225,20 @@ return; } - if (observation_delayer_->web_contents()) { + if (tabs::TabInterface* target_tab = + active_state_->tool->GetTargetTab().Get()) { observation_delayer_->Wait( + *target_tab, base::BindOnce(&ToolController::PostInvokeTool, weak_ptr_factory_.GetWeakPtr(), std::move(result))); } else { - journal().Log( - active_state_->tool->JournalURL(), task_->id(), - mojom::JournalTrack::kActor, "ToolController DidFinishToolInvoke", - JournalDetailsBuilder() - .AddError("WebContents is gone when tool finishes successfully") - .Build()); + journal().Log(active_state_->tool->JournalURL(), task_->id(), + mojom::JournalTrack::kActor, + "ToolController DidFinishToolInvoke", + JournalDetailsBuilder() + .AddError("Tab is gone when tool finishes successfully") + .Build()); PostInvokeTool(std::move(result)); - return; } }
diff --git a/chrome/browser/ash/accessibility/autoclick_browsertest.cc b/chrome/browser/ash/accessibility/autoclick_browsertest.cc index ff5793f..e7e9d3b 100644 --- a/chrome/browser/ash/accessibility/autoclick_browsertest.cc +++ b/chrome/browser/ash/accessibility/autoclick_browsertest.cc
@@ -43,9 +43,7 @@ } // namespace // Tests that Automatic clicks works with elements in the browser. -class AutoclickBrowserTest - : public AccessibilityFeatureBrowserTest, - public ::testing::WithParamInterface<ManifestVersion> { +class AutoclickBrowserTest : public AccessibilityFeatureBrowserTest { public: AutoclickBrowserTest(const AutoclickBrowserTest&) = delete; AutoclickBrowserTest& operator=(const AutoclickBrowserTest&) = delete; @@ -55,16 +53,8 @@ ~AutoclickBrowserTest() override = default; void SetUpCommandLine(base::CommandLine* command_line) override { - std::vector<base::test::FeatureRef> enabled_features; - std::vector<base::test::FeatureRef> disabled_features; - if (GetParam() == ManifestVersion::kTwo) { - disabled_features.push_back( - ::features::kAccessibilityManifestV3AccessibilityCommon); - } else if (GetParam() == ManifestVersion::kThree) { - enabled_features.push_back( - ::features::kAccessibilityManifestV3AccessibilityCommon); - } - scoped_feature_list_.InitWithFeatures(enabled_features, disabled_features); + scoped_feature_list_.InitWithFeatureStates( + {{::features::kAccessibilityManifestV3AccessibilityCommon, true}}); AccessibilityFeatureBrowserTest::SetUpCommandLine(command_line); } @@ -97,14 +87,7 @@ base::test::ScopedFeatureList scoped_feature_list_; }; -INSTANTIATE_TEST_SUITE_P(ManifestV2, - AutoclickBrowserTest, - ::testing::Values(ManifestVersion::kTwo)); -INSTANTIATE_TEST_SUITE_P(ManifestV3, - AutoclickBrowserTest, - ::testing::Values(ManifestVersion::kThree)); - -IN_PROC_BROWSER_TEST_P(AutoclickBrowserTest, LeftClickButtonOnHover) { +IN_PROC_BROWSER_TEST_F(AutoclickBrowserTest, LeftClickButtonOnHover) { LoadURLAndAutoclick(kShowButtonOnClickUrl); // No need to change click type: Default should be right-click. utils()->HoverOverHtmlElement(generator(), "click me", "button"); @@ -113,7 +96,7 @@ utils()->GetNodeBoundsInRoot("show me", "button"); } -IN_PROC_BROWSER_TEST_P(AutoclickBrowserTest, DoubleClickHover) { +IN_PROC_BROWSER_TEST_F(AutoclickBrowserTest, DoubleClickHover) { LoadURLAndAutoclick( "data:text/html;charset=utf-8," "<input type='text' id='text_field'" @@ -129,7 +112,7 @@ utils()->WaitForTextSelectionChangedEvent(); } -IN_PROC_BROWSER_TEST_P(AutoclickBrowserTest, ClickAndDrag) { +IN_PROC_BROWSER_TEST_F(AutoclickBrowserTest, ClickAndDrag) { LoadURLAndAutoclick( "data:text/html;charset=utf-8," "<input type='text' id='text_field'" @@ -150,7 +133,7 @@ utils()->WaitForTextSelectionChangedEvent(); } -IN_PROC_BROWSER_TEST_P(AutoclickBrowserTest, +IN_PROC_BROWSER_TEST_F(AutoclickBrowserTest, RightClickOnHoverOpensContextMenu) { LoadURLAndAutoclick( "data:text/html;charset=utf-8," @@ -167,7 +150,7 @@ utils()->GetNodeBoundsInRoot("Paste Ctrl+V", "menuItem"); } -IN_PROC_BROWSER_TEST_P(AutoclickBrowserTest, +IN_PROC_BROWSER_TEST_F(AutoclickBrowserTest, ScrollHoverHighlightsScrollableArea) { utils()->ObserveFocusRings(); @@ -222,7 +205,7 @@ } } -IN_PROC_BROWSER_TEST_P(AutoclickBrowserTest, LongDelay) { +IN_PROC_BROWSER_TEST_F(AutoclickBrowserTest, LongDelay) { utils()->SetAutoclickDelayMs(500); LoadURLAndAutoclick(kShowButtonOnClickUrl); @@ -232,7 +215,7 @@ EXPECT_GT(timer.Elapsed().InMilliseconds(), 500); } -IN_PROC_BROWSER_TEST_P(AutoclickBrowserTest, PauseAutoclick) { +IN_PROC_BROWSER_TEST_F(AutoclickBrowserTest, PauseAutoclick) { utils()->SetAutoclickDelayMs(5); LoadURLAndAutoclick( "data:text/html," @@ -254,6 +237,4 @@ runner.Run(); } - - } // namespace ash
diff --git a/chrome/browser/back_press/android/java/src/org/chromium/chrome/browser/back_press/MinimizeAppAndCloseTabBackPressHandler.java b/chrome/browser/back_press/android/java/src/org/chromium/chrome/browser/back_press/MinimizeAppAndCloseTabBackPressHandler.java index 4f658eb..329b541 100644 --- a/chrome/browser/back_press/android/java/src/org/chromium/chrome/browser/back_press/MinimizeAppAndCloseTabBackPressHandler.java +++ b/chrome/browser/back_press/android/java/src/org/chromium/chrome/browser/back_press/MinimizeAppAndCloseTabBackPressHandler.java
@@ -18,7 +18,6 @@ import org.chromium.base.supplier.ObservableSupplierImpl; import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; -import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.ui.native_page.NativePage; import org.chromium.components.browser_ui.widget.gesture.BackPressHandler; @@ -97,7 +96,7 @@ boolean isAtLeastB = (sVersionForTesting == null ? VERSION.SDK_INT : sVersionForTesting) >= VERSION_CODES.BAKLAVA; - return isAtLeastB && ChromeFeatureList.sAllowTabClosingUponMinimization.isEnabled(); + return isAtLeastB; } /**
diff --git a/chrome/browser/back_press/android/java/src/org/chromium/chrome/browser/back_press/MinimizeAppAndCloseTabBackPressHandlerUnitTest.java b/chrome/browser/back_press/android/java/src/org/chromium/chrome/browser/back_press/MinimizeAppAndCloseTabBackPressHandlerUnitTest.java index e84bb33..97bf6c9 100644 --- a/chrome/browser/back_press/android/java/src/org/chromium/chrome/browser/back_press/MinimizeAppAndCloseTabBackPressHandlerUnitTest.java +++ b/chrome/browser/back_press/android/java/src/org/chromium/chrome/browser/back_press/MinimizeAppAndCloseTabBackPressHandlerUnitTest.java
@@ -28,11 +28,9 @@ import org.chromium.base.supplier.ObservableSupplierImpl; import org.chromium.base.test.BaseJUnit4ClassRunner; import org.chromium.base.test.util.Batch; -import org.chromium.base.test.util.Features; import org.chromium.base.test.util.HistogramWatcher; import org.chromium.chrome.browser.back_press.MinimizeAppAndCloseTabBackPressHandler.MinimizeAppAndCloseTabType; import org.chromium.chrome.browser.back_press.MinimizeAppAndCloseTabBackPressHandler.TabClosureType; -import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.TabAssociatedApp; import org.chromium.chrome.browser.tab.TabLaunchType; @@ -166,7 +164,6 @@ @Test @SmallTest - @Features.EnableFeatures({ChromeFeatureList.ALLOW_TAB_CLOSING_UPON_MINIMIZATION}) public void testCloseTabDuringMinimization() { createBackPressHandler(true, true); Mockito.when(mShouldCloseTab.test(mTab)).thenReturn(true);
diff --git a/chrome/browser/background/glic/glic_status_icon.cc b/chrome/browser/background/glic/glic_status_icon.cc index eb0689c2..29d648c 100644 --- a/chrome/browser/background/glic/glic_status_icon.cc +++ b/chrome/browser/background/glic/glic_status_icon.cc
@@ -53,20 +53,37 @@ namespace { int GetTooltipMessageId(bool panel_showing) { + // If GlicMultiInstance is enabled, show a single menu item and corresponding + // tooltip for toggling the UI. + bool multi_instance_enabled = + base::FeatureList::IsEnabled(features::kGlicMultiInstance); + switch (chrome::GetChannel()) { case version_info::Channel::CANARY: { + if (multi_instance_enabled) { + return IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE_CANARY; + } return panel_showing ? IDS_GLIC_STATUS_ICON_TOOLTIP_CLOSE_CANARY : IDS_GLIC_STATUS_ICON_TOOLTIP_CANARY; } case version_info::Channel::DEV: { + if (multi_instance_enabled) { + return IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE_DEV; + } return panel_showing ? IDS_GLIC_STATUS_ICON_TOOLTIP_CLOSE_DEV : IDS_GLIC_STATUS_ICON_TOOLTIP_DEV; } case version_info::Channel::BETA: { + if (multi_instance_enabled) { + return IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE_BETA; + } return panel_showing ? IDS_GLIC_STATUS_ICON_TOOLTIP_CLOSE_BETA : IDS_GLIC_STATUS_ICON_TOOLTIP_BETA; } default: { + if (multi_instance_enabled) { + return IDS_GLIC_STATUS_ICON_TOOLTIP_TOGGLE; + } return panel_showing ? IDS_GLIC_STATUS_ICON_TOOLTIP_CLOSE : IDS_GLIC_STATUS_ICON_TOOLTIP; } @@ -199,6 +216,12 @@ "GlicOsEntrypoint.ContextMenuSelection.CloseGlic")); break; } + case IDC_GLIC_STATUS_ICON_MENU_TOGGLE: { + controller_->Toggle(mojom::InvocationSource::kOsButtonMenu); + base::RecordAction(base::UserMetricsAction( + "GlicOsEntrypoint.ContextMenuSelection.ToggleGlic")); + break; + } default: { NOTREACHED(); } @@ -234,6 +257,11 @@ void GlicStatusIcon::PanelStateChanged( const mojom::PanelState& panel_state, const GlicWindowController::PanelStateContext& context) { + // If GlicMultiInstance is enabled, show a single menu item for toggling the + // UI and thus don't update based on state changes. + if (base::FeatureList::IsEnabled(features::kGlicMultiInstance)) { + return; + } UpdateVisibilityOfShowAndCloseInContextMenu(); status_icon_->SetToolTip( l10n_util::GetStringUTF16(GetTooltipMessageId(controller_->IsShowing()))); @@ -255,6 +283,11 @@ CHECK(close_menu_item_index); context_menu_->SetForceShowAcceleratorForItemAt(close_menu_item_index.value(), !hotkey.IsEmpty()); + std::optional<size_t> toggle_menu_item_index = + context_menu_->GetIndexOfCommandId(IDC_GLIC_STATUS_ICON_MENU_TOGGLE); + CHECK(toggle_menu_item_index); + context_menu_->SetForceShowAcceleratorForItemAt( + toggle_menu_item_index.value(), !hotkey.IsEmpty()); } void GlicStatusIcon::UpdateVisibilityOfExitInContextMenu() { @@ -284,7 +317,17 @@ } void GlicStatusIcon::UpdateVisibilityOfShowAndCloseInContextMenu() { + // If GlicMultiInstance is enabled, always show a single menu item for + // toggling the UI. Otherwise, show either the "Close" or "Show" menu item + // accordingly. + if (base::FeatureList::IsEnabled(features::kGlicMultiInstance)) { + context_menu_->SetCommandIdVisible(IDC_GLIC_STATUS_ICON_MENU_TOGGLE, true); + context_menu_->SetCommandIdVisible(IDC_GLIC_STATUS_ICON_MENU_CLOSE, false); + context_menu_->SetCommandIdVisible(IDC_GLIC_STATUS_ICON_MENU_SHOW, false); + return; + } if (context_menu_) { + context_menu_->SetCommandIdVisible(IDC_GLIC_STATUS_ICON_MENU_TOGGLE, false); const bool showing = controller_->IsShowing(); context_menu_->SetCommandIdVisible(IDC_GLIC_STATUS_ICON_MENU_CLOSE, showing); @@ -308,7 +351,11 @@ } std::unique_ptr<StatusIconMenuModel> GlicStatusIcon::CreateStatusIconMenu() { - std::unique_ptr<StatusIconMenuModel> menu(new StatusIconMenuModel(this)); + std::unique_ptr<StatusIconMenuModel> menu = + std::make_unique<StatusIconMenuModel>(this); + + menu->AddItem(IDC_GLIC_STATUS_ICON_MENU_TOGGLE, + l10n_util::GetStringUTF16(IDS_GLIC_STATUS_ICON_MENU_TOGGLE)); menu->AddItem(IDC_GLIC_STATUS_ICON_MENU_CLOSE, l10n_util::GetStringUTF16(IDS_GLIC_STATUS_ICON_MENU_CLOSE)); menu->AddItem(IDC_GLIC_STATUS_ICON_MENU_SHOW,
diff --git a/chrome/browser/chrome_content_browser_client_browsertest.cc b/chrome/browser/chrome_content_browser_client_browsertest.cc index f3d3f2f..4d4f20a 100644 --- a/chrome/browser/chrome_content_browser_client_browsertest.cc +++ b/chrome/browser/chrome_content_browser_client_browsertest.cc
@@ -1859,8 +1859,9 @@ first_response.http_request()->headers.at("Cookie")); // Disable 3rd party cookies. - browser()->profile()->GetPrefs()->SetBoolean( - prefs::kTrackingProtection3pcdEnabled, true); + browser()->profile()->GetPrefs()->SetInteger( + prefs::kCookieControlsMode, + static_cast<int>(content_settings::CookieControlsMode::kBlockThirdParty)); // Verify automatic beacons no longer are sent with cookie data. EXPECT_TRUE( @@ -2070,23 +2071,12 @@ public: DevToolsOverridesThirdPartyCookiesBrowserTest() : https_server_(net::EmbeddedTestServer::TYPE_HTTPS) { - std::vector<base::test::FeatureRefAndParams> enabled_features; - std::vector<base::test::FeatureRef> disabled_features; - // The 3PCD tracking protection feature must be disabled so that we can - // disable third-party cookies by changing the devtools overrides. - disabled_features.push_back( - content_settings::features::kTrackingProtection3pcd); - #if BUILDFLAG(ENABLE_EXTENSIONS_CORE) // This feature must be enabled to align the behavior in the test with the // actual behavior in the branded-build. Related bug: crbug.com/385032014. - enabled_features.push_back( - {extensions_features::kForceWebRequestProxyForTest, {}}); - + feature_list_.InitAndEnableFeature( + extensions_features::kForceWebRequestProxyForTest); #endif - - feature_list_.InitWithFeaturesAndParameters(enabled_features, - disabled_features); } void SetUpOnMainThread() override {
diff --git a/chrome/browser/complex_tasks/BUILD.gn b/chrome/browser/complex_tasks/BUILD.gn new file mode 100644 index 0000000..0ac8bf78 --- /dev/null +++ b/chrome/browser/complex_tasks/BUILD.gn
@@ -0,0 +1,39 @@ +# Copyright 2025 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +source_set("complex_tasks") { + sources = [ "task_tab_helper.h" ] + public_deps = [ + "//base", + "//components/sessions", + "//content/public/browser", + ] +} + +source_set("impl") { + sources = [ "task_tab_helper.cc" ] + deps = [ + ":complex_tasks", + "//chrome/browser/profiles:profile", + "//chrome/browser/search_engines", + "//components/search_engines", + ] + if (is_android) { + deps += [ "//chrome/android:chrome_jni_headers" ] + } + + public_deps = [ "//chrome/browser:browser_public_dependencies" ] +} + +source_set("unit_tests") { + testonly = true + sources = [ "task_tab_helper_unittest.cc" ] + deps = [ + ":complex_tasks", + "//chrome/test:test_support", + "//content/test:test_support", + "//testing/gmock", + "//testing/gtest", + ] +}
diff --git a/chrome/browser/download/download_history.cc b/chrome/browser/download/download_history.cc index df78f00b..5f7188c 100644 --- a/chrome/browser/download/download_history.cc +++ b/chrome/browser/download/download_history.cc
@@ -52,7 +52,7 @@ #include "content/public/browser/storage_partition_config.h" #include "extensions/buildflags/buildflags.h" -#if BUILDFLAG(ENABLE_EXTENSIONS) +#if BUILDFLAG(ENABLE_EXTENSIONS_CORE) #include "chrome/browser/extensions/api/downloads/downloads_api.h" #endif @@ -143,7 +143,7 @@ history::DownloadRow GetDownloadRow(download::DownloadItem* item) { std::string by_ext_id, by_ext_name; -#if BUILDFLAG(ENABLE_EXTENSIONS) +#if BUILDFLAG(ENABLE_EXTENSIONS_CORE) extensions::DownloadedByExtension* by_ext = extensions::DownloadedByExtension::Get(item); if (by_ext) { @@ -443,7 +443,7 @@ // modification, so that observers who care about the extra info may have an // updated view of the item. bool should_update_observers = false; -#if BUILDFLAG(ENABLE_EXTENSIONS) +#if BUILDFLAG(ENABLE_EXTENSIONS_CORE) if (!row.by_ext_id.empty() && !row.by_ext_name.empty()) { new extensions::DownloadedByExtension(item, row.by_ext_id, row.by_ext_name); @@ -657,7 +657,7 @@ bool DownloadHistory::NeedToUpdateDownloadHistory( download::DownloadItem* item) { -#if BUILDFLAG(ENABLE_EXTENSIONS) +#if BUILDFLAG(ENABLE_EXTENSIONS_CORE) // Always populate new extension downloads to history. DownloadHistoryData* data = DownloadHistoryData::Get(item); extensions::DownloadedByExtension* by_ext =
diff --git a/chrome/browser/download/download_history_unittest.cc b/chrome/browser/download/download_history_unittest.cc index 4bc7803..42fcaa80 100644 --- a/chrome/browser/download/download_history_unittest.cc +++ b/chrome/browser/download/download_history_unittest.cc
@@ -37,7 +37,7 @@ #include "extensions/buildflags/buildflags.h" #include "testing/gtest/include/gtest/gtest.h" -#if BUILDFLAG(ENABLE_EXTENSIONS) +#if BUILDFLAG(ENABLE_EXTENSIONS_CORE) #include "chrome/browser/extensions/api/downloads/downloads_api.h" #endif @@ -469,7 +469,7 @@ EXPECT_CALL(manager(), GetDownload(row->id)) .WillRepeatedly(Return(&item(index))); EXPECT_CALL(item(index), IsTemporary()).WillRepeatedly(Return(false)); -#if BUILDFLAG(ENABLE_EXTENSIONS) +#if BUILDFLAG(ENABLE_EXTENSIONS_CORE) new extensions::DownloadedByExtension(&item(index), row->by_ext_id, row->by_ext_name); #endif
diff --git a/chrome/browser/extensions/api/tabs/tabs_api_non_android.cc b/chrome/browser/extensions/api/tabs/tabs_api_non_android.cc index 00f2331..feafffe 100644 --- a/chrome/browser/extensions/api/tabs/tabs_api_non_android.cc +++ b/chrome/browser/extensions/api/tabs/tabs_api_non_android.cc
@@ -60,6 +60,7 @@ #include "chrome/browser/ui/browser_window/public/browser_window_features.h" #include "chrome/browser/ui/browser_window/public/browser_window_interface.h" #include "chrome/browser/ui/browser_window/public/browser_window_interface_iterator.h" +#include "chrome/browser/ui/browser_window/public/create_browser_window.h" #include "chrome/browser/ui/incognito_allowed_url.h" #include "chrome/browser/ui/tabs/tab_enums.h" #include "chrome/browser/ui/tabs/tab_group_model.h" @@ -461,40 +462,45 @@ } // Create a new BrowserWindow if possible. - if (Browser::GetCreationStatusForProfile(window_profile) != - Browser::CreationStatus::kOk) { + if (GetBrowserWindowCreationStatusForProfile(*window_profile) != + BrowserWindowInterface::CreationStatus::kOk) { return RespondNow(Error(ExtensionTabUtil::kBrowserWindowNotAllowed)); } - Browser::CreateParams create_params(window_type, window_profile, - user_gesture()); + BrowserWindowCreateParams create_params(window_type, *window_profile, + user_gesture()); + if (isolated_web_app_url_info.has_value()) { + create_params.type = BrowserWindowInterface::TYPE_APP; + create_params.app_name = web_app::GenerateApplicationNameFromAppId( + isolated_web_app_url_info->app_id()); // For Isolated Web Apps, the actual navigating-to URL will be the app's // start_url to prevent deep-linking attacks, while the original URL will be // accessible via window.launchQueue; for this reason the browser is marked // trusted. - create_params = Browser::CreateParams::CreateForApp( - web_app::GenerateApplicationNameFromAppId( - isolated_web_app_url_info->app_id()), - /*trusted_source=*/true, window_bounds, window_profile, user_gesture()); - } else if (extension_id.empty()) { - create_params.initial_bounds = window_bounds; - } else { + create_params.is_trusted_source = true; + } else if (!extension_id.empty()) { // extension_id is only set for CREATE_TYPE_POPUP. - create_params = Browser::CreateParams::CreateForAppPopup( - web_app::GenerateApplicationNameFromAppId(extension_id), - /*trusted_source=*/false, window_bounds, window_profile, - user_gesture()); + create_params.type = BrowserWindowInterface::TYPE_APP_POPUP; + create_params.app_name = + web_app::GenerateApplicationNameFromAppId(extension_id); + create_params.is_trusted_source = false; } + create_params.initial_bounds = window_bounds; create_params.initial_show_state = ui::mojom::WindowShowState::kNormal; + if (create_data && create_data->state != windows::WindowState::kNone) { create_params.initial_show_state = tabs_internal::ConvertToWindowShowState(create_data->state); } - Browser* new_window = Browser::Create(create_params); + BrowserWindowInterface* new_window = + CreateBrowserWindow(std::move(create_params)); if (!new_window) { return RespondNow(Error(ExtensionTabUtil::kBrowserWindowNotAllowed)); } + // NOTE: Even though `new_window` was returned, it may not be fully + // initialized on non-desktop platforms. See documentation on + // CreateBrowserWindow(). auto create_nav_params = [&](const GURL& url) -> base::expected<NavigateParams, std::string> { @@ -582,7 +588,8 @@ source_tab_strip->DetachTabAtForInsertion(tab_index); tab = detached_tab.get(); TabStripModel* target_tab_strip = - ExtensionTabUtil::GetEditableTabStripModel(new_window); + ExtensionTabUtil::GetEditableTabStripModel( + new_window->GetBrowserForMigrationOnly()); if (!target_tab_strip) { return RespondNow(Error(ExtensionTabUtil::kTabStripNotEditableError)); } @@ -593,15 +600,15 @@ // Create a new tab if the created window is still empty. Don't create a new // tab when it is intended to create an empty popup. if (!tab && urls.empty() && window_type == Browser::TYPE_NORMAL) { - chrome::NewTab(new_window); + chrome::NewTab(new_window->GetBrowserForMigrationOnly()); } chrome::SelectNumberedTab( - new_window, 0, + new_window->GetBrowserForMigrationOnly(), 0, TabStripUserGestureDetails( TabStripUserGestureDetails::GestureType::kNone)); if (focused) { - new_window->window()->Show(); + new_window->GetWindow()->Show(); } else { // Show an unfocused new window. BrowserWindowInterface* const last_active_bwi = @@ -612,9 +619,9 @@ // the old active browser. if (last_active_bwi && last_active_bwi->IsActive()) { ScopedPinBrowserAtFront scoper(last_active_bwi); - new_window->window()->ShowInactive(); + new_window->GetWindow()->ShowInactive(); } else { - new_window->window()->ShowInactive(); + new_window->GetWindow()->ShowInactive(); } } @@ -624,9 +631,9 @@ // TODO(crbug.com/40254339): Remove this workaround when linux is fixed. // TODO(crbug.com/40254339): Find a fix for wayland as well. #if BUILDFLAG(IS_LINUX) && BUILDFLAG(IS_OZONE_X11) - if (new_window->initial_show_state() == + if (new_window->GetBrowserForMigrationOnly()->initial_show_state() == ui::mojom::WindowShowState::kMinimized) { - new_window->window()->Minimize(); + new_window->GetWindow()->Minimize(); } #endif // BUILDFLAG(IS_LINUX) && BUILDFLAG(IS_OZONE_X11) @@ -639,11 +646,12 @@ #if BUILDFLAG(IS_CHROMEOS) ash::boca::LockedQuizSessionManagerFactory::GetInstance() ->GetForBrowserContext(calling_profile) - ->SetLockedFullscreenState(new_window, /*pinned=*/true); + ->SetLockedFullscreenState(new_window->GetBrowserForMigrationOnly(), + /*pinned=*/true); #endif // BUILDFLAG(IS_CHROMEOS) } - if (new_window->profile()->IsOffTheRecord() && + if (new_window->GetProfile()->IsOffTheRecord() && !browser_context()->IsOffTheRecord() && !include_incognito_information()) { // Don't expose incognito windows if extension itself works in non-incognito
diff --git a/chrome/browser/extensions/extension_tab_util.cc b/chrome/browser/extensions/extension_tab_util.cc index 6d3c3a95..1173528 100644 --- a/chrome/browser/extensions/extension_tab_util.cc +++ b/chrome/browser/extensions/extension_tab_util.cc
@@ -1341,17 +1341,9 @@ return base::unexpected(kNoCrashBrowserError); } - // Don't let the extension navigate directly to devtools scheme pages, unless - // they have applicable permissions. + // Don't let the extension navigate directly to devtools scheme pages. if (url.SchemeIs(content::kChromeDevToolsScheme)) { - bool has_permission = - extension && (extension->permissions_data()->HasAPIPermission( - APIPermissionID::kDevtools) || - extension->permissions_data()->HasAPIPermission( - APIPermissionID::kDebugger)); - if (!has_permission) { - return base::unexpected(kCannotNavigateToDevtools); - } + return base::unexpected(kCannotNavigateToDevtools); } // Don't let the extension navigate directly to chrome-untrusted scheme pages.
diff --git a/chrome/browser/extensions/extension_tab_util.h b/chrome/browser/extensions/extension_tab_util.h index aa2d679f..fb5e272 100644 --- a/chrome/browser/extensions/extension_tab_util.h +++ b/chrome/browser/extensions/extension_tab_util.h
@@ -82,8 +82,7 @@ "Browser windows not allowed."; #endif // !BUILDFLAG(IS_ANDROID) static constexpr char kCannotNavigateToDevtools[] = - "Cannot navigate to a devtools:// page without either the devtools or " - "debugger permission."; + "Cannot navigate to a devtools:// page."; #if !BUILDFLAG(IS_ANDROID) static constexpr char kLockedFullscreenModeNewTabError[] = "You cannot create new tabs while in locked fullscreen mode.";
diff --git a/chrome/browser/extensions/extension_tab_util_unittest.cc b/chrome/browser/extensions/extension_tab_util_unittest.cc index 603c0655..5b290ed4 100644 --- a/chrome/browser/extensions/extension_tab_util_unittest.cc +++ b/chrome/browser/extensions/extension_tab_util_unittest.cc
@@ -249,23 +249,6 @@ EXPECT_THAT( url, base::test::ErrorIs(ExtensionTabUtil::kCannotNavigateToDevtools)); } - // Having the devtools permissions should allow access. - { - auto devtools_extension = ExtensionBuilder("devtools") - .SetManifestKey("devtools_page", "foo.html") - .Build(); - auto url = ExtensionTabUtil::PrepareURLForNavigation( - kDevtoolsURL, devtools_extension.get(), browser_context()); - EXPECT_THAT(url, base::test::ValueIs(kDevtoolsURL)); - } - // Having the debugger permissions should also allow access. - { - auto debugger_extension = - ExtensionBuilder("debugger").AddAPIPermission("debugger").Build(); - auto url = ExtensionTabUtil::PrepareURLForNavigation( - kDevtoolsURL, debugger_extension.get(), browser_context()); - EXPECT_THAT(url, base::test::ValueIs(kDevtoolsURL)); - } } TEST_F(ChromeExtensionNavigationTest,
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 75de816..27241f7 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -197,11 +197,6 @@ "expiry_milestone": 150 }, { - "name": "allow-tab-closing-upon-minimization", - "owners": ["lazzzis@google.com", "twellington@chromium.org", "clank-app-team@google.com"], - "expiry_milestone": 142 - }, - { "name": "allow-user-installed-chrome-apps", "owners": ["//apps/DEPRECATION_OWNERS"], "expiry_milestone": 169 @@ -5389,11 +5384,6 @@ "expiry_milestone": 145 }, { - "name" : "form-factor-use-window-metrics", - "owners": [ "skavuluru@google.com", "clank-large-form-factors@google.com" ], - "expiry_milestone" : 145 - }, - { "name": "fractional-scroll-offsets", "owners": [ "bokan@chromium.org" ], "expiry_milestone": 81 @@ -5652,12 +5642,12 @@ { "name": "group-promo-prototype", "owners": [ "ssid@chromium.org", "yuezhanggg@chromium.org", "salg@google.com"], - "expiry_milestone": 142 + "expiry_milestone": 145 }, { "name": "group-promo-prototype-cpa", "owners": [ "ssid@chromium.org", "yuezhanggg@chromium.org", "salg@google.com"], - "expiry_milestone": 142 + "expiry_milestone": 145 }, { "name": "growth-campaigns", @@ -8611,6 +8601,11 @@ "expiry_milestone": 150 }, { + "name": "read-anything-read-aloud-ts-text-segmentation", + "owners": [ "lwinston@google.com", "komo-eng@google.com", "//ui/accessibility/OWNERS" ], + "expiry_milestone": 150 + }, + { "name": "read-printer-capabilities-with-xps", "owners": [ "awscreen@chromium.org", "//printing/OWNERS" ], "expiry_milestone": 145 @@ -8725,6 +8720,11 @@ "expiry_milestone": 90 }, { + "name" : "refactor-min-width-context-override", + "owners": [ "skavuluru@google.com", "clank-large-form-factors@google.com" ], + "expiry_milestone" : 145 + }, + { "name": "refactor-toolbars-size", "owners": [ "prasanaa@google.com", "alionadangla@chromium.org" ], "expiry_milestone": 150
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index ed550a6..eca0f05 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -90,12 +90,6 @@ "Allows the URL classification mode without credentials, even if the " "profile is not managed by the family link System."; -const char kAllowTabClosingUponMinimizationName[] = - "Allow tab to be closed during minimization"; -const char kAllowTabClosingUponMinimizationDescription[] = - "Utilize Android 16's new API to allow tab to be closed during minimization" - " triggered by back press."; - const char kAndroidAdaptiveFrameRateName[] = "Android Adaptive Refresh Rate features"; const char kAndroidAdaptiveFrameRateDescription[] = @@ -4117,13 +4111,12 @@ "Enables the refactored animation code path in Android for the toolbar " "phone class."; -const char kFormFactorUseMaxWindowMetricsName[] = - "Switch to Window Metrics API for form factor detection"; -const char kFormFactorUseMaxWindowMetricsDescription[] = - "Current form-factor check uses Configuration.smallestScreenWidthDp, which " - "returns window width on newer OS versions. This flag enables using the " - "max window metrics to determine display metrics irrespective of window " - "size."; +const char kRefactorMinWidthContextOverrideName[] = + "Refactor the min width context override"; +const char kRefactorMinWidthContextOverrideDescription[] = + "Refactor the min width context override from individual activities to " + "parent " + "ChromeBaseAppCompatActivity"; const char kToolbarTabletResizeRefactorName[] = "Toolbar Tablet Resize Refactor"; @@ -5728,6 +5721,12 @@ const char kReadAnythingReadAloudDescription[] = "Enables the experimental Read Aloud feature in Reading Mode."; +const char kReadAnythingReadAloudTsTextSegmentationName[] = + "Reading Mode Read Aloud Experimental Text Segmentation"; +const char kReadAnythingReadAloudTsTextSegmentationDescription[] = + "Enables the experimental text segmentation method for reading " + "mode."; + const char kReadAnythingReadAloudPhraseHighlightingName[] = "Reading Mode Read Aloud Phrase Highlighting"; const char kReadAnythingReadAloudPhraseHighlightingDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 8c4a7fa..9b3a5260 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -74,9 +74,6 @@ extern const char kAllowNonFamilyLinkUrlFilterModeName[]; extern const char kAllowNonFamilyLinkUrlFilterModeDescription[]; -extern const char kAllowTabClosingUponMinimizationName[]; -extern const char kAllowTabClosingUponMinimizationDescription[]; - extern const char kAndroidAdaptiveFrameRateName[]; extern const char kAndroidAdaptiveFrameRateDescription[]; #endif // BUILDFLAG(IS_ANDROID) @@ -2314,8 +2311,8 @@ extern const char kToolbarPhoneAnimationRefactorName[]; extern const char kToolbarPhoneAnimationRefactorDescription[]; -extern const char kFormFactorUseMaxWindowMetricsName[]; -extern const char kFormFactorUseMaxWindowMetricsDescription[]; +extern const char kRefactorMinWidthContextOverrideName[]; +extern const char kRefactorMinWidthContextOverrideDescription[]; extern const char kToolbarTabletResizeRefactorName[]; extern const char kToolbarTabletResizeRefactorDescription[]; @@ -3309,6 +3306,9 @@ extern const char kReadAnythingReadAloudName[]; extern const char kReadAnythingReadAloudDescription[]; +extern const char kReadAnythingReadAloudTsTextSegmentationName[]; +extern const char kReadAnythingReadAloudTsTextSegmentationDescription[]; + extern const char kReadAnythingReadAloudPhraseHighlightingName[]; extern const char kReadAnythingReadAloudPhraseHighlightingDescription[];
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc index 884c766..2a2970b 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -201,7 +201,6 @@ &kAccountForSuppressedKeyboardInsets, &kAdaptiveButtonInTopToolbarCustomizationV2, &kAdaptiveButtonInTopToolbarPageSummary, - &kAllowTabClosingUponMinimization, &kAndroidAppearanceSettings, &kAndroidAppIntegrationMultiDataSource, &kAndroidBookmarkBar, @@ -541,9 +540,6 @@ BASE_FEATURE(kAdaptiveButtonInTopToolbarPageSummary, base::FEATURE_DISABLED_BY_DEFAULT); -BASE_FEATURE(kAllowTabClosingUponMinimization, - base::FEATURE_ENABLED_BY_DEFAULT); - BASE_FEATURE(kAndroidAppIntegrationMultiDataSource, base::FEATURE_ENABLED_BY_DEFAULT);
diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h index e2a3411..1a496ea4 100644 --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h
@@ -17,7 +17,6 @@ BASE_DECLARE_FEATURE(kAccountForSuppressedKeyboardInsets); BASE_DECLARE_FEATURE(kAdaptiveButtonInTopToolbarCustomizationV2); BASE_DECLARE_FEATURE(kAdaptiveButtonInTopToolbarPageSummary); -BASE_DECLARE_FEATURE(kAllowTabClosingUponMinimization); BASE_DECLARE_FEATURE(kNewTabPageCustomization); BASE_DECLARE_FEATURE(kNewTabPageCustomizationV2); BASE_DECLARE_FEATURE(kNewTabPageCustomizationToolbarButton);
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java index 86a5fda..58b4d0a0 100644 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -162,8 +162,6 @@ "AdaptiveButtonInTopToolbarCustomizationV2"; public static final String ADAPTIVE_BUTTON_IN_TOP_TOOLBAR_PAGE_SUMMARY = "AdaptiveButtonInTopToolbarPageSummary"; - public static final String ALLOW_TAB_CLOSING_UPON_MINIMIZATION = - "AllowTabClosingUponMinimization"; public static final String ANDROID_ANIMATED_PROGRESS_BAR_IN_BROWSER = "AndroidAnimatedProgressBarInBrowser"; public static final String ANDROID_ANIMATED_PROGRESS_BAR_IN_VIZ = @@ -715,11 +713,6 @@ public static final CachedFlag sAccountForSuppressedKeyboardInsets = newCachedFlag(ACCOUNT_FOR_SUPPRESSED_KEYBOARD_INSETS, /* defaultValue= */ true); - public static final CachedFlag sAllowTabClosingUponMinimization = - newCachedFlag( - ALLOW_TAB_CLOSING_UPON_MINIMIZATION, - /* defaultValue= */ false, - /* defaultValueInTests= */ true); public static final CachedFlag sAndroidAnimatedProgressBarInBrowser = newCachedFlag(ANDROID_ANIMATED_PROGRESS_BAR_IN_BROWSER, true); public static final CachedFlag sAndroidAnimatedProgressBarInViz = @@ -1106,7 +1099,6 @@ List.of( // keep-sorted start sAccountForSuppressedKeyboardInsets, - sAllowTabClosingUponMinimization, sAndroidAnimatedProgressBarInBrowser, sAndroidAnimatedProgressBarInViz, sAndroidAppIntegrationModule,
diff --git a/chrome/browser/glic/glic_metrics.cc b/chrome/browser/glic/glic_metrics.cc index 60c074de..593e95d 100644 --- a/chrome/browser/glic/glic_metrics.cc +++ b/chrome/browser/glic/glic_metrics.cc
@@ -682,12 +682,10 @@ if (success && !scroll_input_submitted_time_.is_null()) { base::TimeDelta time_to_scroll = base::TimeTicks::Now() - scroll_input_submitted_time_; - if (scroll_input_mode_ != mojom::WebClientMode::kUnknown) { - std::string_view mode_string = GetInputModeString(scroll_input_mode_); - base::UmaHistogramMediumTimes( - base::StrCat({"Glic.ScrollTo.UserPromptToScrollTime.", mode_string}), - time_to_scroll); - } + std::string_view mode_string = GetInputModeString(scroll_input_mode_); + base::UmaHistogramMediumTimes( + base::StrCat({"Glic.ScrollTo.UserPromptToScrollTime.", mode_string}), + time_to_scroll); } scroll_input_submitted_time_ = base::TimeTicks(); scroll_input_mode_ = mojom::WebClientMode::kUnknown;
diff --git a/chrome/browser/glic/host/glic_api_browsertest.cc b/chrome/browser/glic/host/glic_api_browsertest.cc index ced0132f..b1384b2 100644 --- a/chrome/browser/glic/host/glic_api_browsertest.cc +++ b/chrome/browser/glic/host/glic_api_browsertest.cc
@@ -99,15 +99,18 @@ #define SLOW_BINARY #endif +// This skips a test for the multi-instance variant. +#define SKIP_TEST_FOR_MULTI_INSTANCE() \ + do { \ + if (GetParam().multi_instance) { \ + GTEST_SKIP() << "Not supported in multi-instance mode"; \ + return; \ + } \ + } while (0) + // This skips a test for the multi-instance variant. It's a marker to remember // to revisit this test later. -#define TODO_SKIP_BROKEN_MULTI_INSTANCE_TEST() \ - do { \ - if (GetParam().multi_instance) { \ - GTEST_SKIP() << "MultiInstance not yet supported"; \ - return; \ - } \ - } while (0) +#define TODO_SKIP_BROKEN_MULTI_INSTANCE_TEST() SKIP_TEST_FOR_MULTI_INSTANCE() namespace glic { namespace { @@ -573,7 +576,6 @@ // The client navigates to the 'sorry' page before it finishes initialize(). // Chrome should show this page. IN_PROC_BROWSER_TEST_P(GlicApiTest, testSorryPageBeforeInitialize) { - TODO_SKIP_BROKEN_MULTI_INSTANCE_TEST(); RunTestSequence( OpenGlicWindow(GlicWindowMode::kDetached, GlicInstrumentMode::kNone)); WebUIStateListener listener(GetHost()); @@ -597,7 +599,6 @@ } IN_PROC_BROWSER_TEST_P(GlicApiTest, testSorryPageAfterInitialize) { - TODO_SKIP_BROKEN_MULTI_INSTANCE_TEST(); RunTestSequence( OpenGlicWindow(GlicWindowMode::kDetached, GlicInstrumentMode::kNone)); WebUIStateListener listener(GetHost()); @@ -637,7 +638,6 @@ } IN_PROC_BROWSER_TEST_P(GlicApiTestWithFastTimeout, testNoClientCreated) { - TODO_SKIP_BROKEN_MULTI_INSTANCE_TEST(); #if defined(SLOW_BINARY) GTEST_SKIP() << "skip timeout test for slow binary"; #else @@ -649,15 +649,17 @@ listener.WaitForWebUiState(mojom::WebUiState::kError); // Note that the client does receive the bootstrap message, but never calls // back, so from the host's perspective bootstrapping is still pending. - histogram_tester.ExpectUniqueSample("Glic.Host.WebClientState.OnDestroy", - 0 /*BOOTSTRAP_PENDING*/, 1); + // There may be warmed instances that also receive this error, so expect at + // least one count. + EXPECT_GT(histogram_tester.GetBucketCount( + "Glic.Host.WebClientState.OnDestroy", 0 /*BOOTSTRAP_PENDING*/), + 0); #endif } // In this test, the client page does not initiate the bootstrap process, so no // client connects. IN_PROC_BROWSER_TEST_P(GlicApiTestWithFastTimeout, testNoBootstrap) { - TODO_SKIP_BROKEN_MULTI_INSTANCE_TEST(); #if defined(SLOW_BINARY) GTEST_SKIP() << "skip timeout test for slow binary"; #else @@ -667,13 +669,14 @@ WebUIStateListener listener(GetHost()); ExecuteJsTest(); listener.WaitForWebUiState(mojom::WebUiState::kError); - histogram_tester.ExpectUniqueSample("Glic.Host.WebClientState.OnDestroy", - 0 /*BOOTSTRAP_PENDING*/, 1); + // May have more than one sample because there can be a warmed instance. + EXPECT_GT(histogram_tester.GetBucketCount( + "Glic.Host.WebClientState.OnDestroy", 0 /*BOOTSTRAP_PENDING*/), + 0); #endif } IN_PROC_BROWSER_TEST_P(GlicApiTestWithFastTimeout, testInitializeTimesOut) { - TODO_SKIP_BROKEN_MULTI_INSTANCE_TEST(); #if defined(SLOW_BINARY) GTEST_SKIP() << "skip timeout test for slow binary"; #else @@ -685,8 +688,12 @@ .params = base::Value(base::Value::Dict().Set("failWith", "timeout")), }); listener.WaitForWebUiState(mojom::WebUiState::kError); - histogram_tester.ExpectUniqueSample("Glic.Host.WebClientState.OnDestroy", - 3 /*WEB_CLIENT_NOT_INITIALIZED*/, 1); + // There may be warmed instances that also receive this error, so expect at + // least one count. + EXPECT_GT( + histogram_tester.GetBucketCount("Glic.Host.WebClientState.OnDestroy", + 3 /*WEB_CLIENT_NOT_INITIALIZED*/), + 0); #endif } @@ -801,6 +808,18 @@ })); } +IN_PROC_BROWSER_TEST_P(GlicApiTest, testCreateTabByClickingOnLinkDaisyChains) { + if (!GetParam().multi_instance) { + GTEST_SKIP() << "Test only supported with multi-instance on"; + } + + RunTestSequence(OpenGlicWindow(GlicWindowMode::kDetached, + GlicInstrumentMode::kHostAndContents), + CheckTabCount(1)); + + ExecuteJsTest(); +} + IN_PROC_BROWSER_TEST_P(GlicApiTest, testCreateTabFailsIfNotActive) { RunTestSequence(OpenGlicWindow(GlicWindowMode::kDetached, GlicInstrumentMode::kHostAndContents)); @@ -990,7 +1009,8 @@ } IN_PROC_BROWSER_TEST_P(GlicApiTest, testEnableDragResize) { - TODO_SKIP_BROKEN_MULTI_INSTANCE_TEST(); + // TODO: resize is not yet implemented for multi-instance. + SKIP_TEST_FOR_MULTI_INSTANCE(); RunTestSequence(OpenGlicWindow(GlicWindowMode::kDetached, GlicInstrumentMode::kHostAndContents)); ExecuteJsTest(); @@ -998,7 +1018,8 @@ } IN_PROC_BROWSER_TEST_P(GlicApiTest, testDisableDragResize) { - TODO_SKIP_BROKEN_MULTI_INSTANCE_TEST(); + // TODO: resize is not yet implemented for multi-instance. + SKIP_TEST_FOR_MULTI_INSTANCE(); // Check the default resize setting here. RunTestSequence(OpenGlicWindow(GlicWindowMode::kDetached, GlicInstrumentMode::kHostAndContents), @@ -1008,6 +1029,8 @@ } IN_PROC_BROWSER_TEST_P(GlicApiTest, testInitiallyNotResizable) { + // TODO: resize is not yet implemented for multi-instance. + SKIP_TEST_FOR_MULTI_INSTANCE(); RunTestSequence(OpenGlicWindow(GlicWindowMode::kDetached, GlicInstrumentMode::kHostAndContents)); ExecuteJsTest(); @@ -1045,7 +1068,8 @@ IN_PROC_BROWSER_TEST_P(GlicApiTestWithOneTabAndContextualCueing, testGetZeroStateSuggestionsApi) { - TODO_SKIP_BROKEN_MULTI_INSTANCE_TEST(); + // TODO: zero state suggestions not yet implemented for multi-instance. + SKIP_TEST_FOR_MULTI_INSTANCE(); EXPECT_CALL(*mock_cueing_service(), GetContextualGlicZeroStateSuggestionsForFocusedTab(_, _, _, _)) .Times(1); @@ -1063,7 +1087,8 @@ #endif IN_PROC_BROWSER_TEST_P(GlicApiTestWithOneTabAndContextualCueing, MAYBE_testGetZeroStateSuggestionsMultipleNavigations) { - TODO_SKIP_BROKEN_MULTI_INSTANCE_TEST(); + // TODO: zero state suggestions not yet implemented for multi-instance. + SKIP_TEST_FOR_MULTI_INSTANCE(); EXPECT_CALL(*mock_cueing_service(), GetContextualGlicZeroStateSuggestionsForFocusedTab(_, _, _, _)) .Times(1); @@ -1090,7 +1115,8 @@ IN_PROC_BROWSER_TEST_P(GlicApiTestWithOneTabAndContextualCueing, testGetZeroStateSuggestionsFailsWhenHidden) { - TODO_SKIP_BROKEN_MULTI_INSTANCE_TEST(); + // TODO: zero state suggestions not yet implemented for multi-instance. + SKIP_TEST_FOR_MULTI_INSTANCE(); // Initial state. EXPECT_CALL(*mock_cueing_service(), GetContextualGlicZeroStateSuggestionsForFocusedTab(_, _, _, _)) @@ -1223,7 +1249,8 @@ IN_PROC_BROWSER_TEST_P(GlicApiTestWithOneTab, testGetFocusedTabStateV2WithNavigationWhenInactive) { - TODO_SKIP_BROKEN_MULTI_INSTANCE_TEST(); + SKIP_TEST_FOR_MULTI_INSTANCE(); + TrackGlicInstanceById(GetGlicInstance()->id()); // Confirm that the observer is notified through getFocusedTabState of the // initial state, i.e. the first page navigation. It should then hide. ExecuteJsTest(); @@ -1335,7 +1362,6 @@ #endif IN_PROC_BROWSER_TEST_P(GlicApiTestWithOneTab, MAYBE_testGetContextFromFocusedTabWithPdfFile) { - TODO_SKIP_BROKEN_MULTI_INSTANCE_TEST(); RunTestSequence(NavigateWebContents( kFirstTab, InProcessBrowserTest::embedded_test_server()->GetURL("/pdf/test.pdf"))); @@ -2225,7 +2251,7 @@ #endif IN_PROC_BROWSER_TEST_P(MAYBE_GlicApiTestWithOneTabMoreDebounceDelay, MAYBE_testSingleFocusedTabUpdatesOnTabEvents) { - TODO_SKIP_BROKEN_MULTI_INSTANCE_TEST(); + SKIP_TEST_FOR_MULTI_INSTANCE(); // Initial state with first tab. ExecuteJsTest(); @@ -2280,6 +2306,29 @@ ContinueJsTest(); } +IN_PROC_BROWSER_TEST_P(GlicApiTestWithOneTab, + testSwitchConversationToExistingInstance) { + if (!GetParam().multi_instance) { + GTEST_SKIP() << "Only supported in multi-instance mode."; + } + // Open glic. It will register a conversation. + ExecuteJsTest({.params = base::Value("first")}); + + // Open a second tab and second glic instance. It will switch conversations + // resulting in deleting the second glic instance. + ASSERT_TRUE(AddTabAtIndex(1, GURL("about:blank"), ui::PAGE_TRANSITION_TYPED)); + browser()->tab_strip_model()->ActivateTabAt(1); + SetGlicInstanceTabIndex(1); + RunTestSequence(InstrumentTab(kSecondTab), + OpenGlicWindow(GlicWindowMode::kDetached, + GlicInstrumentMode::kHostAndContents)); + ExecuteJsTest({.params = base::Value("second")}); + + // This should continue the test in the first instance, because tab 2 is now + // bound to that instance. + ContinueJsTest(); +} + class GlicGetHostCapabilityApiTest : public GlicApiTestWithOneTab { public: GlicGetHostCapabilityApiTest() { @@ -2368,7 +2417,6 @@ #endif IN_PROC_BROWSER_TEST_P(GlicApiTestWithOneTab, MAYBE_testGetPageMetadataOnNavigation) { - TODO_SKIP_BROKEN_MULTI_INSTANCE_TEST(); // Runs the JS test until the first `advanceToNextStep()`. ExecuteJsTest(); @@ -2382,7 +2430,9 @@ } IN_PROC_BROWSER_TEST_P(GlicApiTestWithOneTab, testGetPageMetadataTabDestroyed) { - TODO_SKIP_BROKEN_MULTI_INSTANCE_TEST(); + // TODO(harringtond): Re-enable this when multi-instance supports floating. + // We can float the window before closing the tab. + SKIP_TEST_FOR_MULTI_INSTANCE(); // Runs the JS test until the first `advanceToNextStep()`. ExecuteJsTest();
diff --git a/chrome/browser/glic/host/glic_page_handler.cc b/chrome/browser/glic/host/glic_page_handler.cc index efa2d22..f3045c0 100644 --- a/chrome/browser/glic/host/glic_page_handler.cc +++ b/chrome/browser/glic/host/glic_page_handler.cc
@@ -202,14 +202,15 @@ PostRecalcAndNotify(); } - bool SetAttachedBrowser(Browser* attached_browser) { + bool SetAttachedBrowser(BrowserWindowInterface* attached_browser) { if (attached_browser_ == attached_browser) { return false; } attached_browser_subscriptions_.clear(); attached_browser_ = attached_browser; - if (attached_browser_ && !attached_browser_->IsBrowserClosing()) { + if (attached_browser_ && !attached_browser_->GetBrowserForMigrationOnly() + ->is_delete_scheduled()) { attached_browser_subscriptions_.push_back( attached_browser_->RegisterDidBecomeActive(base::BindRepeating( &ActiveStateCalculator::AttachedBrowserActiveChanged, @@ -237,7 +238,8 @@ if (!attached_browser_) { return true; } - if (attached_browser_->IsBrowserClosing()) { + if (attached_browser_->GetBrowserForMigrationOnly() + ->is_delete_scheduled()) { return false; } @@ -251,7 +253,7 @@ base::ObserverList<Observer> observers_; glic::mojom::PanelState::Kind panel_state_kind_; bool is_active_ = false; - raw_ptr<Browser> attached_browser_ = nullptr; + raw_ptr<BrowserWindowInterface> attached_browser_ = nullptr; }; class BrowserIsOpenCalculator : public BrowserListObserver {
diff --git a/chrome/browser/glic/public/glic_keyed_service.cc b/chrome/browser/glic/public/glic_keyed_service.cc index c99dffe..fd0ea74 100644 --- a/chrome/browser/glic/public/glic_keyed_service.cc +++ b/chrome/browser/glic/public/glic_keyed_service.cc
@@ -460,7 +460,8 @@ base::unexpected(mojom::CreateTaskErrorReason::kTaskSystemUnavailable)); return; } - actor::TaskId task_id = actor_keyed_service_->CreateTask(std::move(options)); + actor::TaskId task_id = + actor_keyed_service_->CreateTaskWithOptions(std::move(options)); std::move(callback).Run(task_id.value()); }
diff --git a/chrome/browser/glic/test_support/interactive_glic_test.h b/chrome/browser/glic/test_support/interactive_glic_test.h index 610643d4..7b44c15 100644 --- a/chrome/browser/glic/test_support/interactive_glic_test.h +++ b/chrome/browser/glic/test_support/interactive_glic_test.h
@@ -11,6 +11,7 @@ #include "base/feature_list.h" #include "base/path_service.h" +#include "base/test/bind.h" #include "base/test/scoped_feature_list.h" #include "base/timer/timer.h" #include "chrome/browser/actor/actor_keyed_service.h"
diff --git a/chrome/browser/glic/widget/inactive_view_controller.cc b/chrome/browser/glic/widget/inactive_view_controller.cc index b382d7a..f57889b 100644 --- a/chrome/browser/glic/widget/inactive_view_controller.cc +++ b/chrome/browser/glic/widget/inactive_view_controller.cc
@@ -81,7 +81,7 @@ auto scrim = std::make_unique<views::View>(); scrim->SetPaintToLayer(); scrim->layer()->SetFillsBoundsOpaquely(false); - scrim->layer()->SetOpacity(1.0f); + scrim->layer()->SetOpacity(0.0f); scrim_view_tracker_.SetView(scrim.get()); image_view_container->AddChildView(std::move(scrim));
diff --git a/chrome/browser/headless/headless_mode_protocol_browsertest.cc b/chrome/browser/headless/headless_mode_protocol_browsertest.cc index 0feaf10ac..f425275 100644 --- a/chrome/browser/headless/headless_mode_protocol_browsertest.cc +++ b/chrome/browser/headless/headless_mode_protocol_browsertest.cc
@@ -287,34 +287,15 @@ HEADLESS_MODE_PROTOCOL_TEST(WindowOuterSize, "shared/window-outer-size.js") -// TODO(crbug.com/443993825): Tests are flaky. Fix and re-enable. -#if (defined(ADDRESS_SANITIZER) && BUILDFLAG(IS_WIN)) || BUILDFLAG(IS_MAC) -#define MAYBE_WindowInnerSize DISABLED_WindowInnerSize -#else -#define MAYBE_WindowInnerSize WindowInnerSize -#endif -HEADLESS_MODE_PROTOCOL_TEST(MAYBE_WindowInnerSize, - "shared/window-inner-size.js") +HEADLESS_MODE_PROTOCOL_TEST(WindowInnerSize, "shared/window-inner-size.js") HEADLESS_MODE_PROTOCOL_TEST(WindowInnerSizeScaled, "shared/window-inner-size-scaled.js") -#if (defined(ADDRESS_SANITIZER) && BUILDFLAG(IS_WIN)) -#define MAYBE_WindowInnerSizeLargerThanScreen \ - DISABLED_WindowInnerSizeLargerThanScreen -#else -#define MAYBE_WindowInnerSizeLargerThanScreen WindowInnerSizeLargerThanScreen -#endif -HEADLESS_MODE_PROTOCOL_TEST(MAYBE_WindowInnerSizeLargerThanScreen, +HEADLESS_MODE_PROTOCOL_TEST(WindowInnerSizeLargerThanScreen, "shared/window-inner-size-larger-than-screen.js") -// TODO(crbug.com/443993825): Tests are flaky. Fix and re-enable. -#if defined(ADDRESS_SANITIZER) && BUILDFLAG(IS_WIN) -#define MAYBE_LargeBrowserWindowSize DISABLED_LargeBrowserWindowSize -#else -#define MAYBE_LargeBrowserWindowSize LargeBrowserWindowSize -#endif -HEADLESS_MODE_PROTOCOL_TEST(MAYBE_LargeBrowserWindowSize, +HEADLESS_MODE_PROTOCOL_TEST(LargeBrowserWindowSize, "shared/large-browser-window-size.js") // These currently fail on Mac, see https://crbug.com/1488010 @@ -351,17 +332,11 @@ HEADLESS_MODE_PROTOCOL_TEST(ScreenDetailsRotationAngle, "shared/screen-details-rotation-angle.js") -// TODO(crbug.com/443993825): Tests are flaky. Fix and re-enable. -#if (defined(ADDRESS_SANITIZER) && BUILDFLAG(IS_WIN)) || BUILDFLAG(IS_MAC) -#define MAYBE_ScreenDetailsPixelRatio DISABLED_ScreenDetailsPixelRatio -#else -#define MAYBE_ScreenDetailsPixelRatio ScreenDetailsPixelRatio -#endif -HEADLESS_MODE_PROTOCOL_TEST(MAYBE_ScreenDetailsPixelRatio, +HEADLESS_MODE_PROTOCOL_TEST(ScreenDetailsPixelRatio, "shared/screen-details-pixel-ratio.js") // TODO(crbug.com/442920826): Re-enable this test -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) +#if BUILDFLAG(IS_WIN) #define MAYBE_ScreenDetailsColorDepth DISABLED_ScreenDetailsColorDepth #else #define MAYBE_ScreenDetailsColorDepth ScreenDetailsColorDepth @@ -375,14 +350,7 @@ HEADLESS_MODE_PROTOCOL_TEST(ScreenDetailsWorkAreaScaled, "shared/screen-details-work-area-scaled.js") -// TODO(crbug.com/443993825): Tests are flaky. Fix and re-enable. -#if defined(ADDRESS_SANITIZER) && BUILDFLAG(IS_WIN) -#define MAYBE_RequestFullscreen DISABLED_RequestFullscreen -#else -#define MAYBE_RequestFullscreen RequestFullscreen -#endif -HEADLESS_MODE_PROTOCOL_TEST(MAYBE_RequestFullscreen, - "shared/request-fullscreen.js") +HEADLESS_MODE_PROTOCOL_TEST(RequestFullscreen, "shared/request-fullscreen.js") // Fails on all platforms, see https://crbug.com/429035133 HEADLESS_MODE_PROTOCOL_TEST(DISABLED_RequestFullscreenOnSecondaryScreen, @@ -438,14 +406,7 @@ HEADLESS_MODE_PROTOCOL_TEST(WindowSizeSwitchLargerThanScreen, "shared/window-size-switch-larger-than-screen.js") -// TODO(crbug.com/443993825): Tests are flaky. Fix and re-enable. -#if defined(ADDRESS_SANITIZER) && BUILDFLAG(IS_WIN) -#define MAYBE_WindowScreenAvail DISABLED_WindowScreenAvail -#else -#define MAYBE_WindowScreenAvail WindowScreenAvail -#endif -HEADLESS_MODE_PROTOCOL_TEST(MAYBE_WindowScreenAvail, - "shared/window-screen-avail.js") +HEADLESS_MODE_PROTOCOL_TEST(WindowScreenAvail, "shared/window-screen-avail.js") // TODO(crbug.com/424797525): Fails Mac 13. #if BUILDFLAG(IS_MAC) @@ -467,9 +428,8 @@ HEADLESS_MODE_PROTOCOL_TEST(MAYBE_StartFullscreenSwitchScaled, "sanity/start-fullscreen-switch-scaled.js") -// TODO(crbug.com/430156442, crbug.com/443993825): These fail on Mac 13 and Win -// ASan. -#if BUILDFLAG(IS_MAC) || (defined(ADDRESS_SANITIZER) && BUILDFLAG(IS_WIN)) +// TODO(crbug.com/430156442): These fail on Mac 13 +#if BUILDFLAG(IS_MAC) #define MAYBE_WindowStateTransitions DISABLED_WindowStateTransitions #define MAYBE_WindowZoomOnSecondaryScreen DISABLED_WindowZoomOnSecondaryScreen #define MAYBE_WindowZoomSizeMatchesWorkArea \ @@ -489,13 +449,7 @@ HEADLESS_MODE_PROTOCOL_TEST(MAYBE_WindowZoomSizeMatchesWorkArea, "shared/window-zoom-size-matches-work-area.js") -// TODO(crbug.com/444137277): Tests are flaky. Fix and re-enable. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WindowScreenScaleFactor DISABLED_WindowScreenScaleFactor -#else -#define MAYBE_WindowScreenScaleFactor WindowScreenScaleFactor -#endif -HEADLESS_MODE_PROTOCOL_TEST(MAYBE_WindowScreenScaleFactor, +HEADLESS_MODE_PROTOCOL_TEST(WindowScreenScaleFactor, "shared/window-screen-scale-factor.js") HEADLESS_MODE_PROTOCOL_TEST(WindowScreenSizeOrientation,
diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubBottomToolbarCoordinator.java b/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubBottomToolbarCoordinator.java index 581f3d1..8e49d28 100644 --- a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubBottomToolbarCoordinator.java +++ b/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubBottomToolbarCoordinator.java
@@ -14,7 +14,6 @@ import org.chromium.build.annotations.Nullable; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeControllerFactory; -import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils; import org.chromium.ui.edge_to_edge.EdgeToEdgePadAdjuster; import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.modelutil.PropertyModelChangeProcessor; @@ -68,7 +67,7 @@ mMediator = new HubBottomToolbarMediator(model, mDelegate); - if (EdgeToEdgeUtils.isDrawKeyNativePageToEdgeEnabled() && hubBottomToolbarView != null) { + if (hubBottomToolbarView != null) { mEdgeToEdgePadAdjuster = EdgeToEdgeControllerFactory.createForViewAndObserveSupplier( hubBottomToolbarView, edgeToEdgeSupplier);
diff --git a/chrome/browser/login_detection/OWNERS b/chrome/browser/login_detection/OWNERS index 38365f2..906d8cb 100644 --- a/chrome/browser/login_detection/OWNERS +++ b/chrome/browser/login_detection/OWNERS
@@ -1,4 +1,3 @@ alexmos@chromium.org -rajendrant@chromium.org rakina@chromium.org -tbansal@chromium.org \ No newline at end of file +tbansal@chromium.org
diff --git a/chrome/browser/omnibox/contextual_session_web_contents_helper.cc b/chrome/browser/omnibox/contextual_session_web_contents_helper.cc new file mode 100644 index 0000000..4aae3e7 --- /dev/null +++ b/chrome/browser/omnibox/contextual_session_web_contents_helper.cc
@@ -0,0 +1,17 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/omnibox/contextual_session_web_contents_helper.h" + +#include "content/public/browser/web_contents.h" + +ContextualSessionWebContentsHelper::ContextualSessionWebContentsHelper( + content::WebContents* web_contents) + : content::WebContentsUserData<ContextualSessionWebContentsHelper>( + *web_contents) {} + +ContextualSessionWebContentsHelper::~ContextualSessionWebContentsHelper() = + default; + +WEB_CONTENTS_USER_DATA_KEY_IMPL(ContextualSessionWebContentsHelper);
diff --git a/chrome/browser/omnibox/contextual_session_web_contents_helper.h b/chrome/browser/omnibox/contextual_session_web_contents_helper.h new file mode 100644 index 0000000..fc8005c --- /dev/null +++ b/chrome/browser/omnibox/contextual_session_web_contents_helper.h
@@ -0,0 +1,48 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_OMNIBOX_CONTEXTUAL_SESSION_WEB_CONTENTS_HELPER_H_ +#define CHROME_BROWSER_OMNIBOX_CONTEXTUAL_SESSION_WEB_CONTENTS_HELPER_H_ + +#include <memory> + +#include "components/omnibox/composebox/contextual_session_service.h" +#include "content/public/browser/web_contents_user_data.h" + +namespace content { +class WebContents; +} + +// Helper class that scopes the `ContextualSessionService::SessionHandle`'s +// lifetime to a `content::WebContents`. +class ContextualSessionWebContentsHelper + : public content::WebContentsUserData<ContextualSessionWebContentsHelper> { + public: + ContextualSessionWebContentsHelper( + const ContextualSessionWebContentsHelper&) = delete; + ContextualSessionWebContentsHelper& operator=( + const ContextualSessionWebContentsHelper&) = delete; + ~ContextualSessionWebContentsHelper() override; + + // Takes ownership of a contextual session handle. + void set_session_handle( + std::unique_ptr<ContextualSessionService::SessionHandle> handle) { + session_handle_ = std::move(handle); + } + // Returns the owned contextual session handle. May return nullptr. + ContextualSessionService::SessionHandle* session_handle() const { + return session_handle_.get(); + } + + private: + explicit ContextualSessionWebContentsHelper( + content::WebContents* web_contents); + friend class content::WebContentsUserData<ContextualSessionWebContentsHelper>; + + std::unique_ptr<ContextualSessionService::SessionHandle> session_handle_; + + WEB_CONTENTS_USER_DATA_KEY_DECL(); +}; + +#endif // CHROME_BROWSER_OMNIBOX_CONTEXTUAL_SESSION_WEB_CONTENTS_HELPER_H_
diff --git a/chrome/browser/page_load_metrics/observers/third_party_cookie_deprecation_metrics_observer_browsertest.cc b/chrome/browser/page_load_metrics/observers/third_party_cookie_deprecation_metrics_observer_browsertest.cc index b763f65..a9e6c91 100644 --- a/chrome/browser/page_load_metrics/observers/third_party_cookie_deprecation_metrics_observer_browsertest.cc +++ b/chrome/browser/page_load_metrics/observers/third_party_cookie_deprecation_metrics_observer_browsertest.cc
@@ -328,9 +328,6 @@ prefs::kTrackingProtectionOnboardingStatus, static_cast<int>(privacy_sandbox::TrackingProtectionOnboarding:: OnboardingStatus::kOnboarded)); - // Enable 3pcd as it's no longer done through the onboarding service. - browser()->profile()->GetPrefs()->SetBoolean( - prefs::kTrackingProtection3pcdEnabled, true); } content::WebContents* web_contents() { @@ -395,8 +392,7 @@ {{tpcd::experiment::kDisable3PCookiesName, base::ToString(is_experiment_cookies_disabled_)}}}, {subresource_filter::kTPCDAdHeuristicSubframeRequestTagging, {}}}; - std::vector<base::test::FeatureRef> disabled_features = { - content_settings::features::kTrackingProtection3pcd}; + std::vector<base::test::FeatureRef> disabled_features = {}; if (std::get<2>(GetParam())) { enabled_features.push_back({network::features::kGetCookiesOnSet, {}}); } else { @@ -945,9 +941,6 @@ if (is_tracking_protection_onboarded_) { enabled_features.push_back( {content_settings::features::kTrackingProtection3pcd, {}}); - } else { - disabled_features.push_back( - content_settings::features::kTrackingProtection3pcd); } scoped_feature_list_.InitWithFeaturesAndParameters(enabled_features, @@ -1388,8 +1381,9 @@ {{"SkipTpcdMitigationsForAdsMetadata", "true"}, {"SkipTpcdMitigationsForAdsHeuristics", "true"}, {"SkipTpcdMitigationsForAdsSupport", "true"}, - {"SkipTpcdMitigationsForAdsTopLevelTrial", "true"}}}}, - {content_settings::features::kTrackingProtection3pcd}); + {"SkipTpcdMitigationsForAdsTopLevelTrial", "true"}}}, + {content_settings::features::kTrackingProtection3pcd, {}}}, + {}); } void SetUpThirdPartyCookieExperimentWithClientState() { @@ -1444,8 +1438,17 @@ } }; -IN_PROC_BROWSER_TEST_F(ThirdPartyCookieDeprecationObserverCookieReadBrowserTest, - NotOnboarded_CookieStatusRecorded) { +class ThirdPartyCookieDeprecationObserverCookieReadNotOnboardedBrowserTest + : public ThirdPartyCookieDeprecationObserverCookieReadBrowserTest { + public: + void SetUp() override { + subresource_filter::SubresourceFilterBrowserTest::SetUp(); + } +}; + +IN_PROC_BROWSER_TEST_F( + ThirdPartyCookieDeprecationObserverCookieReadNotOnboardedBrowserTest, + NotOnboarded_CookieStatusRecorded) { SetUpThirdPartyCookieExperimentWithClientState(); NavigateToPageWithFrame(kHostA); @@ -1611,15 +1614,16 @@ ~ThirdPartyCookieDeprecationObserverTriggerBrowserTest() override = default; void SetUp() override { - scoped_feature_list_.InitWithFeaturesAndParameters( - {}, {content_settings::features::kTrackingProtection3pcd}); subresource_filter::SubresourceFilterBrowserTest::SetUp(); } }; IN_PROC_BROWSER_TEST_F(ThirdPartyCookieDeprecationObserverTriggerBrowserTest, ThirdPartyCookiesSingleWrite) { - // Setup tracking protection onboard to block 3PC. + // Block 3PCs. + browser()->profile()->GetPrefs()->SetInteger( + prefs::kCookieControlsMode, + static_cast<int>(content_settings::CookieControlsMode::kBlockThirdParty)); SetUpTrackingProtectionOnboard(); content::CookieChangeObserver observer(web_contents(), 1); NavigateToPageWithFrame(kHostA); @@ -1643,8 +1647,10 @@ EXPECT_EQ(1, observer1.num_read_seen()); EXPECT_EQ(1, observer1.num_write_seen()); - // Setup tracking protection onboard to block 3PC. - SetUpTrackingProtectionOnboard(); + // Block 3PCs. + browser()->profile()->GetPrefs()->SetInteger( + prefs::kCookieControlsMode, + static_cast<int>(content_settings::CookieControlsMode::kBlockThirdParty)); content::CookieChangeObserver observer2(web_contents(), 1); // 3p cookie read NavigateFrameTo(kHostB, "/"); @@ -1655,8 +1661,10 @@ IN_PROC_BROWSER_TEST_F(ThirdPartyCookieDeprecationObserverTriggerBrowserTest, ThirdPartyCookiesBothWriteRead) { - // Setup tracking protection onboard to block 3PC. - SetUpTrackingProtectionOnboard(); + // Block 3PCs. + browser()->profile()->GetPrefs()->SetInteger( + prefs::kCookieControlsMode, + static_cast<int>(content_settings::CookieControlsMode::kBlockThirdParty)); // Only 3p cookie write is triggered because the 3p cookie write is blocked // and no cookie to read. content::CookieChangeObserver observer(web_contents(), 1);
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc index 9e3a8412..e6b21e0 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc
@@ -2488,6 +2488,9 @@ registry->RegisterBooleanPref( ntp_tiles::prefs::kTabResumptionHomeModuleEnabled, true); + registry->RegisterBooleanPref(ntp_tiles::prefs::kMagicStackHomeModuleEnabled, + true); + registry->RegisterBooleanPref(ntp_tiles::prefs::kTipsHomeModuleEnabled, true); }
diff --git a/chrome/browser/recent_tabs/internal/android/java/src/org/chromium/chrome/browser/recent_tabs/CrossDeviceListCoordinator.java b/chrome/browser/recent_tabs/internal/android/java/src/org/chromium/chrome/browser/recent_tabs/CrossDeviceListCoordinator.java index 8ba8655..31e269ac 100644 --- a/chrome/browser/recent_tabs/internal/android/java/src/org/chromium/chrome/browser/recent_tabs/CrossDeviceListCoordinator.java +++ b/chrome/browser/recent_tabs/internal/android/java/src/org/chromium/chrome/browser/recent_tabs/CrossDeviceListCoordinator.java
@@ -11,11 +11,9 @@ import org.chromium.base.supplier.ObservableSupplier; import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.chrome.browser.recent_tabs.ui.CrossDevicePaneView; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeControllerFactory; -import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils; import org.chromium.ui.edge_to_edge.EdgeToEdgePadAdjuster; import org.chromium.ui.modelutil.MVCListAdapter.ModelList; import org.chromium.ui.modelutil.ModelListAdapter; @@ -27,7 +25,7 @@ public class CrossDeviceListCoordinator { private final CrossDevicePaneView mView; private final CrossDeviceListMediator mCrossDeviceListMediator; - private @Nullable EdgeToEdgePadAdjuster mEdgeToEdgePadAdjuster; + private final EdgeToEdgePadAdjuster mEdgeToEdgePadAdjuster; /** * @param context Used to load resources and views. @@ -49,11 +47,9 @@ PropertyModelChangeProcessor.create(model, mView, CrossDeviceListViewBinder::bind); mCrossDeviceListMediator = new CrossDeviceListMediator(listItems, model); - if (EdgeToEdgeUtils.isDrawKeyNativePageToEdgeEnabled()) { - mEdgeToEdgePadAdjuster = - EdgeToEdgeControllerFactory.createForViewAndObserveSupplier( - listView, edgeToEdgeSupplier); - } + mEdgeToEdgePadAdjuster = + EdgeToEdgeControllerFactory.createForViewAndObserveSupplier( + listView, edgeToEdgeSupplier); } /** Returns the root view of this component. */
diff --git a/chrome/browser/resources/chromeos/accessibility/accessibility_common/mv2/BUILD.gn b/chrome/browser/resources/chromeos/accessibility/accessibility_common/mv2/BUILD.gn index f00edb3..e2ad4250 100644 --- a/chrome/browser/resources/chromeos/accessibility/accessibility_common/mv2/BUILD.gn +++ b/chrome/browser/resources/chromeos/accessibility/accessibility_common/mv2/BUILD.gn
@@ -252,7 +252,6 @@ test_type = "extension" sources = [ "accessibility_common_test.js", - "autoclick/autoclick_test.js", "dictation/dictation_test.js", "dictation/dictation_test_base.js", "dictation/dictation_ui_test.js",
diff --git a/chrome/browser/resources/chromeos/accessibility/accessibility_common/mv2/autoclick/autoclick_test.js b/chrome/browser/resources/chromeos/accessibility/accessibility_common/mv2/autoclick/autoclick_test.js deleted file mode 100644 index 90f2167..0000000 --- a/chrome/browser/resources/chromeos/accessibility/accessibility_common/mv2/autoclick/autoclick_test.js +++ /dev/null
@@ -1,153 +0,0 @@ -// Copyright 2019 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -GEN_INCLUDE(['../../../common/testing/e2e_test_base.js']); -GEN_INCLUDE(['../../../common/testing/mock_accessibility_private.js']); - -/** - * Automatic clicks feature using accessibility common extension browser tests. - */ -AutoclickMV2E2ETest = class extends E2ETestBase { - async setUpDeferred() { - this.mockAccessibilityPrivate = new MockAccessibilityPrivate(); - chrome.accessibilityPrivate = this.mockAccessibilityPrivate; - - window.RoleType = chrome.automation.RoleType; - - // Re-initialize AccessibilityCommon with mock AccessibilityPrivate API. - accessibilityCommon = new AccessibilityCommon(); - - await new Promise(r => { - chrome.accessibilityFeatures.autoclick.get({}, () => { - // Turn off focus ring blinking for test after autoclick is initialized. - accessibilityCommon.getAutoclickForTest().setNoBlinkFocusRingsForTest(); - r(); - }); - }); - - await super.setUpDeferred(); - } - - /** @override */ - testGenCppIncludes() { - super.testGenCppIncludes(); - GEN(` -#include "ash/accessibility/accessibility_delegate.h" -#include "ash/shell.h" -#include "base/functional/bind.h" -#include "base/functional/callback.h" -#include "chrome/browser/ash/accessibility/accessibility_manager.h" -#include "ui/accessibility/accessibility_features.h" - `); - } - - /** @override */ - testGenPreamble() { - GEN(` - base::OnceClosure load_cb = - base::BindOnce(&ash::AccessibilityManager::EnableAutoclick, - base::Unretained(ash::AccessibilityManager::Get()), - true); - `); - super.testGenPreambleCommon('kAccessibilityCommonExtensionId'); - } - - /** @override */ - get featureList() { - return { - disabled: ['features::kAccessibilityManifestV3AccessibilityCommon'] - }; - } - - /** - * Asserts that two rects are the same. - * @param {!chrome.accessibilityPrivate.ScreenRect} first - * @param {!chrome.accessibilityPrivate.ScreenRect} second - */ - assertSameRect(first, second) { - assertTrue(RectUtil.equal(first, second)); - } -}; - -AX_TEST_F( - 'AutoclickMV2E2ETest', 'HighlightsRootWebAreaIfNotScrollable', - async function() { - const root = await this.runWithLoadedTree( - 'data:text/html;charset=utf-8,<p>Cats rock!</p>'); - const node = root.find( - {role: RoleType.STATIC_TEXT, attributes: {name: 'Cats rock!'}}); - await new Promise(resolve => { - this.mockAccessibilityPrivate.callOnScrollableBoundsForPointRequested( - // Offset slightly into the node to ensure the hittest - // happens within the node. - node.location.left + 1, node.location.top + 1, resolve); - }); - const expected = node.root.location; - const focusRings = this.mockAccessibilityPrivate.getFocusRings(); - this.assertSameRect( - this.mockAccessibilityPrivate.getScrollableBounds(), expected); - this.assertSameRect(focusRings[0].rects[0], expected); - }); - -AX_TEST_F('AutoclickMV2E2ETest', 'HighlightsScrollableDiv', async function() { - const root = await this.runWithLoadedTree( - 'data:text/html;charset=utf-8,' + - '<div style="width:100px;height:100px;overflow:scroll">' + - '<div style="margin:50px">cats rock! this text wraps and overflows!' + - '</div></div>'); - const node = root.find({ - role: RoleType.STATIC_TEXT, - attributes: {name: 'cats rock! this text wraps and overflows!'}, - }); - await new Promise(resolve => { - this.mockAccessibilityPrivate.callOnScrollableBoundsForPointRequested( - // Offset slightly into the node to ensure the hittest happens - // within the node. - node.location.left + 1, node.location.top + 1, resolve); - }); - // The outer div, which is the parent of the parent of the - // text, is scrollable. - assertTrue(node.parent.parent.scrollable); - const expected = node.parent.parent.location; - const focusRings = this.mockAccessibilityPrivate.getFocusRings(); - this.assertSameRect( - this.mockAccessibilityPrivate.getScrollableBounds(), expected); - this.assertSameRect(focusRings[0].rects[0], expected); -}); - -AX_TEST_F('AutoclickMV2E2ETest', 'RemovesAndAddsAutoclick', async function() { - const root = await this.runWithLoadedTree( - 'data:text/html;charset=utf-8,<p>Cats rock!</p>'); - // Turn on screen magnifier so that when we turn off autoclick, the - // extension doesn't get unloaded and crash the test. - await new Promise(resolve => { - chrome.accessibilityFeatures.screenMagnifier.set({value: true}, resolve); - }); - - // Toggle autoclick off and on, ensure it still works and no crashes. - await new Promise(resolve => { - chrome.accessibilityFeatures.autoclick.set({value: false}, resolve); - }); - await new Promise(resolve => { - chrome.accessibilityFeatures.autoclick.set({value: true}, resolve); - }); - const node = - root.find({role: RoleType.STATIC_TEXT, attributes: {name: 'Cats rock!'}}); - await new Promise(resolve => { - this.mockAccessibilityPrivate.callOnScrollableBoundsForPointRequested( - // Offset slightly into the node to ensure the hittest happens - // within the node. - node.location.left + 1, node.location.top + 1, resolve); - }); - const expected = node.root.location; - const focusRings = this.mockAccessibilityPrivate.getFocusRings(); - this.assertSameRect( - this.mockAccessibilityPrivate.getScrollableBounds(), expected); - this.assertSameRect(focusRings[0].rects[0], expected); -}); - -// TODO(crbug.com/41467584): Add tests for when the scrollable area is scrolled -// all the way up or down, left or right. Add tests for nested scrollable areas. -// Add tests for root types like toolbar, dialog, and window to ensure -// we don't break boundaries when searching for scroll bars.
diff --git a/chrome/browser/resources/glic/glic_api/glic_api.ts b/chrome/browser/resources/glic/glic_api/glic_api.ts index c644bb22..d30fa93 100644 --- a/chrome/browser/resources/glic/glic_api/glic_api.ts +++ b/chrome/browser/resources/glic/glic_api/glic_api.ts
@@ -5,16 +5,16 @@ // API between the Chrome browser and the Glic web client. // // Overall notes: -// - There will only ever be one single instance of the web client running at -// a time. It may be destroyed and restarted, and each time the initialization -// process will be repeated. +// - There may be multiple instances of the web client running at a time, all +// sharing the same web storage space. Whenever one is started or restarted, +// the initialization steps will be repeated. // - As in TypeScript all `number`s are 64 bit floating points, we decided to // make all identifier values be of the `string` type (e.g. for a window or a // tab). // - The defined functions and interfaces can be "evolved" to provide more -// functionality and data, as needed. +// functionality and data, as needed, but must be kept backwards compatible. // - Functions are documented with their known behavior. Exceptions and promise -// failures should will be documented only if they are expected. +// failures should be documented only if they are expected. // - The browser provided tab and window IDs are based on the browser's // SessionID values, which are not stable between Chrome restarts, and should // not be saved to persisted storage for later reuse. See: @@ -219,14 +219,18 @@ (options: TabContextOptions): Promise<TabContextResult>; /** - * Similar to `getContextFromFocusedTab`, but returns context from the given - * tab. Can fail if the tab is not pinned or focused. + * Similar to `getContextFromFocusedTab`, but returns context from the tab + * identified by `tabId`. Will fail if the tab is not pinned or focused. + * + * @throws {Error} on failure. */ getContextFromTab? (tabId: string, options: TabContextOptions): Promise<TabContextResult>; /** * Similar to `getContextFromTab`, but for actors. Skips the focus check. + * + * @throws {Error} on failure. */ getContextForActorFromTab? (tabId: string, options: TabContextOptions): Promise<TabContextResult>; @@ -709,7 +713,6 @@ * requested for the same tabId, the first observable will be returned, and * therefore the names parameter is ignored in this case. * - * * When the tab is destroyed, the observable will complete. */ getPageMetadata? @@ -1000,12 +1003,8 @@ export enum PanelStateKind { /** Not shown. This is the initial state. */ HIDDEN = 0, - /** @deprecated Use DETACHED instead. */ - FLOATING = 1, /** A floating window detached from any Chrome window. */ DETACHED = 1, - /** @deprecated Use ATTACHED instead.*/ - DOCKED = 2, /** Attached to a Chrome window. */ ATTACHED = 2, } @@ -1261,7 +1260,6 @@ */ isMediaActive?: boolean; - /** * Whether the tab content is being captured by another functionality (e.g., * screen share in video chat). This is a best effort signal, and may not be @@ -1527,7 +1525,6 @@ /** Error type used for scrollTo(). */ export type ScrollToError = ErrorWithReason<'scrollTo'>; - /** * A rectangular area based in the glic window's coordinate system. All * coordinate and size values are in DIPs. The coordinate system is based in the
diff --git a/chrome/browser/resources/new_tab_page/app.css b/chrome/browser/resources/new_tab_page/app.css index 48ac5c0..142e3d18 100644 --- a/chrome/browser/resources/new_tab_page/app.css +++ b/chrome/browser/resources/new_tab_page/app.css
@@ -30,21 +30,26 @@ --ntp-module-item-border-radius: 12px; --ntp-protected-icon-background-color: transparent; --ntp-protected-icon-background-color-hovered: rgba(255, 255, 255, .1); + --ntp-scrim-opacity_: 1; } /** * Hide everything that should not display when the composebox is open * so they are not tabbable. */ -:host([show-composebox_]) cr-most-visited, -:host([show-composebox_]) ntp-middle-slot-promo, -:host([show-composebox_]) ntp-modules, -:host([show-composebox_]) #backgroundImageAttribution, -:host([show-composebox_]) ntp-customize-buttons, -:host([show-composebox_]) setup-list-module-wrapper{ +:host([show-composebox_]):not([ntp-realbox-next-enabled_]) cr-most-visited, +:host([show-composebox_]):not([ntp-realbox-next-enabled_]) ntp-middle-slot-promo, +:host([show-composebox_]):not([ntp-realbox-next-enabled_]) ntp-modules, +:host([show-composebox_]):not([ntp-realbox-next-enabled_]) #backgroundImageAttribution, +:host([show-composebox_]):not([ntp-realbox-next-enabled_]) ntp-customize-buttons, +:host([show-composebox_]):not([ntp-realbox-next-enabled_]) setup-list-module-wrapper{ display: none; } +:host([ntp-realbox-next-enabled_]) { + --ntp-scrim-opacity_: 0.5; +} + /** * Maintain a larger width if the secondary side can be shown and was at any * point available to be shown. @@ -88,6 +93,18 @@ --ntp-protected-icon-background-color-hovered: rgba(0, 0, 0, .7); } +/* The styles to create a stacking context for the OGB-related elements. + * The OGB has z-index of 1000 (set by inline styling), + * and it needs to be segregated to get the OGB scrimmed. */ +#oneGoogleBarStackingContext { + position: absolute; + border: 0px; + top: 0; + width: 100%; + height: 100%; + z-index: 0; +} + #oneGoogleBarScrim { background: linear-gradient(rgba(0,0,0,0.25) 0%, rgba(0,0,0,0.12) 45%, @@ -131,7 +148,8 @@ z-index: 1; /* Needed so it layers on top of OneGoogleBar. */ } -:host([show-composebox_]) #logo { +:host([show-composebox_]) #logo, +:host([ntp-realbox-next-enabled_][dropdown-is-visible_]) #logo{ z-index: 2; } @@ -139,6 +157,7 @@ display: inherit; margin-bottom: 16px; position: relative; + z-index: 2; } #modules:not([hidden]) { @@ -285,10 +304,10 @@ z-index: 101; } -#composeboxScrim { +#scrim { background: var(--color-new-tab-page-composebox-scrim-background); inset: 0; - opacity: 1; + opacity: var(--ntp-scrim-opacity_); position: fixed; z-index: 1; }
diff --git a/chrome/browser/resources/new_tab_page/app.html b/chrome/browser/resources/new_tab_page/app.html index ba4b1757..48e0c50 100644 --- a/chrome/browser/resources/new_tab_page/app.html +++ b/chrome/browser/resources/new_tab_page/app.html
@@ -5,14 +5,28 @@ ${this.lazyRender_ && this.microsoftModuleEnabled_ ? html` <iframe id="microsoftAuth" src="${this.microsoftAuthIframePath_}"></iframe> ` : ''} - ${this.lazyRender_ && this.oneGoogleBarEnabled_ ? html` - <div id="oneGoogleBarScrim" ?hidden="${!this.showBackgroundImage_}" - ?fixed="${this.scrolledToTop_}"></div> - <ntp-iframe id="oneGoogleBar" src="${this.oneGoogleBarIframePath_}" - ?hidden="${!this.oneGoogleBarLoaded_}" - allow="camera ${this.oneGoogleBarIframeOrigin_}; display-capture ${this.oneGoogleBarIframeOrigin_}"> <!-- presubmit: ignore-long-line --> - </ntp-iframe> - ` : ''} + ${this.lazyRender_ && this.oneGoogleBarEnabled_ ? + ( + this.ntpRealboxNextEnabled_ ? + html` + <div id="oneGoogleBarStackingContext"> + <div id="oneGoogleBarScrim" ?hidden="${!this.showBackgroundImage_}" + ?fixed="${this.scrolledToTop_}"></div> + <ntp-iframe id="oneGoogleBar" src="${this.oneGoogleBarIframePath_}" + ?hidden="${!this.oneGoogleBarLoaded_}" + allow="camera ${this.oneGoogleBarIframeOrigin_}; display-capture ${this.oneGoogleBarIframeOrigin_}"> <!-- presubmit: ignore-long-line --> + </ntp-iframe> + </div> + ` : + html` + <div id="oneGoogleBarScrim" ?hidden="${!this.showBackgroundImage_}" + ?fixed="${this.scrolledToTop_}"></div> + <ntp-iframe id="oneGoogleBar" src="${this.oneGoogleBarIframePath_}" + ?hidden="${!this.oneGoogleBarLoaded_}" + allow="camera ${this.oneGoogleBarIframeOrigin_}; display-capture ${this.oneGoogleBarIframeOrigin_}"> <!-- presubmit: ignore-long-line --> + </ntp-iframe> + ` + ) : ''} <!-- TODO(crbug.com/40743294): Instead of ?hidden="${!this.logoEnabled_}" it would be nicer to use Lit's conditional rendering. However, that breaks StartupBrowserCreatorPickerNoParamsTest.ShowPickerWhenAlreadyLaunched on @@ -20,6 +34,10 @@ <ntp-logo id="logo" ?single-colored="${this.singleColoredLogo_}" .theme="${this.theme_}" ?hidden="${!this.logoEnabled_}"> </ntp-logo> + ${this.ntpRealboxNextEnabled_ && this.dropdownIsVisible_ ? html` + <div id="scrim" + @click="${this.composeboxCloseByClickOutside_ ? this.onComposeboxClickOutside_ : nothing}"></div> + ` : ''} <div id="searchboxContainer"> <cr-searchbox id="searchbox" ?is-dark="${this.isThemeDark_()}" ?color-source-is-baseline="${this.colorSourceIsBaseline}" @@ -33,10 +51,12 @@ ?composebox-enabled="${this.composeboxEnabled}" realbox-layout-mode="${this.realboxLayoutMode_}" ?ntp-realbox-next-enabled="${this.ntpRealboxNextEnabled_}" - ?cycling-placeholders="${this.searchboxCyclingPlaceholders_}"> + ?cycling-placeholders="${this.searchboxCyclingPlaceholders_}" + @dropdown-visible-changed="${this.onDropdownVisibleChanged_}"> </cr-searchbox> ${this.showComposebox_ ? html` - <ntp-composebox id="composebox" ?is_collapsible="false" @close-composebox="${this.closeComposebox_}"> + <ntp-composebox id="composebox" ?is_collapsible="false" ?ntp-realbox-next-enabled="${this.ntpRealboxNextEnabled_}" + @close-composebox="${this.closeComposebox_}" @composebox-dropdown-visible-changed="${this.onDropdownVisibleChanged_}"> </ntp-composebox> ` : ''} ${this.showLensUploadDialog_ ? html` @@ -135,9 +155,9 @@ <ntp-voice-search-overlay @close="${this.onVoiceSearchOverlayClose_}"> </ntp-voice-search-overlay> ` : ''} -${this.showComposebox_ ? html` - <div id="composeboxScrim" - @click="${this.composeboxCloseByClickOutside_ ? this.onComposeboxClickOutside_ : nothing}"></div> +${!this.ntpRealboxNextEnabled_ && this.showComposebox_ ? html` + <div id="scrim" + @click="${this.composeboxCloseByClickOutside_ ? this.onComposeboxClickOutside_ : nothing}"></div> ` : ''} <svg> <defs>
diff --git a/chrome/browser/resources/new_tab_page/app.ts b/chrome/browser/resources/new_tab_page/app.ts index 5a6c276e..fb1c3ed9 100644 --- a/chrome/browser/resources/new_tab_page/app.ts +++ b/chrome/browser/resources/new_tab_page/app.ts
@@ -300,6 +300,8 @@ wasComposeboxOpened_: {type: Boolean}, ntpNextFeaturesEnabled_: {type: Boolean}, + + dropdownIsVisible_: {type: Boolean, reflect: true}, }; } @@ -373,6 +375,7 @@ loadTimeData.getBoolean('searchboxCyclingPlaceholders'); protected accessor ntpNextFeaturesEnabled_: boolean = loadTimeData.getBoolean('ntpNextFeaturesEnabled'); + protected accessor dropdownIsVisible_: boolean = false; private callbackRouter_: PageCallbackRouter; private pageHandler_: PageHandlerRemote; @@ -796,6 +799,9 @@ assert(composebox); composebox.setText(''); composebox.resetModes(); + if (this.ntpRealboxNextEnabled_) { + composebox.closeDropdown(); + } this.toggleComposebox_(); this.logoColor_ = this.computeLogoColor_(); this.singleColoredLogo_ = this.computeSingleColoredLogo_(); @@ -1225,6 +1231,10 @@ return !!this.theme_?.backgroundImage?.attributionUrl; } + protected onDropdownVisibleChanged_(e: CustomEvent<{value: boolean}>) { + this.dropdownIsVisible_ = e.detail.value; + } + protected onRealboxHadSecondarySideChanged_( e: CustomEvent<{value: boolean}>) { this.realboxHadSecondarySide = e.detail.value;
diff --git a/chrome/browser/save_to_drive/BUILD.gn b/chrome/browser/save_to_drive/BUILD.gn index 71f6137..f9421b8a 100644 --- a/chrome/browser/save_to_drive/BUILD.gn +++ b/chrome/browser/save_to_drive/BUILD.gn
@@ -14,8 +14,8 @@ "pdf_content_reader.h", "resumable_drive_uploader.h", "save_to_drive_event_dispatcher.h", - "save_to_drive_recorder.h", "save_to_drive_flow.h", + "save_to_drive_recorder.h", "save_to_drive_utils.h", "time_remaining_calculator.h", ] @@ -26,8 +26,8 @@ "pdf_content_reader.cc", "resumable_drive_uploader.cc", "save_to_drive_event_dispatcher.cc", - "save_to_drive_recorder.cc", "save_to_drive_flow.cc", + "save_to_drive_recorder.cc", "save_to_drive_utils.cc", "time_remaining_calculator.cc", ] @@ -47,6 +47,7 @@ "//chrome/browser/ui/save_to_drive", "//chrome/common/extensions", "//chrome/common/extensions/api", + "//components/download/public/common:public", "//components/drive", "//components/endpoint_fetcher", "//components/pdf/browser", @@ -67,6 +68,7 @@ deps = [ ":save_to_drive", "//chrome/browser/pdf:pdf_extension_test_utils", + "//chrome/browser/ui/hats:test_support", "//chrome/browser/ui/save_to_drive", "//chrome/common/extensions/api", "//chrome/test:test_support", @@ -75,7 +77,6 @@ "//extensions/browser:test_support", "//pdf:features", "//testing/gtest", - "//chrome/browser/ui/hats:test_support", "//url", ] }
diff --git a/chrome/browser/save_to_drive/drive_uploader.cc b/chrome/browser/save_to_drive/drive_uploader.cc index e4928c2..cbc5250 100644 --- a/chrome/browser/save_to_drive/drive_uploader.cc +++ b/chrome/browser/save_to_drive/drive_uploader.cc
@@ -92,6 +92,9 @@ constexpr std::string_view kErrorReasonQuotaExceeded = "quotaExceeded"; constexpr std::string_view kErrorStorageQuotaExceeded = "storageQuotaExceeded"; +constexpr base::TimeDelta kUploadInProgressUpdateDispatchInterval = + base::Milliseconds(500); + std::optional<DriveUploader::Item> ParseClientFolderResponse( std::unique_ptr<endpoint_fetcher::EndpointResponse> endpoint_response) { if (!endpoint_response || endpoint_response->response.empty() || @@ -301,6 +304,23 @@ return oauth_headers_; } +void DriveUploader::NotifyUploadInProgress(size_t uploaded_bytes, + size_t total_bytes) { + const base::TimeTicks now = base::TimeTicks::Now(); + if (now - last_upload_in_progress_update_time_ < + kUploadInProgressUpdateDispatchInterval) { + return; + } + last_upload_in_progress_update_time_ = now; + + SaveToDriveProgress progress; + progress.status = SaveToDriveStatus::kUploadInProgress; + progress.error_type = SaveToDriveErrorType::kNoError; + progress.file_size_bytes = total_bytes; + progress.uploaded_bytes = uploaded_bytes; + progress_callback_.Run(std::move(progress)); +} + void DriveUploader::NotifyUploadSuccess( std::unique_ptr<endpoint_fetcher::EndpointResponse> response) { progress_callback_.Run(CreateSuccessProgress(
diff --git a/chrome/browser/save_to_drive/drive_uploader.h b/chrome/browser/save_to_drive/drive_uploader.h index ca41aa3..4629e9a 100644 --- a/chrome/browser/save_to_drive/drive_uploader.h +++ b/chrome/browser/save_to_drive/drive_uploader.h
@@ -14,6 +14,7 @@ #include "base/functional/callback.h" #include "base/memory/weak_ptr.h" #include "base/scoped_observation.h" +#include "base/time/time.h" #include "components/signin/public/identity_manager/account_info.h" #include "components/signin/public/identity_manager/identity_manager.h" @@ -118,6 +119,12 @@ void OnFetchParentFolder( std::unique_ptr<endpoint_fetcher::EndpointResponse> response); + // Notifies through `progress_callback_` the latest upload progress. This + // method will throttle the progress updates to avoid spamming the extension. + // `uploaded_bytes` is the number of bytes that have been uploaded so far and + // `total_bytes` is the total number of bytes that need to be uploaded. + void NotifyUploadInProgress(size_t uploaded_bytes, size_t total_bytes); + // Notifies through `progress_callback_` that the upload succeeded. // `response` is the response from the Drive API that contains the uploaded // file metadata. @@ -156,6 +163,9 @@ base::ScopedObservation<signin::IdentityManager, signin::IdentityManager::Observer> scoped_identity_manager_observation_{this}; + // The last time an upload progress update was sent to the extension. This is + // used to throttle the upload in progress updates. + base::TimeTicks last_upload_in_progress_update_time_; base::WeakPtrFactory<DriveUploader> weak_ptr_factory_{this}; };
diff --git a/chrome/browser/save_to_drive/drive_uploader_unittest.cc b/chrome/browser/save_to_drive/drive_uploader_unittest.cc index d3243e94..a24a6aa7 100644 --- a/chrome/browser/save_to_drive/drive_uploader_unittest.cc +++ b/chrome/browser/save_to_drive/drive_uploader_unittest.cc
@@ -12,6 +12,7 @@ #include "base/test/bind.h" #include "base/test/gmock_callback_support.h" #include "base/test/mock_callback.h" +#include "base/test/task_environment.h" #include "base/test/test_future.h" #include "base/time/time.h" #include "chrome/browser/save_to_drive/content_reader.h" @@ -79,6 +80,10 @@ MOCK_METHOD(void, UploadFile, (), (override)); + void NotifyUploadInProgress(size_t uploaded_bytes, size_t total_bytes) { + DriveUploader::NotifyUploadInProgress(uploaded_bytes, total_bytes); + } + const std::optional<Item>& parent_folder() const { return parent_folder_; } }; @@ -98,7 +103,8 @@ return adaptor_->identity_test_env(); } - content::BrowserTaskEnvironment task_environment_; + content::BrowserTaskEnvironment task_environment_{ + base::test::TaskEnvironment::TimeSource::MOCK_TIME}; std::unique_ptr<TestingProfile> profile_; std::unique_ptr<IdentityTestEnvironmentProfileAdaptor> adaptor_; base::MockCallback<DriveUploader::ProgressCallback> progress_callback_; @@ -180,6 +186,43 @@ test_env()->RemoveRefreshTokenForAccount(account_info.account_id); } +TEST_F(DriveUploaderTest, NotifyUploadInProgressIsRateLimited) { + auto account_info = test_env()->MakePrimaryAccountAvailable( + "test@example.com", signin::ConsentLevel::kSignin); + auto uploader = std::make_unique<FakeDriveUploader>( + "test_title", account_info, progress_callback_.Get(), profile_.get(), + &mock_content_reader_); + const size_t kTotalBytes = 1000; + + // First call should trigger a callback. + EXPECT_CALL( + progress_callback_, + Run(AllOf(Field(&SaveToDriveProgress::status, + SaveToDriveStatus::kUploadInProgress), + Field(&SaveToDriveProgress::uploaded_bytes, 100u), + Field(&SaveToDriveProgress::file_size_bytes, kTotalBytes)))) + .Times(1); + uploader->NotifyUploadInProgress(100, kTotalBytes); + + // Subsequent calls within the interval should be ignored. + EXPECT_CALL(progress_callback_, Run(_)).Times(0); + uploader->NotifyUploadInProgress(200, kTotalBytes); + + task_environment_.FastForwardBy(base::Milliseconds(499)); + uploader->NotifyUploadInProgress(300, kTotalBytes); + + // After the interval, the next call should trigger a callback. + task_environment_.FastForwardBy(base::Milliseconds(1)); + EXPECT_CALL( + progress_callback_, + Run(AllOf(Field(&SaveToDriveProgress::status, + SaveToDriveStatus::kUploadInProgress), + Field(&SaveToDriveProgress::uploaded_bytes, 400u), + Field(&SaveToDriveProgress::file_size_bytes, kTotalBytes)))) + .Times(1); + uploader->NotifyUploadInProgress(400, kTotalBytes); +} + class FetchParentFolderTest : public DriveUploaderTest { public: FetchParentFolderTest() = default;
diff --git a/chrome/browser/save_to_drive/multipart_drive_uploader.cc b/chrome/browser/save_to_drive/multipart_drive_uploader.cc index 2c94b96d..e6de185f 100644 --- a/chrome/browser/save_to_drive/multipart_drive_uploader.cc +++ b/chrome/browser/save_to_drive/multipart_drive_uploader.cc
@@ -115,12 +115,7 @@ void MultipartDriveUploader::OnUploadProgress(uint64_t current_bytes, uint64_t total_bytes) { - SaveToDriveProgress progress; - progress.status = SaveToDriveStatus::kUploadInProgress; - progress.error_type = SaveToDriveErrorType::kNoError; - progress.file_size_bytes = total_bytes; - progress.uploaded_bytes = current_bytes; - progress_callback_.Run(std::move(progress)); + NotifyUploadInProgress(current_bytes, total_bytes); } void MultipartDriveUploader::HandleUploadResponse(
diff --git a/chrome/browser/save_to_drive/resumable_drive_uploader.cc b/chrome/browser/save_to_drive/resumable_drive_uploader.cc index 805ca63..2cde40b 100644 --- a/chrome/browser/save_to_drive/resumable_drive_uploader.cc +++ b/chrome/browser/save_to_drive/resumable_drive_uploader.cc
@@ -188,12 +188,7 @@ void ResumableDriveUploader::NotifyUploadProgress(size_t uploaded_bytes) { const size_t file_size = content_reader_->GetSize(); CHECK_LE(uploaded_bytes, file_size); - SaveToDriveProgress progress; - progress.status = SaveToDriveStatus::kUploadInProgress; - progress.error_type = SaveToDriveErrorType::kNoError; - progress.file_size_bytes = file_size; - progress.uploaded_bytes = uploaded_bytes; - progress_callback_.Run(std::move(progress)); + NotifyUploadInProgress(uploaded_bytes, file_size); } void ResumableDriveUploader::OnUploadProgress(uint64_t current_chunk_bytes,
diff --git a/chrome/browser/save_to_drive/time_remaining_calculator.cc b/chrome/browser/save_to_drive/time_remaining_calculator.cc index 4da98238..2554954 100644 --- a/chrome/browser/save_to_drive/time_remaining_calculator.cc +++ b/chrome/browser/save_to_drive/time_remaining_calculator.cc
@@ -17,21 +17,6 @@ TimeRemainingCalculator::~TimeRemainingCalculator() = default; -int TimeRemainingCalculator::GetUploadSpeed( - const base::ByteCount& uploaded_bytes) const { - if (uploaded_bytes.is_zero()) { - return 0; - } - const base::TimeDelta time_delta = - base::TimeTicks::Now() - last_upload_speed_update_time_; - if (time_delta.is_zero()) { - return 0; - } - const base::ByteCount bytes_delta = uploaded_bytes - last_uploaded_bytes_; - // No rounding is done here since the output is just an estimation. - return bytes_delta.InBytes() / time_delta.InSecondsF(); -} - std::optional<base::TimeDelta> TimeRemainingCalculator::GetRemainingTime( const base::ByteCount& uploaded_bytes, const base::ByteCount& file_size_bytes) const { @@ -39,7 +24,7 @@ if (remaining_bytes.is_zero() || remaining_bytes.is_negative()) { return std::nullopt; } - const int upload_speed = GetUploadSpeed(uploaded_bytes); + const int upload_speed = upload_speed_estimator_.GetCountPerSecond(); if (upload_speed <= 0) { return std::nullopt; } @@ -55,10 +40,11 @@ std::optional<base::TimeDelta> remaining_time; base::ByteCount uploaded_bytes(progress.uploaded_bytes.value()); if (progress.status == SaveToDriveStatus::kUploadInProgress) { + const base::ByteCount bytes_delta = uploaded_bytes - last_uploaded_bytes_; + upload_speed_estimator_.Increment(bytes_delta.InBytes()); remaining_time = GetRemainingTime( uploaded_bytes, base::ByteCount(progress.file_size_bytes.value())); } - last_upload_speed_update_time_ = base::TimeTicks::Now(); last_uploaded_bytes_ = std::move(uploaded_bytes); if (!remaining_time.has_value()) { return std::nullopt;
diff --git a/chrome/browser/save_to_drive/time_remaining_calculator.h b/chrome/browser/save_to_drive/time_remaining_calculator.h index 639f511..5e11f57 100644 --- a/chrome/browser/save_to_drive/time_remaining_calculator.h +++ b/chrome/browser/save_to_drive/time_remaining_calculator.h
@@ -9,7 +9,7 @@ #include <string> #include "base/byte_count.h" -#include "base/time/time.h" +#include "components/download/public/common/rate_estimator.h" namespace extensions::api::pdf_viewer_private { struct SaveToDriveProgress; @@ -27,26 +27,22 @@ // Calculates and returns a human-readable string for the estimated time // remaining for the save to drive operation. Returns std::nullopt if the - // upload speed is zero or progress is invalid. Determines the upload speed by - // comparing against the progress from the previous call, so this should be - // called with each new update. This should only be called when the progress + // upload speed is zero or progress is invalid. It determines the upload speed + // by using the `RateEstimator`. This should only be called when the progress // status is `kUploadStarted` or `kUploadInProgress`. virtual std::optional<std::u16string> CalculateTimeRemainingText( const extensions::api::pdf_viewer_private::SaveToDriveProgress& progress); private: - // Returns the upload speed in bytes per second. - int GetUploadSpeed(const base::ByteCount& uploaded_bytes) const; - // Returns the remaining time for the save to drive operation. std::optional<base::TimeDelta> GetRemainingTime( const base::ByteCount& uploaded_bytes, const base::ByteCount& file_size_bytes) const; - // The last time the upload speed was updated. - base::TimeTicks last_upload_speed_update_time_; // The last uploaded bytes. base::ByteCount last_uploaded_bytes_; + // Used to get a smooth estimate of the upload speed. + download::RateEstimator upload_speed_estimator_; }; } // namespace save_to_drive
diff --git a/chrome/browser/save_to_drive/time_remaining_calculator_unittest.cc b/chrome/browser/save_to_drive/time_remaining_calculator_unittest.cc index e90fa6c..ed02ebed 100644 --- a/chrome/browser/save_to_drive/time_remaining_calculator_unittest.cc +++ b/chrome/browser/save_to_drive/time_remaining_calculator_unittest.cc
@@ -42,56 +42,70 @@ }; TEST_F(SaveToDriveTimeRemainingCalculatorTest, - CalculateTimeRemainingTextWithNoTimePassed) { + CalculateTimeRemainingTextWithNoAdditionalBytesUploaded) { pdf_api::SaveToDriveProgress progress = CreateUploadStartedProgress(); + progress.status = pdf_api::SaveToDriveStatus::kUploadInProgress; EXPECT_EQ(calculator().CalculateTimeRemainingText(progress), std::nullopt); - progress.status = pdf_api::SaveToDriveStatus::kUploadInProgress; - progress.uploaded_bytes = 10 * 1024 * 1024; + FastForwardBy(base::Seconds(10)); EXPECT_EQ(calculator().CalculateTimeRemainingText(progress), std::nullopt); - progress.status = pdf_api::SaveToDriveStatus::kUploadInProgress; - progress.uploaded_bytes = 50 * 1024 * 1024; + FastForwardBy(base::Minutes(10)); EXPECT_EQ(calculator().CalculateTimeRemainingText(progress), std::nullopt); } TEST_F(SaveToDriveTimeRemainingCalculatorTest, CalculateTimeRemainingTextAfterTimePassed) { pdf_api::SaveToDriveProgress progress = CreateUploadStartedProgress(); + progress.status = pdf_api::SaveToDriveStatus::kUploadInProgress; EXPECT_EQ(calculator().CalculateTimeRemainingText(progress), std::nullopt); - progress.status = pdf_api::SaveToDriveStatus::kUploadInProgress; + // Speed estimate: 1 MiB/s. Remaining: 90 MiB. + // Time: 90 MiB / 1 MiB/s = 90s. progress.uploaded_bytes = 10 * 1024 * 1024; FastForwardBy(base::Seconds(10)); EXPECT_THAT(calculator().CalculateTimeRemainingText(progress), testing::Optional(std::u16string_view(u"2 minutes left"))); - progress.uploaded_bytes = 40 * 1024 * 1024; - FastForwardBy(base::Seconds(6)); - EXPECT_THAT(calculator().CalculateTimeRemainingText(progress), - testing::Optional(std::u16string_view(u"12 seconds left"))); -} - -TEST_F(SaveToDriveTimeRemainingCalculatorTest, - CalculateTimeRemainingTextAfterUploadRestarted) { - pdf_api::SaveToDriveProgress progress = CreateUploadStartedProgress(); - EXPECT_EQ(calculator().CalculateTimeRemainingText(progress), std::nullopt); - - progress.status = pdf_api::SaveToDriveStatus::kUploadInProgress; - progress.uploaded_bytes = 10 * 1024 * 1024; + // Speed estimate: 1 MiB/s. Remaining: 80 MiB. + // Time: 80 MiB / 1 MiB/s = 80s. + progress.uploaded_bytes = 20 * 1024 * 1024; FastForwardBy(base::Seconds(10)); EXPECT_THAT(calculator().CalculateTimeRemainingText(progress), - testing::Optional(std::u16string_view(u"2 minutes left"))); + testing::Optional(std::u16string_view(u"1 minute left"))); - progress.status = pdf_api::SaveToDriveStatus::kUploadStarted; - progress.uploaded_bytes = 0; - EXPECT_EQ(calculator().CalculateTimeRemainingText(progress), std::nullopt); + // Speed estimate: 0 MiB/s. + // Time: no speed output, so no estimate. + FastForwardBy(base::Seconds(10)); + EXPECT_THAT(calculator().CalculateTimeRemainingText(progress), std::nullopt); - progress.status = pdf_api::SaveToDriveStatus::kUploadInProgress; - progress.uploaded_bytes = 30 * 1024 * 1024; - FastForwardBy(base::Minutes(2)); + // Speed estimate: 3 MiB/s. Remaining: 50 MiB. + // Time: 50 MiB / 3 MiB/s = 16.67s. + progress.uploaded_bytes = 50 * 1024 * 1024; + FastForwardBy(base::Seconds(10)); EXPECT_THAT(calculator().CalculateTimeRemainingText(progress), - testing::Optional(std::u16string_view(u"5 minutes left"))); + testing::Optional(std::u16string_view(u"16 seconds left"))); + + // Speed estimate: 0.1 MiB/s. Remaining: 49 MiB. + // Time: 49 MiB / 0.1 MiB/s = 490s (8.16 minutes). + progress.uploaded_bytes = 51 * 1024 * 1024; + FastForwardBy(base::Seconds(10)); + EXPECT_THAT(calculator().CalculateTimeRemainingText(progress), + testing::Optional(std::u16string_view(u"8 minutes left"))); + + // Speed estimate: 4 MiB/s. Remaining: 45 MiB. + // Time: 45/4 = 11.25s. + progress.uploaded_bytes = 55 * 1024 * 1024; + FastForwardBy(base::Seconds(15)); + EXPECT_THAT(calculator().CalculateTimeRemainingText(progress), + testing::Optional(std::u16string_view(u"11 seconds left"))); + + // Speed estimate: 1 MiB/s. Remaining: 44 MiB. + // Time: 44/1 = 44s. + progress.uploaded_bytes = 56 * 1024 * 1024; + FastForwardBy(base::Seconds(20)); + EXPECT_THAT(calculator().CalculateTimeRemainingText(progress), + testing::Optional(std::u16string_view(u"44 seconds left"))); } } // namespace
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index ba253f71..1ead5bc7 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -283,6 +283,7 @@ "//chrome/browser/bitmap_fetcher", "//chrome/browser/breadcrumbs", "//chrome/browser/commerce", + "//chrome/browser/complex_tasks", "//chrome/browser/content_settings", "//chrome/browser/content_settings:content_settings_factory", "//chrome/browser/content_settings:content_settings_factory_impl", @@ -1427,6 +1428,7 @@ "//chrome/browser/privacy_sandbox/notice:notice_mojom", "//chrome/browser/send_tab_to_self", "//chrome/browser/signin:signin_promo", + "//chrome/browser/ui/browser_window:create_browser_window", "//chrome/browser/ui/interaction", "//chrome/browser/ui/location_bar", "//chrome/browser/ui/passwords/bubble_controllers", @@ -3173,12 +3175,15 @@ "views/eye_dropper/eye_dropper_view_mac.h", "views/eye_dropper/eye_dropper_view_mac.mm", "views/frame/browser_frame_view_factory_mac.mm", + "views/frame/browser_frame_view_mac.h", "views/frame/browser_frame_view_mac.mm", "views/frame/browser_native_widget_factory_mac.mm", "views/frame/browser_native_widget_mac.h", "views/frame/browser_native_widget_mac.mm", "views/frame/immersive_mode_controller_mac.h", "views/frame/immersive_mode_controller_mac.mm", + "views/frame/immersive_mode_overlay_views_mac.h", + "views/frame/immersive_mode_overlay_views_mac.mm", "views/tab_contents/chrome_web_contents_view_delegate_views_mac.h", "views/tab_contents/chrome_web_contents_view_delegate_views_mac.mm", "webui/help/version_updater_mac.mm",
diff --git a/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeControllerFactory.java b/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeControllerFactory.java index 80c7593..187a6be 100644 --- a/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeControllerFactory.java +++ b/chrome/browser/ui/android/edge_to_edge/internal/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeControllerFactory.java
@@ -117,8 +117,7 @@ * @param view The view to be adjusted. */ public static EdgeToEdgePadAdjuster createForView(View view) { - return new SimpleEdgeToEdgePadAdjuster( - view, EdgeToEdgeUtils.isDrawKeyNativePageToEdgeEnabled()); + return new SimpleEdgeToEdgePadAdjuster(view, /* enableClipToPadding= */ true); } /** @@ -132,7 +131,7 @@ public static EdgeToEdgePadAdjuster createForView( View view, EdgeToEdgeController edgeToEdgeController) { return new SimpleEdgeToEdgePadAdjuster( - view, edgeToEdgeController, EdgeToEdgeUtils.isDrawKeyNativePageToEdgeEnabled()); + view, edgeToEdgeController, /* enableClipToPadding= */ true); } /** @@ -146,8 +145,6 @@ View view, @Nullable ObservableSupplier<EdgeToEdgeController> edgeToEdgeControllerSupplier) { return new SimpleEdgeToEdgePadAdjuster( - view, - edgeToEdgeControllerSupplier, - EdgeToEdgeUtils.isDrawKeyNativePageToEdgeEnabled()); + view, edgeToEdgeControllerSupplier, /* enableClipToPadding= */ true); } }
diff --git a/chrome/browser/ui/android/edge_to_edge/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeUtils.java b/chrome/browser/ui/android/edge_to_edge/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeUtils.java index b8058454..be09a762a 100644 --- a/chrome/browser/ui/android/edge_to_edge/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeUtils.java +++ b/chrome/browser/ui/android/edge_to_edge/java/src/org/chromium/chrome/browser/ui/edge_to_edge/EdgeToEdgeUtils.java
@@ -211,11 +211,6 @@ return sIsTargetSdkEnforceEdgeToEdge; } - /** Whether key native pages should draw to edge. */ - public static boolean isDrawKeyNativePageToEdgeEnabled() { - return isBottomChinFeatureEnabled(); - } - /** * Whether reporting the page's safe area constraint to the bottom chin. Required when {@link * isEdgeToEdgeBottomChinEnabled}. @@ -322,10 +317,7 @@ if (tab == null || tab.isNativePage()) { return isNativeTabDrawingToEdge(tab); } - if (tab.shouldEnableEmbeddedMediaExperience()) { - return isDrawKeyNativePageToEdgeEnabled(); - } - if (sAlwaysDrawWebEdgeToEdgeForTesting) { + if (sAlwaysDrawWebEdgeToEdgeForTesting || tab.shouldEnableEmbeddedMediaExperience()) { return true; } return getWasViewportFitCover(tab); @@ -340,12 +332,9 @@ if (tab == null || tab.isNativePage()) { return isNativeTabDrawingToEdge(tab); } - if (sAlwaysDrawWebEdgeToEdgeForTesting) { + if (sAlwaysDrawWebEdgeToEdgeForTesting || tab.shouldEnableEmbeddedMediaExperience()) { return true; } - if (tab.shouldEnableEmbeddedMediaExperience()) { - return isDrawKeyNativePageToEdgeEnabled(); - } return value == ViewportFit.COVER || value == ViewportFit.COVER_FORCED_BY_USER_AGENT; } @@ -360,8 +349,6 @@ /** Whether a native tab will be drawn edge to to edge. */ static boolean isNativeTabDrawingToEdge(@Nullable Tab activeTab) { - if (!isDrawKeyNativePageToEdgeEnabled()) return false; - // TODO(crbug.com/339025702): Check if we are in tab switcher when activeTab is null. if (activeTab == null) return false;
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/MiniOriginBarController.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/MiniOriginBarController.java index 085fbfbb..b214926 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/MiniOriginBarController.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/MiniOriginBarController.java
@@ -187,6 +187,7 @@ mIsFormFieldFocusedObserver = (focused) -> { + if (mIsOmniboxFocusedSupplier.getAsBoolean()) return; updateMiniOriginBarState( focused ? MiniOriginEvent.FORM_FIELD_GAINED_FOCUS
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/MiniOriginBarControllerTest.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/MiniOriginBarControllerTest.java index 2e43b73..85e7fefa 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/MiniOriginBarControllerTest.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/MiniOriginBarControllerTest.java
@@ -213,6 +213,17 @@ } @Test + public void testFormFieldFocusWithOmniboxFocused() { + doReturn(ControlsPosition.BOTTOM).when(mBrowserControlsSizer).getControlsPosition(); + mMiniOriginBarController.onControlsPositionChanged(ControlsPosition.BOTTOM); + mKeyboardVisibilityDelegate.setVisibilityForTests(true); + mOmniboxFocused = true; + mIsFormFieldFocused.onNodeAttributeUpdated(true, false); + Assert.assertEquals( + MiniOriginState.NOT_READY, mMiniOriginBarController.getCurrentStateForTesting()); + } + + @Test public void testAnimateWithKeyboard_notReadyForAnimation() { doReturn(ControlsPosition.BOTTOM).when(mBrowserControlsSizer).getControlsPosition(); mMiniOriginBarController.onControlsPositionChanged(ControlsPosition.BOTTOM);
diff --git a/chrome/browser/ui/android/web_app_header/java/res/layout/web_app_header_layout.xml b/chrome/browser/ui/android/web_app_header/java/res/layout/web_app_header_layout.xml index 5169e12..120351a 100644 --- a/chrome/browser/ui/android/web_app_header/java/res/layout/web_app_header_layout.xml +++ b/chrome/browser/ui/android/web_app_header/java/res/layout/web_app_header_layout.xml
@@ -44,7 +44,6 @@ android:layout_gravity="end|center_vertical" android:visibility="gone"> <include - android:id="@+id/web_app_menu_button" layout="@layout/menu_button" /> </FrameLayout> </org.chromium.chrome.browser.ui.web_app_header.WebAppHeaderLayout> \ No newline at end of file
diff --git a/chrome/browser/ui/android/web_app_header/java/src/org/chromium/chrome/browser/ui/web_app_header/WebAppHeaderLayoutCoordinator.java b/chrome/browser/ui/android/web_app_header/java/src/org/chromium/chrome/browser/ui/web_app_header/WebAppHeaderLayoutCoordinator.java index bd6ee7b..0013699 100644 --- a/chrome/browser/ui/android/web_app_header/java/src/org/chromium/chrome/browser/ui/web_app_header/WebAppHeaderLayoutCoordinator.java +++ b/chrome/browser/ui/android/web_app_header/java/src/org/chromium/chrome/browser/ui/web_app_header/WebAppHeaderLayoutCoordinator.java
@@ -99,7 +99,7 @@ private final boolean mIsTWA; private final ObservableSupplierImpl<MenuButtonState> mMenuButtonStateSupplier = new ObservableSupplierImpl<>(); - private @Nullable View mMenuButtonView; + private @Nullable View mMenuButtonContainer; /** * Creates an instance of {@link WebAppHeaderLayoutCoordinator}. @@ -252,9 +252,8 @@ /* isWebApp= */ true); if (mIsTWA && ChromeFeatureList.sAndroidWebAppMenuButton.isEnabled()) { - View webAppMenuButton = mView.findViewById(R.id.web_app_menu_button_wrapper); - webAppMenuButton.setVisibility(View.VISIBLE); - mMenuButtonView = mView.findViewById(R.id.web_app_menu_button); + mMenuButtonContainer = mView.findViewById(R.id.web_app_menu_button_wrapper); + mMenuButtonContainer.setVisibility(View.VISIBLE); mMenuButtonCoordinator = new MenuButtonCoordinator( @@ -293,8 +292,8 @@ } if (mMenuButtonCoordinator != null) { mMenuButtonCoordinator.setVisibility(mShowButtons); - if (mMenuButtonView != null) { - mMenuButtonView.setVisibility(mShowButtons ? View.VISIBLE : View.GONE); + if (mMenuButtonContainer != null) { + mMenuButtonContainer.setVisibility(mShowButtons ? View.VISIBLE : View.GONE); } } logControlsVisibilityChange(wasShowingButtons); @@ -332,7 +331,11 @@ } if (mMenuButtonCoordinator != null && mMenuButtonCoordinator.isVisible()) { - areas.add(mMenuButtonCoordinator.getHitRect()); + assert mView != null; + Rect rect = mMenuButtonCoordinator.getHitRect(); + View menuDescendent = mView.findViewById(R.id.menu_button_wrapper); + mView.offsetDescendantRectToMyCoords(menuDescendent, rect); + areas.add(rect); } return areas;
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc index ffbb43e..0267d8d 100644 --- a/chrome/browser/ui/browser.cc +++ b/chrome/browser/ui/browser.cc
@@ -70,7 +70,6 @@ #include "chrome/browser/printing/background_printing_manager.h" #include "chrome/browser/profiles/keep_alive/profile_keep_alive_types.h" #include "chrome/browser/profiles/keep_alive/scoped_profile_keep_alive.h" -#include "chrome/browser/profiles/nuke_profile_directory_utils.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_destroyer.h" #include "chrome/browser/profiles/profile_manager.h" @@ -111,6 +110,7 @@ #include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/browser_window/public/browser_window_features.h" #include "chrome/browser/ui/browser_window/public/browser_window_interface_iterator.h" +#include "chrome/browser/ui/browser_window/public/create_browser_window.h" #include "chrome/browser/ui/browser_window/public/desktop_browser_window_capabilities.h" #include "chrome/browser/ui/chrome_pages.h" #include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h" @@ -195,7 +195,6 @@ #include "components/tabs/public/split_tab_visual_data.h" #include "components/tabs/public/tab_group.h" #include "components/tabs/public/tab_interface.h" -#include "components/user_manager/user_manager.h" #include "components/web_modal/web_contents_modal_dialog_manager.h" #include "components/zoom/zoom_controller.h" #include "content/public/browser/color_chooser.h" @@ -263,7 +262,6 @@ #include "ash/constants/ash_features.h" #include "chrome/browser/ash/guest_os/guest_os_terminal.h" #include "chrome/browser/ui/settings_window_manager_chromeos.h" -#include "components/session_manager/core/session_manager.h" #endif #if BUILDFLAG(ENABLE_CAPTIVE_PORTAL_DETECTION) @@ -342,31 +340,6 @@ #endif } -bool IsOnKioskSplashScreen() { -#if BUILDFLAG(IS_CHROMEOS) - session_manager::SessionManager* session_manager = - session_manager::SessionManager::Get(); - if (!session_manager) { - return false; - } - // We have to check this way because of CHECK() in UserManager::Get(). - if (!user_manager::UserManager::IsInitialized()) { - return false; - } - user_manager::UserManager* user_manager = user_manager::UserManager::Get(); - if (!user_manager->IsLoggedInAsAnyKioskApp()) { - return false; - } - if (session_manager->session_state() != - session_manager::SessionState::LOGIN_PRIMARY) { - return false; - } - return true; -#else - return false; -#endif -} - // Returns a pair [last_window, last_window_for_profile] indicating if `browser` // is the only browser in total and for this profile. // Ignores browsers that are in the process of closing. @@ -564,22 +537,9 @@ // Browser, Constructors, Creation, Showing: // static -Browser::CreationStatus Browser::GetCreationStatusForProfile(Profile* profile) { - if (!g_browser_process || g_browser_process->IsShuttingDown()) { - return CreationStatus::kErrorNoProcess; - } - - if (!IncognitoModePrefs::CanOpenBrowser(profile) || - !profile->AllowsBrowserWindows() || - IsProfileDirectoryMarkedForDeletion(profile->GetPath())) { - return CreationStatus::kErrorProfileUnsuitable; - } - - if (IsOnKioskSplashScreen()) { - return CreationStatus::kErrorLoadingKiosk; - } - - return CreationStatus::kOk; +BrowserWindowInterface::CreationStatus Browser::GetCreationStatusForProfile( + Profile* profile) { + return GetBrowserWindowCreationStatusForProfile(*profile); } // static
diff --git a/chrome/browser/ui/browser.h b/chrome/browser/ui/browser.h index 5c6a702c..843f01c 100644 --- a/chrome/browser/ui/browser.h +++ b/chrome/browser/ui/browser.h
@@ -169,14 +169,6 @@ // See WarnBeforeClosingCallback and WarnBeforeClosing() below. enum class WarnBeforeClosingResult { kOkToClose, kDoNotClose }; - // Represents the result of a browser creation request. - enum class CreationStatus { - kOk, - kErrorNoProcess, - kErrorProfileUnsuitable, - kErrorLoadingKiosk, - }; - // Represents the source of a browser creation request. enum class CreationSource { kUnknown, @@ -372,10 +364,7 @@ static std::unique_ptr<Browser> DeprecatedCreateOwnedForTesting( const CreateParams& params); - // Returns whether a browser window can currently be created for the specified - // profile. This condition may change during runtime for a given `profile` - // (e.g. a profile may support Browser windows but creating a Browser is - // disallowed during shutdown). + // Refer to `GetCreationStatusForProfile()`. static CreationStatus GetCreationStatusForProfile(Profile* profile); Browser(const Browser&) = delete;
diff --git a/chrome/browser/ui/browser_navigator.cc b/chrome/browser/ui/browser_navigator.cc index 2a2ade87..762564b 100644 --- a/chrome/browser/ui/browser_navigator.cc +++ b/chrome/browser/ui/browser_navigator.cc
@@ -540,7 +540,7 @@ } if (params->browser && - params->browser->GetBrowserForMigrationOnly()->IsBrowserClosing()) { + params->browser->GetBrowserForMigrationOnly()->is_delete_scheduled()) { return nullptr; }
diff --git a/chrome/browser/ui/browser_window/internal/BUILD.gn b/chrome/browser/ui/browser_window/internal/BUILD.gn index 02df6b9..9f36b6a6 100644 --- a/chrome/browser/ui/browser_window/internal/BUILD.gn +++ b/chrome/browser/ui/browser_window/internal/BUILD.gn
@@ -48,6 +48,7 @@ "//chrome/browser/extensions", "//chrome/browser/lens/region_search", "//chrome/browser/media/router:media_router_feature", + "//chrome/browser/prefs", "//chrome/browser/tab_group_sync:factories", "//chrome/browser/ui:ui_features", "//chrome/browser/ui/bookmarks", @@ -98,6 +99,10 @@ deps += [ "//chrome/browser/ui/views/session_restore_infobar" ] } + if (is_chromeos) { + deps += [ "//components/session_manager/core" ] + } + if (enable_glic) { deps += [ "//chrome/browser/glic" ] }
diff --git a/chrome/browser/ui/browser_window/internal/android/create_browser_window_android.cc b/chrome/browser/ui/browser_window/internal/android/create_browser_window_android.cc index 465d370b..023bfe8a 100644 --- a/chrome/browser/ui/browser_window/internal/android/create_browser_window_android.cc +++ b/chrome/browser/ui/browser_window/internal/android/create_browser_window_android.cc
@@ -6,6 +6,7 @@ #include "base/functional/callback.h" #include "base/notimplemented.h" +#include "chrome/browser/profiles/profile.h" BrowserWindowInterface* CreateBrowserWindow( BrowserWindowCreateParams create_params) { @@ -20,3 +21,12 @@ // TODO(http://crbug.com/424860292): Implement this on Android. NOTIMPLEMENTED(); } + +BrowserWindowInterface::CreationStatus GetBrowserWindowCreationStatusForProfile( + Profile& profile) { + if (profile.ShutdownStarted()) { + return BrowserWindowInterface::CreationStatus::kErrorNoProcess; + } + + return BrowserWindowInterface::CreationStatus::kOk; +}
diff --git a/chrome/browser/ui/browser_window/internal/create_browser_window_non_android.cc b/chrome/browser/ui/browser_window/internal/create_browser_window_non_android.cc index 8b8ce090..32701fcc 100644 --- a/chrome/browser/ui/browser_window/internal/create_browser_window_non_android.cc +++ b/chrome/browser/ui/browser_window/internal/create_browser_window_non_android.cc
@@ -6,9 +6,18 @@ #include "base/functional/callback.h" #include "base/location.h" #include "base/task/single_thread_task_runner.h" +#include "chrome/browser/browser_process.h" +#include "chrome/browser/prefs/incognito_mode_prefs.h" +#include "chrome/browser/profiles/nuke_profile_directory_utils.h" +#include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_window/public/create_browser_window.h" +#if BUILDFLAG(IS_CHROMEOS) +#include "components/session_manager/core/session_manager.h" +#include "components/user_manager/user_manager.h" +#endif + namespace { BrowserWindowInterface* CreateAppBrowserWindow( @@ -33,10 +42,36 @@ return Browser::Create(browser_params); } +#if BUILDFLAG(IS_CHROMEOS) +bool IsOnKioskSplashScreen() { + session_manager::SessionManager* session_manager = + session_manager::SessionManager::Get(); + if (!session_manager) { + return false; + } + // We have to check this way because of CHECK() in UserManager::Get(). + if (!user_manager::UserManager::IsInitialized()) { + return false; + } + user_manager::UserManager* user_manager = user_manager::UserManager::Get(); + if (!user_manager->IsLoggedInAsAnyKioskApp()) { + return false; + } + if (session_manager->session_state() != + session_manager::SessionState::LOGIN_PRIMARY) { + return false; + } + return true; +} +#endif + } // namespace BrowserWindowInterface* CreateBrowserWindow( BrowserWindowCreateParams create_params) { + CHECK_EQ(BrowserWindowInterface::CreationStatus::kOk, + GetBrowserWindowCreationStatusForProfile(*create_params.profile)); + if (!create_params.app_name.empty()) { return CreateAppBrowserWindow(std::move(create_params)); } @@ -62,3 +97,24 @@ base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask( FROM_HERE, base::BindOnce(std::move(callback), browser_window)); } + +BrowserWindowInterface::CreationStatus GetBrowserWindowCreationStatusForProfile( + Profile& profile) { + if (!g_browser_process || g_browser_process->IsShuttingDown()) { + return BrowserWindowInterface::CreationStatus::kErrorNoProcess; + } + + if (!IncognitoModePrefs::CanOpenBrowser(&profile) || + !profile.AllowsBrowserWindows() || + IsProfileDirectoryMarkedForDeletion(profile.GetPath())) { + return BrowserWindowInterface::CreationStatus::kErrorProfileUnsuitable; + } + +#if BUILDFLAG(IS_CHROMEOS) + if (IsOnKioskSplashScreen()) { + return BrowserWindowInterface::CreationStatus::kErrorLoadingKiosk; + } +#endif + + return BrowserWindowInterface::CreationStatus::kOk; +}
diff --git a/chrome/browser/ui/browser_window/public/browser_window_interface.h b/chrome/browser/ui/browser_window/public/browser_window_interface.h index a3f59e5..807f998 100644 --- a/chrome/browser/ui/browser_window/public/browser_window_interface.h +++ b/chrome/browser/ui/browser_window/public/browser_window_interface.h
@@ -171,6 +171,31 @@ }; virtual Type GetType() const = 0; + // Represents the result of a check for whether a new browser window can be + // created. See also CreateBrowserWindow(). + // TODO(devlin): The naming here implies that this is the *result* of a + // creation request, but this is only used to indicate *whether* a new request + // is allowed. Tweak to "CreationAllowed" or similar? + enum class CreationStatus { + // A new browser window can be created. + kOk, + // Indicates that the browser is shutting down. + // TODO(devlin): Why not call this kErrorShuttingDown? That's more clear. + kErrorNoProcess, + // Indicates the profile is unsuitable for a new window. This can happen for + // profiles that don't allow new windows, like certain incognito profiles or + // other special profiles (signin screen, etc). + kErrorProfileUnsuitable, + + // TODO(devlin): Update this to be BUILDFLAG(IS_CHROMEOS). That's the only + // spot we have kiosk mode. +#if !BUILDFLAG(IS_ANDROID) + // Indicates the profile is currently loading kiosk mode, so no new windows + // should be allowed. + kErrorLoadingKiosk, +#endif + }; + // S T O P // Please do not add new features here without consulting desktop leads // (erikchen@) and Clank leads (twellington@, dtrainor@). See comment at the
diff --git a/chrome/browser/ui/browser_window/public/create_browser_window.h b/chrome/browser/ui/browser_window/public/create_browser_window.h index ce1a5da..efb8653 100644 --- a/chrome/browser/ui/browser_window/public/create_browser_window.h +++ b/chrome/browser/ui/browser_window/public/create_browser_window.h
@@ -79,4 +79,11 @@ BrowserWindowCreateParams create_params, base::OnceCallback<void(BrowserWindowInterface*)> callback); +// Returns whether a browser window can currently be created for the specified +// // profile. This condition may change during runtime for a given `profile` +// (e.g. a profile may support Browser windows but creating a Browser is +// disallowed during shutdown). +BrowserWindowInterface::CreationStatus GetBrowserWindowCreationStatusForProfile( + Profile& profile); + #endif // CHROME_BROWSER_UI_BROWSER_WINDOW_PUBLIC_CREATE_BROWSER_WINDOW_H_
diff --git a/chrome/browser/ui/lens/lens_composebox_handler.cc b/chrome/browser/ui/lens/lens_composebox_handler.cc index 728b348..b1c0d98 100644 --- a/chrome/browser/ui/lens/lens_composebox_handler.cc +++ b/chrome/browser/ui/lens/lens_composebox_handler.cc
@@ -38,8 +38,7 @@ std::make_unique<composebox::ComposeboxOmniboxClient>( profile, web_contents, - this, - /*query_controller=*/nullptr))), + this))), lens_composebox_controller_(parent_controller), page_{std::move(pending_page)}, handler_(this, std::move(pending_handler)) {
diff --git a/chrome/browser/ui/signin/cookie_clear_on_exit_migration_notice_browsertest.cc b/chrome/browser/ui/signin/cookie_clear_on_exit_migration_notice_browsertest.cc index 92e007e..a1ffcc8 100644 --- a/chrome/browser/ui/signin/cookie_clear_on_exit_migration_notice_browsertest.cc +++ b/chrome/browser/ui/signin/cookie_clear_on_exit_migration_notice_browsertest.cc
@@ -16,6 +16,7 @@ #include "chrome/browser/signin/signin_browser_test_base.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_list.h" +#include "chrome/browser/ui/browser_window/public/desktop_browser_window_capabilities.h" #include "chrome/browser/ui/signin/cookie_clear_on_exit_migration_notice.h" #include "chrome/browser/ui/test/test_browser_dialog.h" #include "chrome/test/base/ui_test_utils.h" @@ -247,8 +248,7 @@ // User is migrated, and browser is not closed. EXPECT_TRUE(GetProfile()->GetPrefs()->GetBoolean( prefs::kCookieClearOnExitMigrationNoticeComplete)); - EXPECT_FALSE(browser()->IsAttemptingToCloseBrowser()); - EXPECT_FALSE(browser()->IsBrowserClosing()); + EXPECT_FALSE(browser()->capabilities()->IsAttemptingToCloseBrowser()); // The browser can now be closed normally. CloseBrowserSynchronously(browser());
diff --git a/chrome/browser/ui/sync/BUILD.gn b/chrome/browser/ui/sync/BUILD.gn index 031b465..d8ad06d 100644 --- a/chrome/browser/ui/sync/BUILD.gn +++ b/chrome/browser/ui/sync/BUILD.gn
@@ -43,6 +43,7 @@ deps = [ ":sync", "//base", + "//chrome/browser/complex_tasks", "//chrome/browser/profiles:profile", "//components/sessions", "//components/sync/base:features",
diff --git a/chrome/browser/ui/tabs/split_tab_metrics.h b/chrome/browser/ui/tabs/split_tab_metrics.h index e707be0..faab501 100644 --- a/chrome/browser/ui/tabs/split_tab_metrics.h +++ b/chrome/browser/ui/tabs/split_tab_metrics.h
@@ -26,7 +26,8 @@ kExtensionsApi = 7, kWhatsNew = 8, kKeyboardShortcut = 9, - kMaxValue = kKeyboardShortcut, + kNewTabButton = 10, + kMaxValue = kNewTabButton }; // LINT.ThenChange(//tools/metrics/histograms/metadata/tab/enums.xml:SplitTabCreatedSource)
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view_interactive_uitest.cc b/chrome/browser/ui/views/bookmarks/bookmark_bar_view_interactive_uitest.cc index cf28378..4872e01 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view_interactive_uitest.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view_interactive_uitest.cc
@@ -238,7 +238,9 @@ // completion because the native widget's state is not properly updated. // TODO(crbug.com/388531778): DND tests are fail on Windows and Wayland. This // should be re-enabled once fix. -#if BUILDFLAG(IS_OZONE_X11) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_OZONE_WAYLAND) +// TODO(crbug.com/448993919): Re-enable this test on Mac. +#if BUILDFLAG(IS_OZONE_X11) || BUILDFLAG(IS_WIN) || \ + BUILDFLAG(IS_OZONE_WAYLAND) || BUILDFLAG(IS_MAC) #define MAYBE_DISABLED(test_name) DISABLED_##test_name #else #define MAYBE_DISABLED(test_name) test_name
diff --git a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar.cc b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar.cc index f8d790c..17c39df 100644 --- a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar.cc +++ b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar.cc
@@ -16,8 +16,9 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/tab_group_sync/tab_group_sync_service_factory.h" #include "chrome/browser/ui/bookmarks/bookmark_utils_desktop.h" -#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_element_identifiers.h" +#include "chrome/browser/ui/browser_window/public/browser_window_interface.h" +#include "chrome/browser/ui/browser_window/public/desktop_browser_window_capabilities.h" #include "chrome/browser/ui/color/chrome_color_id.h" #include "chrome/browser/ui/layout_constants.h" #include "chrome/browser/ui/tabs/saved_tab_groups/saved_tab_group_metrics.h" @@ -72,7 +73,7 @@ } // namespace -SavedTabGroupBar::SavedTabGroupBar(Browser* browser, +SavedTabGroupBar::SavedTabGroupBar(BrowserWindowInterface* browser, TabGroupSyncService* tab_group_service, bool animations_enabled) : tab_group_service_(tab_group_service), @@ -98,10 +99,11 @@ tab_group_service_->AddObserver(this); } -SavedTabGroupBar::SavedTabGroupBar(Browser* browser, bool animations_enabled) +SavedTabGroupBar::SavedTabGroupBar(BrowserWindowInterface* browser, + bool animations_enabled) : SavedTabGroupBar(browser, tab_groups::TabGroupSyncServiceFactory::GetForProfile( - browser->profile()), + browser->GetProfile()), animations_enabled) {} SavedTabGroupBar::~SavedTabGroupBar() { @@ -116,7 +118,8 @@ } everything_menu_ = std::make_unique<STGEverythingMenu>( - overflow_button_->button_controller(), browser_, + overflow_button_->button_controller(), + browser_->GetBrowserForMigrationOnly(), STGEverythingMenu::MenuContext::kSavedTabGroupBar); everything_menu_->RunMenu(); @@ -389,7 +392,7 @@ group, base::BindRepeating(&SavedTabGroupBar::OnTabGroupButtonPressed, base::Unretained(this), group.saved_guid()), - browser_, animations_enabled_), + browser_->GetBrowserForMigrationOnly(), animations_enabled_), clamped_index); view->SetProperty(views::kMarginsKey, gfx::Insets::VH(kButtonPadding, 0)); if (group.saved_tabs().size() == 0) { @@ -541,9 +544,9 @@ group->is_shared_tab_group() && !group->local_group_id().has_value(); tab_group_service_->OpenTabGroup( - group->saved_guid(), - std::make_unique<TabGroupActionContextDesktop>( - browser_, OpeningSource::kOpenedFromRevisitUi)); + group->saved_guid(), std::make_unique<TabGroupActionContextDesktop>( + browser_->GetBrowserForMigrationOnly(), + OpeningSource::kOpenedFromRevisitUi)); if (will_open_shared_group) { saved_tab_groups::metrics::RecordSharedTabGroupRecallType( saved_tab_groups::metrics::SharedTabGroupRecallTypeDesktop:: @@ -666,7 +669,7 @@ void SavedTabGroupBar::MaybeShowClosePromo(const base::Uuid& saved_group_id) { // Do not show close promo while the browser is closing - if (!browser_ || browser_->IsBrowserClosing()) { + if (!browser_ || browser_->capabilities()->IsAttemptingToCloseBrowser()) { return; }
diff --git a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar.h b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar.h index 788bdfc..b559d33 100644 --- a/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar.h +++ b/chrome/browser/ui/views/bookmarks/saved_tab_groups/saved_tab_group_bar.h
@@ -21,7 +21,7 @@ #include "ui/views/bubble/bubble_dialog_delegate_view.h" #include "ui/views/widget/widget_observer.h" -class Browser; +class BrowserWindowInterface; namespace content { class PageNavigator; @@ -50,8 +50,9 @@ // Exposed constant for spacing between elements. static constexpr int kBetweenElementSpacing = 8; - explicit SavedTabGroupBar(Browser* browser, bool animations_enabled = true); - SavedTabGroupBar(Browser* browser, + explicit SavedTabGroupBar(BrowserWindowInterface* browser, + bool animations_enabled = true); + SavedTabGroupBar(BrowserWindowInterface* browser, TabGroupSyncService* tab_group_service, bool animations_enabled = true); SavedTabGroupBar(const SavedTabGroupBar&) = delete; @@ -221,7 +222,7 @@ raw_ptr<content::PageNavigator, AcrossTasksDanglingUntriaged> page_navigator_ = nullptr; - raw_ptr<Browser> browser_ = nullptr; + raw_ptr<BrowserWindowInterface> browser_ = nullptr; // During a drag and drop session, `drag_data_` owns the state for the drag. std::unique_ptr<SavedTabGroupDragData> drag_data_;
diff --git a/chrome/browser/ui/views/frame/browser_frame_view.cc b/chrome/browser/ui/views/frame/browser_frame_view.cc index 7997f95..39559669 100644 --- a/chrome/browser/ui/views/frame/browser_frame_view.cc +++ b/chrome/browser/ui/views/frame/browser_frame_view.cc
@@ -185,10 +185,6 @@ return true; } -bool BrowserFrameView::CanUserExitFullscreen() const { - return true; -} - bool BrowserFrameView::IsFrameCondensed() const { return browser_widget_->IsMaximized() || browser_widget_->IsFullscreen(); } @@ -235,17 +231,6 @@ *GetColorProvider()) != GetFrameColor(active_state); } -bool BrowserFrameView::EverHasVisibleBackgroundTabShapes() const { - return HasVisibleBackgroundTabShapes(BrowserFrameActiveState::kActive) || - HasVisibleBackgroundTabShapes(BrowserFrameActiveState::kInactive); -} - -bool BrowserFrameView::CanDrawStrokes() const { - // Web apps should not draw strokes if they don't have a tab strip. - return !browser_view_->browser()->app_controller() || - browser_view_->browser()->app_controller()->has_tab_strip(); -} - SkColor BrowserFrameView::GetCaptionColor( BrowserFrameActiveState active_state) const { return GetColorProvider()->GetColor(ShouldPaintAsActiveForState(active_state)
diff --git a/chrome/browser/ui/views/frame/browser_frame_view.h b/chrome/browser/ui/views/frame/browser_frame_view.h index b2c4693..66e8e35 100644 --- a/chrome/browser/ui/views/frame/browser_frame_view.h +++ b/chrome/browser/ui/views/frame/browser_frame_view.h
@@ -193,10 +193,6 @@ // `GetBoundsForWebAppFrameToolbar()`. virtual bool ShouldShowWebAppFrameToolbar() const; - // Returns whether the user is allowed to exit fullscreen on their own (some - // special modes lock the user in fullscreen). - virtual bool CanUserExitFullscreen() const; - // Determines whether the top of the frame is "condensed" (i.e., has less // vertical space). This is typically true when the window is maximized or // fullscreen. If true, the top frame is just the height of a tab, @@ -210,15 +206,6 @@ bool HasVisibleBackgroundTabShapes( BrowserFrameActiveState active_state) const; - // Returns true if background tabs are ever visibly distinct from the frame, - // in either the active or inactive state. - bool EverHasVisibleBackgroundTabShapes() const; - - // Returns true if strokes (outlines/separators) should be drawn around tabs. - // This is generally true, but false for some web apps that don't have a tab - // strip. - bool CanDrawStrokes() const; - // Returns the color that should be used for text and icons in the title bar // (e.g., the window title and caption button icons). virtual SkColor GetCaptionColor(BrowserFrameActiveState active_state) const; @@ -268,9 +255,6 @@ // 0 if the frame is opaque (not transparent) or in fullscreen. virtual int GetTranslucentTopAreaHeight() const; - // Used by TabContainerOverlayView to paint tab strip background. - virtual void PaintThemedFrame(gfx::Canvas* canvas) {} - // Sets the bounds of `frame_`. virtual void SetFrameBounds(const gfx::Rect& bounds);
diff --git a/chrome/browser/ui/views/frame/browser_frame_view_chromeos.cc b/chrome/browser/ui/views/frame/browser_frame_view_chromeos.cc index ce8a3d8..132ee145 100644 --- a/chrome/browser/ui/views/frame/browser_frame_view_chromeos.cc +++ b/chrome/browser/ui/views/frame/browser_frame_view_chromeos.cc
@@ -374,10 +374,6 @@ } } -bool BrowserFrameViewChromeOS::CanUserExitFullscreen() const { - return !platform_util::IsBrowserLockedFullscreen(browser_view()->browser()); -} - SkColor BrowserFrameViewChromeOS::GetCaptionColor( BrowserFrameActiveState active_state) const { // Web apps apply a theme color if specified by the extension/manifest.
diff --git a/chrome/browser/ui/views/frame/browser_frame_view_chromeos.h b/chrome/browser/ui/views/frame/browser_frame_view_chromeos.h index b1bcbe0e..2842211 100644 --- a/chrome/browser/ui/views/frame/browser_frame_view_chromeos.h +++ b/chrome/browser/ui/views/frame/browser_frame_view_chromeos.h
@@ -63,7 +63,6 @@ bool ShouldShowWebAppFrameToolbar() const override; int GetTopInset(bool restored) const override; void UpdateThrobber(bool running) override; - bool CanUserExitFullscreen() const override; SkColor GetCaptionColor(BrowserFrameActiveState active_state) const override; SkColor GetFrameColor(BrowserFrameActiveState active_state) const override; void UpdateMinimumSize() override;
diff --git a/chrome/browser/ui/views/frame/browser_frame_view_layout_linux_native_unittest.cc b/chrome/browser/ui/views/frame/browser_frame_view_layout_linux_native_unittest.cc index 91bc0cb5..3025369 100644 --- a/chrome/browser/ui/views/frame/browser_frame_view_layout_linux_native_unittest.cc +++ b/chrome/browser/ui/views/frame/browser_frame_view_layout_linux_native_unittest.cc
@@ -75,7 +75,6 @@ int GetTopAreaHeight() const override { return 0; } bool UseCustomFrame() const override { return true; } bool IsFrameCondensed() const override { return false; } - bool EverHasVisibleBackgroundTabShapes() const override { return false; } void UpdateWindowControlsOverlay(const gfx::Rect& bounding_rect) override {} bool ShouldDrawRestoredFrameShadow() const override { return true; } #if BUILDFLAG(IS_LINUX)
diff --git a/chrome/browser/ui/views/frame/browser_frame_view_layout_linux_unittest.cc b/chrome/browser/ui/views/frame/browser_frame_view_layout_linux_unittest.cc index ba336b5..4e4d8d5 100644 --- a/chrome/browser/ui/views/frame/browser_frame_view_layout_linux_unittest.cc +++ b/chrome/browser/ui/views/frame/browser_frame_view_layout_linux_unittest.cc
@@ -42,7 +42,6 @@ int GetTopAreaHeight() const override { return 0; } bool UseCustomFrame() const override { return true; } bool IsFrameCondensed() const override { return false; } - bool EverHasVisibleBackgroundTabShapes() const override { return false; } void UpdateWindowControlsOverlay(const gfx::Rect& bounding_rect) override {} bool ShouldDrawRestoredFrameShadow() const override { return true; } #if BUILDFLAG(IS_LINUX)
diff --git a/chrome/browser/ui/views/frame/browser_frame_view_mac.h b/chrome/browser/ui/views/frame/browser_frame_view_mac.h index eac5fdc..34fd5d5 100644 --- a/chrome/browser/ui/views/frame/browser_frame_view_mac.h +++ b/chrome/browser/ui/views/frame/browser_frame_view_mac.h
@@ -75,7 +75,7 @@ void OnAppRegistrarDestroyed() override; // Used by TabContainerOverlayView to paint the tab strip background. - void PaintThemedFrame(gfx::Canvas* canvas) override; + void PaintThemedFrame(gfx::Canvas* canvas); protected: // views::View:
diff --git a/chrome/browser/ui/views/frame/browser_frame_view_mac.mm b/chrome/browser/ui/views/frame/browser_frame_view_mac.mm index 5baace7..0ec9b60 100644 --- a/chrome/browser/ui/views/frame/browser_frame_view_mac.mm +++ b/chrome/browser/ui/views/frame/browser_frame_view_mac.mm
@@ -644,9 +644,6 @@ CGFloat title_bar_height = NSHeight([NSWindow frameRectForContentRect:NSZeroRect styleMask:NSWindowStyleMaskTitled]); - if (browser_view()->UsesImmersiveFullscreenMode()) { - return menu_bar_height == 0 ? 0 : menu_bar_height + title_bar_height; - } return [[fullscreen_toolbar_controller_ menubarTracker] menubarFraction] * (menu_bar_height + title_bar_height); }
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc index e1bba69..8ff414fb 100644 --- a/chrome/browser/ui/views/frame/browser_view.cc +++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -338,8 +338,8 @@ #if BUILDFLAG(IS_MAC) #include "chrome/browser/global_keyboard_shortcuts_mac.h" -#include "chrome/browser/themes/theme_service_factory.h" #include "chrome/browser/ui/fullscreen_util_mac.h" +#include "chrome/browser/ui/views/frame/immersive_mode_overlay_views_mac.h" #include "components/remote_cocoa/app_shim/application_bridge.h" #include "components/remote_cocoa/browser/application_host.h" #endif @@ -384,10 +384,6 @@ namespace { -// The name of a key to store on the window handle so that other code can -// locate this object using just the handle. -const char* const kBrowserViewKey = "__BROWSER_VIEW__"; - // The visible height of the shadow above the tabs. Clicks in this area are // treated as clicks to the frame, rather than clicks to the tab. const int kTabShadowSize = 2; @@ -566,6 +562,7 @@ } #if BUILDFLAG(IS_MAC) + void GetAnyTabAudioStates(const Browser* browser, bool* any_tab_playing_audio, bool* any_tab_playing_muted_audio) { @@ -582,120 +579,8 @@ } } } -#endif // BUILDFLAG(IS_MAC) -#if BUILDFLAG(IS_MAC) -// OverlayWidget is a child Widget of BrowserWidget used during immersive -// fullscreen on macOS that hosts the top container. Its native Window and View -// interface with macOS fullscreen APIs allowing separation of the top container -// and web contents. -// Currently the only explicit reason for OverlayWidget to be its own subclass -// is to support GetAccelerator() forwarding. -class OverlayWidget : public ThemeCopyingWidget { - public: - explicit OverlayWidget(views::Widget* role_model) - : ThemeCopyingWidget(role_model) {} - - OverlayWidget(const OverlayWidget&) = delete; - OverlayWidget& operator=(const OverlayWidget&) = delete; - - ~OverlayWidget() override = default; - - // OverlayWidget hosts the top container. Views within the top container look - // up accelerators by asking their hosting Widget. In non-immersive fullscreen - // that would be the BrowserWidget. Give top chrome what it expects and - // forward GetAccelerator() calls to OverlayWidget's parent (BrowserWidget). - bool GetAccelerator(int cmd_id, ui::Accelerator* accelerator) const override { - DCHECK(parent()); - return parent()->GetAccelerator(cmd_id, accelerator); - } - - // Instances of OverlayWidget do not activate directly but their views style - // should follow the parent (browser frame) activation state. In other words, - // when the browser frame is not activate the overlay widget views will - // appear disabled. - bool ShouldViewsStyleFollowWidgetActivation() const override { return true; } -}; - -// TabContainerOverlayView is a view that hosts the TabStripRegionView during -// immersive fullscreen. The TopContainerView usually draws the background for -// the tab strip. Since the tab strip has been reparented we need to handle -// drawing the background here. -class TabContainerOverlayView : public views::View { - METADATA_HEADER(TabContainerOverlayView, views::View) - - public: - explicit TabContainerOverlayView(base::WeakPtr<BrowserView> browser_view) - : browser_view_(std::move(browser_view)) {} - ~TabContainerOverlayView() override = default; - - // - // views::View overrides - // - - void OnPaintBackground(gfx::Canvas* canvas) override { - SkColor frame_color = - browser_view_->browser_widget()->GetFrameView()->GetFrameColor( - BrowserFrameActiveState::kUseCurrent); - canvas->DrawColor(frame_color); - - auto* theme_service = ThemeServiceFactory::GetForProfile( - browser_view_->browser()->GetProfile()); - if (!theme_service->UsingSystemTheme()) { - auto* frame_view = browser_view_->browser_widget()->GetFrameView(); - frame_view->PaintThemedFrame(canvas); - } - } - - // - // `BrowserRootView` handles drag and drop for the tab strip. In immersive - // fullscreen, the tab strip is hosted in a separate Widget, in a separate - // view, this view` TabContainerOverlayView`. To support drag and drop for the - // tab strip in immersive fullscreen, forward all drag and drop requests to - // the `BrowserRootView`. - // - - bool GetDropFormats( - int* formats, - std::set<ui::ClipboardFormatType>* format_types) override { - return browser_view_->GetWidget()->GetRootView()->GetDropFormats( - formats, format_types); - } - - bool AreDropTypesRequired() override { - return browser_view_->GetWidget()->GetRootView()->AreDropTypesRequired(); - } - - bool CanDrop(const ui::OSExchangeData& data) override { - return browser_view_->GetWidget()->GetRootView()->CanDrop(data); - } - - void OnDragEntered(const ui::DropTargetEvent& event) override { - return browser_view_->GetWidget()->GetRootView()->OnDragEntered(event); - } - - int OnDragUpdated(const ui::DropTargetEvent& event) override { - return browser_view_->GetWidget()->GetRootView()->OnDragUpdated(event); - } - - void OnDragExited() override { - return browser_view_->GetWidget()->GetRootView()->OnDragExited(); - } - - DropCallback GetDropCallback(const ui::DropTargetEvent& event) override { - return browser_view_->GetWidget()->GetRootView()->GetDropCallback(event); - } - - private: - // The BrowserView this overlay is created for. WeakPtr is used since - // this view is held in a different hierarchy. - base::WeakPtr<BrowserView> browser_view_; -}; - -BEGIN_METADATA(TabContainerOverlayView) -END_METADATA - -#else // !BUILDFLAG(IS_MAC) +#else // BUILDFLAG(IS_MAC) // Calls |method| which is either WebContents::Cut, ::Copy, or ::Paste on // the given WebContents, returning true if it consumed the event. @@ -802,7 +687,7 @@ main_container_->AddChildView(std::make_unique<TopContainerView>(this)); tab_strip_region_view_ = - top_container_->AddChildView(std::make_unique<TabStripRegionView>(this)); + AddChildView(std::make_unique<TabStripRegionView>(this)); if (tabs::IsVerticalTabsFeatureEnabled()) { auto vertical_tab_strip_container = @@ -2267,10 +2152,10 @@ } void BrowserView::ToolbarSizeChanged(bool is_animating) { - // No need to re-layout if the browser is closing. This is unnecessary and - // dangerous. For tab modal, its modal dialog manager have already gone. + // No need to re-layout if the browser has already closed. This is unnecessary + // and dangerous. For tab modal, its modal dialog manager have already gone. // Layout will cause CHECK failure due to missing modal dialog manager. - if (browser()->IsBrowserClosing()) { + if (browser()->is_delete_scheduled()) { return; } @@ -4067,7 +3952,8 @@ } void BrowserView::ReparentTopContainerForEndOfImmersive() { - if (top_container()->parent() == main_container_) { + if (top_container()->parent() == main_container_ && + tab_strip_view()->parent() == this) { return; } // TODO(crbug.com/442255944): In the case top_container() is not a child of @@ -4082,6 +3968,8 @@ overlay_view_tracker_.view()->SetVisible(false); top_container()->DestroyLayer(); + + AddChildView(tab_strip_region_view_); main_container_->AddChildViewAt(top_container(), 0); EnsureFocusOrder(); } @@ -4305,47 +4193,8 @@ views::View* BrowserView::CreateMacOverlayView() { DCHECK(UsesImmersiveFullscreenMode()); - auto create_overlay_widget = [this](views::Widget* parent) -> views::Widget* { - views::Widget::InitParams params( - views::Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET, - views::Widget::InitParams::TYPE_POPUP); - params.child = true; - params.parent = parent->GetNativeView(); - params.shadow_type = views::Widget::InitParams::ShadowType::kNone; - params.activatable = views::Widget::InitParams::Activatable::kNo; - params.is_overlay = true; - // Add kTranslucent attributes to prevent the system from adding - // NSSheetEffectDimmingView to the overlay window when the browser displays - // a sheet dialog, which would cause the overlay area to appear with a - // darker dimming color on macOS. - params.opacity = views::Widget::InitParams::WindowOpacity::kTranslucent; - params.name = "mac-fullscreen-overlay"; - OverlayWidget* overlay_widget = new OverlayWidget(GetWidget()); - - // When the overlay is used some Views are moved to the overlay_widget. When - // this happens we want the fullscreen state of the overlay_widget to match - // that of BrowserView's Widget. Without this, some views would not think - // they are in a fullscreen Widget, when we want them to behave as though - // they are in a fullscreen Widget. - overlay_widget->SetCheckParentForFullscreen(); - - overlay_widget->Init(std::move(params)); - overlay_widget->SetNativeWindowProperty(kBrowserViewKey, this); - - // Disable sublevel widget layering because in fullscreen the NSWindow of - // `overlay_widget_` is reparented to a AppKit-owned NSWindow that does not - // have an associated Widget. This will cause issues in sublevel manager - // which operates at the Widget level. - if (overlay_widget->GetSublevelManager()) { - overlay_widget->parent()->GetSublevelManager()->OnWidgetChildRemoved( - overlay_widget->parent(), overlay_widget); - } - - return overlay_widget; - }; - // Create the toolbar overlay widget. - overlay_widget_ = create_overlay_widget(GetWidget()); + overlay_widget_ = OverlayWidgetMac::Create(this, GetWidget()); // Create a new TopContainerOverlayView. The tab strip, omnibox, bookmarks // etc. will be contained within this view. Right clicking on the blank space @@ -4363,10 +4212,9 @@ if (UsesImmersiveFullscreenTabbedMode()) { // Create the tab overlay widget as a child of overlay_widget_. - tab_overlay_widget_ = create_overlay_widget(overlay_widget_); - std::unique_ptr<TabContainerOverlayView> tab_overlay_view = - std::make_unique<TabContainerOverlayView>( - weak_ptr_factory_.GetWeakPtr()); + tab_overlay_widget_ = OverlayWidgetMac::Create(this, overlay_widget_); + auto tab_overlay_view = std::make_unique<TabContainerOverlayViewMac>( + weak_ptr_factory_.GetWeakPtr()); tab_overlay_view->set_context_menu_controller(browser_widget()); tab_overlay_view->SetEventTargeter(std::make_unique<views::ViewTargeter>( std::make_unique<OverlayViewTargeterDelegate>())); @@ -4842,7 +4690,7 @@ int BrowserView::NonClientHitTest(const gfx::Point& point) { #if BUILDFLAG(IS_MAC) // The top container while in immersive fullscreen on macOS lives in another - // Widget (OverlayWidget). This means that BrowserView does not need to + // Widget (OverlayWidgetMac). This means that BrowserView does not need to // consult BrowserViewLayout::NonClientHitTest() to calculate the hit test. if (IsImmersiveModeEnabled()) { // Handle hits on the overlay widget when it is hovering overtop of the @@ -6038,7 +5886,7 @@ } bool BrowserView::CanUserExitFullscreen() const { - return GetFrameView()->CanUserExitFullscreen(); + return !platform_util::IsBrowserLockedFullscreen(browser()); } ///////////////////////////////////////////////////////////////////////////////
diff --git a/chrome/browser/ui/views/frame/browser_view.h b/chrome/browser/ui/views/frame/browser_view.h index 4819639..1f7e5ae 100644 --- a/chrome/browser/ui/views/frame/browser_view.h +++ b/chrome/browser/ui/views/frame/browser_view.h
@@ -140,6 +140,10 @@ // The width of the vertical tab strip. static constexpr int kVerticalTabStripWidth = 240; + // The name of a key to store on the window handle so that other code can + // locate this object using just the handle. + static constexpr char kBrowserViewKey[] = "__BROWSER_VIEW__"; + explicit BrowserView(Browser* browser); BrowserView(const BrowserView&) = delete; BrowserView& operator=(const BrowserView&) = delete; @@ -1054,8 +1058,7 @@ version_info::Channel, Profile* profile) const; - // Reparents |top_container_| to be a child of |this| instead of - // |overlay_view_|. + // Reparents |top_container_| to |main_container_| instead of |overlay_view_|. void ReparentTopContainerForEndOfImmersive(); // Ensures that the correct focus order is set for child views, regardless of @@ -1132,7 +1135,9 @@ base::CallbackListSubscription chip_visibility_subscription_; // BrowserView layout (LTR one is pictured here). - // ---------------------------------------------------------------------- + // ----------------------------------------------------------------------- + // | Tabs (tab_strip_region_view_) | + // |---------------------------------------------------------------------| // | MainRegion (main_region_) | // | ---------------------------------------------------------------- | // | | MainContainer (main_container_) | | @@ -1141,8 +1146,6 @@ // | | | --------------------------------------------------------- | | // | | | | Web App toolbar and title (web_app_frame_toolbar_) | | // | | | |-------------------------------------------------------- | | - // | | | | Tabs (tabstrip_) | | - // | | | |-------------------------------------------------------- | | // | | | | Navigation buttons, address bar, menu (toolbar_) | | // | | | |-------------------------------------------------------- | | // | | | | Bookmarks (bookmark_bar_view_) | |
diff --git a/chrome/browser/ui/views/frame/immersive_mode_controller_chromeos.cc b/chrome/browser/ui/views/frame/immersive_mode_controller_chromeos.cc index d91d947..592db8fc 100644 --- a/chrome/browser/ui/views/frame/immersive_mode_controller_chromeos.cc +++ b/chrome/browser/ui/views/frame/immersive_mode_controller_chromeos.cc
@@ -11,6 +11,7 @@ #include "chrome/browser/ui/browser_window/public/browser_window_features.h" #include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h" #include "chrome/browser/ui/views/frame/browser_view.h" +#include "chrome/browser/ui/views/frame/tab_strip_region_view.h" #include "chrome/browser/ui/views/frame/top_container_view.h" #include "chrome/browser/ui/views/tabs/tab_strip.h" #include "chromeos/ui/base/window_properties.h" @@ -152,6 +153,10 @@ void ImmersiveModeControllerChromeos::OnImmersiveRevealStarted() { visible_fraction_ = 0; + + browser_view_->top_container()->AddChildViewAt( + static_cast<TabStripRegionView*>(browser_view_->tab_strip_view()), 0); + for (Observer& observer : observers_) { observer.OnImmersiveRevealStarted(); }
diff --git a/chrome/browser/ui/views/frame/immersive_mode_controller_chromeos_unittest.cc b/chrome/browser/ui/views/frame/immersive_mode_controller_chromeos_unittest.cc index 9ce2bcc3..6006102 100644 --- a/chrome/browser/ui/views/frame/immersive_mode_controller_chromeos_unittest.cc +++ b/chrome/browser/ui/views/frame/immersive_mode_controller_chromeos_unittest.cc
@@ -110,7 +110,12 @@ // The browser's top chrome is completely offscreen with tapstrip visible. EXPECT_TRUE(tabstrip->GetVisible()); // Tabstrip and top container view should be completely offscreen. - EXPECT_EQ(0, GetBoundsInWidget(tabstrip).bottom()); + // Because of the split of tabstrip from top_container, the tabstrip must be + // moved into top_container during immersive. However, this happens after the + // animation has started but before anything actually moves, which is why + // tabstrip was recording bounds as if it was in browser_view. There is no + // visual effect on animation, and since tabstrip will live in top_container, + // checking just top_container bounds is sufficient. EXPECT_EQ(0, GetBoundsInWidget(browser_view()->top_container()).bottom()); EXPECT_EQ( 0, browser_view()->contents_web_view()->holder()->GetHitTestTopInset());
diff --git a/chrome/browser/ui/views/frame/immersive_mode_controller_mac.mm b/chrome/browser/ui/views/frame/immersive_mode_controller_mac.mm index 0e6464e8..52c00f4 100644 --- a/chrome/browser/ui/views/frame/immersive_mode_controller_mac.mm +++ b/chrome/browser/ui/views/frame/immersive_mode_controller_mac.mm
@@ -189,8 +189,6 @@ if (separate_tab_strip_) { browser_view_->tab_overlay_widget()->Hide(); browser_view_->tab_strip_view()->SetBorder(nullptr); - browser_view_->top_container()->AddChildViewAt( - static_cast<views::View*>(browser_view_->tab_strip_view()), 0); } top_container_observation_.Reset(); overlay_widget_observation_.Reset();
diff --git a/chrome/browser/ui/views/frame/immersive_mode_overlay_views_mac.h b/chrome/browser/ui/views/frame/immersive_mode_overlay_views_mac.h new file mode 100644 index 0000000..9ed04c9 --- /dev/null +++ b/chrome/browser/ui/views/frame/immersive_mode_overlay_views_mac.h
@@ -0,0 +1,86 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_VIEWS_FRAME_IMMERSIVE_MODE_OVERLAY_VIEWS_MAC_H_ +#define CHROME_BROWSER_UI_VIEWS_FRAME_IMMERSIVE_MODE_OVERLAY_VIEWS_MAC_H_ + +#include <set> + +#include "base/memory/weak_ptr.h" +#include "chrome/browser/ui/views/theme_copying_widget.h" +#include "ui/base/metadata/metadata_header_macros.h" +#include "ui/gfx/canvas.h" + +class BrowserView; + +// OverlayWidgetMac is a child Widget of BrowserWidget used during immersive +// fullscreen on macOS that hosts the top container. Its native Window and View +// interface with macOS fullscreen APIs allowing separation of the top container +// and web contents. +// Currently the only explicit reason for OverlayWidgetMac to be its own +// subclass is to support GetAccelerator() forwarding. +class OverlayWidgetMac : public ThemeCopyingWidget { + public: + ~OverlayWidgetMac() override; + + // Create an overlay widget for `browser_view`. + static OverlayWidgetMac* Create(BrowserView* browser_view, + views::Widget* parent); + + // ThemeCopyingWidget: + + // OverlayWidgetMac hosts the top container. Views within the top container + // look up accelerators by asking their hosting Widget. In non-immersive + // fullscreen that would be the BrowserWidget. Give top chrome what it expects + // and forward GetAccelerator() calls to OverlayWidgetMac's parent + // (BrowserWidget). + bool GetAccelerator(int cmd_id, ui::Accelerator* accelerator) const override; + + // Instances of OverlayWidgetMac do not activate directly but their views + // style should follow the parent (browser frame) activation state. In other + // words, when the browser frame is not activate the overlay widget views will + // appear disabled. + bool ShouldViewsStyleFollowWidgetActivation() const override; + + private: + explicit OverlayWidgetMac(views::Widget* role_model); +}; + +// TabContainerOverlayView is a view that hosts the TabStripRegionView during +// immersive fullscreen. The TopContainerView usually draws the background for +// the tab strip. Since the tab strip has been reparented we need to handle +// drawing the background here. +class TabContainerOverlayViewMac : public views::View { + METADATA_HEADER(TabContainerOverlayViewMac, views::View) + + public: + explicit TabContainerOverlayViewMac(base::WeakPtr<BrowserView> browser_view); + ~TabContainerOverlayViewMac() override; + + // views::View: + + void OnPaintBackground(gfx::Canvas* canvas) override; + + // `BrowserRootView` handles drag and drop for the tab strip. In immersive + // fullscreen, the tab strip is hosted in a separate Widget, in a separate + // view, this view` TabContainerOverlayView`. To support drag and drop for the + // tab strip in immersive fullscreen, forward all drag and drop requests to + // the `BrowserRootView`. + + bool GetDropFormats(int* formats, + std::set<ui::ClipboardFormatType>* format_types) override; + bool AreDropTypesRequired() override; + bool CanDrop(const ui::OSExchangeData& data) override; + void OnDragEntered(const ui::DropTargetEvent& event) override; + int OnDragUpdated(const ui::DropTargetEvent& event) override; + void OnDragExited() override; + DropCallback GetDropCallback(const ui::DropTargetEvent& event) override; + + private: + // The BrowserView this overlay is created for. WeakPtr is used since + // this view is held in a different hierarchy. + base::WeakPtr<BrowserView> browser_view_; +}; + +#endif // CHROME_BROWSER_UI_VIEWS_FRAME_IMMERSIVE_MODE_OVERLAY_VIEWS_MAC_H_
diff --git a/chrome/browser/ui/views/frame/immersive_mode_overlay_views_mac.mm b/chrome/browser/ui/views/frame/immersive_mode_overlay_views_mac.mm new file mode 100644 index 0000000..278a387e --- /dev/null +++ b/chrome/browser/ui/views/frame/immersive_mode_overlay_views_mac.mm
@@ -0,0 +1,138 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/views/frame/immersive_mode_overlay_views_mac.h" + +#include <set> + +#include "chrome/browser/themes/theme_service.h" +#include "chrome/browser/themes/theme_service_factory.h" +#include "chrome/browser/ui/views/frame/browser_frame_view_mac.h" +#include "chrome/browser/ui/views/frame/browser_view.h" +#include "ui/base/clipboard/clipboard_format_type.h" +#include "ui/base/metadata/metadata_impl_macros.h" +#include "ui/views/widget/sublevel_manager.h" + +// static +OverlayWidgetMac* OverlayWidgetMac::Create(BrowserView* browser_view, + views::Widget* parent) { + views::Widget::InitParams params( + views::Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET, + views::Widget::InitParams::TYPE_POPUP); + params.child = true; + params.parent = parent->GetNativeView(); + params.shadow_type = views::Widget::InitParams::ShadowType::kNone; + params.activatable = views::Widget::InitParams::Activatable::kNo; + params.is_overlay = true; + // Add kTranslucent attributes to prevent the system from adding + // NSSheetEffectDimmingView to the overlay window when the browser displays + // a sheet dialog, which would cause the overlay area to appear with a + // darker dimming color on macOS. + params.opacity = views::Widget::InitParams::WindowOpacity::kTranslucent; + params.name = "mac-fullscreen-overlay"; + OverlayWidgetMac* overlay_widget = + new OverlayWidgetMac(browser_view->GetWidget()); + + // When the overlay is used some Views are moved to the overlay_widget. When + // this happens we want the fullscreen state of the overlay_widget to match + // that of BrowserView's Widget. Without this, some views would not think + // they are in a fullscreen Widget, when we want them to behave as though + // they are in a fullscreen Widget. + overlay_widget->SetCheckParentForFullscreen(); + + overlay_widget->Init(std::move(params)); + overlay_widget->SetNativeWindowProperty(BrowserView::kBrowserViewKey, + browser_view); + + // Disable sublevel widget layering because in fullscreen the NSWindow of + // `overlay_widget_` is reparented to a AppKit-owned NSWindow that does not + // have an associated Widget. This will cause issues in sublevel manager + // which operates at the Widget level. + if (overlay_widget->GetSublevelManager()) { + overlay_widget->parent()->GetSublevelManager()->OnWidgetChildRemoved( + overlay_widget->parent(), overlay_widget); + } + + return overlay_widget; +} + +OverlayWidgetMac::OverlayWidgetMac(views::Widget* role_model) + : ThemeCopyingWidget(role_model) {} + +OverlayWidgetMac::~OverlayWidgetMac() = default; + +bool OverlayWidgetMac::GetAccelerator(int cmd_id, + ui::Accelerator* accelerator) const { + DCHECK(parent()); + return parent()->GetAccelerator(cmd_id, accelerator); +} + +bool OverlayWidgetMac::ShouldViewsStyleFollowWidgetActivation() const { + return true; +} + +TabContainerOverlayViewMac::TabContainerOverlayViewMac( + base::WeakPtr<BrowserView> browser_view) + : browser_view_(std::move(browser_view)) {} +TabContainerOverlayViewMac::~TabContainerOverlayViewMac() = default; + +void TabContainerOverlayViewMac::OnPaintBackground(gfx::Canvas* canvas) { + SkColor frame_color = + browser_view_->browser_widget()->GetFrameView()->GetFrameColor( + BrowserFrameActiveState::kUseCurrent); + canvas->DrawColor(frame_color); + + ThemeService* theme_service = ThemeServiceFactory::GetForProfile( + browser_view_->browser()->GetProfile()); + if (!theme_service->UsingSystemTheme()) { + auto* frame_view = static_cast<BrowserFrameViewMac*>( + browser_view_->browser_widget()->GetFrameView()); + frame_view->PaintThemedFrame(canvas); + } +} + +// +// `BrowserRootView` handles drag and drop for the tab strip. In immersive +// fullscreen, the tab strip is hosted in a separate Widget, in a separate +// view, this view` TabContainerOverlayView`. To support drag and drop for the +// tab strip in immersive fullscreen, forward all drag and drop requests to +// the `BrowserRootView`. +// + +bool TabContainerOverlayViewMac::GetDropFormats( + int* formats, + std::set<ui::ClipboardFormatType>* format_types) { + return browser_view_->GetWidget()->GetRootView()->GetDropFormats( + formats, format_types); +} + +bool TabContainerOverlayViewMac::AreDropTypesRequired() { + return browser_view_->GetWidget()->GetRootView()->AreDropTypesRequired(); +} + +bool TabContainerOverlayViewMac::CanDrop(const ui::OSExchangeData& data) { + return browser_view_->GetWidget()->GetRootView()->CanDrop(data); +} + +void TabContainerOverlayViewMac::OnDragEntered( + const ui::DropTargetEvent& event) { + return browser_view_->GetWidget()->GetRootView()->OnDragEntered(event); +} + +int TabContainerOverlayViewMac::OnDragUpdated( + const ui::DropTargetEvent& event) { + return browser_view_->GetWidget()->GetRootView()->OnDragUpdated(event); +} + +void TabContainerOverlayViewMac::OnDragExited() { + return browser_view_->GetWidget()->GetRootView()->OnDragExited(); +} + +TabContainerOverlayViewMac::DropCallback +TabContainerOverlayViewMac::GetDropCallback(const ui::DropTargetEvent& event) { + return browser_view_->GetWidget()->GetRootView()->GetDropCallback(event); +} + +BEGIN_METADATA(TabContainerOverlayViewMac) +END_METADATA
diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc b/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc index 3fa32d0..de20451 100644 --- a/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc +++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
@@ -581,10 +581,6 @@ return BrowserFrameView::IsFrameCondensed() || !ShouldShowCaptionButtons(); } -bool OpaqueBrowserFrameView::EverHasVisibleBackgroundTabShapes() const { - return BrowserFrameView::EverHasVisibleBackgroundTabShapes(); -} - OpaqueBrowserFrameView::FrameButtonStyle OpaqueBrowserFrameView::GetFrameButtonStyle() const { #if BUILDFLAG(IS_LINUX)
diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view.h b/chrome/browser/ui/views/frame/opaque_browser_frame_view.h index 8215abb..993ef25 100644 --- a/chrome/browser/ui/views/frame/opaque_browser_frame_view.h +++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view.h
@@ -105,7 +105,6 @@ int GetTopAreaHeight() const override; bool UseCustomFrame() const override; bool IsFrameCondensed() const override; - bool EverHasVisibleBackgroundTabShapes() const override; FrameButtonStyle GetFrameButtonStyle() const override; void UpdateWindowControlsOverlay(const gfx::Rect& bounding_rect) override; bool ShouldDrawRestoredFrameShadow() const override;
diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_delegate.h b/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_delegate.h index b35c6e1..729d227 100644 --- a/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_delegate.h +++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_delegate.h
@@ -80,10 +80,6 @@ // the thick frame border and rounded corners. virtual bool IsFrameCondensed() const = 0; - // Returns whether the shapes of background tabs are visible against the frame - // for either active or inactive windows. - virtual bool EverHasVisibleBackgroundTabShapes() const = 0; - // Indicates the type of the frame buttons. virtual FrameButtonStyle GetFrameButtonStyle() const;
diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc b/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc index 75adc1b..0bb54bd 100644 --- a/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc +++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc
@@ -86,7 +86,6 @@ bool IsFrameCondensed() const override { return !show_caption_buttons_ || maximized_; } - bool EverHasVisibleBackgroundTabShapes() const override { return false; } void UpdateWindowControlsOverlay(const gfx::Rect& bounding_rect) override {} bool ShouldDrawRestoredFrameShadow() const override { return true; } #if BUILDFLAG(IS_LINUX)
diff --git a/chrome/browser/ui/views/location_bar/cookie_controls/cookie_controls_bubble_view_pixel_test.cc b/chrome/browser/ui/views/location_bar/cookie_controls/cookie_controls_bubble_view_pixel_test.cc index d186d8a..b0738da9 100644 --- a/chrome/browser/ui/views/location_bar/cookie_controls/cookie_controls_bubble_view_pixel_test.cc +++ b/chrome/browser/ui/views/location_bar/cookie_controls/cookie_controls_bubble_view_pixel_test.cc
@@ -187,17 +187,19 @@ CookieControlsBubbleViewPixelTest& operator=( const CookieControlsBubbleViewPixelTest&) = delete; - void BlockThirdPartyCookies() { - bool pre_3pcd = GetParam() == CookieBlocking3pcdStatus::kNotIn3pcd; - if (pre_3pcd) { - browser()->profile()->GetPrefs()->SetInteger( - prefs::kCookieControlsMode, - static_cast<int>( - content_settings::CookieControlsMode::kBlockThirdParty)); - } else { - browser()->profile()->GetPrefs()->SetBoolean( - prefs::kTrackingProtection3pcdEnabled, true); + void SetUp() override { + if (GetParam() != CookieBlocking3pcdStatus::kNotIn3pcd) { + scoped_feature_list_.InitAndEnableFeature( + content_settings::features::kTrackingProtection3pcd); } + CookieControlsBubbleViewPixelTestBase::SetUp(); + } + + void BlockThirdPartyCookies() { + browser()->profile()->GetPrefs()->SetInteger( + prefs::kCookieControlsMode, + static_cast<int>( + content_settings::CookieControlsMode::kBlockThirdParty)); } void SetStatus(CookieControlsState controls_state,
diff --git a/chrome/browser/ui/views/location_bar/cookie_controls/cookie_controls_interactive_uitest.cc b/chrome/browser/ui/views/location_bar/cookie_controls/cookie_controls_interactive_uitest.cc index 2689825..ee38ba8 100644 --- a/chrome/browser/ui/views/location_bar/cookie_controls/cookie_controls_interactive_uitest.cc +++ b/chrome/browser/ui/views/location_bar/cookie_controls/cookie_controls_interactive_uitest.cc
@@ -120,11 +120,8 @@ } protected: - virtual std::vector<base::test::FeatureRef> DisabledFeatures() { - return {content_settings::features::kTrackingProtection3pcd}; - } - virtual std::vector<base::test::FeatureRef> EnabledFeatures() { return {}; } + virtual std::vector<base::test::FeatureRef> DisabledFeatures() { return {}; } auto CheckIcon(ElementSpecifier view, const gfx::VectorIcon& icon) { std::string expected_name = icon.name; @@ -254,16 +251,11 @@ prefs::kFingerprintingProtectionEnabled, true); } - void BlockThirdPartyCookies(bool use_3pcd = false) { - if (use_3pcd) { - browser()->profile()->GetPrefs()->SetBoolean( - prefs::kTrackingProtection3pcdEnabled, true); - } else { - browser()->profile()->GetPrefs()->SetInteger( - prefs::kCookieControlsMode, - static_cast<int>( - content_settings::CookieControlsMode::kBlockThirdParty)); - } + void BlockThirdPartyCookies() { + browser()->profile()->GetPrefs()->SetInteger( + prefs::kCookieControlsMode, + static_cast<int>( + content_settings::CookieControlsMode::kBlockThirdParty)); } void SetHighSiteEngagement() { @@ -315,15 +307,7 @@ content::ContentMockCertVerifier mock_cert_verifier_; }; -class CookieControlsUiTest : public CookieControlsInteractiveTestBase, - public testing::WithParamInterface<bool> {}; - -INSTANTIATE_TEST_SUITE_P(, - CookieControlsUiTest, - testing::Bool(), - [](testing::TestParamInfo<bool> param) { - return param.param ? "ModeB" : "NoModeB"; - }); +class CookieControlsUiTest : public CookieControlsInteractiveTestBase {}; class CookieControlsInteractiveUiNoFeedbackTest : public CookieControlsUiTest { public: @@ -332,13 +316,12 @@ protected: std::vector<base::test::FeatureRef> DisabledFeatures() override { - return {content_settings::features::kUserBypassFeedback, - content_settings::features::kTrackingProtection3pcd}; + return {content_settings::features::kUserBypassFeedback}; } }; -IN_PROC_BROWSER_TEST_P(CookieControlsUiTest, BubbleOpensWhenIconPressed) { - BlockThirdPartyCookies(GetParam()); +IN_PROC_BROWSER_TEST_F(CookieControlsUiTest, BubbleOpensWhenIconPressed) { + BlockThirdPartyCookies(); RunTestSequence( InstrumentTab(kWebContentsElementId), NavigateWebContents(kWebContentsElementId, third_party_cookie_page_url()), @@ -402,9 +385,9 @@ } // TODO(crbug.com/409294185): Flaky on several builders. -IN_PROC_BROWSER_TEST_P(CookieControlsUiTest, +IN_PROC_BROWSER_TEST_F(CookieControlsUiTest, DISABLED_IconAnimatesOnHighSiteEngagement) { - BlockThirdPartyCookies(GetParam()); + BlockThirdPartyCookies(); SetHighSiteEngagement(); RunTestSequence( InstrumentTab(kWebContentsElementId), @@ -496,21 +479,11 @@ user_education::HelpBubbleView::kHelpBubbleElementIdForTesting)); } -IN_PROC_BROWSER_TEST_F(CookieControlsWithIphUiTest, NotShownWhen3pcdEnabled) { - BlockThirdPartyCookies(/*use_3pcd*/ true); - SetHighSiteEngagement(); - RunTestSequence( - InstrumentTab(kWebContentsElementId), - NavigateWebContents(kWebContentsElementId, third_party_cookie_page_url()), - // Check that the IPH does not show. - EnsureNotPresent( - user_education::HelpBubbleView::kHelpBubbleElementIdForTesting)); -} // Opening the feedback dialog on CrOS open a system level dialog, which cannot // be easily tested here. #if !BUILDFLAG(IS_CHROMEOS) -IN_PROC_BROWSER_TEST_P(CookieControlsUiTest, FeedbackOpens) { - BlockThirdPartyCookies(GetParam()); +IN_PROC_BROWSER_TEST_F(CookieControlsUiTest, FeedbackOpens) { + BlockThirdPartyCookies(); cookie_settings()->SetCookieSettingForUserBypass( third_party_cookie_page_url()); RunTestSequence( @@ -523,10 +496,10 @@ } #endif -IN_PROC_BROWSER_TEST_P(CookieControlsUiTest, ReloadView) { +IN_PROC_BROWSER_TEST_F(CookieControlsUiTest, ReloadView) { // Test that opening the bubble, then closing it after making a change, // results in the reload view being displayed. - BlockThirdPartyCookies(GetParam()); + BlockThirdPartyCookies(); RunTestSequence( InstrumentTab(kWebContentsElementId), NavigateWebContents(kWebContentsElementId, third_party_cookie_page_url()), @@ -542,13 +515,13 @@ EXPECT_EQ(user_actions_.GetActionCount(kUMABubbleReloadingShown), 1); } -IN_PROC_BROWSER_TEST_P(CookieControlsUiTest, ReloadViewTimeout) { +IN_PROC_BROWSER_TEST_F(CookieControlsUiTest, ReloadViewTimeout) { // Test that opening the bubble, then closing it after making a change, // results in the reload view being displayed and then timing out. // // The page loaded in this test will never finish loading, so the timeout // must be configured shorter than the test timeout. - BlockThirdPartyCookies(GetParam()); + BlockThirdPartyCookies(); RunTestSequence( /*context(),*/ InstrumentTab(kWebContentsElementId), EnterText(kOmniboxElementId, @@ -573,11 +546,11 @@ EXPECT_EQ(user_actions_.GetActionCount(kUMABubbleReloadingShown), 1); } -IN_PROC_BROWSER_TEST_P(CookieControlsUiTest, ReloadView_TabChanged_NoReload) { +IN_PROC_BROWSER_TEST_F(CookieControlsUiTest, ReloadView_TabChanged_NoReload) { // Test that opening the bubble making a change, then changing tabs while // the bubble is open, then re-opening the bubble on the new tab and closing // _doesn't_ reload the page. Regression test for crbug.com/1470275. - BlockThirdPartyCookies(GetParam()); + BlockThirdPartyCookies(); const GURL third_party_cookie_page_url_one = third_party_cookie_page_url(); const GURL third_party_cookie_page_url_two = https_server()->GetURL("b.test", "/third_party_partitioned_cookies.html"); @@ -615,13 +588,13 @@ EXPECT_EQ(user_actions_.GetActionCount(kUMABubbleReloadingTimeout), 0); } -IN_PROC_BROWSER_TEST_P(CookieControlsUiTest, ReloadView_TabChanged_Reload) { +IN_PROC_BROWSER_TEST_F(CookieControlsUiTest, ReloadView_TabChanged_Reload) { // Test that opening the bubble, _not_ making a change, then changing tabs // while the bubble is open, then re-opening the bubble on the new tab and // making a change _does_ reload the page, and that on page reload the // reload view should be closed. // Regression test for crbug.com/1470275. - BlockThirdPartyCookies(GetParam()); + BlockThirdPartyCookies(); const GURL third_party_cookie_page_url_one = third_party_cookie_page_url(); const GURL third_party_cookie_page_url_two = https_server()->GetURL("b.test", "/third_party_partitioned_cookies.html"); @@ -658,13 +631,13 @@ EXPECT_EQ(user_actions_.GetActionCount(kUMABubbleReloadingShown), 1); } -IN_PROC_BROWSER_TEST_P(CookieControlsUiTest, +IN_PROC_BROWSER_TEST_F(CookieControlsUiTest, ReloadView_TabChangedDifferentSetting_NoReload) { // Test that loading a page with cookies allowed, then swapping to a tab // where cookies are disabled, then opening and closing the bubble without // making a change _does not_ reload the page. // Regression test for crbug.com/1470275. - BlockThirdPartyCookies(GetParam()); + BlockThirdPartyCookies(); const GURL third_party_cookie_page_url_one = third_party_cookie_page_url(); const GURL third_party_cookie_page_url_two = https_server()->GetURL("b.test", "/third_party_partitioned_cookies.html"); @@ -703,10 +676,10 @@ EXPECT_EQ(user_actions_.GetActionCount(kUMABubbleReloadingShown), 0); } -IN_PROC_BROWSER_TEST_P(CookieControlsUiTest, NoReloadView) { +IN_PROC_BROWSER_TEST_F(CookieControlsUiTest, NoReloadView) { // Test that opening the bubble, then closing it without making an effective // change to cookie settings, does not show the reload view. - BlockThirdPartyCookies(GetParam()); + BlockThirdPartyCookies(); RunTestSequence( InstrumentTab(kWebContentsElementId), NavigateWebContents(kWebContentsElementId, third_party_cookie_page_url()), @@ -728,6 +701,10 @@ : public CookieControlsInteractiveTestBase, public testing::WithParamInterface<testing::tuple<bool, bool>> { protected: + std::vector<base::test::FeatureRef> EnabledFeatures() override { + return {content_settings::features::kTrackingProtection3pcd}; + } + std::vector<base::test::FeatureRef> DisabledFeatures() override { std::vector<base::test::FeatureRef> disabled_features = { privacy_sandbox::kActUserBypassUx}; @@ -741,7 +718,6 @@ IN_PROC_BROWSER_TEST_P(CookieControlsInteractiveUi3pcdTest, CreateExceptionIncognito) { - BlockThirdPartyCookies(/*use_3pcd=*/true); SetBlockAll3pcToggle(std::get<0>(GetParam())); auto* const incognito_browser = CreateIncognitoBrowser(browser()->profile()); RunTestSequence(InContext( @@ -761,7 +737,6 @@ IN_PROC_BROWSER_TEST_P(CookieControlsInteractiveUi3pcdTest, RemoveException) { // Open the bubble while 3PC are blocked, but the page already has an // exception. Disable 3PC for the page, and confirm the exception is removed. - BlockThirdPartyCookies(/*use_3pcd=*/true); SetHighSiteEngagement(); SetBlockAll3pcToggle(std::get<0>(GetParam())); cookie_settings()->SetCookieSettingForUserBypass( @@ -787,8 +762,7 @@ /*show_feedback_button*/ testing::Bool())); class CookieControlsInteractiveUiTrackingProtectionTest - : public CookieControlsInteractiveTestBase, - public testing::WithParamInterface<bool> { + : public CookieControlsInteractiveTestBase { public: CookieControlsInteractiveUiTrackingProtectionTest() = default; ~CookieControlsInteractiveUiTrackingProtectionTest() override = default; @@ -897,9 +871,9 @@ #else #define MAYBE_CreateExceptionIncognitoAct CreateExceptionIncognitoAct #endif -IN_PROC_BROWSER_TEST_P(CookieControlsInteractiveUiTrackingProtectionTest, +IN_PROC_BROWSER_TEST_F(CookieControlsInteractiveUiTrackingProtectionTest, MAYBE_CreateExceptionIncognitoAct) { - BlockThirdPartyCookies(GetParam()); + BlockThirdPartyCookies(); EnableFpProtection(); auto* const incognito_browser = CreateIncognitoBrowser(browser()->profile()); RunTestSequence(InContext( @@ -924,9 +898,9 @@ 1); } -IN_PROC_BROWSER_TEST_P(CookieControlsInteractiveUiTrackingProtectionTest, +IN_PROC_BROWSER_TEST_F(CookieControlsInteractiveUiTrackingProtectionTest, RemoveExceptionIncognitoAct) { - BlockThirdPartyCookies(GetParam()); + BlockThirdPartyCookies(); EnableFpProtection(); incognito_cookie_settings()->SetCookieSettingForUserBypass( third_party_cookie_page_url()); @@ -955,7 +929,7 @@ user_actions_.GetActionCount(kUMABubbleReenabledTrackingProtections), 1); } -IN_PROC_BROWSER_TEST_P( +IN_PROC_BROWSER_TEST_F( CookieControlsInteractiveUiTrackingProtectionTest, BubbleViewTimesOutWithoutShowingReloadingViewWhenStatusChanged) { // Test that opening the bubble and making a change results in the @@ -963,7 +937,7 @@ // // The page loaded in this test will never finish loading, so the timeout // must be configured shorter than the test timeout. - BlockThirdPartyCookies(GetParam()); + BlockThirdPartyCookies(); EnableFpProtection(); auto* const incognito_browser = CreateIncognitoBrowser(browser()->profile()); RunTestSequence(InContext( @@ -988,10 +962,3 @@ EXPECT_EQ(user_actions_.GetActionCount(kUMABubblePausedTrackingProtections), 1); } - -INSTANTIATE_TEST_SUITE_P(, - CookieControlsInteractiveUiTrackingProtectionTest, - testing::Bool(), - [](testing::TestParamInfo<bool> param) { - return param.param ? "ModeB" : "NoModeB"; - });
diff --git a/chrome/browser/ui/views/side_panel/extensions/extension_side_panel_coordinator.cc b/chrome/browser/ui/views/side_panel/extensions/extension_side_panel_coordinator.cc index 8a054e9..9b1ba94 100644 --- a/chrome/browser/ui/views/side_panel/extensions/extension_side_panel_coordinator.cc +++ b/chrome/browser/ui/views/side_panel/extensions/extension_side_panel_coordinator.cc
@@ -198,6 +198,14 @@ } void ExtensionSidePanelCoordinator::OnViewDestroying() { + // Reset the panel state to inactive. The panel state should reflect the + // state of the view and not the visibility of the entry so handling this + // during view destruction. + if (is_panel_active_) { + OnClosed(); + is_panel_active_ = false; + } + // When the extension's view inside the side panel is destroyed, reset // the ExtensionViewHost so it cannot try to notify a view that no longer // exists when its event listeners are triggered. Otherwise, a use after free @@ -286,12 +294,13 @@ // 1. The panel is closed on the tab. // 2. The panel is replaced by another panel. // 3. The tab / window itself is closed. -// OnEntryWillHide() handles scenarios 1 and 2, whereas the -// ~ExtensionSidePanelCoordinator() destructor handles scenario 3. +// OnEntryWillHide() handles scenarios 2, whereas the +// OnViewDestroying() handles scenario 1 and 3. void ExtensionSidePanelCoordinator::OnEntryWillHide( SidePanelEntry* entry, SidePanelEntryHideReason reason) { - if (entry->key() != GetEntryKey()) { + if (entry->key() != GetEntryKey() || + reason != SidePanelEntryHideReason::kReplaced) { return; }
diff --git a/chrome/browser/ui/views/side_panel/side_panel_coordinator.cc b/chrome/browser/ui/views/side_panel/side_panel_coordinator.cc index 8105440f..9fb68ad 100644 --- a/chrome/browser/ui/views/side_panel/side_panel_coordinator.cc +++ b/chrome/browser/ui/views/side_panel/side_panel_coordinator.cc
@@ -106,8 +106,11 @@ } void SidePanelCoordinator::OnPinStateChanged() { - if (base::WeakPtr<SidePanelEntry> entry = current_entry()) { - UpdateSidePanelHeader(entry.get()); + if (!current_key()) { + return; + } + if (SidePanelEntry* entry = GetEntryForUniqueKey(*current_key())) { + UpdateSidePanelHeader(entry); } } @@ -409,7 +412,8 @@ content_wrapper->SetVisible(true); side_panel->Open(/*animated=*/!suppress_animations); - SidePanelEntry* previous_entry = current_entry().get(); + SidePanelEntry* previous_entry = + current_key() ? GetEntryForUniqueKey(*current_key()) : nullptr; if (content_wrapper->children().size()) { if (previous_entry) { @@ -433,7 +437,6 @@ SidePanelEntry::PanelType::kContent); } set_current_key(unique_key); - set_current_entry(entry->GetWeakPtr()); if (browser_view_->toolbar()->pinned_toolbar_actions_container()) { side_panel_toolbar_pinning_controller_->UpdateActiveState( entry->key(), entry->should_show_ephemerally_in_toolbar()); @@ -581,8 +584,11 @@ } void SidePanelCoordinator::UpdateNewTabButtonState() { - if (base::WeakPtr<SidePanelEntry> entry = current_entry()) { - UpdateSidePanelHeader(entry.get()); + if (!current_key()) { + return; + } + if (SidePanelEntry* entry = GetEntryForUniqueKey(*current_key())) { + UpdateSidePanelHeader(entry); } } @@ -634,9 +640,8 @@ // from calling multiple times. This could happen in the edge cases when // callback inside current_entry->OnEntryHidden() is calling Close() to // trigger race condition. - SidePanelEntry* previous_entry = current_entry().get(); + SidePanelEntry* previous_entry = GetEntryForUniqueKey(*current_key()); set_current_key(std::nullopt); - set_current_entry(nullptr); if (previous_entry) { previous_entry->OnEntryHidden(); }
diff --git a/chrome/browser/ui/views/side_panel/side_panel_entry_waiter.cc b/chrome/browser/ui/views/side_panel/side_panel_entry_waiter.cc index 09ec9f4..86c31443 100644 --- a/chrome/browser/ui/views/side_panel/side_panel_entry_waiter.cc +++ b/chrome/browser/ui/views/side_panel/side_panel_entry_waiter.cc
@@ -48,8 +48,9 @@ PopulateSidePanelCallback callback) { // content_proxy is owned by content_view which is owned by SidePanelEntry. // If this callback runs then loading_entry_ must be valid. - CHECK(loading_entry_); - SidePanelEntry* entry = loading_entry_.get(); - loading_entry_.reset(); - std::move(callback).Run(entry, std::nullopt); + if (loading_entry_) { + SidePanelEntry* entry = loading_entry_.get(); + loading_entry_.reset(); + std::move(callback).Run(entry, std::nullopt); + } }
diff --git a/chrome/browser/ui/views/side_panel/side_panel_ui_base.cc b/chrome/browser/ui/views/side_panel/side_panel_ui_base.cc index 409e074..46afb50 100644 --- a/chrome/browser/ui/views/side_panel/side_panel_ui_base.cc +++ b/chrome/browser/ui/views/side_panel/side_panel_ui_base.cc
@@ -24,6 +24,14 @@ return tab->GetTabFeatures()->side_panel_registry(); } +SidePanelRegistry* GetSidePanelRegistryFromTabHandle(tabs::TabHandle handle) { + tabs::TabInterface* tab = handle.Get(); + if (!tab || !tab->GetTabFeatures()) { + return nullptr; + } + return tab->GetTabFeatures()->side_panel_registry(); +} + } // namespace SidePanelUIBase::SidePanelUIBase(Browser* browser) @@ -102,7 +110,11 @@ const UniqueKey& unique_key) const { SidePanelEntry* entry = nullptr; if (unique_key.tab_handle) { - entry = GetActiveContextualEntryForKey(unique_key.key); + SidePanelRegistry* tab_registry = + GetSidePanelRegistryFromTabHandle(unique_key.tab_handle.value()); + if (tab_registry) { + entry = tab_registry->GetEntryForKey(unique_key.key); + } } else { entry = window_registry_->GetEntryForKey(unique_key.key); }
diff --git a/chrome/browser/ui/views/side_panel/side_panel_ui_base.h b/chrome/browser/ui/views/side_panel/side_panel_ui_base.h index 069e5be..89d64c2da 100644 --- a/chrome/browser/ui/views/side_panel/side_panel_ui_base.h +++ b/chrome/browser/ui/views/side_panel/side_panel_ui_base.h
@@ -70,7 +70,6 @@ SidePanelRegistry* GetWindowRegistry() { return window_registry_.get(); } std::optional<UniqueKey> current_key() const { return current_key_; } - base::WeakPtr<SidePanelEntry> current_entry() const { return current_entry_; } protected: friend class SidePanelEntryWaiter; @@ -106,10 +105,6 @@ current_key_ = new_key; } - void set_current_entry(base::WeakPtr<SidePanelEntry> new_entry) { - current_entry_ = new_entry; - } - std::optional<UniqueKey> GetUniqueKeyForKey( const SidePanelEntry::Key& entry_key) const; @@ -152,11 +147,6 @@ // must only be set in one place: PopulateSidePanel() and unset in one place: // OnViewVisibilityChanged() std::optional<UniqueKey> current_key_; - - // TODO(https://crbug.com/363743081): Remove this member. - // There are a few cases where the current control flow first modifies the - // active registry, then tries to reference the previous entry. - base::WeakPtr<SidePanelEntry> current_entry_; }; #endif // CHROME_BROWSER_UI_VIEWS_SIDE_PANEL_SIDE_PANEL_UI_BASE_H_
diff --git a/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc b/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc index efa632a..0f36441 100644 --- a/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc +++ b/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc
@@ -789,11 +789,16 @@ } bool BrowserTabStripController::EverHasVisibleBackgroundTabShapes() const { - return GetFrameView()->EverHasVisibleBackgroundTabShapes(); + return GetFrameView()->HasVisibleBackgroundTabShapes( + BrowserFrameActiveState::kActive) || + GetFrameView()->HasVisibleBackgroundTabShapes( + BrowserFrameActiveState::kInactive); } bool BrowserTabStripController::CanDrawStrokes() const { - return GetFrameView()->CanDrawStrokes(); + // Web apps should not draw strokes if they don't have a tab strip. + return !browser_view_->browser()->app_controller() || + browser_view_->browser()->app_controller()->has_tab_strip(); } SkColor BrowserTabStripController::GetFrameColor(
diff --git a/chrome/browser/ui/views/tabs/glic_button.cc b/chrome/browser/ui/views/tabs/glic_button.cc index 269e118..6619045 100644 --- a/chrome/browser/ui/views/tabs/glic_button.cc +++ b/chrome/browser/ui/views/tabs/glic_button.cc
@@ -54,7 +54,7 @@ constexpr int kCloseButtonMargin = 6; constexpr ui::ColorId kHighlightColorId = ui::kColorSysPrimary; constexpr ui::ColorId kTextOnHighlight = ui::kColorSysOnPrimary; -constexpr ui::ColorId kDefaultTextColorV2 = ui::kColorSysOnSurfacePrimary; +constexpr ui::ColorId kDefaultTextColorV2 = ui::kColorSysOnSurface; constexpr int kIconSize = 16;
diff --git a/chrome/browser/ui/views/tabs/new_tab_button.cc b/chrome/browser/ui/views/tabs/new_tab_button.cc index 2db2836..b4518ea 100644 --- a/chrome/browser/ui/views/tabs/new_tab_button.cc +++ b/chrome/browser/ui/views/tabs/new_tab_button.cc
@@ -13,6 +13,7 @@ #include "chrome/browser/ui/browser_element_identifiers.h" #include "chrome/browser/ui/browser_window/public/browser_window_features.h" #include "chrome/browser/ui/color/chrome_color_id.h" +#include "chrome/browser/ui/tabs/split_tab_metrics.h" #include "chrome/browser/ui/tabs/tab_group_model.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/ui_features.h" @@ -25,6 +26,7 @@ DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(NewTabButtonMenuModel, kNewTab); DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(NewTabButtonMenuModel, kNewTabInGroup); +DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(NewTabButtonMenuModel, kNewSplitView); DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(NewTabButtonMenuModel, kCreateNewTabGroup); @@ -67,21 +69,38 @@ NewTabButtonMenuModel::NewTabButtonMenuModel(BrowserWindowInterface* browser) : ui::SimpleMenuModel(this), browser_(browser) { + CHECK(browser_); + // Build the menu. AddItemWithStringId(IDC_NEW_TAB, IDS_NEW_TAB); SetElementIdentifierAt(GetIndexOfCommandId(IDC_NEW_TAB).value(), kNewTab); - AddNewTabInGroupItem(); + AddSeparator(ui::NORMAL_SEPARATOR); + AddItemWithStringId(IDC_CREATE_NEW_TAB_GROUP, IDS_NEW_TAB_GROUP); SetElementIdentifierAt(GetIndexOfCommandId(IDC_CREATE_NEW_TAB_GROUP).value(), kCreateNewTabGroup); + + if (base::FeatureList::IsEnabled(features::kSideBySide)) { + AddSeparator(ui::NORMAL_SEPARATOR); + AddNewSplitTabItem(); + } } NewTabButtonMenuModel::~NewTabButtonMenuModel() = default; void NewTabButtonMenuModel::ExecuteCommand(int command_id, int event_flags) { CHECK(browser_); + + if (command_id == IDC_NEW_SPLIT_TAB) { + // Handle this command directly because we want to specify the source + // as the new tab button. + chrome::NewSplitTab(browser_, + split_tabs::SplitTabCreatedSource::kNewTabButton); + return; + } + chrome::ExecuteCommand(browser_, command_id); } @@ -139,3 +158,15 @@ GetIndexOfCommandId(IDC_ADD_NEW_TAB_RECENT_GROUP).value(), kNewTabInGroup); } + +void NewTabButtonMenuModel ::AddNewSplitTabItem() { + AddItemWithStringId(IDC_NEW_SPLIT_TAB, IDS_TAB_CXMENU_NEW_SPLIT_WITH_CURRENT); + SetElementIdentifierAt(GetIndexOfCommandId(IDC_NEW_SPLIT_TAB).value(), + kNewSplitView); + + TabStripModel* tab_strip_model = browser_->GetTabStripModel(); + CHECK(tab_strip_model); + + SetEnabledAt(GetIndexOfCommandId(IDC_NEW_SPLIT_TAB).value(), + !tab_strip_model->IsActiveTabSplit()); +}
diff --git a/chrome/browser/ui/views/tabs/new_tab_button.h b/chrome/browser/ui/views/tabs/new_tab_button.h index bb546603..2bb729cd 100644 --- a/chrome/browser/ui/views/tabs/new_tab_button.h +++ b/chrome/browser/ui/views/tabs/new_tab_button.h
@@ -55,6 +55,7 @@ public: DECLARE_CLASS_ELEMENT_IDENTIFIER_VALUE(kNewTab); DECLARE_CLASS_ELEMENT_IDENTIFIER_VALUE(kNewTabInGroup); + DECLARE_CLASS_ELEMENT_IDENTIFIER_VALUE(kNewSplitView); DECLARE_CLASS_ELEMENT_IDENTIFIER_VALUE(kCreateNewTabGroup); explicit NewTabButtonMenuModel(BrowserWindowInterface* browser); NewTabButtonMenuModel(const NewTabButtonMenuModel&) = delete; @@ -68,6 +69,7 @@ private: void AddNewTabInGroupItem(); + void AddNewSplitTabItem(); raw_ptr<BrowserWindowInterface> browser_; };
diff --git a/chrome/browser/ui/views/tabs/tab_strip_action_container_unittest.cc b/chrome/browser/ui/views/tabs/tab_strip_action_container_unittest.cc index 4b7ac4b..b935d3b 100644 --- a/chrome/browser/ui/views/tabs/tab_strip_action_container_unittest.cc +++ b/chrome/browser/ui/views/tabs/tab_strip_action_container_unittest.cc
@@ -72,6 +72,8 @@ return browser_.get(); } + bool CanShowModalUI() const override { return true; } + private: bool use_otr_profile_ = false; std::unique_ptr<TestingProfile> profile_ = std::make_unique<TestingProfile>(); @@ -148,6 +150,11 @@ .WillByDefault(::testing::Return(true)); ON_CALL(*tab_interface_, GetContents) .WillByDefault(::testing::Return(web_contents_.get())); + ON_CALL(*browser_window_interface_, RegisterActiveTabDidChange) + .WillByDefault([this](auto callback) { + SetActiveTabChangedCallback(callback); + return base::CallbackListSubscription(); + }); tab_declutter_controller_ = std::make_unique<tabs::TabDeclutterController>( browser_window_interface_.get()); @@ -164,6 +171,11 @@ return info.param ? "NudgeRedesign" : "NoNudgeRedesign"; } + void SetActiveTabChangedCallback( + base::RepeatingCallback<void(BrowserWindowInterface*)> cb) { + active_tab_changed_callback_ = cb; + } + protected: std::unique_ptr<TestingProfileManager> testing_profile_manager_; std::unique_ptr<TabStrip> tab_strip_; @@ -180,6 +192,10 @@ content::WebContents* web_contents() { return web_contents_.get(); } + void SimulateActiveTabChanged() { + active_tab_changed_callback_.Run(browser_window_interface_.get()); + } + private: // Owned by TabStrip. @@ -187,6 +203,8 @@ std::unique_ptr<TestingProfile> profile_; std::unique_ptr<content::WebContents> web_contents_; gfx::AnimationTestApi::RenderModeResetter animation_mode_reset_; + base::RepeatingCallback<void(BrowserWindowInterface*)> + active_tab_changed_callback_; }; INSTANTIATE_TEST_SUITE_P(/* no prefix */, @@ -284,16 +302,27 @@ #if BUILDFLAG(ENABLE_GLIC) TEST_P(TabStripActionContainerTest, GlicButtonUpdateLabel) { - if (base::FeatureList::IsEnabled(features::kGlicEntrypointVariations)) { - GTEST_SKIP() << "TODO(crbug.com/450575228): Skipped when GlicEntrypointVariations " - "flag is enabled. Update this test and re-enable."; - } - BuildGlicContainer(/*use_otr_profile=*/false); glic_nudge_controller_->UpdateNudgeLabel( web_contents(), "TEST", /*activity=*/std::nullopt, base::NullCallback()); ASSERT_EQ(tab_strip_action_container_->GetGlicButton()->GetText(), u"TEST"); } + +TEST_P(TabStripActionContainerTest, GlicButtonHideNudgeOnTabChange) { + BuildGlicContainer(/*use_otr_profile=*/false); + glic_nudge_controller_->SetDelegate(tab_strip_action_container_.get()); + + ASSERT_FALSE(tab_strip_action_container_->GetIsShowingGlicNudge()); + + glic_nudge_controller_->UpdateNudgeLabel( + web_contents(), "TEST", /*activity=*/std::nullopt, base::NullCallback()); + ASSERT_TRUE(tab_strip_action_container_->GetIsShowingGlicNudge()); + ASSERT_EQ(tab_strip_action_container_->GetGlicButton()->GetText(), u"TEST"); + + SimulateActiveTabChanged(); + ASSERT_FALSE(tab_strip_action_container_->GetIsShowingGlicNudge()); + ASSERT_EQ(tab_strip_action_container_->GetGlicButton()->GetText(), u"Gemini"); +} #endif // BUILDFLAG(ENABLE_GLIC) class TabStripActionContainerTestWithProduct
diff --git a/chrome/browser/ui/views/tabs/tab_strip_interactive_uitest.cc b/chrome/browser/ui/views/tabs/tab_strip_interactive_uitest.cc index 57d83ef..27df8df 100644 --- a/chrome/browser/ui/views/tabs/tab_strip_interactive_uitest.cc +++ b/chrome/browser/ui/views/tabs/tab_strip_interactive_uitest.cc
@@ -2,7 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "chrome/browser/ui/browser_commands.h" #include "chrome/browser/ui/browser_element_identifiers.h" +#include "chrome/browser/ui/tabs/split_tab_metrics.h" #include "chrome/browser/ui/tabs/tab_group_model.h" #include "chrome/browser/ui/views/tabs/browser_tab_strip_controller.h" #include "chrome/browser/ui/views/tabs/new_tab_button.h" @@ -77,12 +79,11 @@ DEFINE_LOCAL_STATE_IDENTIFIER_VALUE(ui::test::PollingStateObserver<int>, kTabCountState); -class TabStripTabGroupMenuMoreEntryPointsEnabled - : public TabStripInteractiveUiTest { +class TestNewTabButtonContextMenu : public TabStripInteractiveUiTest { public: - TabStripTabGroupMenuMoreEntryPointsEnabled() { - scoped_feature_list_.InitAndEnableFeature( - features::kTabGroupMenuMoreEntryPoints); + TestNewTabButtonContextMenu() { + scoped_feature_list_.InitWithFeatures( + {features::kTabGroupMenuMoreEntryPoints, features::kSideBySide}, {}); } TabStrip* tabstrip() { @@ -107,7 +108,7 @@ // TODO (crbug.com/447617263) rewrite these tests so that they work on mac and // enable them there so that it works on mac and re-enable it. #if !BUILDFLAG(IS_MAC) -IN_PROC_BROWSER_TEST_F(TabStripTabGroupMenuMoreEntryPointsEnabled, +IN_PROC_BROWSER_TEST_F(TestNewTabButtonContextMenu, VerifyNewTabButtonContextMenu) { RunTestSequence( FinishTabstripAnimations(), EnsurePresent(kNewTabButtonElementId), @@ -116,12 +117,52 @@ ClickMouse(ui_controls::RIGHT), EnsurePresent(NewTabButtonMenuModel::kNewTab), EnsurePresent(NewTabButtonMenuModel::kNewTabInGroup), + EnsurePresent(NewTabButtonMenuModel::kNewSplitView), EnsurePresent(NewTabButtonMenuModel::kCreateNewTabGroup), SendAccelerator(NewTabButtonMenuModel::kNewTab, ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE)))); } -IN_PROC_BROWSER_TEST_F(TabStripTabGroupMenuMoreEntryPointsEnabled, +IN_PROC_BROWSER_TEST_F(TestNewTabButtonContextMenu, + NewTabButtonContextMenuSplitView) { + RunTestSequence(FinishTabstripAnimations(), + EnsurePresent(kNewTabButtonElementId), + MoveMouseTo(kNewTabButtonElementId), + MayInvolveNativeContextMenu( + ClickMouse(ui_controls::RIGHT), + EnsurePresent(NewTabButtonMenuModel::kNewTab), + EnsurePresent(NewTabButtonMenuModel::kNewSplitView), + SelectMenuItem(NewTabButtonMenuModel::kNewSplitView))); + + BrowserView* browser_view = static_cast<BrowserView*>(browser()->window()); + + // Split view should be open + EXPECT_TRUE(browser_view->IsInSplitView()); +} + +IN_PROC_BROWSER_TEST_F(TestNewTabButtonContextMenu, + NewTabButtonContextMenuSplitViewDisabled) { + chrome::NewSplitTab(browser(), + split_tabs::SplitTabCreatedSource::kNewTabButton); + RunTestSequence( + FinishTabstripAnimations(), EnsurePresent(kNewTabButtonElementId), + MoveMouseTo(kNewTabButtonElementId), + MayInvolveNativeContextMenu( + ClickMouse(ui_controls::RIGHT), + EnsurePresent(NewTabButtonMenuModel::kNewTab), + EnsurePresent(NewTabButtonMenuModel::kNewSplitView), + WaitForViewProperty(NewTabButtonMenuModel::kNewSplitView, views::View, + Enabled, false), + SendAccelerator(NewTabButtonMenuModel::kNewTab, + ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE)))); + + BrowserView* browser_view = static_cast<BrowserView*>(browser()->window()); + + // Split view should be open + EXPECT_TRUE(browser_view->IsInSplitView()); +} + +IN_PROC_BROWSER_TEST_F(TestNewTabButtonContextMenu, NewTabButtonNewTabInGroupDisabledWhenNoOpenGroups) { RunTestSequence( EnsurePresent(kNewTabButtonElementId), @@ -135,7 +176,7 @@ ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE)))); } -IN_PROC_BROWSER_TEST_F(TabStripTabGroupMenuMoreEntryPointsEnabled, +IN_PROC_BROWSER_TEST_F(TestNewTabButtonContextMenu, NewTabButtonNewTabInMostRecentGroup) { controller()->CreateNewTab(); controller()->CreateNewTab(); @@ -167,4 +208,32 @@ }, 2)); } + +class TestNewTabButtonContextMenuSideBySideDisabled + : public TabStripInteractiveUiTest { + public: + TestNewTabButtonContextMenuSideBySideDisabled() { + scoped_feature_list_.InitWithFeatures( + {features::kTabGroupMenuMoreEntryPoints}, {features::kSideBySide}); + } + + private: + base::test::ScopedFeatureList scoped_feature_list_; +}; + +IN_PROC_BROWSER_TEST_F(TestNewTabButtonContextMenuSideBySideDisabled, + VerifyNewTabButtonContextMenuSplitViewNotPresent) { + RunTestSequence( + FinishTabstripAnimations(), EnsurePresent(kNewTabButtonElementId), + MoveMouseTo(kNewTabButtonElementId), + MayInvolveNativeContextMenu( + ClickMouse(ui_controls::RIGHT), + EnsurePresent(NewTabButtonMenuModel::kNewTab), + EnsurePresent(NewTabButtonMenuModel::kNewTabInGroup), + EnsurePresent(NewTabButtonMenuModel::kCreateNewTabGroup), + EnsureNotPresent(NewTabButtonMenuModel::kNewSplitView), + SendAccelerator(NewTabButtonMenuModel::kNewTab, + ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE)))); +} + #endif // !BUILDFLAG(IS_MAC)
diff --git a/chrome/browser/ui/views/user_education/impl/browser_feature_promo_controller_20.cc b/chrome/browser/ui/views/user_education/impl/browser_feature_promo_controller_20.cc index 9e513b0..b164623 100644 --- a/chrome/browser/ui/views/user_education/impl/browser_feature_promo_controller_20.cc +++ b/chrome/browser/ui/views/user_education/impl/browser_feature_promo_controller_20.cc
@@ -17,6 +17,8 @@ #include "chrome/browser/search_engine_choice/search_engine_choice_dialog_service.h" #include "chrome/browser/search_engine_choice/search_engine_choice_dialog_service_factory.h" #include "chrome/browser/ui/browser_window/public/browser_window_features.h" +#include "chrome/browser/ui/browser_window/public/browser_window_interface.h" +#include "chrome/browser/ui/browser_window/public/desktop_browser_window_capabilities.h" #include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h" #include "chrome/browser/ui/exclusive_access/fullscreen_controller.h" #include "chrome/browser/ui/ui_features.h" @@ -53,7 +55,7 @@ // see https://crbug.com/346461762 for an example. This can also crash // unit_tests that use a BrowserWindow but not a browser, so also check if // the browser view's widget is closing. - if (browser_view->browser()->IsBrowserClosing() || + if (browser_view->browser()->capabilities()->IsAttemptingToCloseBrowser() || browser_view->GetWidget()->IsClosed()) { return user_education::FeaturePromoResult::kBlockedByContext; }
diff --git a/chrome/browser/ui/views/user_education/impl/browser_feature_promo_preconditions.cc b/chrome/browser/ui/views/user_education/impl/browser_feature_promo_preconditions.cc index 9bec953..ea7ceaf 100644 --- a/chrome/browser/ui/views/user_education/impl/browser_feature_promo_preconditions.cc +++ b/chrome/browser/ui/views/user_education/impl/browser_feature_promo_preconditions.cc
@@ -11,6 +11,8 @@ #include "chrome/browser/search_engine_choice/search_engine_choice_dialog_service_factory.h" #include "chrome/browser/ui/browser_element_identifiers.h" #include "chrome/browser/ui/browser_window/public/browser_window_features.h" +#include "chrome/browser/ui/browser_window/public/browser_window_interface.h" +#include "chrome/browser/ui/browser_window/public/desktop_browser_window_capabilities.h" #include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h" #include "chrome/browser/ui/exclusive_access/fullscreen_controller.h" #include "chrome/browser/ui/location_bar/location_bar.h" @@ -146,7 +148,7 @@ user_education::FeaturePromoResult BrowserNotClosingPrecondition::CheckPrecondition( ui::UnownedTypedDataCollection&) const { - if (browser_view_->browser()->IsBrowserClosing() || + if (browser_view_->browser()->capabilities()->IsAttemptingToCloseBrowser() || browser_view_->GetWidget()->IsClosed()) { return user_education::FeaturePromoResult::kBlockedByContext; }
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc index 8a4a3c78..9500f3ed 100644 --- a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc +++ b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc
@@ -60,6 +60,7 @@ #include "chrome/browser/ui/browser_window/public/browser_window_features.h" #include "chrome/browser/ui/browser_window/public/browser_window_interface.h" #include "chrome/browser/ui/browser_window/public/browser_window_interface_iterator.h" +#include "chrome/browser/ui/browser_window/public/desktop_browser_window_capabilities.h" #include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h" #include "chrome/browser/ui/intent_picker_tab_helper.h" #include "chrome/browser/ui/page_action/page_action_icon_type.h" @@ -651,11 +652,9 @@ if (app_browser != nullptr) { LOG(INFO) << base::StringPrintf( "An app browser is still open at %p: IsAttemptingToClose(): %v, " - "IsBrowserClosing(): %v, is_delete_scheduled(): %v", + "is_delete_scheduled(): %v", app_browser, - app_browser->GetBrowserForMigrationOnly() - ->IsAttemptingToCloseBrowser(), - app_browser->GetBrowserForMigrationOnly()->IsBrowserClosing(), + app_browser->capabilities()->IsAttemptingToCloseBrowser(), app_browser->GetBrowserForMigrationOnly()->is_delete_scheduled()); return; }
diff --git a/chrome/browser/ui/web_applications/app_browser_controller.cc b/chrome/browser/ui/web_applications/app_browser_controller.cc index 4e3471f..d65f33b 100644 --- a/chrome/browser/ui/web_applications/app_browser_controller.cc +++ b/chrome/browser/ui/web_applications/app_browser_controller.cc
@@ -123,8 +123,7 @@ ForEachCurrentBrowserWindowInterfaceOrderedByActivation( [&](BrowserWindowInterface* browser) { if (browser->GetBrowserForMigrationOnly() - ->IsAttemptingToCloseBrowser() || - browser->GetBrowserForMigrationOnly()->IsBrowserClosing()) { + ->IsAttemptingToCloseBrowser()) { return true; // continue iterating } if (browser->GetType() != BrowserWindowInterface::TYPE_APP) { @@ -194,8 +193,7 @@ ForEachCurrentBrowserWindowInterfaceOrderedByActivation( [&](BrowserWindowInterface* browser) { if (browser->GetBrowserForMigrationOnly() - ->IsAttemptingToCloseBrowser() || - browser->GetBrowserForMigrationOnly()->IsBrowserClosing()) { + ->IsAttemptingToCloseBrowser()) { return true; // continue iterating } if (browser->GetType() != browser_type) {
diff --git a/chrome/browser/ui/webui/new_tab_page/composebox/composebox_handler.cc b/chrome/browser/ui/webui/new_tab_page/composebox/composebox_handler.cc index e560b73f..d1ec50d 100644 --- a/chrome/browser/ui/webui/new_tab_page/composebox/composebox_handler.cc +++ b/chrome/browser/ui/webui/new_tab_page/composebox/composebox_handler.cc
@@ -22,10 +22,6 @@ mojo::PendingRemote<composebox::mojom::Page> pending_page, mojo::PendingReceiver<searchbox::mojom::PageHandler> pending_searchbox_handler, - std::unique_ptr<ContextualSessionService::SessionHandle> - contextual_session_handle, - std::unique_ptr<ContextualSessionService::SessionHandle> - secondary_contextual_session_handle, std::unique_ptr<ComposeboxMetricsRecorder> composebox_metrics_recorder, Profile* profile, content::WebContents* web_contents) @@ -39,9 +35,7 @@ std::make_unique<composebox::ComposeboxOmniboxClient>( profile, web_contents, - this, - std::move(secondary_contextual_session_handle))), - std::move(contextual_session_handle)), + this))), web_contents_(web_contents), page_{std::move(pending_page)}, handler_(this, std::move(pending_handler)) {
diff --git a/chrome/browser/ui/webui/new_tab_page/composebox/composebox_handler.h b/chrome/browser/ui/webui/new_tab_page/composebox/composebox_handler.h index 6967bde..3f46f61 100644 --- a/chrome/browser/ui/webui/new_tab_page/composebox/composebox_handler.h +++ b/chrome/browser/ui/webui/new_tab_page/composebox/composebox_handler.h
@@ -35,10 +35,6 @@ mojo::PendingRemote<composebox::mojom::Page> pending_page, mojo::PendingReceiver<searchbox::mojom::PageHandler> pending_searchbox_handler, - std::unique_ptr<ContextualSessionService::SessionHandle> - contextual_session_handle, - std::unique_ptr<ContextualSessionService::SessionHandle> - secondary_contextual_session_handle, std::unique_ptr<ComposeboxMetricsRecorder> composebox_metrics_recorder, Profile* profile, content::WebContents* web_contents);
diff --git a/chrome/browser/ui/webui/new_tab_page/composebox/composebox_handler_unittest.cc b/chrome/browser/ui/webui/new_tab_page/composebox/composebox_handler_unittest.cc index 1267a60..dc392db8 100644 --- a/chrome/browser/ui/webui/new_tab_page/composebox/composebox_handler_unittest.cc +++ b/chrome/browser/ui/webui/new_tab_page/composebox/composebox_handler_unittest.cc
@@ -17,6 +17,7 @@ #include "base/time/time.h" #include "base/unguessable_token.h" #include "base/version_info/channel.h" +#include "chrome/browser/omnibox/contextual_session_web_contents_helper.h" #include "chrome/browser/ui/webui/searchbox/contextual_searchbox_test_utils.h" #include "chrome/browser/ui/webui/searchbox/searchbox_test_utils.h" #include "components/omnibox/browser/searchbox.mojom.h" @@ -79,7 +80,9 @@ version_info::Channel::UNKNOWN, "en-US"); auto contextual_session_handle = service_->CreateSessionForTesting(std::move(query_controller_ptr)); - auto session_id = contextual_session_handle->session_id(); + ContextualSessionWebContentsHelper::GetOrCreateForWebContents( + web_contents()) + ->set_session_handle(std::move(contextual_session_handle)); web_contents()->SetDelegate(&delegate_); auto metrics_recorder_ptr = @@ -89,7 +92,6 @@ mojo::PendingReceiver<composebox::mojom::PageHandler>(), mock_page_.BindAndGetRemote(), mojo::PendingReceiver<searchbox::mojom::PageHandler>(), - std::move(contextual_session_handle), service_->GetSession(session_id), std::move(metrics_recorder_ptr), profile(), web_contents()); handler_->SetPage(mock_searchbox_page_.BindAndGetRemote());
diff --git a/chrome/browser/ui/webui/new_tab_page/composebox/composebox_omnibox_client.cc b/chrome/browser/ui/webui/new_tab_page/composebox/composebox_omnibox_client.cc index 83dc018..72d8cd4 100644 --- a/chrome/browser/ui/webui/new_tab_page/composebox/composebox_omnibox_client.cc +++ b/chrome/browser/ui/webui/new_tab_page/composebox/composebox_omnibox_client.cc
@@ -7,8 +7,6 @@ #include "base/strings/utf_string_conversions.h" #include "components/lens/lens_url_utils.h" #include "components/omnibox/browser/autocomplete_match.h" -#include "components/omnibox/composebox/composebox_query_controller.h" -#include "components/omnibox/composebox/contextual_session_service.h" #include "net/base/url_util.h" #include "ui/webui/resources/cr_components/composebox/composebox.mojom.h" @@ -17,11 +15,8 @@ ComposeboxOmniboxClient::ComposeboxOmniboxClient( Profile* profile, content::WebContents* web_contents, - BaseComposeboxHandler* composebox_handler, - std::unique_ptr<ContextualSessionService::SessionHandle> - contextual_session_handle) - : ContextualOmniboxClient(profile, web_contents, - std::move(contextual_session_handle)), + BaseComposeboxHandler* composebox_handler) + : ContextualOmniboxClient(profile, web_contents), composebox_handler_(composebox_handler) {} ComposeboxOmniboxClient::~ComposeboxOmniboxClient() = default;
diff --git a/chrome/browser/ui/webui/new_tab_page/composebox/composebox_omnibox_client.h b/chrome/browser/ui/webui/new_tab_page/composebox/composebox_omnibox_client.h index 8661d48e..ac59795 100644 --- a/chrome/browser/ui/webui/new_tab_page/composebox/composebox_omnibox_client.h +++ b/chrome/browser/ui/webui/new_tab_page/composebox/composebox_omnibox_client.h
@@ -12,7 +12,6 @@ #include "chrome/browser/ui/webui/searchbox/contextual_searchbox_handler.h" #include "components/metrics/metrics_provider.h" #include "components/omnibox/browser/autocomplete_match_type.h" -#include "components/omnibox/composebox/contextual_session_service.h" #include "ui/base/window_open_disposition.h" class GURL; @@ -35,12 +34,9 @@ class ComposeboxOmniboxClient final : public ContextualOmniboxClient { public: - ComposeboxOmniboxClient( - Profile* profile, - content::WebContents* web_contents, - BaseComposeboxHandler* composebox_handler, - std::unique_ptr<ContextualSessionService::SessionHandle> - contextual_session_handle); + ComposeboxOmniboxClient(Profile* profile, + content::WebContents* web_contents, + BaseComposeboxHandler* composebox_handler); ~ComposeboxOmniboxClient() override;
diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc index 450972b..6efa32a 100644 --- a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc +++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc
@@ -37,6 +37,7 @@ #include "chrome/browser/new_tab_page/modules/v2/tab_groups/tab_groups_page_handler.h" #include "chrome/browser/new_tab_page/new_tab_page_util.h" #include "chrome/browser/omnibox/contextual_session_service_factory.h" +#include "chrome/browser/omnibox/contextual_session_web_contents_helper.h" #include "chrome/browser/page_image_service/image_service_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/search/background/ntp_custom_background_service_factory.h" @@ -851,30 +852,31 @@ void NewTabPageUI::BindInterface( mojo::PendingReceiver<searchbox::mojom::PageHandler> pending_page_handler) { - std::unique_ptr<ContextualSessionService::SessionHandle> - contextual_session_handle; - std::unique_ptr<ContextualSessionService::SessionHandle> - secondary_contextual_session_handle; std::unique_ptr<ComposeboxMetricsRecorder> composebox_metrics_recorder; // Only create the composebox query controller and metrics recorder needed for // contextual search if realbox next is enabled. if (ntp_realbox::IsNtpRealboxNextEnabled(profile_)) { - auto* contextual_session_service = - ContextualSessionServiceFactory::GetForProfile(profile_); - contextual_session_handle = contextual_session_service->CreateSession( - ntp_composebox::kSendLnsSurfaceParam.Get(), - ntp_composebox::kMaxNumFiles.Get() > 1, - ntp_composebox::kEnableViewportImages.Get()); - secondary_contextual_session_handle = - contextual_session_service->GetSession( - contextual_session_handle->session_id()); + // Create a contextual session for this WebContents if one does not exist. + if (auto* contextual_session_web_contents_helper = + ContextualSessionWebContentsHelper::GetOrCreateForWebContents( + web_contents()); + !contextual_session_web_contents_helper->session_handle()) { + auto* contextual_session_service = + ContextualSessionServiceFactory::GetForProfile(profile_); + auto contextual_session_handle = + contextual_session_service->CreateSession( + ntp_composebox::kSendLnsSurfaceParam.Get(), + ntp_composebox::kMaxNumFiles.Get() > 1, + ntp_composebox::kEnableViewportImages.Get()); + contextual_session_web_contents_helper->set_session_handle( + std::move(contextual_session_handle)); + } composebox_metrics_recorder = std::make_unique<ComposeboxMetricsRecorder>( kComposeboxMetricsReporterPrefName); } realbox_handler_ = std::make_unique<RealboxHandler>( - std::move(pending_page_handler), std::move(contextual_session_handle), - std::move(secondary_contextual_session_handle), - std::move(composebox_metrics_recorder), profile_, web_contents()); + std::move(pending_page_handler), std::move(composebox_metrics_recorder), + profile_, web_contents()); } void NewTabPageUI::BindInterface( @@ -1074,20 +1076,25 @@ mojo::PendingReceiver<searchbox::mojom::PageHandler> pending_searchbox_handler) { DCHECK(pending_page.is_valid()); - auto* contextual_session_service = - ContextualSessionServiceFactory::GetForProfile(profile_); - auto contextual_session_handle = contextual_session_service->CreateSession( - ntp_composebox::kSendLnsSurfaceParam.Get(), - ntp_composebox::kMaxNumFiles.Get() > 1, - ntp_composebox::kEnableViewportImages.Get()); - auto secondary_contextual_session_handle = - contextual_session_service->GetSession( - contextual_session_handle->session_id()); + + // Create a contextual session for this WebContents if one does not exist. + if (auto* contextual_session_web_contents_helper = + ContextualSessionWebContentsHelper::GetOrCreateForWebContents( + web_contents()); + !contextual_session_web_contents_helper->session_handle()) { + auto* contextual_session_service = + ContextualSessionServiceFactory::GetForProfile(profile_); + auto contextual_session_handle = contextual_session_service->CreateSession( + ntp_composebox::kSendLnsSurfaceParam.Get(), + ntp_composebox::kMaxNumFiles.Get() > 1, + ntp_composebox::kEnableViewportImages.Get()); + contextual_session_web_contents_helper->set_session_handle( + std::move(contextual_session_handle)); + } + composebox_handler_ = std::make_unique<ComposeboxHandler>( std::move(pending_page_handler), std::move(pending_page), std::move(pending_searchbox_handler), - std::move(contextual_session_handle), - std::move(secondary_contextual_session_handle), std::make_unique<ComposeboxMetricsRecorder>( kComposeboxMetricsReporterPrefName), profile_, web_contents());
diff --git a/chrome/browser/ui/webui/searchbox/contextual_searchbox_handler.cc b/chrome/browser/ui/webui/searchbox/contextual_searchbox_handler.cc index 7e59dc4..4d7e219 100644 --- a/chrome/browser/ui/webui/searchbox/contextual_searchbox_handler.cc +++ b/chrome/browser/ui/webui/searchbox/contextual_searchbox_handler.cc
@@ -12,6 +12,7 @@ #include "base/containers/span.h" #include "base/metrics/histogram_macros.h" #include "base/strings/utf_string_conversions.h" +#include "chrome/browser/omnibox/contextual_session_web_contents_helper.h" #include "chrome/browser/ui/browser_window/public/browser_window_interface.h" #include "chrome/browser/ui/omnibox/omnibox_controller.h" #include "chrome/browser/ui/tabs/public/tab_features.h" @@ -22,6 +23,7 @@ #include "components/lens/contextual_input.h" #include "components/lens/tab_contextualization_controller.h" #include "components/omnibox/browser/vector_icons.h" +#include "components/omnibox/composebox/contextual_session_service.h" #include "content/public/browser/render_widget_host_view.h" #include "content/public/common/url_constants.h" #include "ui/base/webui/web_ui_util.h" @@ -49,21 +51,26 @@ } // namespace ContextualOmniboxClient::ContextualOmniboxClient( - Profile* profile, content::WebContents* web_contents, - std::unique_ptr<ContextualSessionService::SessionHandle> - contextual_session_handle) - : SearchboxOmniboxClient(profile, web_contents), - contextual_session_handle_(std::move(contextual_session_handle)) {} + Profile* profile, + content::WebContents* web_contents) + : SearchboxOmniboxClient(profile, web_contents) {} ContextualOmniboxClient::~ContextualOmniboxClient() = default; +ComposeboxQueryController* ContextualOmniboxClient::GetQueryController() const { + auto* contextual_session_web_contents_helper = + ContextualSessionWebContentsHelper::FromWebContents(web_contents()); + auto* contextual_session_handle = + contextual_session_web_contents_helper + ? contextual_session_web_contents_helper->session_handle() + : nullptr; + return contextual_session_handle ? contextual_session_handle->GetController() + : nullptr; +} + std::optional<lens::proto::LensOverlaySuggestInputs> ContextualOmniboxClient::GetLensOverlaySuggestInputs() const { - if (!contextual_session_handle_) { - return std::nullopt; - } - - auto* query_controller = contextual_session_handle_->GetController(); + auto* query_controller = GetQueryController(); if (!query_controller) { return std::nullopt; } @@ -195,14 +202,11 @@ Profile* profile, content::WebContents* web_contents, std::unique_ptr<ComposeboxMetricsRecorder> composebox_metrics_recorder, - std::unique_ptr<OmniboxController> controller, - std::unique_ptr<ContextualSessionService::SessionHandle> - contextual_session_handle) + std::unique_ptr<OmniboxController> controller) : SearchboxHandler(std::move(pending_searchbox_handler), profile, web_contents, std::move(controller)), - contextual_session_handle_(std::move(contextual_session_handle)), composebox_metrics_recorder_(std::move(composebox_metrics_recorder)), web_contents_(web_contents) { if (auto* query_controller = GetQueryController()) { @@ -213,9 +217,14 @@ ContextualSearchboxHandler::~ContextualSearchboxHandler() = default; ComposeboxQueryController* ContextualSearchboxHandler::GetQueryController() { - return contextual_session_handle_ - ? contextual_session_handle_->GetController() - : nullptr; + auto* contextual_session_web_contents_helper = + ContextualSessionWebContentsHelper::FromWebContents(web_contents_); + auto* contextual_session_handle = + contextual_session_web_contents_helper + ? contextual_session_web_contents_helper->session_handle() + : nullptr; + return contextual_session_handle ? contextual_session_handle->GetController() + : nullptr; } void ContextualSearchboxHandler::NotifySessionStarted() {
diff --git a/chrome/browser/ui/webui/searchbox/contextual_searchbox_handler.h b/chrome/browser/ui/webui/searchbox/contextual_searchbox_handler.h index 5cf1246..a6e53c4 100644 --- a/chrome/browser/ui/webui/searchbox/contextual_searchbox_handler.h +++ b/chrome/browser/ui/webui/searchbox/contextual_searchbox_handler.h
@@ -20,7 +20,6 @@ #include "components/omnibox/composebox/composebox_metrics_recorder.h" #include "components/omnibox/composebox/composebox_query.mojom.h" #include "components/omnibox/composebox/composebox_query_controller.h" -#include "components/omnibox/composebox/contextual_session_service.h" #include "content/public/browser/web_contents.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/webui/resources/cr_components/composebox/composebox.mojom.h" @@ -39,19 +38,13 @@ class ContextualOmniboxClient : public SearchboxOmniboxClient { public: - ContextualOmniboxClient( - Profile* profile, - content::WebContents* web_contents, - std::unique_ptr<ContextualSessionService::SessionHandle> - contextual_session_handle); + ContextualOmniboxClient(Profile* profile, content::WebContents* web_contents); ~ContextualOmniboxClient() override; private: + ComposeboxQueryController* GetQueryController() const; std::optional<lens::proto::LensOverlaySuggestInputs> GetLensOverlaySuggestInputs() const override; - - std::unique_ptr<ContextualSessionService::SessionHandle> - contextual_session_handle_; }; // Abstract class that extends the SearchboxHandler and implements all methods @@ -66,9 +59,7 @@ Profile* profile, content::WebContents* web_contents, std::unique_ptr<ComposeboxMetricsRecorder> composebox_metrics_recorder, - std::unique_ptr<OmniboxController> controller, - std::unique_ptr<ContextualSessionService::SessionHandle> - contextual_session_handle); + std::unique_ptr<OmniboxController> controller); ~ContextualSearchboxHandler() override; // searchbox::mojom::PageHandler: @@ -128,8 +119,6 @@ void RecordTabClickedMetric(tabs::TabInterface* const tab); std::set<base::UnguessableToken> deleted_context_tokens_; - std::unique_ptr<ContextualSessionService::SessionHandle> - contextual_session_handle_; std::unique_ptr<ComposeboxMetricsRecorder> composebox_metrics_recorder_; raw_ptr<content::WebContents> web_contents_;
diff --git a/chrome/browser/ui/webui/searchbox/contextual_searchbox_handler_browsertest.cc b/chrome/browser/ui/webui/searchbox/contextual_searchbox_handler_browsertest.cc index e2d7d26..1de061b 100644 --- a/chrome/browser/ui/webui/searchbox/contextual_searchbox_handler_browsertest.cc +++ b/chrome/browser/ui/webui/searchbox/contextual_searchbox_handler_browsertest.cc
@@ -22,17 +22,15 @@ mojo::PendingReceiver<searchbox::mojom::PageHandler> pending_page_handler, Profile* profile, content::WebContents* web_contents, - std::unique_ptr<ComposeboxMetricsRecorder> metrics_recorder, - std::unique_ptr<ContextualSessionService::SessionHandle> - contextual_session_handle) + std::unique_ptr<ComposeboxMetricsRecorder> metrics_recorder) : ContextualSearchboxHandler(std::move(pending_page_handler), profile, web_contents, std::move(metrics_recorder), std::make_unique<OmniboxController>( /*view=*/nullptr, - std::make_unique<TestOmniboxClient>()), - std::move(contextual_session_handle)) {} + std::make_unique<TestOmniboxClient>())) { + } ~TestSearchboxHandler() override = default; @@ -50,8 +48,7 @@ mojo::PendingReceiver<searchbox::mojom::PageHandler>(), browser()->profile(), /*web_contents=*/browser()->tab_strip_model()->GetActiveWebContents(), - /*metrics_recorder=*/nullptr, - /*contextual_session_handle=*/nullptr); + /*metrics_recorder=*/nullptr); handler_->SetPage(page_.BindAndGetRemote()); }
diff --git a/chrome/browser/ui/webui/searchbox/contextual_searchbox_handler_unittest.cc b/chrome/browser/ui/webui/searchbox/contextual_searchbox_handler_unittest.cc index ae511a5..f8f1ea4 100644 --- a/chrome/browser/ui/webui/searchbox/contextual_searchbox_handler_unittest.cc +++ b/chrome/browser/ui/webui/searchbox/contextual_searchbox_handler_unittest.cc
@@ -17,6 +17,7 @@ #include "base/time/time.h" #include "base/unguessable_token.h" #include "base/version_info/channel.h" +#include "chrome/browser/omnibox/contextual_session_web_contents_helper.h" #include "chrome/browser/search_engines/template_url_service_factory.h" #include "chrome/browser/ui/browser_window/public/browser_window_interface.h" #include "chrome/browser/ui/browser_window/test/mock_browser_window_interface.h" @@ -93,17 +94,15 @@ mojo::PendingReceiver<searchbox::mojom::PageHandler> pending_page_handler, Profile* profile, content::WebContents* web_contents, - std::unique_ptr<ComposeboxMetricsRecorder> metrics_recorder, - std::unique_ptr<ContextualSessionService::SessionHandle> - contextual_session_handle) + std::unique_ptr<ComposeboxMetricsRecorder> metrics_recorder) : ContextualSearchboxHandler(std::move(pending_page_handler), profile, web_contents, std::move(metrics_recorder), std::make_unique<OmniboxController>( /*view=*/nullptr, - std::make_unique<TestOmniboxClient>()), - std::move(contextual_session_handle)) {} + std::make_unique<TestOmniboxClient>())) { + } ~FakeContextualSearchboxHandler() override = default; // searchbox::mojom::PageHandler @@ -142,6 +141,9 @@ version_info::Channel::UNKNOWN, "en-US"); auto contextual_session_handle = service_->CreateSessionForTesting(std::move(query_controller_ptr)); + ContextualSessionWebContentsHelper::GetOrCreateForWebContents( + web_contents()) + ->set_session_handle(std::move(contextual_session_handle)); web_contents()->SetDelegate(&delegate_); auto metrics_recorder_ptr = @@ -149,8 +151,7 @@ metrics_recorder_ = metrics_recorder_ptr.get(); handler_ = std::make_unique<FakeContextualSearchboxHandler>( mojo::PendingReceiver<searchbox::mojom::PageHandler>(), profile(), - web_contents(), std::move(metrics_recorder_ptr), - std::move(contextual_session_handle)); + web_contents(), std::move(metrics_recorder_ptr)); handler_->SetPage(mock_searchbox_page_.BindAndGetRemote()); }
diff --git a/chrome/browser/ui/webui/searchbox/realbox_handler.cc b/chrome/browser/ui/webui/searchbox/realbox_handler.cc index aec654d..59185c53e 100644 --- a/chrome/browser/ui/webui/searchbox/realbox_handler.cc +++ b/chrome/browser/ui/webui/searchbox/realbox_handler.cc
@@ -31,12 +31,12 @@ #include "components/omnibox/browser/search_suggestion_parser.h" #include "components/omnibox/browser/suggestion_answer.h" #include "components/omnibox/common/omnibox_features.h" -#include "components/prefs/pref_service.h" +#include "components/omnibox/composebox/contextual_session_service.h" #include "components/profile_metrics/browser_profile_type.h" #include "components/search_engines/template_url_service.h" #include "components/strings/grit/components_strings.h" -#include "net/cookies/cookie_util.h" #include "contextual_searchbox_handler.h" +#include "net/cookies/cookie_util.h" #include "third_party/metrics_proto/omnibox_focus_type.pb.h" #include "third_party/omnibox_proto/types.pb.h" #include "ui/base/webui/resource_path.h" @@ -46,9 +46,7 @@ class RealboxOmniboxClient final : public ContextualOmniboxClient { public: - RealboxOmniboxClient(Profile* profile, content::WebContents* web_contents, - std::unique_ptr<ContextualSessionService::SessionHandle> - contextual_session_handle); + RealboxOmniboxClient(Profile* profile, content::WebContents* web_contents); ~RealboxOmniboxClient() override; // OmniboxClient: @@ -57,12 +55,9 @@ void OnBookmarkLaunched() override; }; -RealboxOmniboxClient::RealboxOmniboxClient( - Profile* profile, content::WebContents* web_contents, - std::unique_ptr<ContextualSessionService::SessionHandle> - contextual_session_handle) - : ContextualOmniboxClient(profile, web_contents, - std::move(contextual_session_handle)) {} +RealboxOmniboxClient::RealboxOmniboxClient(Profile* profile, + content::WebContents* web_contents) + : ContextualOmniboxClient(profile, web_contents) {} RealboxOmniboxClient::~RealboxOmniboxClient() = default; @@ -80,10 +75,6 @@ RealboxHandler::RealboxHandler( mojo::PendingReceiver<searchbox::mojom::PageHandler> pending_page_handler, - std::unique_ptr<ContextualSessionService::SessionHandle> - contextual_session_handle, - std::unique_ptr<ContextualSessionService::SessionHandle> - secondary_contextual_session_handle, std::unique_ptr<ComposeboxMetricsRecorder> composebox_metrics_recorder, Profile* profile, content::WebContents* web_contents) @@ -94,12 +85,8 @@ std::move(composebox_metrics_recorder), std::make_unique<OmniboxController>( /*view=*/nullptr, - std::make_unique<RealboxOmniboxClient>( - profile, - web_contents, - std::move(secondary_contextual_session_handle)), - kAutocompleteDefaultStopTimerDuration), - std::move(contextual_session_handle)) { + std::make_unique<RealboxOmniboxClient>(profile, web_contents), + kAutocompleteDefaultStopTimerDuration)) { autocomplete_controller_observation_.Observe(autocomplete_controller()); }
diff --git a/chrome/browser/ui/webui/searchbox/realbox_handler.h b/chrome/browser/ui/webui/searchbox/realbox_handler.h index 2079a8e..3a35454f 100644 --- a/chrome/browser/ui/webui/searchbox/realbox_handler.h +++ b/chrome/browser/ui/webui/searchbox/realbox_handler.h
@@ -10,7 +10,6 @@ #include "components/omnibox/browser/omnibox_popup_selection.h" #include "components/omnibox/browser/searchbox.mojom.h" #include "components/omnibox/composebox/composebox_metrics_recorder.h" -#include "components/omnibox/composebox/contextual_session_service.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h" @@ -27,10 +26,6 @@ public: RealboxHandler( mojo::PendingReceiver<searchbox::mojom::PageHandler> pending_page_handler, - std::unique_ptr<ContextualSessionService::SessionHandle> - contextual_session_handle, - std::unique_ptr<ContextualSessionService::SessionHandle> - secondary_contextual_session_handle, std::unique_ptr<ComposeboxMetricsRecorder> composebox_metrics_recorder, Profile* profile, content::WebContents* web_contents);
diff --git a/chrome/browser/ui/webui/searchbox/realbox_handler_browsertest.cc b/chrome/browser/ui/webui/searchbox/realbox_handler_browsertest.cc index c6be3cbb..7e915c07 100644 --- a/chrome/browser/ui/webui/searchbox/realbox_handler_browsertest.cc +++ b/chrome/browser/ui/webui/searchbox/realbox_handler_browsertest.cc
@@ -108,8 +108,6 @@ RealboxSearchBrowserTestPage page; RealboxHandler realbox_handler = RealboxHandler(remote_page_handler.BindNewPipeAndPassReceiver(), - /*contextual_session_handle=*/nullptr, - /*secondary_contextual_session_handle=*/nullptr, /*composebox_metrics_recorder=*/nullptr, browser()->profile(), GetWebContents()); realbox_handler.SetPage(page.GetRemotePage()); @@ -238,8 +236,6 @@ InProcessBrowserTest::SetUpOnMainThread(); handler_ = std::make_unique<RealboxHandler>( mojo::PendingReceiver<searchbox::mojom::PageHandler>(), - /*contextual_session_handle=*/nullptr, - /*secondary_contextual_session_handle=*/nullptr, /*composebox_metrics_recorder=*/nullptr, browser()->profile(), /*web_contents=*/browser()->tab_strip_model()->GetActiveWebContents()); handler_->SetPage(page_.BindAndGetRemote());
diff --git a/chrome/browser/ui/webui/searchbox/searchbox_handler_unittest.cc b/chrome/browser/ui/webui/searchbox/searchbox_handler_unittest.cc index 697cf47a..8768f28 100644 --- a/chrome/browser/ui/webui/searchbox/searchbox_handler_unittest.cc +++ b/chrome/browser/ui/webui/searchbox/searchbox_handler_unittest.cc
@@ -103,8 +103,6 @@ content::WebContentsTester::CreateTestWebContents(profile(), nullptr); handler_ = std::make_unique<RealboxHandler>( mojo::PendingReceiver<searchbox::mojom::PageHandler>(), - /*contextual_session_handle=*/nullptr, - /*secondary_contextual_session_handle=*/nullptr, /*composebox_metrics_recorder=*/nullptr, profile(), web_contents_.get()); handler_->SetPage(page_.BindAndGetRemote());
diff --git a/chrome/browser/ui/webui/searchbox/searchbox_omnibox_client.h b/chrome/browser/ui/webui/searchbox/searchbox_omnibox_client.h index c3213d7..ffe0857 100644 --- a/chrome/browser/ui/webui/searchbox/searchbox_omnibox_client.h +++ b/chrome/browser/ui/webui/searchbox/searchbox_omnibox_client.h
@@ -9,8 +9,8 @@ #include "components/omnibox/browser/omnibox_client.h" #include "ui/gfx/vector_icon_types.h" -class Profile; class AutocompleteSchemeClassifier; +class Profile; namespace content { class WebContents; @@ -29,6 +29,8 @@ SearchboxOmniboxClient(Profile* profile, content::WebContents* web_contents); ~SearchboxOmniboxClient() override; + content::WebContents* web_contents() const { return web_contents_; } + // OmniboxClient: std::unique_ptr<AutocompleteProviderClient> CreateAutocompleteProviderClient() override;
diff --git a/chrome/browser/ui/webui/signin/profile_picker_handler.cc b/chrome/browser/ui/webui/signin/profile_picker_handler.cc index 7ef92dd83..d4c39b5 100644 --- a/chrome/browser/ui/webui/signin/profile_picker_handler.cc +++ b/chrome/browser/ui/webui/signin/profile_picker_handler.cc
@@ -38,6 +38,7 @@ #include "chrome/browser/signin/signin_util.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/browser_window.h" +#include "chrome/browser/ui/browser_window/public/browser_window_interface.h" #include "chrome/browser/ui/color/chrome_color_id.h" #include "chrome/browser/ui/profiles/profile_colors_util.h" #include "chrome/browser/ui/profiles/profile_picker.h" @@ -198,7 +199,7 @@ void OpenLearnMoreURL(bool is_profile_list_empty, Browser* browser) { // Browser may be closing if the Profile was locked after being loaded for // example. - if (!browser || browser->IsBrowserClosing()) { + if (!browser || browser->is_delete_scheduled()) { return; }
diff --git a/chrome/browser/ui/webui_browser/webui_browser_browsertest.cc b/chrome/browser/ui/webui_browser/webui_browser_browsertest.cc index 497ee41..eaf2154e 100644 --- a/chrome/browser/ui/webui_browser/webui_browser_browsertest.cc +++ b/chrome/browser/ui/webui_browser/webui_browser_browsertest.cc
@@ -36,27 +36,6 @@ InProcessBrowserTest::SetUpOnMainThread(); } - // Helper function to set up embedded web contents for tests. - // Returns the embedded web contents after it has been converted to a guest. - content::WebContents* SetUpEmbeddedWebContents() { - EXPECT_TRUE(browser()->window()); - - content::WebContents* web_contents = - browser()->tab_strip_model()->GetActiveWebContents(); - EXPECT_TRUE(web_contents); - EXPECT_TRUE(content::WaitForLoadStop(web_contents)); - - // Make sure that the web contents actually got converted to a guest before - // we navigate it again, so that WebContentsViewChildFrame gets involved. - EXPECT_TRUE(base::test::RunUntil( - [web_contents]() { return !!web_contents->GetOuterWebContents(); })); - - GURL url = embedded_https_test_server().GetURL("a.com", "/defaultresponse"); - EXPECT_TRUE(ui_test_utils::NavigateToURL(browser(), url)); - - return web_contents; - } - private: base::test::ScopedFeatureList scoped_feature_list_; }; @@ -109,47 +88,86 @@ #if !BUILDFLAG(IS_CHROMEOS) // Begin security related tests. These tests validate the security // boundary between a GuestContents and the parent. +class WebUIBrowserSecurityTest : public WebUIBrowserTest { + public: + void SetUp() override { WebUIBrowserTest::SetUp(); } + + content::WebContents* GetInnerWebContents() { + if (!inner_webcontents_) { + inner_webcontents_ = SetUpEmbeddedWebContents()->GetWeakPtr(); + } + return inner_webcontents_.get(); + } + + content::WebContents* GetOuterWebContents() { + return GetInnerWebContents()->GetOuterWebContents(); + } + + private: + // Helper function to set up embedded web contents for tests. + // Returns the embedded web contents after it has been converted to a guest. + content::WebContents* SetUpEmbeddedWebContents() { + EXPECT_TRUE(browser()->window()); + + content::WebContents* web_contents = + browser()->tab_strip_model()->GetActiveWebContents(); + EXPECT_TRUE(web_contents); + EXPECT_TRUE(content::WaitForLoadStop(web_contents)); + + // Make sure that the web contents actually got converted to a guest before + // we navigate it again, so that WebContentsViewChildFrame gets involved. + EXPECT_TRUE(base::test::RunUntil( + [web_contents]() { return !!web_contents->GetOuterWebContents(); })); + + GURL url = embedded_https_test_server().GetURL("a.com", "/defaultresponse"); + EXPECT_TRUE(ui_test_utils::NavigateToURL(browser(), url)); + + return web_contents; + } + + base::WeakPtr<content::WebContents> inner_webcontents_; +}; // Test that parent history is not affected by embedded navigation. // The history.length should be independent between inner and outer webcontents. -IN_PROC_BROWSER_TEST_F(WebUIBrowserTest, HistoryLengthIndependent) { - content::WebContents* inner_webcontents = SetUpEmbeddedWebContents(); - EXPECT_EQ(2, EvalJs(inner_webcontents, "window.history.length")); +IN_PROC_BROWSER_TEST_F(WebUIBrowserSecurityTest, HistoryLengthIndependent) { + content::WebContents* outer_webcontents = GetOuterWebContents(); - content::WebContents* outer_webcontents = - inner_webcontents->GetOuterWebContents(); EXPECT_FALSE(outer_webcontents->GetOuterWebContents()); EXPECT_TRUE(outer_webcontents); EXPECT_EQ(1, EvalJs(outer_webcontents, "window.history.length")); + + // Navigate the inner contents another cross origin URL and verify outer + // remains 1. + GURL url = embedded_https_test_server().GetURL("b.com", "/defaultresponse"); + EXPECT_TRUE(ui_test_utils::NavigateToURL(browser(), url)); + EXPECT_EQ(1, EvalJs(outer_webcontents, "window.history.length")); } // Test that the frame tree isolation between inner and outer webcontents. // Neither should include the other in their frames collection. -IN_PROC_BROWSER_TEST_F(WebUIBrowserTest, FramesIndependent) { - content::WebContents* inner_webcontents = SetUpEmbeddedWebContents(); - EXPECT_EQ(0, EvalJs(inner_webcontents, "window.frames.length")); +IN_PROC_BROWSER_TEST_F(WebUIBrowserSecurityTest, FramesIndependent) { + content::WebContents* inner_webcontents = GetInnerWebContents(); + content::WebContents* outer_webcontents = GetOuterWebContents(); - content::WebContents* outer_webcontents = - inner_webcontents->GetOuterWebContents(); + EXPECT_EQ(0, EvalJs(inner_webcontents, "window.frames.length")); EXPECT_EQ(0, EvalJs(outer_webcontents, "window.frames.length")); } // Test that the parent window does not count the embedded content as a frame. // The outer web contents should have window.length = 0 since the embedded // content should not be counted in the parent's frame count. -IN_PROC_BROWSER_TEST_F(WebUIBrowserTest, WindowLengthIndependent) { - content::WebContents* inner_webcontents = SetUpEmbeddedWebContents(); +IN_PROC_BROWSER_TEST_F(WebUIBrowserSecurityTest, WindowLengthIndependent) { + content::WebContents* outer_webcontents = GetOuterWebContents(); - content::WebContents* outer_webcontents = - inner_webcontents->GetOuterWebContents(); EXPECT_EQ(0, EvalJs(outer_webcontents, "window.length")); } // Test that the embedded content acts as top level. // window.top in the embedded content should equal window (itself), // not the actual parent's top-level window. -IN_PROC_BROWSER_TEST_F(WebUIBrowserTest, WindowTopIndependent) { - content::WebContents* inner_webcontents = SetUpEmbeddedWebContents(); +IN_PROC_BROWSER_TEST_F(WebUIBrowserSecurityTest, WindowTopIndependent) { + content::WebContents* inner_webcontents = GetInnerWebContents(); EXPECT_TRUE(EvalJs(inner_webcontents, "window.top === window").ExtractBool()); } @@ -157,8 +175,8 @@ // Test that the embedded content acts as top level. // window.opener should be null since the embedded content should not // have access to the parent that "opened" it. -IN_PROC_BROWSER_TEST_F(WebUIBrowserTest, WindowOpenerIndependent) { - content::WebContents* inner_webcontents = SetUpEmbeddedWebContents(); +IN_PROC_BROWSER_TEST_F(WebUIBrowserSecurityTest, WindowOpenerIndependent) { + content::WebContents* inner_webcontents = GetInnerWebContents(); EXPECT_TRUE( EvalJs(inner_webcontents, "window.opener === null").ExtractBool()); @@ -167,8 +185,8 @@ // Test that the embedded content acts as top level. // window.parent should equal window (itself) since there should be // no accessible parent window from the embedded content's perspective. -IN_PROC_BROWSER_TEST_F(WebUIBrowserTest, WindowParentIndependent) { - content::WebContents* inner_webcontents = SetUpEmbeddedWebContents(); +IN_PROC_BROWSER_TEST_F(WebUIBrowserSecurityTest, WindowParentIndependent) { + content::WebContents* inner_webcontents = GetInnerWebContents(); EXPECT_TRUE( EvalJs(inner_webcontents, "window.parent === window").ExtractBool()); @@ -177,11 +195,66 @@ // Test that the embedded content acts as top level. // window.frameElement should be null since the embedded content should // not appear to be contained within a frame element. -IN_PROC_BROWSER_TEST_F(WebUIBrowserTest, WindowFrameElementIndependent) { - content::WebContents* inner_webcontents = SetUpEmbeddedWebContents(); +IN_PROC_BROWSER_TEST_F(WebUIBrowserSecurityTest, + WindowFrameElementIndependent) { + content::WebContents* inner_webcontents = GetInnerWebContents(); EXPECT_TRUE( EvalJs(inner_webcontents, "window.frameElement === null").ExtractBool()); } +// Test that inner webcontents cannot target outer webcontents +// _parent and _top should all target the inner webcontents itself. +IN_PROC_BROWSER_TEST_F(WebUIBrowserSecurityTest, + WindowOpenTargetingIndependent) { + content::WebContents* inner_webcontents = GetInnerWebContents(); + content::WebContents* outer_webcontents = GetOuterWebContents(); + + // Store current URLs to verify navigation targets + GURL outer_url = outer_webcontents->GetLastCommittedURL(); + + // Test _parent targeting from inner webcontents. + GURL test_url = + embedded_https_test_server().GetURL("b.com", "/defaultresponse"); + EXPECT_TRUE( + ExecJs(inner_webcontents, + content::JsReplace("window.open($1, '_parent')", test_url))); + + // Verify inner webcontents navigated, outer did not. + EXPECT_TRUE(content::WaitForLoadStop(inner_webcontents)); + EXPECT_EQ(inner_webcontents->GetLastCommittedURL().host(), test_url.host()); + EXPECT_EQ(outer_webcontents->GetLastCommittedURL(), outer_url); + + // Test _top + test_url = embedded_https_test_server().GetURL("a.com", "/defaultresponse"); + EXPECT_TRUE(ExecJs(inner_webcontents, + content::JsReplace("window.open($1, '_top')", test_url))); + + // Verify inner webcontents navigated, outer did not. + EXPECT_TRUE(content::WaitForLoadStop(inner_webcontents)); + EXPECT_EQ(inner_webcontents->GetLastCommittedURL().host(), test_url.host()); + EXPECT_EQ(outer_webcontents->GetLastCommittedURL(), outer_url); +} + +// Test that cross-context window references are not useful. +IN_PROC_BROWSER_TEST_F(WebUIBrowserSecurityTest, + WindowOpenReferenceIndependent) { + content::WebContents* inner_webcontents = GetInnerWebContents(); + content::WebContents* outer_webcontents = GetOuterWebContents(); + + // Part 1. outer makes a window, it's not accessible in inner. + EXPECT_TRUE(ExecJs(outer_webcontents, + "window.testWindow = window.open('about:blank')")); + EXPECT_TRUE(EvalJs(outer_webcontents, "window.hasOwnProperty('testWindow')") + .ExtractBool()); + EXPECT_FALSE(EvalJs(inner_webcontents, "window.hasOwnProperty('testWindow')") + .ExtractBool()); + + // Part 2. inner makes a window, it's not accessible in outer. + EXPECT_TRUE(ExecJs(inner_webcontents, + "window.innerWindow = window.open('about:blank')")); + EXPECT_FALSE(EvalJs(outer_webcontents, "window.hasOwnProperty('innerWindow')") + .ExtractBool()); +} + #endif // !BUILDFLAG(IS_CHROMEOS)
diff --git a/chrome/browser/ui/webui_browser/webui_browser_side_panel_ui.cc b/chrome/browser/ui/webui_browser/webui_browser_side_panel_ui.cc index cefa45c1..85277a1 100644 --- a/chrome/browser/ui/webui_browser/webui_browser_side_panel_ui.cc +++ b/chrome/browser/ui/webui_browser/webui_browser_side_panel_ui.cc
@@ -112,15 +112,17 @@ std::optional<SidePanelUtil::SidePanelOpenTrigger> open_trigger, SidePanelEntry* entry, std::optional<std::unique_ptr<views::View>> content_view) { - SidePanelEntry* previous_entry = current_entry().get(); - if (previous_entry) { - previous_entry->OnEntryWillHide(SidePanelEntryHideReason::kReplaced); + if (current_key()) { + SidePanelEntry* previous_entry = GetEntryForUniqueKey(*current_key()); + if (previous_entry) { + previous_entry->OnEntryWillHide(SidePanelEntryHideReason::kReplaced); - // TODO(webium): Call previous_entry->OnEntryHidden() below when the entry - // is swapped. + // TODO(webium): Call previous_entry->OnEntryHidden() below when the entry + // is swapped. - previous_entry->CacheView(std::move(current_side_panel_view_)); - current_side_panel_view_.reset(); + previous_entry->CacheView(std::move(current_side_panel_view_)); + current_side_panel_view_.reset(); + } } current_side_panel_view_ = @@ -132,7 +134,6 @@ views::kDetachedViewFocusManagerKey, GetWebUIBrowserWindow()->widget()->GetFocusManager()); set_current_key(unique_key); - set_current_entry(entry->GetWeakPtr()); GetWebUIBrowserWindow()->ShowSidePanel(entry->key()); if (auto* contextual_registry = GetActiveContextualRegistry()) {
diff --git a/chrome/browser/ui/webui_browser/webui_browser_ui.cc b/chrome/browser/ui/webui_browser/webui_browser_ui.cc index 442cafba..c38c63c 100644 --- a/chrome/browser/ui/webui_browser/webui_browser_ui.cc +++ b/chrome/browser/ui/webui_browser/webui_browser_ui.cc
@@ -137,11 +137,10 @@ content::WebContents* web_contents = webui->GetWebContents(); // TODO(crbug.com/445510209): Pass `metrics_reporter_` after installing a // WebUIOmniboxHandler. - realbox_handler_ = std::make_unique<RealboxHandler>( - std::move(pending_page_handler), /*contextual_session_handle=*/nullptr, - /*secondary_contextual_session_handle=*/nullptr, - /*composebox_metrics_recorder=*/nullptr, Profile::FromWebUI(webui), - web_contents); + realbox_handler_ = + std::make_unique<RealboxHandler>(std::move(pending_page_handler), + /*composebox_metrics_recorder=*/nullptr, + Profile::FromWebUI(webui), web_contents); } void WebUIBrowserUI::BindInterface(
diff --git a/chrome/browser/web_applications/isolated_web_apps/window_management/isolated_web_apps_opened_tabs_counter_service_browsertest.cc b/chrome/browser/web_applications/isolated_web_apps/window_management/isolated_web_apps_opened_tabs_counter_service_browsertest.cc index c7bcf2d..6befc12d 100644 --- a/chrome/browser/web_applications/isolated_web_apps/window_management/isolated_web_apps_opened_tabs_counter_service_browsertest.cc +++ b/chrome/browser/web_applications/isolated_web_apps/window_management/isolated_web_apps_opened_tabs_counter_service_browsertest.cc
@@ -17,6 +17,8 @@ #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/browser_window.h" +#include "chrome/browser/ui/browser_window/public/browser_window_interface.h" +#include "chrome/browser/ui/browser_window/public/desktop_browser_window_capabilities.h" #include "chrome/browser/ui/web_applications/test/isolated_web_app_test_utils.h" #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h" #include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_url_info.h" @@ -342,9 +344,9 @@ IsolatedWebAppsOpenedTabsCounterServiceBrowserTest, ClickCloseWindowsButtonClosesChildWindowsAndNotification) { webapps::AppId app_id = InstallIsolatedWebApp(); - Browser* iwa_browser = OpenIwaWindow(app_id); - content::WebContents* iwa_opener_web_contents = - iwa_browser->tab_strip_model()->GetActiveWebContents(); + BrowserWindowInterface* const iwa_browser = OpenIwaWindow(app_id); + content::WebContents* const iwa_opener_web_contents = + iwa_browser->GetTabStripModel()->GetActiveWebContents(); base::test::TestFuture<void> notification_added_future; display_service_tester_->SetNotificationAddedClosure( @@ -386,7 +388,7 @@ isolated_web_apps_opened_tabs_counter_service_->app_tab_counts_, app_id)); EXPECT_EQ(0u, GetNotificationCount()); - ASSERT_FALSE(iwa_browser->IsBrowserClosing()); + ASSERT_FALSE(iwa_browser->capabilities()->IsAttemptingToCloseBrowser()); } IN_PROC_BROWSER_TEST_F(IsolatedWebAppsOpenedTabsCounterServiceBrowserTest,
diff --git a/chrome/browser/web_applications/os_integration/mac/bundle_info_plist.h b/chrome/browser/web_applications/os_integration/mac/bundle_info_plist.h index 7b77d297..5776a1c8 100644 --- a/chrome/browser/web_applications/os_integration/mac/bundle_info_plist.h +++ b/chrome/browser/web_applications/os_integration/mac/bundle_info_plist.h
@@ -6,12 +6,14 @@ #define CHROME_BROWSER_WEB_APPLICATIONS_OS_INTEGRATION_MAC_BUNDLE_INFO_PLIST_H_ #include <list> +#include <memory> #include <string> #include "base/files/file_path.h" -@class NSDictionary; +#ifdef __OBJC__ @class NSURL; +#endif namespace base { class Version; @@ -36,8 +38,8 @@ // Retrieve info from the specified app shim in `bundle_path`. explicit BundleInfoPlist(const base::FilePath& bundle_path); - BundleInfoPlist(const BundleInfoPlist& other); - BundleInfoPlist& operator=(const BundleInfoPlist& other); + BundleInfoPlist(BundleInfoPlist&& other); + BundleInfoPlist& operator=(BundleInfoPlist&& other); ~BundleInfoPlist(); const base::FilePath& bundle_path() const { return bundle_path_; } @@ -63,14 +65,16 @@ std::string GetBundleId() const; // Given the path to an app bundle, return the URL of the Info.plist file. +#ifdef __OBJC__ static NSURL* GetPlistURL(const base::FilePath& bundle_path); +#endif private: // The path of the app bundle from this this info was read. base::FilePath bundle_path_; - // Data read from the Info.plist. - NSDictionary* __strong plist_; + struct ObjCStorage; + std::unique_ptr<ObjCStorage> objc_storage_; }; } // namespace web_app
diff --git a/chrome/browser/web_applications/os_integration/mac/bundle_info_plist.mm b/chrome/browser/web_applications/os_integration/mac/bundle_info_plist.mm index 60b8e30..e8f0bd23 100644 --- a/chrome/browser/web_applications/os_integration/mac/bundle_info_plist.mm +++ b/chrome/browser/web_applications/os_integration/mac/bundle_info_plist.mm
@@ -23,6 +23,10 @@ namespace web_app { +struct BundleInfoPlist::ObjCStorage { + NSDictionary* __strong plist; +}; + // static std::list<BundleInfoPlist> BundleInfoPlist::GetAllInPath( const base::FilePath& apps_path, @@ -53,7 +57,7 @@ if (!info.IsForCurrentUserDataDir()) { continue; } - infos.push_back(info); + infos.push_back(std::move(info)); } if (!infos.empty()) { return infos; @@ -76,13 +80,15 @@ } BundleInfoPlist::BundleInfoPlist(const base::FilePath& bundle_path) - : bundle_path_(bundle_path) { - plist_ = [NSDictionary dictionaryWithContentsOfURL:GetPlistURL(bundle_path_) - error:nil]; + : bundle_path_(bundle_path), + objc_storage_(std::make_unique<ObjCStorage>()) { + objc_storage_->plist = + [NSDictionary dictionaryWithContentsOfURL:GetPlistURL(bundle_path) + error:nil]; } -BundleInfoPlist::BundleInfoPlist(const BundleInfoPlist& other) = default; -BundleInfoPlist& BundleInfoPlist::operator=(const BundleInfoPlist& other) = - default; + +BundleInfoPlist::BundleInfoPlist(BundleInfoPlist&& other) = default; +BundleInfoPlist& BundleInfoPlist::operator=(BundleInfoPlist&& other) = default; BundleInfoPlist::~BundleInfoPlist() = default; bool BundleInfoPlist::IsForCurrentUserDataDir() const { @@ -90,14 +96,15 @@ base::PathService::Get(chrome::DIR_USER_DATA, &user_data_dir); DCHECK(!user_data_dir.empty()); return base::StartsWith( - base::SysNSStringToUTF8(plist_[app_mode::kCrAppModeUserDataDirKey]), + base::SysNSStringToUTF8( + objc_storage_->plist[app_mode::kCrAppModeUserDataDirKey]), user_data_dir.value(), base::CompareCase::SENSITIVE); } bool BundleInfoPlist::IsForProfile( const base::FilePath& test_profile_path) const { - std::string profile_path = - base::SysNSStringToUTF8(plist_[app_mode::kCrAppModeProfileDirKey]); + std::string profile_path = base::SysNSStringToUTF8( + objc_storage_->plist[app_mode::kCrAppModeProfileDirKey]); return profile_path == test_profile_path.BaseName().value(); } @@ -105,9 +112,9 @@ // Figure out the profile_path. Since the user_data_dir could contain the // path to the web app data dir. base::FilePath user_data_dir = base::apple::NSStringToFilePath( - plist_[app_mode::kCrAppModeUserDataDirKey]); + objc_storage_->plist[app_mode::kCrAppModeUserDataDirKey]); base::FilePath profile_base_name = base::apple::NSStringToFilePath( - plist_[app_mode::kCrAppModeProfileDirKey]); + objc_storage_->plist[app_mode::kCrAppModeProfileDirKey]); if (user_data_dir.DirName().DirName().BaseName() == profile_base_name) { return user_data_dir.DirName().DirName(); } @@ -115,34 +122,39 @@ } std::string BundleInfoPlist::GetExtensionId() const { - return base::SysNSStringToUTF8(plist_[app_mode::kCrAppModeShortcutIDKey]); + return base::SysNSStringToUTF8( + objc_storage_->plist[app_mode::kCrAppModeShortcutIDKey]); } std::string BundleInfoPlist::GetProfileName() const { - return base::SysNSStringToUTF8(plist_[app_mode::kCrAppModeProfileNameKey]); + return base::SysNSStringToUTF8( + objc_storage_->plist[app_mode::kCrAppModeProfileNameKey]); } GURL BundleInfoPlist::GetURL() const { - return GURL( - base::SysNSStringToUTF8(plist_[app_mode::kCrAppModeShortcutURLKey])); + return GURL(base::SysNSStringToUTF8( + objc_storage_->plist[app_mode::kCrAppModeShortcutURLKey])); } std::u16string BundleInfoPlist::GetTitle() const { - return base::SysNSStringToUTF16(plist_[app_mode::kCrAppModeShortcutNameKey]); + return base::SysNSStringToUTF16( + objc_storage_->plist[app_mode::kCrAppModeShortcutNameKey]); } base::Version BundleInfoPlist::GetVersion() const { - NSString* version_string = plist_[app_mode::kCrBundleVersionKey]; + NSString* version_string = + objc_storage_->plist[app_mode::kCrBundleVersionKey]; if (!version_string) { // Older bundles have the Chrome version in the following key. - version_string = plist_[app_mode::kCFBundleShortVersionStringKey]; + version_string = + objc_storage_->plist[app_mode::kCFBundleShortVersionStringKey]; } return base::Version(base::SysNSStringToUTF8(version_string)); } std::string BundleInfoPlist::GetBundleId() const { return base::SysNSStringToUTF8( - plist_[base::apple::CFToNSPtrCast(kCFBundleIdentifierKey)]); + objc_storage_->plist[base::apple::CFToNSPtrCast(kCFBundleIdentifierKey)]); } // static
diff --git a/chrome/browser/web_applications/os_integration/shortcut_sub_manager_unittest.cc b/chrome/browser/web_applications/os_integration/shortcut_sub_manager_unittest.cc index b9e7ebf..b952d34 100644 --- a/chrome/browser/web_applications/os_integration/shortcut_sub_manager_unittest.cc +++ b/chrome/browser/web_applications/os_integration/shortcut_sub_manager_unittest.cc
@@ -249,20 +249,29 @@ std::optional<SkColor> application_menu_icon_color = test_override->GetShortcutIconTopLeftColor( profile(), test_override->application_menu(), app_id, app_name); - EXPECT_TRUE(application_menu_icon_color.has_value()); + if (!application_menu_icon_color) { + ADD_FAILURE() << "Could not get shortcut icon color"; + return SK_ColorTRANSPARENT; + } return application_menu_icon_color.value(); #elif BUILDFLAG(IS_MAC) std::optional<SkColor> icon_color = test_override->GetShortcutIconTopLeftColor( profile(), test_override->chrome_apps_folder(), app_id, app_name); - EXPECT_TRUE(icon_color.has_value()); + if (!icon_color) { + ADD_FAILURE() << "Could not get shortcut icon color"; + return SK_ColorTRANSPARENT; + } return icon_color.value(); #elif BUILDFLAG(IS_LINUX) std::optional<SkColor> icon_color = test_override->GetShortcutIconTopLeftColor( profile(), test_override->desktop(), app_id, app_name, kLauncherIconSize); - EXPECT_TRUE(icon_color.has_value()); + if (!icon_color) { + ADD_FAILURE() << "Could not get shortcut icon color"; + return SK_ColorTRANSPARENT; + } return icon_color.value(); #else NOTREACHED() << "Shortcuts not supported for other OS"; @@ -388,9 +397,6 @@ if (HasShortcutsOsIntegration()) { // Verify shortcut changes for both name and color. -// TODO(crbug.com/40261124): Enable once PList parsing code is added to -// OsIntegrationTestOverride for Mac shortcut checking. -#if !BUILDFLAG(IS_MAC) EXPECT_TRUE(OsIntegrationTestOverrideImpl::Get()->IsShortcutCreated( profile(), app_id, fake_provider().registrar_unsafe().GetAppShortName(app_id))); @@ -398,7 +404,6 @@ GetShortcutColor( app_id, fake_provider().registrar_unsafe().GetAppShortName(app_id)), testing::Eq(SK_ColorBLUE)); -#endif // !BUILDFLAG(IS_MAC) } } @@ -424,12 +429,8 @@ EXPECT_FALSE(os_integration_state->has_shortcut()); if (HasShortcutsOsIntegration()) { -// TODO(crbug.com/40261124): Enable once PList parsing code is added to -// OsIntegrationTestOverride for Mac shortcut checking. -#if !BUILDFLAG(IS_MAC) EXPECT_FALSE(OsIntegrationTestOverrideImpl::Get()->IsShortcutCreated( profile(), app_id, app_name)); -#endif } // This should trigger the application to become fully installed. @@ -445,16 +446,12 @@ EXPECT_TRUE(os_integration_state->has_shortcut()); if (HasShortcutsOsIntegration()) { -// TODO(crbug.com/40261124): Enable once PList parsing code is added to -// OsIntegrationTestOverride for Mac shortcut checking. -#if !BUILDFLAG(IS_MAC) EXPECT_TRUE(OsIntegrationTestOverrideImpl::Get()->IsShortcutCreated( profile(), app_id, app_name)); EXPECT_THAT( GetShortcutColor( app_id, fake_provider().registrar_unsafe().GetAppShortName(app_id)), testing::Eq(SK_ColorRED)); -#endif } // Mimic a 2nd installation with updated icons so that the update flow gets @@ -474,11 +471,9 @@ // Shortcuts should be created now. if (HasShortcutsOsIntegration()) { EXPECT_TRUE(os_integration_state->has_shortcut()); -// TODO(crbug.com/40261124): Enable once PList parsing code is added to -// OsIntegrationTestOverride for Mac shortcut checking. // TODO(crbug.com/339024222): The color doesn't correctly update to yellow on // windows. -#if !BUILDFLAG(IS_MAC) && !BUILDFLAG(IS_WIN) +#if !BUILDFLAG(IS_WIN) EXPECT_TRUE(OsIntegrationTestOverrideImpl::Get()->IsShortcutCreated( profile(), expected_app_id, fake_provider().registrar_unsafe().GetAppShortName(expected_app_id)));
diff --git a/chrome/browser/web_applications/test/os_integration_test_override_impl.cc b/chrome/browser/web_applications/test/os_integration_test_override_impl.cc index f33b631..20cdded 100644 --- a/chrome/browser/web_applications/test/os_integration_test_override_impl.cc +++ b/chrome/browser/web_applications/test/os_integration_test_override_impl.cc
@@ -57,6 +57,8 @@ #include "base/files/scoped_temp_dir.h" #include "chrome/browser/shell_integration.h" #include "chrome/browser/web_applications/os_integration/mac/app_shim_registry.h" +#include "chrome/browser/web_applications/os_integration/mac/bundle_info_plist.h" +#include "chrome/browser/web_applications/os_integration/mac/web_app_shortcut_mac.h" #include "net/base/filename_util.h" #import "skia/ext/skia_utils_mac.h" #endif @@ -531,21 +533,22 @@ } } #elif BUILDFLAG(IS_MAC) - std::string shortcut_filename = app_name + ".app"; - base::FilePath shortcut_path = shortcut_dir.Append(shortcut_filename); - // Exits early if the app id is empty because the verification won't work. - // TODO(crbug.com/40212146): Figure a way to find the profile that has the app - // installed without using app ID. - if (app_id.empty()) { - return shortcut_path; - } - AppShimRegistry* registry = AppShimRegistry::Get(); std::set<base::FilePath> app_installed_profiles = registry->GetInstalledProfilesForApp(app_id); - if (app_installed_profiles.find(profile->GetPath()) != + if (app_installed_profiles.find(profile->GetPath()) == app_installed_profiles.end()) { - return shortcut_path; + return base::FilePath(); + } + + std::string bundle_id = GetBundleIdentifierForShim(app_id); + auto bundles = BundleInfoPlist::SearchForBundlesById(bundle_id, shortcut_dir); + // `SearchForBundlesById` can find bundles in multiple locations. For this + // test, only the bundle in the given `shortcut_dir` is desired. + for (const auto& bundle : bundles) { + if (bundle.bundle_path().DirName() == shortcut_dir) { + return bundle.bundle_path(); + } } #elif BUILDFLAG(IS_LINUX) std::string shortcut_filename =
diff --git a/chrome/browser/web_applications/web_app_link_capturing_parameterized_browsertest.cc b/chrome/browser/web_applications/web_app_link_capturing_parameterized_browsertest.cc index c3ebbc9..11a9ff1 100644 --- a/chrome/browser/web_applications/web_app_link_capturing_parameterized_browsertest.cc +++ b/chrome/browser/web_applications/web_app_link_capturing_parameterized_browsertest.cc
@@ -56,6 +56,7 @@ #include "chrome/browser/web_applications/link_capturing_features.h" #include "chrome/browser/web_applications/mojom/user_display_mode.mojom.h" #include "chrome/browser/web_applications/navigation_capturing_metrics.h" +#include "chrome/browser/web_applications/scope_extension_info.h" #include "chrome/browser/web_applications/test/os_integration_test_override_impl.h" #include "chrome/browser/web_applications/test/web_app_install_test_utils.h" #include "chrome/browser/web_applications/web_app_command_scheduler.h" @@ -90,6 +91,7 @@ #include "third_party/liburlpattern/pattern.h" #include "ui/base/window_open_disposition.h" #include "url/gurl.h" +#include "url/origin.h" namespace web_app { @@ -103,6 +105,8 @@ "/banners/link_capturing/scope_b/destination.html"; constexpr char kDestinationPageScopeB2[] = "/banners/link_capturing/scope_b/destination2.html"; +constexpr char kDestinationPageScopeBExtended[] = + "/banners/link_capturing/scope_b_extended/destination.html"; constexpr char kDestinationPageScopeX[] = "/banners/link_capturing/scope_x/destination.html"; constexpr char kLinkCaptureTestInputPathPrefix[] = "chrome/test/data/web_apps/"; @@ -110,6 +114,7 @@ constexpr char kValueScopeA2A[] = "A_TO_A"; constexpr char kValueScopeA2B[] = "A_TO_B"; constexpr char kValueScopeA2B2[] = "A_TO_B2"; +constexpr char kValueScopeA2BExtended[] = "A_TO_B_EXTENDED"; constexpr char kValueScopeA2X[] = "A_TO_X"; constexpr char kValueLink[] = "LINK"; constexpr char kValueButton[] = "BTN"; @@ -203,6 +208,7 @@ kScopeA2A, kScopeA2B, kScopeA2B2, + kScopeA2BExtended, kScopeA2X, }; @@ -214,6 +220,8 @@ return kValueScopeA2B; case Destination::kScopeA2B2: return kValueScopeA2B2; + case Destination::kScopeA2BExtended: + return kValueScopeA2BExtended; case Destination::kScopeA2X: return kValueScopeA2X; } @@ -227,6 +235,8 @@ return "ScopeA2B"; case Destination::kScopeA2B2: return "ScopeA2B2"; + case Destination::kScopeA2BExtended: + return "ScopeA2BExtended"; case Destination::kScopeA2X: return "ScopeA2X"; } @@ -826,6 +836,9 @@ enabled_features.emplace_back( features::kPwaNavigationCapturing, base::FieldTrialParams({{"link_capturing_state", mode}})); + enabled_features.emplace_back( + features::kPwaNavigationCapturingWithScopeExtensions, + base::FieldTrialParams()); scoped_feature_list_.InitWithFeaturesAndParameters( /*enabled_features=*/enabled_features, /*disabled_features=*/{}); @@ -1333,6 +1346,11 @@ return embedded_test_server()->GetURL(kDestinationPageScopeB2); } + GURL GetDestinationUrlPageBExtended() const { + return embedded_https_test_server().GetURL("example.com", + kDestinationPageScopeBExtended); + } + GURL GetDestinationUrlPageX() const { return embedded_test_server()->GetURL(kDestinationPageScopeX); } @@ -1345,6 +1363,8 @@ return GetDestinationUrlPageB(); case Destination::kScopeA2B2: return GetDestinationUrlPageB2(); + case Destination::kScopeA2BExtended: + return GetDestinationUrlPageBExtended(); case Destination::kScopeA2X: return GetDestinationUrlPageX(); } @@ -1415,6 +1435,12 @@ web_app_info->tab_strip = blink::Manifest::TabStrip(); web_app_info->tab_strip->home_tab = home_tab_params; } + if (start_url == GetDestinationUrlPageB() && + GetDestination() == Destination::kScopeA2BExtended) { + web_app_info->scope_extensions.insert( + ScopeExtensionInfo::CreateForScope(GetDestinationUrlPageBExtended())); + web_app_info->validated_scope_extensions = web_app_info->scope_extensions; + } const webapps::AppId app_id = test::InstallWebApp(profile(), std::move(web_app_info)); apps::AppReadinessWaiter(profile(), app_id).Await(); @@ -1446,6 +1472,10 @@ &NavCaptureParameterizedBrowserTest::SimulateRedirectHandler, base::Unretained(this))); ASSERT_TRUE(embedded_test_server()->Start()); + embedded_https_test_server().RegisterRequestHandler(base::BindRepeating( + &NavCaptureParameterizedBrowserTest::SimulateRedirectHandler, + base::Unretained(this))); + ASSERT_TRUE(embedded_https_test_server().Start()); NotificationPermissionContext::UpdatePermission( profile(), embedded_test_server()->GetOrigin().GetURL(), @@ -1703,6 +1733,15 @@ // Ensure that all `WebContents` has finished loading. test::CompletePageLoadForAllWebContents(); + if (GetDestination() == Destination::kScopeA2BExtended) { + const url::Origin dest_b_extended_origin = + url::Origin::Create(GetDestinationUrlPageBExtended()); + ASSERT_TRUE(content::ExecJs( + contents_a, + base::StrCat({"updateDestinationBExtendedOrigin('", + dest_b_extended_origin.Serialize(), "')"}))); + } + DLOG(INFO) << "Performing action."; action_histogram_tester_ = std::make_unique<base::HistogramTester>(); @@ -2450,6 +2489,24 @@ testing::Values(NavigationTarget::kSelf, NavigationTarget::kBlank)), LinkCaptureTestParamToString); +// Scope extensions related tests +INSTANTIATE_TEST_SUITE_P( + ScopeExtensions, + NavCaptureParameterizedBrowserTest, + testing::Combine(testing::Values(ClientModeCombination::kAuto), + testing::Values(AppUserDisplayMode::kBothStandalone), + testing::Values(LinkCapturing::kEnabled), + testing::Values(StartingPoint::kTab), + testing::Values(Destination::kScopeA2BExtended), + testing::Values(RedirectType::kNone, + RedirectType::kServerSideViaB, + RedirectType::kServerSideViaX), + testing::Values(NavigationElement::kElementLink), + testing::Values(test::ClickMethod::kLeftClick), + testing::Values(OpenerMode::kNoOpener), + testing::Values(NavigationTarget::kBlank)), + LinkCaptureTestParamToString); + // This is a derived test fixture that allows us to test Navigation Capturing // code that relies on an app being launched in the background, so we can // test e.g. FocusExisting functionality. This additional step is performed
diff --git a/chrome/build/android-arm32.pgo.txt b/chrome/build/android-arm32.pgo.txt index 9e6f601..b3cfc82f 100644 --- a/chrome/build/android-arm32.pgo.txt +++ b/chrome/build/android-arm32.pgo.txt
@@ -1 +1 @@ -chrome-android32-main-1760356796-ed98a872f013b30046eacdaca65e7f5f6858641a-798e070c8b744fce2dd14a1c8427d8382a86b809.profdata +chrome-android32-main-1760378365-2c913f2d9eeb8cbb2609db09abe257dc3e5b7fdf-e567cd9c4dbbe931061d987bd48a31c3fbafcbcc.profdata
diff --git a/chrome/build/android-arm64.pgo.txt b/chrome/build/android-arm64.pgo.txt index c14399ae..733cdd2 100644 --- a/chrome/build/android-arm64.pgo.txt +++ b/chrome/build/android-arm64.pgo.txt
@@ -1 +1 @@ -chrome-android64-main-1760363828-a032d14703050d9e13ac285044f867565a7d17be-6a8871b2d4fc05b72ac667dd622e21e288057ae4.profdata +chrome-android64-main-1760383358-8c2fee3348cf030ad8fa7236ace524c7b9f6875a-b1b484662814112f83b5e892d106d393905ec8ad.profdata
diff --git a/chrome/build/android-desktop-x64.pgo.txt b/chrome/build/android-desktop-x64.pgo.txt index 7b0568f..8573f601 100644 --- a/chrome/build/android-desktop-x64.pgo.txt +++ b/chrome/build/android-desktop-x64.pgo.txt
@@ -1 +1 @@ -chrome-android-desktop-x64-main-1760356796-d3c8be594b4f5b85763a26a12f0fb0c63a11a072-798e070c8b744fce2dd14a1c8427d8382a86b809.profdata +chrome-android-desktop-x64-main-1760378365-dfd595568cdbd50f8ded8a003210f6ea2ad231ee-e567cd9c4dbbe931061d987bd48a31c3fbafcbcc.profdata
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index 45885b09..e1fe464 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-main-1760356796-b745daa224a368c34fea58b4114ad20b8f70f512-798e070c8b744fce2dd14a1c8427d8382a86b809.profdata +chrome-linux-main-1760378365-f073e5166dd74bf50fe7006777c8e54d2ea026b1-e567cd9c4dbbe931061d987bd48a31c3fbafcbcc.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt index 89f18bbb..81e9148 100644 --- a/chrome/build/mac-arm.pgo.txt +++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@ -chrome-mac-arm-main-1760371097-09f6c1c184a5ae1b0b690580b2278483a6ec5a26-4cbdbbf4c6f2ceeea9a71f21dcca435f7335c709.profdata +chrome-mac-arm-main-1760385577-5f56775c05569df114564e66da8870c655bb7f29-ea388032d1311d24ca8edfffd8fd28a272d7a026.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index 0c89fa1..09ba3e4 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-main-1760356796-691246375a49fcc3648f407c68062c8954375555-798e070c8b744fce2dd14a1c8427d8382a86b809.profdata +chrome-mac-main-1760378365-99b7da98f8221916bf4367624bf215a8fc4924df-e567cd9c4dbbe931061d987bd48a31c3fbafcbcc.profdata
diff --git a/chrome/build/win-arm64.pgo.txt b/chrome/build/win-arm64.pgo.txt index 9e62e4317..e13b979 100644 --- a/chrome/build/win-arm64.pgo.txt +++ b/chrome/build/win-arm64.pgo.txt
@@ -1 +1 @@ -chrome-win-arm64-main-1758693376-1940a11ef9cfe1538d7dfb3e4c1f721e3173b8ab-53fab56d338a7984a7d12554ffd25f0f93972cb0.profdata \ No newline at end of file +chrome-win-arm64-main-1760378365-e165db1d2022665bb6398bbd5712f8d4d0b4bb64-e567cd9c4dbbe931061d987bd48a31c3fbafcbcc.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index 59ddac7..176950f 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1760345802-cb6afcc3fc3f520772270187f86ba1127e2c96dc-2e45a9f756c7a37a09de2f9a0e34fccfbef1bef1.profdata +chrome-win32-main-1760356796-f88e0be6fa6dcd31c982b91d3fd29ae503a4e8eb-798e070c8b744fce2dd14a1c8427d8382a86b809.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index 7013f41..040751c 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1760345802-29ddf81223c4af612ea8a7ccda8a8ddd6703571b-2e45a9f756c7a37a09de2f9a0e34fccfbef1bef1.profdata +chrome-win64-main-1760356796-4981edeed591bc576170e89bed76b888f75a4c73-798e070c8b744fce2dd14a1c8427d8382a86b809.profdata
diff --git a/chrome/renderer/accessibility/read_anything/read_anything_app_controller_browsertest.cc b/chrome/renderer/accessibility/read_anything/read_anything_app_controller_browsertest.cc index fee0176..d94c48e 100644 --- a/chrome/renderer/accessibility/read_anything/read_anything_app_controller_browsertest.cc +++ b/chrome/renderer/accessibility/read_anything/read_anything_app_controller_browsertest.cc
@@ -1505,8 +1505,6 @@ TEST_F(ReadAnythingAppControllerTest, Draw_RecomputeDisplayNodes) { ui::AXNodeData node; node.id = 4; - controller().InitAXPositionWithNode(node.id); - EXPECT_TRUE(controller().IsSpeechTreeInitialized()); // This update changes the structure of the tree. When the controller receives // it in AccessibilityEventReceived, it will re-distill the tree. @@ -1514,7 +1512,6 @@ model().Reset({3, 4}); controller().Draw(/* recompute_display_nodes= */ true); - EXPECT_FALSE(controller().IsSpeechTreeInitialized()); EXPECT_TRUE(base::Contains(model().display_node_ids(), 1)); EXPECT_FALSE(base::Contains(model().display_node_ids(), 2)); EXPECT_TRUE(base::Contains(model().display_node_ids(), 3)); @@ -2269,31 +2266,6 @@ Mock::VerifyAndClearExpectations(distiller_); } -TEST_F(ReadAnythingAppControllerTest, DrawSelection_ResetsReadAloudState) { - ui::AXNodeData node1 = test::TextNode(/* id= */ 2, u"Not like you- "); - ui::AXNodeData node2 = - test::TextNode(/* id= */ 3, u" you lost your nerve, you lost the game."); - SendUpdateWithNodes({std::move(node1), std::move(node2)}); - - // Initialize read aloud state. - controller().InitAXPositionWithNode(2); - EXPECT_TRUE(controller().IsSpeechTreeInitialized()); - - // Create a selection from node 2-3. This will trigger DrawSelection. - ui::AXTreeUpdate update; - test::SetUpdateTreeID(&update, tree_id_); - update.has_tree_data = true; - update.tree_data.sel_anchor_object_id = 2; - update.tree_data.sel_focus_object_id = 3; - update.tree_data.sel_anchor_offset = 1; - update.tree_data.sel_focus_offset = 3; - update.tree_data.sel_is_backward = false; - AccessibilityEventReceived({std::move(update)}); - - // After a selection, the read aloud state should be reset. - EXPECT_FALSE(controller().IsSpeechTreeInitialized()); -} - TEST_F(ReadAnythingAppControllerTest, OnSelectionChange_ClickAfterClickDoesNotUpdateSelection) { ui::AXNodeData node1 = test::TextNode(/* id= */ 2); @@ -3957,6 +3929,63 @@ EXPECT_EQ(0, model().words_heard()); } +class ReadAnythingAppControllerV8SegmentationTest + : public ReadAnythingAppControllerTest { + public: + void SetUp() override { + ReadAnythingAppControllerTest::SetUp(); + scoped_feature_list_.Reset(); + scoped_feature_list_.InitWithFeatures( + {features::kReadAnythingReadAloud}, + {features::kReadAnythingReadAloudTSTextSegmentation}); + } +}; +TEST_F(ReadAnythingAppControllerV8SegmentationTest, + DrawSelection_ResetsReadAloudState) { + ui::AXNodeData node1 = test::TextNode(/* id= */ 2, u"Not like you- "); + ui::AXNodeData node2 = test::TextNode( + /* id= */ 3, u" you lost your nerve, you lost the game."); + SendUpdateWithNodes({std::move(node1), std::move(node2)}); + + // Initialize read aloud state. + controller().InitAXPositionWithNode(2); + EXPECT_TRUE(controller().IsSpeechTreeInitialized()); + + // Create a selection from node 2-3. This will trigger DrawSelection. + ui::AXTreeUpdate update; + test::SetUpdateTreeID(&update, tree_id_); + update.has_tree_data = true; + update.tree_data.sel_anchor_object_id = 2; + update.tree_data.sel_focus_object_id = 3; + update.tree_data.sel_anchor_offset = 1; + update.tree_data.sel_focus_offset = 3; + update.tree_data.sel_is_backward = false; + AccessibilityEventReceived({std::move(update)}); + + // After a selection, the read aloud state should be reset. + EXPECT_FALSE(controller().IsSpeechTreeInitialized()); +} + +TEST_F(ReadAnythingAppControllerV8SegmentationTest, + Draw_RecomputeDisplayNodes) { + ui::AXNodeData node; + node.id = 4; + controller().InitAXPositionWithNode(node.id); + EXPECT_TRUE(controller().IsSpeechTreeInitialized()); + + // This update changes the structure of the tree. When the controller + // receives it in AccessibilityEventReceived, it will re-distill the tree. + SendUpdateWithNodes({std::move(node)}); + model().Reset({3, 4}); + controller().Draw(/* recompute_display_nodes= */ true); + + EXPECT_FALSE(controller().IsSpeechTreeInitialized()); + EXPECT_TRUE(base::Contains(model().display_node_ids(), 1)); + EXPECT_FALSE(base::Contains(model().display_node_ids(), 2)); + EXPECT_TRUE(base::Contains(model().display_node_ids(), 3)); + EXPECT_TRUE(base::Contains(model().display_node_ids(), 4)); +} + class ReadAnythingAppControllerScreen2xDataCollectionModeTest : public ReadAnythingAppControllerTest { public:
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 875be4a..ca68bda1 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -6393,7 +6393,6 @@ "../browser/collaboration/messaging/messaging_backend_service_factory_unittest.cc", "../browser/command_updater_impl_unittest.cc", "../browser/commerce/product_specifications/product_specifications_service_factory_unittest.cc", - "../browser/complex_tasks/task_tab_helper_unittest.cc", "../browser/component_updater/afp_blocked_domain_list_component_installer_unittest.cc", "../browser/component_updater/chrome_component_updater_configurator_unittest.cc", "../browser/component_updater/cookie_readiness_list_component_installer_unittest.cc", @@ -6907,6 +6906,7 @@ "//chrome/browser/chooser_controller:unit_tests", "//chrome/browser/commerce", "//chrome/browser/commerce:unit_tests", + "//chrome/browser/complex_tasks:unit_tests", "//chrome/browser/content_extraction", "//chrome/browser/content_settings", "//chrome/browser/content_settings:content_settings_factory",
diff --git a/chrome/test/data/banners/link_capturing/scope_a/start.html b/chrome/test/data/banners/link_capturing/scope_a/start.html index 93b59e47..443c2a02 100644 --- a/chrome/test/data/banners/link_capturing/scope_a/start.html +++ b/chrome/test/data/banners/link_capturing/scope_a/start.html
@@ -49,8 +49,18 @@ let aDestinationUrl = new URL("destination.html", window.location.href).href; let bDestinationUrl = new URL("../scope_b/destination.html", window.location.href).href; let b2DestinationUrl = new URL("../scope_b/destination2.html", window.location.href).href; + let bExtendedDestinationUrl = new URL("../scope_b_extended/destination.html", window.location.href).href; let xDestinationUrl = new URL("../scope_x/destination.html", window.location.href).href; + function updateDestinationBExtendedOrigin(origin) { + const path = new URL(bExtendedDestinationUrl).pathname; + bExtendedDestinationUrl = new URL(path, origin).href; + let links = document.querySelectorAll('a.destinationBExtended'); + for (let link of links) { + link.setAttribute('href', getDestinationForElementClass(link)); + } + } + function triggerNotificationForUrlOpen(url) { console.assert(serviceWorkerRegistration); console.assert(url); @@ -124,6 +134,9 @@ if (element.classList.contains('destinationB')) { return bDestinationUrl; } + if (element.classList.contains('destinationBExtended')) { + return bExtendedDestinationUrl; + } console.assert(element.classList.contains('destinationX')); return xDestinationUrl; } @@ -137,7 +150,7 @@ // listeners for the buttons. var links = document.querySelectorAll( - 'a.destinationA, a.destinationB, a.destinationX, a.destinationB2'); + 'a.destinationA, a.destinationB, a.destinationX, a.destinationB2, a.destinationBExtended'); for (let link of links) { link.setAttribute('href', getDestinationForElementClass(link)); link.addEventListener("click", addModifierToTargetElementHref.bind(this, link)); @@ -167,7 +180,8 @@ console.log('button ' + button.id + ' clicked, dest ' + url); if (rel) { window.open(url, target, rel); - } else { + } + else { window.open(url, target); } }); @@ -224,6 +238,7 @@ <a target="_blank" rel="noopener" id="id-LINK-A_TO_B-BLANK-NO_OPENER" class="destinationB">target="_blank" rel=noopener</a><br> <a target="noframe" rel="opener" id="id-LINK-A_TO_B-NO_FRAME-OPENER" class="destinationB">target="noframe" rel=opener</a><br> <a target="noframe" rel="noopener" id="id-LINK-A_TO_B-NO_FRAME-NO_OPENER" class="destinationB">target="noframe" rel=noopener</a><br> +<a target="_blank" rel="noopener" id="id-LINK-A_TO_B_EXTENDED-BLANK-NO_OPENER" class="destinationBExtended">target="_blank" rel=noopener</a><br> <!-- Form POST submissions. `action` is populated programmatically. --> <form method="post" class="destinationB" target="_blank" rel="opener"><input type="text" id="test" name="test_key"
diff --git a/chrome/test/data/banners/link_capturing/scope_b_extended/destination.html b/chrome/test/data/banners/link_capturing/scope_b_extended/destination.html new file mode 100644 index 0000000..980a15f --- /dev/null +++ b/chrome/test/data/banners/link_capturing/scope_b_extended/destination.html
@@ -0,0 +1,15 @@ +<html> + +<head> + <title>Web app scope_b_extended test page for link capturing tests</title> + <script src="../launch_detector.js"></script> +</head> + +<body onload="_signalNavigationCompleteAndListenForNextLaunch(/*delay=*/ 0); _showParams(location.search);"> + <!-- Use `delay` to slow down execution of the test (so that you can + see what is happening during manual runs). --> + <h1>Destination in scope B Extended</h1> + <pre id="debug"></pre> +</body> + +</html>
diff --git a/chrome/test/data/web_apps/navigation_capture_expectations_BothStandalone_CaptureOn.json b/chrome/test/data/web_apps/navigation_capture_expectations_BothStandalone_CaptureOn.json index 5f37e15..f8f2a750 100644 --- a/chrome/test/data/web_apps/navigation_capture_expectations_BothStandalone_CaptureOn.json +++ b/chrome/test/data/web_apps/navigation_capture_expectations_BothStandalone_CaptureOn.json
@@ -12787,6 +12787,126 @@ "redirection_result": [ "NotHandled" ] } }, + "Tab_ScopeA2BExtended_Direct_ViaLink_LeftClick_WithoutOpener_TargetBlank": { + "_params": "BothStandalone_CaptureOn_Tab_ScopeA2BExtended_Direct_ViaLink_LeftClick_WithoutOpener_TargetBlank", + "disabled": false, + "expected_state": { + "browsers": [ { + "browser_type": "TYPE_NORMAL", + "tabs": [ { + "active": true, + "current_url": "/banners/link_capturing/scope_a/start.html", + "frames": [ { + "current_url": "blank", + "frame_name": "iframe" + } ], + "history": [ { + "transition": "auto_toplevel", + "url": "blank" + }, { + "transition": "typed", + "url": "/banners/link_capturing/scope_a/start.html" + } ] + } ] + }, { + "app_scope": "/banners/link_capturing/scope_b/", + "browser_type": "TYPE_APP", + "tabs": [ { + "active": true, + "current_url": "/banners/link_capturing/scope_b_extended/destination.html?id-LINK-A_TO_B_EXTENDED-BLANK-NO_OPENER&click=Left", + "history": [ { + "referrer": "/", + "transition": "link", + "url": "/banners/link_capturing/scope_b_extended/destination.html?id-LINK-A_TO_B_EXTENDED-BLANK-NO_OPENER&click=Left" + } ], + "launchParams": [ "/banners/link_capturing/scope_b_extended/destination.html?id-LINK-A_TO_B_EXTENDED-BLANK-NO_OPENER&click=Left" ] + } ] + } ], + "launch_metric_buckets": [ "kFromNavigationCapturing" ], + "navigation_capturing_result": [ "NewAppWindow" ], + "redirection_result": [ "NotHandled" ] + } + }, + "Tab_ScopeA2BExtended_ServerSideViaB_ViaLink_LeftClick_WithoutOpener_TargetBlank": { + "_params": "BothStandalone_CaptureOn_Tab_ScopeA2BExtended_ServerSideViaB_ViaLink_LeftClick_WithoutOpener_TargetBlank", + "disabled": false, + "expected_state": { + "browsers": [ { + "browser_type": "TYPE_NORMAL", + "tabs": [ { + "active": true, + "current_url": "/banners/link_capturing/scope_a/start.html", + "frames": [ { + "current_url": "blank", + "frame_name": "iframe" + } ], + "history": [ { + "transition": "auto_toplevel", + "url": "blank" + }, { + "transition": "typed", + "url": "/banners/link_capturing/scope_a/start.html" + } ] + } ] + }, { + "app_scope": "/banners/link_capturing/scope_b/", + "browser_type": "TYPE_APP", + "tabs": [ { + "active": true, + "current_url": "/banners/link_capturing/scope_b_extended/destination.html?id-LINK-A_TO_B-BLANK-NO_OPENER&click=Left&did_redirect", + "history": [ { + "referrer": "/", + "transition": "link", + "url": "/banners/link_capturing/scope_b_extended/destination.html?id-LINK-A_TO_B-BLANK-NO_OPENER&click=Left&did_redirect" + } ], + "launchParams": [ "/banners/link_capturing/scope_b_extended/destination.html?id-LINK-A_TO_B-BLANK-NO_OPENER&click=Left&did_redirect" ] + } ] + } ], + "launch_metric_buckets": [ "kFromNavigationCapturing" ], + "navigation_capturing_result": [ "NewAppWindow" ], + "redirection_result": [ "SameContext" ] + } + }, + "Tab_ScopeA2BExtended_ServerSideViaX_ViaLink_LeftClick_WithoutOpener_TargetBlank": { + "_params": "BothStandalone_CaptureOn_Tab_ScopeA2BExtended_ServerSideViaX_ViaLink_LeftClick_WithoutOpener_TargetBlank", + "disabled": false, + "expected_state": { + "browsers": [ { + "browser_type": "TYPE_NORMAL", + "tabs": [ { + "active": true, + "current_url": "/banners/link_capturing/scope_a/start.html", + "frames": [ { + "current_url": "blank", + "frame_name": "iframe" + } ], + "history": [ { + "transition": "auto_toplevel", + "url": "blank" + }, { + "transition": "typed", + "url": "/banners/link_capturing/scope_a/start.html" + } ] + } ] + }, { + "app_scope": "/banners/link_capturing/scope_b/", + "browser_type": "TYPE_APP", + "tabs": [ { + "active": true, + "current_url": "/banners/link_capturing/scope_b_extended/destination.html?id-LINK-A_TO_X-BLANK-NO_OPENER&click=Left&did_redirect", + "history": [ { + "referrer": "/", + "transition": "link", + "url": "/banners/link_capturing/scope_b_extended/destination.html?id-LINK-A_TO_X-BLANK-NO_OPENER&click=Left&did_redirect" + } ], + "launchParams": [ "/banners/link_capturing/scope_b_extended/destination.html?id-LINK-A_TO_X-BLANK-NO_OPENER&click=Left&did_redirect" ] + } ] + } ], + "launch_metric_buckets": [ "kFromNavigationCapturing" ], + "navigation_capturing_result": [ "NewTabRedirectionEligible" ], + "redirection_result": [ "AppWindowOpened" ] + } + }, "Tab_ScopeA2B_Direct_ViaButton_LeftClick_WithOpener_TargetBlank": { "_params": "BothStandalone_CaptureOn_Tab_ScopeA2B_Direct_ViaButton_LeftClick_WithOpener_TargetBlank", "disabled": false,
diff --git a/chrome/test/data/webui/cr_components/searchbox/searchbox_test.ts b/chrome/test/data/webui/cr_components/searchbox/searchbox_test.ts index 0668163..6f6177f 100644 --- a/chrome/test/data/webui/cr_components/searchbox/searchbox_test.ts +++ b/chrome/test/data/webui/cr_components/searchbox/searchbox_test.ts
@@ -3076,6 +3076,43 @@ // so check the default behavior occurs (deleting a character). assertFalse(backspaceEvent.defaultPrevented); }); + suite('NtpRealboxNext', () => { + test( + 'fires dropdown-visible-changed event when the feature is on', + async () => { + realbox.ntpRealboxNextEnabled = true; + // Confirm false -> true causes an event. + let whenDropdownVisibleChanged = + eventToPromise('dropdown-visible-changed', realbox); + realbox.$.input.value = 'he'; + realbox.$.input.dispatchEvent(new InputEvent('input')); + + const matches = [createSearchMatch()]; + testProxy.callbackRouterRemote.autocompleteResultChanged( + createAutocompleteResult({ + input: realbox.$.input.value.trimStart(), + matches: matches, + })); + assertTrue(await areMatchesShowing()); + const e1 = await whenDropdownVisibleChanged; + assertTrue(e1.detail.value); + + // Confirm true -> false causes an event. + whenDropdownVisibleChanged = + eventToPromise('dropdown-visible-changed', realbox); + // Pressing 'Escape' when no matches are selected closes the dropdown. + const escapeEvent = new KeyboardEvent('keydown', { + bubbles: true, + cancelable: true, + composed: true, // So it propagates across shadow DOM boundary. + key: 'Escape', + }); + realbox.$.input.dispatchEvent(escapeEvent); + assertFalse(await areMatchesShowing()); + const e2 = await whenDropdownVisibleChanged; + assertFalse(e2.detail.value); + }); + }); }); suite('PlaceholderTextCyclerTest', () => {
diff --git a/chrome/test/data/webui/glic/browser_tests/browser_test_base.ts b/chrome/test/data/webui/glic/browser_tests/browser_test_base.ts index 156aba8..fe64b07 100644 --- a/chrome/test/data/webui/glic/browser_tests/browser_test_base.ts +++ b/chrome/test/data/webui/glic/browser_tests/browser_test_base.ts
@@ -97,6 +97,7 @@ onNotifyPanelWasClosed: () => void = () => {}; panelOpenState = ObservableValue.withValue<boolean>(false); panelOpenStateKind = ObservableValue.withNoValue<PanelStateKind>(); + panelOpenData = ObservableValue.withNoValue<PanelOpeningData>(); async initialize(glicBrowserHost: GlicBrowserHost): Promise<void> { this.host = glicBrowserHost; @@ -108,6 +109,7 @@ this.panelOpenState.assignAndSignal(true); this.panelOpenStateKind.assignAndSignal( checkDefined(panelOpeningData.panelState?.kind)); + this.panelOpenData.assignAndSignal(panelOpeningData); this.firstOpened.resolve(); const openPanelInfo: OpenPanelInfo = {
diff --git a/chrome/test/data/webui/glic/browser_tests/glic_api_browsertest.ts b/chrome/test/data/webui/glic/browser_tests/glic_api_browsertest.ts index 1f77470..395fd89a 100644 --- a/chrome/test/data/webui/glic/browser_tests/glic_api_browsertest.ts +++ b/chrome/test/data/webui/glic/browser_tests/glic_api_browsertest.ts
@@ -14,6 +14,18 @@ await this.client.waitForFirstOpen(); } + async detachIfInMultiInstance() { + if (this.host.getHostCapabilities?.().has(HostCapability.MULTI_INSTANCE)) { + assertDefined(this.host.detachPanel); + this.host.detachPanel(); + + assertDefined(this.host.getPanelState); + const panelStates = observeSequence(this.host.getPanelState()); + await panelStates.waitFor( + state => state.kind === PanelStateKind.DETACHED); + } + } + // WARNING: Remember to update // chrome/browser/glic/host/glic_api_browsertest.cc if you add a new test! @@ -79,6 +91,28 @@ this.host.setAudioDucking(false); } + async testCreateTabByClickingOnLinkDaisyChains() { + assertDefined(this.host.getFocusedTabStateV2); + assertDefined(this.host.getPinnedTabs); + const link = document.createElement('a'); + link.setAttribute('href', 'https://www.chromium.org'); + link.setAttribute('target', '_blank'); + document.body.appendChild(link); + link.click(); + // The opened tab should be pinned. + await observeSequence(this.host.getPinnedTabs()) + .waitFor(tabs => tabs.length === 2); + + // TODO(wry): Chrome switches tabs correctly, but focus is not updating. + // The following code should work: + + // await observeSequence(this.host.getFocusedTabStateV2()).waitFor(update + // => { + // return update.hasFocus?.tabData?.url?.includes('chromium.org') ?? + // false; + // }); + } + async testCreateTabFailsIfNotActive() { assertDefined(this.host.closePanel); assertDefined(this.host.createTab); @@ -198,17 +232,9 @@ async testIsBrowserOpen() { assertDefined(this.host.isBrowserOpen); - if (this.host.getHostCapabilities?.().has(HostCapability.MULTI_INSTANCE)) { - // This test closes the browser, so we need to detach the side panel to - // avoid closing glic. - assertDefined(this.host.detachPanel); - this.host.detachPanel(); - - assertDefined(this.host.getPanelState); - const panelStates = observeSequence(this.host.getPanelState()); - await panelStates.waitFor( - state => state.kind === PanelStateKind.DETACHED); - } + // This test closes the browser, so we need to detach the side panel to + // avoid closing glic. + await this.detachIfInMultiInstance(); const isBrowserOpen = observeSequence(this.host.isBrowserOpen()); assertTrue(await isBrowserOpen.next()); // Close the browser. @@ -1922,6 +1948,24 @@ await additionalContextPromise; } + async testSwitchConversationToExistingInstance() { + assertDefined(this.host.registerConversation); + assertDefined(this.host.switchConversation); + if (this.testParams === 'first') { + await this.host.registerConversation( + {conversationTitle: 'Hello', conversationId: 'id_hello'}); + await this.advanceToNextStep(); + } else if (this.testParams === 'second') { + assertEquals( + undefined, + this.client.panelOpenData.getCurrentValue()?.conversationId); + await this.host.switchConversation( + {conversationTitle: 'Hello', conversationId: 'id_hello'}); + // Note that switchConversation does resolve, even though this instance + // will be destroyed very soon. + } + } + private async closePanelAndWaitUntilInactive() { assertDefined(this.host.closePanel); await this.host.closePanel();
diff --git a/chrome/test/data/webui/new_tab_page/app_test.ts b/chrome/test/data/webui/new_tab_page/app_test.ts index 16f2b94a..46ffc3b 100644 --- a/chrome/test/data/webui/new_tab_page/app_test.ts +++ b/chrome/test/data/webui/new_tab_page/app_test.ts
@@ -7,8 +7,8 @@ import {CustomizeChromeSection} from 'chrome://new-tab-page/customize_chrome.mojom-webui.js'; import type {Module} from 'chrome://new-tab-page/lazy_load.js'; import {ComposeboxProxyImpl, counterfactualLoad, ModuleDescriptor, ModuleRegistry} from 'chrome://new-tab-page/lazy_load.js'; -import {$$, BackgroundManager, BrowserCommandProxy, CUSTOMIZE_CHROME_BUTTON_ELEMENT_ID, CustomizeButtonsProxy, CustomizeDialogPage, NewTabPageProxy, NtpCustomizeChromeEntryPoint, NtpElement, VoiceAction, WindowProxy} from 'chrome://new-tab-page/new_tab_page.js'; -import type {AppElement, CustomizeButtonsElement} from 'chrome://new-tab-page/new_tab_page.js'; +import {$$, BackgroundManager, BrowserCommandProxy, CUSTOMIZE_CHROME_BUTTON_ELEMENT_ID, CustomizeButtonsProxy, CustomizeDialogPage, NewTabPageProxy, NtpCustomizeChromeEntryPoint, NtpElement, SearchboxBrowserProxy, VoiceAction, WindowProxy} from 'chrome://new-tab-page/new_tab_page.js'; +import type {AppElement, CustomizeButtonsElement, SearchboxElement} from 'chrome://new-tab-page/new_tab_page.js'; import type {PageRemote} from 'chrome://new-tab-page/new_tab_page.mojom-webui.js'; import {NtpBackgroundImageSource, PageCallbackRouter, PageHandlerRemote} from 'chrome://new-tab-page/new_tab_page.mojom-webui.js'; import {PageCallbackRouter as ComposeboxPageCallbackRouter, PageHandlerRemote as ComposeboxPageHandlerRemote} from 'chrome://resources/cr_components/composebox/composebox.mojom-webui.js'; @@ -19,6 +19,7 @@ import {isMac} from 'chrome://resources/js/platform.js'; import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js'; import {PageCallbackRouter as SearchboxPageCallbackRouter, PageHandlerRemote as SearchboxPageHandlerRemote} from 'chrome://resources/mojo/components/omnibox/browser/searchbox.mojom-webui.js'; +import type {AutocompleteMatch, AutocompleteResult} from 'chrome://resources/mojo/components/omnibox/browser/searchbox.mojom-webui.js'; import {assertDeepEquals, assertEquals, assertFalse, assertNotEquals, assertTrue} from 'chrome://webui-test/chai_assert.js'; import type {MetricsTracker} from 'chrome://webui-test/metrics_test_support.js'; import {fakeMetricsPrivate} from 'chrome://webui-test/metrics_test_support.js'; @@ -91,9 +92,10 @@ mock, new ComposeboxPageCallbackRouter(), new SearchboxPageHandlerRemote(), new SearchboxPageCallbackRouter()))); - searchboxHandler = installMock( - SearchboxPageHandlerRemote, - mock => ComposeboxProxyImpl.getInstance().searchboxHandler = mock); + searchboxHandler = installMock(SearchboxPageHandlerRemote, mock => { + ComposeboxProxyImpl.getInstance().searchboxHandler = mock; + SearchboxBrowserProxy.getInstance().handler = mock; + }); app = document.createElement('ntp-app'); document.body.appendChild(app); @@ -117,6 +119,68 @@ '#composeButton'); } + function createAutocompleteMatch(): AutocompleteMatch { + return { + a11yLabel: '', + actions: [], + allowedToBeDefaultMatch: false, + isSearchType: false, + isEnterpriseSearchAggregatorPeopleType: false, + swapContentsAndDescription: false, + supportsDeletion: false, + suggestionGroupId: -1, // Indicates a missing suggestion group Id. + contents: '', + contentsClass: [{offset: 0, style: 0}], + description: '', + descriptionClass: [{offset: 0, style: 0}], + destinationUrl: {url: ''}, + inlineAutocompletion: '', + fillIntoEdit: '', + iconPath: '', + iconUrl: {url: ''}, + imageDominantColor: '', + imageUrl: '', + isNoncannedAimSuggestion: false, + removeButtonA11yLabel: '', + type: '', + isRichSuggestion: false, + isWeatherAnswerSuggestion: null, + answer: null, + tailSuggestCommonPrefix: null, + keywordChipHint: '', + keywordChipA11y: '', + }; + } + + function createAutocompleteResult( + modifiers: Partial<AutocompleteResult> = {}): AutocompleteResult { + const base: AutocompleteResult = { + input: '', + matches: [], + suggestionGroupsMap: {}, + smartComposeInlineHint: null, + }; + + return Object.assign(base, modifiers); + } + + function createSearchMatch(modifiers: Partial<AutocompleteMatch> = {}): + AutocompleteMatch { + return Object.assign( + createAutocompleteMatch(), { + isSearchType: true, + contents: 'hello world', + destinationUrl: {url: 'https://www.google.com/search?q=hello+world'}, + fillIntoEdit: 'hello world', + type: 'search-suggest', + }, + modifiers); + } + + function getScrim(): HTMLElement|null { + return app.shadowRoot.querySelector<HTMLElement>('#scrim'); + } + suite('Misc', () => { test('logs height', () => { // Assert. @@ -1322,11 +1386,11 @@ })); await microtasksFinished(); const ntpComposebox = app.shadowRoot.querySelector('ntp-composebox'); - ntpComposebox!.shadowRoot.querySelector<HTMLInputElement>( - '#input')!.value = 'hello'; + ntpComposebox!.setText('hello'); const composeboxScrim = - app.shadowRoot.querySelector<HTMLElement>('#composeboxScrim'); + app.shadowRoot.querySelector<HTMLElement>('#scrim'); assertTrue(!!composeboxScrim); + assertEquals(ntpComposebox!.getText(), 'hello'); composeboxScrim.click(); await microtasksFinished(); @@ -1379,7 +1443,7 @@ })); await microtasksFinished(); const composeboxScrim = - app.shadowRoot.querySelector<HTMLElement>('#composeboxScrim'); + app.shadowRoot.querySelector<HTMLElement>('#scrim'); assertTrue(!!composeboxScrim); composeboxScrim.click(); await microtasksFinished(); @@ -1860,6 +1924,83 @@ }); }); + suite('RealboxNext', () => { + suiteSetup(() => { + loadTimeData.overrideValues({ + ntpRealboxNextEnabled: true, + }); + }); + test( + 'A scrim is applied when the dropdown is shown in searchbox', + async () => { + assertFalse(!!getScrim()); + const realbox_input = + $$<SearchboxElement>(app, '#searchbox')!.$.input; + realbox_input.value = 'he'; + realbox_input.dispatchEvent(new InputEvent('input')); + await microtasksFinished(); + const matches = [createSearchMatch()]; + SearchboxBrowserProxy.getInstance() + .callbackRouter.$.bindNewPipeAndPassRemote() + .autocompleteResultChanged(createAutocompleteResult({ + input: realbox_input.value.trimStart(), + matches: matches, + })); + await microtasksFinished(); + const scrim = getScrim(); + assertTrue(!!scrim); + + // The dropdown is closed when a keypress on Esc is made. + const escapeEvent = new KeyboardEvent('keydown', { + bubbles: true, + cancelable: true, + composed: true, // So it propagates across shadow DOM boundary. + key: 'Escape', + }); + realbox_input.dispatchEvent(escapeEvent); + await microtasksFinished(); + assertFalse(!!getScrim()); + }); + test( + 'A scrim is applied when the dropdown is shown in composebox', + async () => { + loadTimeData.overrideValues({ + composeboxShowZps: true, + composeboxShowTypedSuggest: true, + composeboxCloseByClickOutside: true, + }); + assertFalse(!!getScrim()); + const realbox = $$(app, '#searchbox'); + assertTrue(!!realbox); + realbox.dispatchEvent(new CustomEvent('open-composebox', { + detail: {searchboxText: '', contextFiles: []}, + })); + await microtasksFinished(); + const ntpComposebox = app.shadowRoot.querySelector('ntp-composebox'); + assertTrue(!!ntpComposebox); + + // Open the dropbox by satisfying its opening condition + ntpComposebox.$.input.value = 'Test'; + ntpComposebox.$.input.style.height = '48px'; + ntpComposebox.$.input.dispatchEvent(new Event('input')); + await microtasksFinished(); + const matches = [createSearchMatch()]; + ComposeboxProxyImpl.getInstance() + .searchboxCallbackRouter.$.bindNewPipeAndPassRemote() + .autocompleteResultChanged(createAutocompleteResult({ + input: 'Test'.trimStart(), + matches: matches, + })); + await microtasksFinished(); + const scrim = getScrim(); + assertTrue(!!scrim); + + scrim.click(); // closes the composebox and thus the dropdown + await microtasksFinished(); + assertFalse(!!getScrim()); + }); + }); + suite('ActionChips', () => { [true, false].forEach( (ntpNextFeaturesEnabled) =>
diff --git a/chrome/test/data/webui/new_tab_page/composebox/composebox_test.ts b/chrome/test/data/webui/new_tab_page/composebox/composebox_test.ts index 9ed8ea56..97623d51 100644 --- a/chrome/test/data/webui/new_tab_page/composebox/composebox_test.ts +++ b/chrome/test/data/webui/new_tab_page/composebox/composebox_test.ts
@@ -926,6 +926,42 @@ assertTrue(composeboxDropdown.hidden); }); + test( + 'dropdown visibility change fires an event when Realbox Next is enabled', + async () => { + loadTimeData.overrideValues({ + composeboxShowZps: true, + composeboxShowTypedSuggest: true, + }); + createComposeboxElement(); + composeboxElement.ntpRealboxNextEnabled = true; + + let whenDropdownVisibleChanged = eventToPromise( + 'composebox-dropdown-visible-changed', composeboxElement); + + // Add typed input. + composeboxElement.$.input.value = 'Test'; + composeboxElement.$.input.style.height = '48px'; + composeboxElement.$.input.dispatchEvent(new Event('input')); + await microtasksFinished(); + const matches = [ + createSearchMatch(), + ]; + searchboxCallbackRouterRemote.autocompleteResultChanged( + createAutocompleteResult({ + input: 'Test', + matches: matches, + })); + const e1 = await whenDropdownVisibleChanged; + assertTrue(e1.detail.value); + + whenDropdownVisibleChanged = eventToPromise( + 'composebox-dropdown-visible-changed', composeboxElement); + composeboxElement.closeDropdown(); + const e2 = await whenDropdownVisibleChanged; + assertFalse(e2.detail.value); + }); + test('arrow up/down moves selection / focus', async () => { loadTimeData.overrideValues({composeboxShowZps: true}); createComposeboxElement(); @@ -1126,11 +1162,16 @@ test('tab adds smart compose to input', async () => { createComposeboxElement(); await microtasksFinished(); + // Autocomplete queried once when composebox is opened. + assertEquals(searchboxHandler.getCallCount('queryAutocomplete'), 1); // Add input. composeboxElement.$.input.value = 'smart '; composeboxElement.$.input.dispatchEvent(new Event('input')); + // Autocomplete queried on input. + assertEquals(searchboxHandler.getCallCount('queryAutocomplete'), 2); + searchboxCallbackRouterRemote.autocompleteResultChanged( createAutocompleteResult({ input: 'smart ', @@ -1151,6 +1192,8 @@ assertTrue(tabEvent.defaultPrevented); assertEquals('smart compose', composeboxElement.$.input.value); + // Autocomplete queried when smart compose accepted. + assertEquals(searchboxHandler.getCallCount('queryAutocomplete'), 3); }); test('composebox does not open match when only file present', async () => {
diff --git a/chrome/test/data/webui/new_tab_page/new_tab_page_browsertest.cc b/chrome/test/data/webui/new_tab_page/new_tab_page_browsertest.cc index 8e419d8..387f907 100644 --- a/chrome/test/data/webui/new_tab_page/new_tab_page_browsertest.cc +++ b/chrome/test/data/webui/new_tab_page/new_tab_page_browsertest.cc
@@ -4,6 +4,7 @@ #include "base/test/scoped_feature_list.h" #include "build/build_config.h" +#include "chrome/browser/ui/webui/new_tab_page/composebox/variations/composebox_fieldtrial.h" #include "chrome/common/webui_url_constants.h" #include "chrome/test/base/web_ui_mocha_browser_test.h" #include "components/history_clusters/core/features.h" @@ -17,7 +18,8 @@ set_test_loader_host(chrome::kChromeUINewTabPageHost); scoped_feature_list_.InitWithFeatures( /*enabled_features=*/{}, - /*disabled_features=*/{omnibox::kAimServerEligibilityEnabled}); + /*disabled_features=*/{omnibox::kAimServerEligibilityEnabled, + ntp_realbox::kNtpRealboxNext}); } private: @@ -243,18 +245,18 @@ "runMochaSuite('NewTabPageAppTest ComposeEntryPoint')"); } +IN_PROC_BROWSER_TEST_F(NewTabPageAppTest, RealboxNext) { + RunTest("new_tab_page/app_test.js", + "runMochaSuite('NewTabPageAppTest RealboxNext')"); +} + IN_PROC_BROWSER_TEST_F(NewTabPageAppTest, ActionChips) { RunTest("new_tab_page/app_test.js", "runMochaSuite('NewTabPageAppTest ActionChips')"); } -// TODO(crbug.com/448987783): Re-enable test -#if BUILDFLAG(IS_LINUX) -#define MAYBE_WallpaperSearch DISABLED_WallpaperSearch -#else -#define MAYBE_WallpaperSearch WallpaperSearch -#endif -IN_PROC_BROWSER_TEST_F(NewTabPageAppTest, MAYBE_WallpaperSearch) { +// TODO(crbug.com/428156129): Re-enable test +IN_PROC_BROWSER_TEST_F(NewTabPageAppTest, DISABLED_WallpaperSearch) { RunTest("new_tab_page/app_test.js", "runMochaSuite('NewTabPageAppTest WallpaperSearch')"); }
diff --git a/chrome/test/data/webui/side_panel/read_anything/app_content_test.ts b/chrome/test/data/webui/side_panel/read_anything/app_content_test.ts index e1ab103..653e3605 100644 --- a/chrome/test/data/webui/side_panel/read_anything/app_content_test.ts +++ b/chrome/test/data/webui/side_panel/read_anything/app_content_test.ts
@@ -491,6 +491,51 @@ assertEquals('', selection.toString()); }); + test('on selection resets plays from new selection', async () => { + const text1 = 'Not like you- '; + const text2 = ' you lost your nerve, you lost the game.'; + + const p1 = document.createElement('p'); + p1.innerText = text1; + app.$.container.appendChild(p1); + const node1 = p1.firstChild!; + const id1 = 2; + nodeStore.setDomNode(node1, id1); + + const p2 = document.createElement('p'); + p2.innerText = text2; + app.$.container.appendChild(p2); + const node2 = p2.firstChild!; + const id2 = 3; + nodeStore.setDomNode(node2, id2); + + const segments = + [{node: ReadAloudNode.create(node1)!, start: 0, length: text1.length}]; + readAloudModel.setCurrentTextSegments(segments); + readAloudModel.setCurrentTextContent(text1); + readAloudModel.init(ReadAloudNode.create(document.body)!); + + // Start speech to initialize read aloud state. + emitEvent(app, ToolbarEvent.PLAY_PAUSE); + assertTrue(speechController.isSpeechTreeInitialized()); + await microtasksFinished(); + + // Create a selection. + const selection = app.getSelection(); + assertTrue(!!selection); + const range = document.createRange(); + range.setStart(node1, 1); + range.setEnd(node2, 3); + selection.removeAllRanges(); + selection.addRange(range); + document.dispatchEvent(new Event('selectionchange')); + await microtasksFinished(); + + // After a selection, the read aloud state should still be set to true. + // This differs from the V8 selection approach. + assertTrue(speechController.isSpeechTreeInitialized()); + }); + suite('language toast', () => { const lang = 'ko-km'; let toast: LanguageToastElement;
diff --git a/chrome/test/data/webui/side_panel/read_anything/fake_reading_mode.ts b/chrome/test/data/webui/side_panel/read_anything/fake_reading_mode.ts index 1c048a07..74159a1c 100644 --- a/chrome/test/data/webui/side_panel/read_anything/fake_reading_mode.ts +++ b/chrome/test/data/webui/side_panel/read_anything/fake_reading_mode.ts
@@ -60,9 +60,6 @@ contentFinishedStopSource: number = 34; unexpectedUpdateContentStopSource: number = 35; - // Whether the WebUI toolbar feature flag is enabled. - isWebUIToolbarVisible: boolean = true; - // Whether the Read Aloud feature flag is enabled. isReadAloudEnabled: boolean = true; imagesFeatureEnabled: boolean = false;
diff --git a/chrome/test/data/webui/side_panel/read_anything/speech_test.ts b/chrome/test/data/webui/side_panel/read_anything/speech_test.ts index 959683a5..111e171 100644 --- a/chrome/test/data/webui/side_panel/read_anything/speech_test.ts +++ b/chrome/test/data/webui/side_panel/read_anything/speech_test.ts
@@ -265,6 +265,30 @@ assertEquals(paragraph2[0], getSpokenText()); }); + test('after two selections, plays from most recent selection', () => { + select(axTree, 5, 0, 5, 10); + let domNode = NodeStore.getInstance().getDomNode(1); + speechController.initializeSpeechTree(domNode); + speechController.setHasSpeechBeenTriggered(true); + speech.reset(); + + playFromSelection(); + + assertEquals(1, speech.getCallCount('cancel')); + assertEquals(paragraph2[0], getSpokenText()); + + select(axTree, 3, 10, 5, 10); + domNode = NodeStore.getInstance().getDomNode(1); + speechController.initializeSpeechTree(domNode); + speechController.setHasSpeechBeenTriggered(true); + speech.reset(); + + playFromSelection(); + + assertEquals(1, speech.getCallCount('cancel')); + assertEquals(paragraph1[0], getSpokenText()); + }); + test('play from selection when node split across sentences', () => { const fragment1 = ' This is a sentence'; const fragment2 = ' that ends in the next node. ';
diff --git a/chrome/test/data/webui/tab_search/split_new_tab_page_interactive_uitest.cc b/chrome/test/data/webui/tab_search/split_new_tab_page_interactive_uitest.cc index 48ce76b..a092f18 100644 --- a/chrome/test/data/webui/tab_search/split_new_tab_page_interactive_uitest.cc +++ b/chrome/test/data/webui/tab_search/split_new_tab_page_interactive_uitest.cc
@@ -45,7 +45,7 @@ GURL GetTestUrl() { return embedded_test_server()->GetURL("/title1.html"); } }; -#if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_MAC) +#if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) #define MAYBE_Focus DISABLED_Focus #else #define MAYBE_Focus Focus
diff --git a/chrome/updater/net/network_fetcher_mac.mm b/chrome/updater/net/network_fetcher_mac.mm index 07464f12..4cf650026 100644 --- a/chrome/updater/net/network_fetcher_mac.mm +++ b/chrome/updater/net/network_fetcher_mac.mm
@@ -773,7 +773,7 @@ if (const int dial_result = DialFetchService(); dial_result != kErrorOk) { LOG(ERROR) << "Failed to dial the fetch service: " << dial_result; std::move(post_request_complete_callback) - .Run(nullptr, dial_result, {}, {}, {}, -1); + .Run(std::nullopt, dial_result, {}, {}, {}, -1); return; }
diff --git a/chrome/updater/net/network_fetcher_win.cc b/chrome/updater/net/network_fetcher_win.cc index 210e4ad6..a5c9040 100644 --- a/chrome/updater/net/network_fetcher_win.cc +++ b/chrome/updater/net/network_fetcher_win.cc
@@ -91,7 +91,7 @@ policy_service_proxy_configuration->proxy_url.value_or("")), L""}); } - VLOG(1) << "Using the system configuration for proxy."; + VLOG(1) << "Using the auto proxy configuration."; return base::MakeRefCounted<winhttp::AutoProxyConfiguration>(); }
diff --git a/chrome/updater/policy/service.cc b/chrome/updater/policy/service.cc index 3f2c58d..db37b91 100644 --- a/chrome/updater/policy/service.cc +++ b/chrome/updater/policy/service.cc
@@ -745,7 +745,7 @@ } } else if (proxy_mode.policy().compare(kProxyModeAutoDetect) == 0) { policy_service_proxy_configuration.proxy_auto_detect = true; - } else { + } else if (proxy_mode.policy().compare(kProxyModeDirect) != 0) { is_policy_config_valid = false; }
diff --git a/chrome/updater/usage_stats_permissions_mac.mm b/chrome/updater/usage_stats_permissions_mac.mm index 6eb2937..9edb9d3 100644 --- a/chrome/updater/usage_stats_permissions_mac.mm +++ b/chrome/updater/usage_stats_permissions_mac.mm
@@ -31,17 +31,11 @@ // Returns true if the directory contains a crashpad database with uploads // enabled. bool AppAllowsUsageStats(const base::FilePath& app_directory) { - base::FilePath crashpad = app_directory.Append("Crashpad"); - if (!base::PathExists(crashpad)) { - return false; - } - std::unique_ptr<crashpad::CrashReportDatabase> app_database = - crashpad::CrashReportDatabase::Initialize(crashpad); - if (!app_database) { - return false; - } bool enabled = false; - return app_database->GetSettings()->GetUploadsEnabled(&enabled) && enabled; + return crashpad::CrashReportDatabase::GetSettingsReaderForDatabasePath( + app_directory.Append("Crashpad")) + ->GetUploadsEnabled(&enabled) && + enabled; } std::vector<base::FilePath> GetAppDirectories(
diff --git a/clank b/clank index 5c6055a..e678044 160000 --- a/clank +++ b/clank
@@ -1 +1 @@ -Subproject commit 5c6055aa5052256bc67ff1a033d2852d0b205282 +Subproject commit e67804499e959e716c333a340acfd3da0e0dc880
diff --git a/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillSelectionMenuItemHelper.java b/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillSelectionMenuItemHelper.java index ad253c7..866ba31c 100644 --- a/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillSelectionMenuItemHelper.java +++ b/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillSelectionMenuItemHelper.java
@@ -4,8 +4,6 @@ package org.chromium.components.autofill; -import android.content.Context; -import android.os.Build; import android.view.Menu; import android.view.MenuItem; @@ -24,17 +22,9 @@ private final AutofillProvider mAutofillProvider; private final int mAutofillMenuItemTitle; - // using getIdentifier to work around not-exposed framework resource ID - @SuppressWarnings("DiscouragedApi") - public AutofillSelectionMenuItemHelper(Context context, AutofillProvider autofillProvider) { + public AutofillSelectionMenuItemHelper(AutofillProvider autofillProvider) { mAutofillProvider = autofillProvider; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { - mAutofillMenuItemTitle = android.R.string.autofill; - } else { - // The string resource was not made public until O MR1, so on O we look it up by name. - mAutofillMenuItemTitle = - context.getResources().getIdentifier("autofill", "string", "android"); - } + mAutofillMenuItemTitle = android.R.string.autofill; } public List<SelectionMenuItem> getAdditionalItems() {
diff --git a/components/autofill/core/browser/studies/autofill_experiments.cc b/components/autofill/core/browser/studies/autofill_experiments.cc index b9ed2ac2..f9d075a 100644 --- a/components/autofill/core/browser/studies/autofill_experiments.cc +++ b/components/autofill/core/browser/studies/autofill_experiments.cc
@@ -81,26 +81,28 @@ } // namespace // The list of countries for which the credit card upload save feature is fully -// launched. Last updated M141. +// launched. Last updated M143. const char* const kAutofillUpstreamLaunchedCountries[] = { - "AD", "AE", "AF", "AG", "AI", "AL", "AO", "AQ", "AR", "AS", "AT", "AU", - "AW", "AZ", "BA", "BB", "BE", "BF", "BG", "BH", "BI", "BJ", "BL", "BM", - "BN", "BR", "BS", "BT", "BW", "BY", "BZ", "CA", "CC", "CD", "CF", "CG", - "CH", "CI", "CK", "CL", "CM", "CO", "CR", "CV", "CX", "CY", "CZ", "DE", - "DJ", "DK", "DM", "DO", "EC", "EE", "EH", "ER", "ES", "FI", "FJ", "FK", - "FM", "FO", "FR", "GA", "GB", "GD", "GE", "GF", "GH", "GI", "GL", "GM", - "GN", "GP", "GQ", "GR", "GT", "GU", "GW", "GY", "HK", "HN", "HR", "HT", - "HU", "ID", "IE", "IL", "IO", "IS", "IT", "JM", "JP", "KE", "KG", "KH", - "KI", "KM", "KN", "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", - "LS", "LT", "LU", "LV", "MC", "MD", "ME", "MF", "MG", "MH", "MK", "ML", + "AD", "AE", "AF", "AG", "AI", "AL", "AM", "AO", "AQ", "AR", "AS", "AT", + "AU", "AW", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", + "BL", "BM", "BN", "BQ", "BR", "BS", "BT", "BW", "BY", "BZ", "CA", "CC", + "CD", "CF", "CG", "CH", "CI", "CK", "CL", "CM", "CO", "CR", "CV", "CW", + "CX", "CY", "CZ", "DE", "DJ", "DK", "DM", "DO", "DZ", "EC", "EE", "EG", + "EH", "ER", "ES", "FI", "FJ", "FK", "FM", "FO", "FR", "GA", "GB", "GD", + "GE", "GF", "GG", "GH", "GI", "GL", "GM", "GN", "GP", "GQ", "GR", "GT", + "GU", "GW", "GY", "HK", "HN", "HR", "HT", "HU", "ID", "IE", "IL", "IM", + "IO", "IS", "IT", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM", "KN", + "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU", + "LV", "LY", "MA", "MC", "MD", "ME", "MF", "MG", "MH", "MK", "ML", "MM", "MN", "MO", "MP", "MQ", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", - "MZ", "NA", "NC", "NE", "NF", "NG", "NI", "NL", "NO", "NR", "NU", "NZ", - "OM", "PA", "PE", "PF", "PG", "PH", "PL", "PM", "PR", "PT", "PW", "PY", - "QA", "RE", "RO", "RW", "SA", "SB", "SC", "SE", "SG", "SH", "SI", "SJ", - "SK", "SL", "SM", "SN", "SO", "SR", "ST", "SV", "SX", "SZ", "TC", "TD", - "TG", "TH", "TK", "TL", "TM", "TO", "TR", "TT", "TV", "TW", "TZ", "UA", - "UG", "US", "UY", "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", "WS", - "YT", "ZA", "ZM", "ZW"}; + "MZ", "NA", "NC", "NE", "NF", "NG", "NI", "NL", "NO", "NP", "NR", "NU", + "NZ", "OM", "PA", "PE", "PF", "PG", "PH", "PK", "PL", "PM", "PN", "PR", + "PS", "PT", "PW", "PY", "QA", "RE", "RO", "RW", "SA", "SB", "SC", "SE", + "SG", "SH", "SI", "SJ", "SK", "SL", "SM", "SN", "SO", "SR", "SS", "ST", + "SV", "SX", "SZ", "TC", "TD", "TG", "TH", "TJ", "TK", "TL", "TM", "TO", + "TR", "TT", "TV", "TW", "TZ", "UA", "UG", "US", "UY", "UZ", "VA", "VC", + "VE", "VG", "VI", "VN", "VU", "WF", "WS", "XK", "YE", "YT", "ZA", "ZM", + "ZW"}; bool IsCreditCardUploadEnabled( const syncer::SyncService* sync_service,
diff --git a/components/autofill/core/browser/ui/payments/bnpl_tos_controller_impl.cc b/components/autofill/core/browser/ui/payments/bnpl_tos_controller_impl.cc index ac6c28c..14ebe14 100644 --- a/components/autofill/core/browser/ui/payments/bnpl_tos_controller_impl.cc +++ b/components/autofill/core/browser/ui/payments/bnpl_tos_controller_impl.cc
@@ -69,7 +69,14 @@ } u16string BnplTosControllerImpl::GetTitle() const { - return GetStringFUTF16(IDS_AUTOFILL_BNPL_TOS_TITLE, + if (model_.issuer.payment_instrument() && + model_.issuer.payment_instrument()->action_required().contains( + autofill::PaymentInstrument::ActionRequired::kAcceptTos)) { + return GetStringFUTF16(IDS_AUTOFILL_BNPL_TOS_LINKED_TITLE, + model_.issuer.GetDisplayName()); + } + + return GetStringFUTF16(IDS_AUTOFILL_BNPL_TOS_UNLINKED_TITLE, model_.issuer.GetDisplayName()); }
diff --git a/components/autofill/core/browser/ui/payments/bnpl_tos_controller_impl_unittest.cc b/components/autofill/core/browser/ui/payments/bnpl_tos_controller_impl_unittest.cc index a46f26c..96e5457 100644 --- a/components/autofill/core/browser/ui/payments/bnpl_tos_controller_impl_unittest.cc +++ b/components/autofill/core/browser/ui/payments/bnpl_tos_controller_impl_unittest.cc
@@ -61,6 +61,7 @@ ->GetPaymentsDataManager()) .SetAccountInfoForPayments(account_info_); + // Set `issuer_` to be unlinked by default. issuer_ = BnplIssuer(/*instrument_id=*/std::nullopt, BnplIssuer::IssuerId::kBnplAffirm, std::vector<BnplIssuer::EligiblePriceRange>{}); @@ -73,7 +74,15 @@ base::JSON_PARSE_CHROMIUM_EXTENSIONS) ->GetDict(), &legal_message_lines_, true); + } + void TearDown() override { view_ = nullptr; } + + BnplTosView* View() { return controller_->view_.get(); } + + u16string IssuerName() { return controller_->model_.issuer.GetDisplayName(); } + + void ShowBnplTos() { BnplTosModel model; model.issuer = issuer_; model.legal_message_lines = legal_message_lines_; @@ -84,11 +93,14 @@ EXPECT_EQ(View(), view_); } - void TearDown() override { view_ = nullptr; } - - BnplTosView* View() { return controller_->view_.get(); } - - u16string IssuerName() { return controller_->model_.issuer.GetDisplayName(); } + void SetExternallyLinkedIssuer() { + issuer_ = BnplIssuer( + /*instrument_id=*/123, BnplIssuer::IssuerId::kBnplKlarna, + std::vector<BnplIssuer::EligiblePriceRange>{}, + /*action_required=*/ + autofill::DenseSet( + {autofill::PaymentInstrument::ActionRequired::kAcceptTos})); + } base::test::TaskEnvironment task_environment_; MockCallback<OnceCallback<std::unique_ptr<BnplTosView>()>> @@ -105,7 +117,8 @@ }; TEST_F(BnplTosControllerImplTest, ShowView_MultipleTimes) { - // Show() was already called once during Setup(). + ShowBnplTos(); + MockCallback<OnceCallback<std::unique_ptr<BnplTosView>()>> new_create_view_callback_; @@ -115,7 +128,9 @@ } TEST_F(BnplTosControllerImplTest, Dismiss) { - // The view should start out as being shown. + ShowBnplTos(); + + // The view should be shown. EXPECT_TRUE(View() != nullptr); // Avoid dangling pointer. view_ = nullptr; @@ -126,6 +141,8 @@ } TEST_F(BnplTosControllerImplTest, OnUserAccepted) { + ShowBnplTos(); + EXPECT_CALL(accept_callback_, Run()); controller_->OnUserAccepted(); @@ -134,6 +151,8 @@ } TEST_F(BnplTosControllerImplTest, OnUserCancelled) { + ShowBnplTos(); + // Avoid dangling pointer. view_ = nullptr; @@ -145,31 +164,52 @@ } TEST_F(BnplTosControllerImplTest, GetOkButtonLabel) { + ShowBnplTos(); + EXPECT_EQ(controller_->GetOkButtonLabel(), GetStringUTF16(IDS_AUTOFILL_BNPL_TOS_OK_BUTTON_LABEL)); } TEST_F(BnplTosControllerImplTest, GetCancelButtonLabel) { + ShowBnplTos(); + EXPECT_EQ(controller_->GetCancelButtonLabel(), GetStringUTF16(IDS_AUTOFILL_BNPL_TOS_CANCEL_BUTTON_LABEL)); } TEST_F(BnplTosControllerImplTest, GetTitle) { + ShowBnplTos(); + + EXPECT_EQ( + controller_->GetTitle(), + GetStringFUTF16(IDS_AUTOFILL_BNPL_TOS_UNLINKED_TITLE, IssuerName())); +} + +TEST_F(BnplTosControllerImplTest, GetTitle_ExternallyLinkedIssuer) { + SetExternallyLinkedIssuer(); + ShowBnplTos(); + EXPECT_EQ(controller_->GetTitle(), - GetStringFUTF16(IDS_AUTOFILL_BNPL_TOS_TITLE, IssuerName())); + GetStringFUTF16(IDS_AUTOFILL_BNPL_TOS_LINKED_TITLE, IssuerName())); } TEST_F(BnplTosControllerImplTest, GetReviewText) { + ShowBnplTos(); + EXPECT_EQ(controller_->GetReviewText(), GetStringFUTF16(IDS_AUTOFILL_BNPL_TOS_REVIEW_TEXT, IssuerName())); } TEST_F(BnplTosControllerImplTest, GetApproveText) { + ShowBnplTos(); + EXPECT_EQ(controller_->GetApproveText(), GetStringFUTF16(IDS_AUTOFILL_BNPL_TOS_APPROVE_TEXT, IssuerName())); } TEST_F(BnplTosControllerImplTest, GetLinkText) { + ShowBnplTos(); + std::vector<size_t> offsets; u16string text = GetStringFUTF16(IDS_AUTOFILL_BNPL_TOS_LINK_TEXT, IssuerName(), @@ -183,14 +223,20 @@ } TEST_F(BnplTosControllerImplTest, GetLegalMessageLines) { + ShowBnplTos(); + EXPECT_EQ(controller_->GetLegalMessageLines(), legal_message_lines_); } TEST_F(BnplTosControllerImplTest, GetAccountInfo) { + ShowBnplTos(); + EXPECT_EQ(controller_->GetAccountInfo().email, account_info_.email); } TEST_F(BnplTosControllerImplTest, GetIssuerId) { + ShowBnplTos(); + EXPECT_EQ(controller_->GetIssuerId(), issuer_.issuer_id()); }
diff --git a/components/autofill_payments_strings.grdp b/components/autofill_payments_strings.grdp index 4b98757..4b82d9d 100644 --- a/components/autofill_payments_strings.grdp +++ b/components/autofill_payments_strings.grdp
@@ -1126,9 +1126,13 @@ <message name="IDS_AUTOFILL_BNPL_TOS_CANCEL_BUTTON_LABEL" desc="The cancel button label of the Buy-Now-Pay-Later Terms of Service dialog. If the user cancels this dialog, the flow will end and the dialog will close."> Cancel </message> - <message name="IDS_AUTOFILL_BNPL_TOS_TITLE" desc="The title of the Buy-Now-Pay-Later Terms of Service dialog. This dialog is shown to users after they have selected a new unlinked BNPL issuer to use. If the user accepts this dialog, a new window will be shown to the user to complete the transaction on the BNPL issuer's website. If the user cancels this dialog, they will return back to the BNPL issuer selection dialog."> + <!-- TODO(crbug.com/424259928): Make BNPL ToS titles translateable. These were temporarily marked as `translateable="false"` for M142 mergeback. This is okay because the BNPL feature is currently only enabled for English language locales. --> + <message name="IDS_AUTOFILL_BNPL_TOS_UNLINKED_TITLE" desc="The title of the Buy-Now-Pay-Later Terms of Service dialog. This dialog is shown to users after they have selected a new unlinked BNPL issuer to use. If the user accepts this dialog, a new window will be shown to the user to complete the transaction on the BNPL issuer's website. If the user cancels this dialog, they will return back to the BNPL issuer selection dialog." translateable="false"> Link account and pay with <ph name="BNPL_ISSUER_NAME">$1</ph>? </message> + <message name="IDS_AUTOFILL_BNPL_TOS_LINKED_TITLE" desc="The title of the Buy-Now-Pay-Later Terms of Service dialog. This dialog is shown to users after they have selected a new linked BNPL issuer to use. If the user accepts this dialog, a new window will be shown to the user to complete the transaction on the BNPL issuer's website. If the user cancels this dialog, they will return back to the BNPL issuer selection dialog." translateable="false"> + Continue to pay with <ph name="BNPL_ISSUER_NAME">$1</ph>? + </message> <message name="IDS_AUTOFILL_BNPL_TOS_TITLE_DESCRIPTION" desc="Accessibility description for the title of the Buy-Now-Pay-Later Terms of Service dialog containing the combined GPay and BNPL Issuer logo image."> <ph name="TOS_TITLE">$1<ex>Link account and pay with Affirm?</ex></ph> <ph name="LOGO_DESCRIPTION">$2<ex>Google Pay, Affirm logo</ex></ph> </message>
diff --git a/components/autofill_payments_strings_grdp/IDS_AUTOFILL_BNPL_TOS_TITLE.png.sha1 b/components/autofill_payments_strings_grdp/IDS_AUTOFILL_BNPL_TOS_TITLE.png.sha1 deleted file mode 100644 index 606e60f..0000000 --- a/components/autofill_payments_strings_grdp/IDS_AUTOFILL_BNPL_TOS_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5074eedffcc47ea6c8e467600ccefd4f3d2295e5 \ No newline at end of file
diff --git a/components/chromeos_camera/mjpeg_decode_accelerator_unittest.cc b/components/chromeos_camera/mjpeg_decode_accelerator_unittest.cc index 5b1e830..a5e0c6f 100644 --- a/components/chromeos_camera/mjpeg_decode_accelerator_unittest.cc +++ b/components/chromeos_camera/mjpeg_decode_accelerator_unittest.cc
@@ -404,7 +404,10 @@ data[i] = static_cast<uint8_t*>(buffer->memory(i)); scoped_refptr<media::VideoFrame> frame = media::VideoFrame::WrapExternalYuvDataWithLayout( - layout, visible_rect, visible_rect.size(), data[0], data[1], data[2], + layout, visible_rect, visible_rect.size(), + UNSAFE_TODO(base::span(data[0], layout.planes()[0].size)), + UNSAFE_TODO(base::span(data[1], layout.planes()[1].size)), + UNSAFE_TODO(base::span(data[2], layout.planes()[2].size)), base::TimeDelta()); if (!frame) { LOG(ERROR) << "Failed to create VideoFrame";
diff --git a/components/heavy_ad_intervention/heavy_ad_features.cc b/components/heavy_ad_intervention/heavy_ad_features.cc index 1caf830..64d8c13 100644 --- a/components/heavy_ad_intervention/heavy_ad_features.cc +++ b/components/heavy_ad_intervention/heavy_ad_features.cc
@@ -18,7 +18,7 @@ // Enables or disables sending the heavy ad report to the root ad frame's // embedder. BASE_FEATURE(kHeavyAdInterventionSendReportToEmbedder, - base::FEATURE_DISABLED_BY_DEFAULT); + base::FEATURE_ENABLED_BY_DEFAULT); // Enables or disables reporting on the intervention that unloads ad iframes // with intensive resource usage.
diff --git a/components/history/core/browser/history_backend.h b/components/history/core/browser/history_backend.h index 7334589..a946642 100644 --- a/components/history/core/browser/history_backend.h +++ b/components/history/core/browser/history_backend.h
@@ -314,7 +314,8 @@ // redirected to. There may be more than one redirect in a row, so this // function will fill the given array with the entire chain. If there are // no redirects for the most recent visit of the URL, or the URL is not - // in history, the array will be empty. + // in history, the array will be empty. Excludes redirects that result in a + // 404 status code. RedirectList QueryRedirectsFrom(const GURL& url); // Similar to above function except computes a chain of redirects to the
diff --git a/components/ntp_tiles/pref_names.h b/components/ntp_tiles/pref_names.h index 02a316d..b645711 100644 --- a/components/ntp_tiles/pref_names.h +++ b/components/ntp_tiles/pref_names.h
@@ -69,6 +69,10 @@ // The pref that stores if the Tips Home Module is enabled. inline constexpr char kTipsHomeModuleEnabled[] = "home.module.tips.enabled"; +// The pref that stores if the Tab Resumption Home Module is enabled. +inline constexpr char kMagicStackHomeModuleEnabled[] = + "home.module.magic_stack.enabled"; + } // namespace ntp_tiles::prefs #endif // COMPONENTS_NTP_TILES_PREF_NAMES_H_
diff --git a/components/page_load_metrics/browser/observers/use_counter/webdx_feature_maps.cc b/components/page_load_metrics/browser/observers/use_counter/webdx_feature_maps.cc index 3697d8a5..4fc0aea 100644 --- a/components/page_load_metrics/browser/observers/use_counter/webdx_feature_maps.cc +++ b/components/page_load_metrics/browser/observers/use_counter/webdx_feature_maps.cc
@@ -457,6 +457,7 @@ {WebFeature::kXRDOMOverlay, WebDXFeature::kWebxrDomOverlays}, {WebFeature::kReportingObserver, WebDXFeature::kReporting}, {WebFeature::kReportingEndpointsHeader, WebDXFeature::kReporting}, + {WebFeature::kV8MLContext_Dispatch_Method, WebDXFeature::kWebnn}, // Add new features above this line. }};
diff --git a/components/remote_cocoa/app_shim/select_file_dialog_bridge.mm b/components/remote_cocoa/app_shim/select_file_dialog_bridge.mm index b4c988ed..6531f80 100644 --- a/components/remote_cocoa/app_shim/select_file_dialog_bridge.mm +++ b/components/remote_cocoa/app_shim/select_file_dialog_bridge.mm
@@ -277,6 +277,26 @@ using mojom::SelectFileDialogType; using mojom::SelectFileTypeInfoPtr; +class SelectFileDialogBridge::ScopedPreventKeyWindow { + public: + ScopedPreventKeyWindow(NativeWidgetMacNSWindow* window) { + bridge_ = window.bridge->GetWeakPtr(); + window.preventKeyWindow = YES; + } + + ScopedPreventKeyWindow(const SelectFileDialogBridge&) = delete; + ScopedPreventKeyWindow& operator=(const SelectFileDialogBridge&) = delete; + + ~ScopedPreventKeyWindow() { + if (bridge_) { + bridge_->ns_window().preventKeyWindow = NO; + } + } + + private: + base::WeakPtr<NativeWidgetNSWindowBridge> bridge_; +}; + SelectFileDialogBridge::SelectFileDialogBridge(NSWindow* owning_window) : owning_window_(owning_window), weak_factory_(this) {} @@ -638,26 +658,6 @@ std::move(show_callback_).Run(did_cancel, paths, index, file_tags); } -class SelectFileDialogBridge::ScopedPreventKeyWindow { - public: - ScopedPreventKeyWindow(NativeWidgetMacNSWindow* window) { - bridge_ = window.bridge->GetWeakPtr(); - window.preventKeyWindow = YES; - } - - ScopedPreventKeyWindow(const SelectFileDialogBridge&) = delete; - ScopedPreventKeyWindow& operator=(const SelectFileDialogBridge&) = delete; - - ~ScopedPreventKeyWindow() { - if (bridge_) { - bridge_->ns_window().preventKeyWindow = NO; - } - } - - private: - base::WeakPtr<NativeWidgetNSWindowBridge> bridge_; -}; - // static NSSavePanel* SelectFileDialogBridge::GetLastCreatedNativePanelForTesting() { return g_last_created_panel_for_testing;
diff --git a/components/tabs/impl/tab_strip_collection.cc b/components/tabs/impl/tab_strip_collection.cc index ade784e7..0596f2d8 100644 --- a/components/tabs/impl/tab_strip_collection.cc +++ b/components/tabs/impl/tab_strip_collection.cc
@@ -383,10 +383,10 @@ TabGroupTabCollection* TabStripCollection::GetTabGroupCollection( tab_groups::TabGroupId group_id) { - if (!group_mapping_.contains(group_id)) { - return nullptr; + if (auto it = group_mapping_.find(group_id); it != group_mapping_.end()) { + return it->second; } - return group_mapping_.at(group_id); + return nullptr; } std::vector<tab_groups::TabGroupId> TabStripCollection::GetAllTabGroupIds() @@ -430,10 +430,10 @@ SplitTabCollection* TabStripCollection::GetSplitTabCollection( split_tabs::SplitTabId split_id) { - if (!split_mapping_.contains(split_id)) { - return nullptr; + if (auto it = split_mapping_.find(split_id); it != split_mapping_.end()) { + return it->second; } - return split_mapping_.at(split_id); + return nullptr; } void TabStripCollection::CreateSplit(
diff --git a/components/viz/host/BUILD.gn b/components/viz/host/BUILD.gn index 4b7c7aa..104084c8 100644 --- a/components/viz/host/BUILD.gn +++ b/components/viz/host/BUILD.gn
@@ -39,10 +39,12 @@ deps = [ "//base", + "//components/base32", "//components/input", "//components/persistent_cache", "//gpu/ipc/client", "//gpu/ipc/common", + "//gpu/webgpu:common", "//services/viz/privileged/mojom", "//services/webnn/public/mojom", "//ui/base",
diff --git a/components/viz/host/DEPS b/components/viz/host/DEPS index a7aaa24..fa858b05 100644 --- a/components/viz/host/DEPS +++ b/components/viz/host/DEPS
@@ -1,6 +1,7 @@ # Please consult components/viz/README.md about allowable dependencies. include_rules = [ + "+components/base32", "+components/discardable_memory/public/mojom", "+components/input/render_input_router.mojom.h", "+components/input/utils.h", @@ -11,6 +12,7 @@ "+gpu/ipc/client", "+gpu/ipc/common", "+gpu/ipc/host", + "+gpu/webgpu/dawn_commit_hash.h", "+media/base/video_types.h", "+media/capture/mojom", "+media/media_buildflags.h",
diff --git a/components/viz/host/gpu_host_impl.cc b/components/viz/host/gpu_host_impl.cc index 18ee95b..85f8ceea 100644 --- a/components/viz/host/gpu_host_impl.cc +++ b/components/viz/host/gpu_host_impl.cc
@@ -27,8 +27,10 @@ #include "gpu/config/gpu_info.h" #include "gpu/ipc/common/gpu_client_ids.h" #include "gpu/ipc/host/gpu_disk_cache.h" +#include "gpu/webgpu/dawn_commit_hash.h" #include "mojo/public/cpp/bindings/sync_call_restrictions.h" #include "skia/buildflags.h" +#include "skia/ext/skia_commit_hash.h" #include "ui/gfx/font_render_params.h" #if BUILDFLAG(IS_ANDROID) @@ -98,6 +100,17 @@ } #endif +#if BUILDFLAG(SKIA_USE_DAWN) +std::string GraphiteDawnCacheVersion() { + // We use a combination of Dawn and Skia's git hashes as the cache version. + // - Dawn's git hash is because a new Dawn's version might change the way + // shaders are compiled. + // - Skia's git hash is because some cached shaders might not be used in a + // newer version of Skia. + return SKIA_COMMIT_HASH "_" DAWN_COMMIT_HASH; +} +#endif + } // namespace GpuHostImpl::InitParams::InitParams() = default; @@ -214,7 +227,7 @@ persistent_cache_file_factory->ClearFilesAsync( /*cache_id=*/GetGpuDiskCacheSubdir( gpu::GpuDiskCacheType::kDawnGraphite), - params_.product, base::DoNothing()); + GraphiteDawnCacheVersion(), base::DoNothing()); #endif } auto* gpu_disk_cache_factory = delegate_->GetGpuDiskCacheFactory(); @@ -450,7 +463,7 @@ persistent_cache_file_factory->CreateFilesAsync( /*cache_id=*/GetGpuDiskCacheSubdir( gpu::GpuDiskCacheType::kDawnGraphite), - params_.product, + GraphiteDawnCacheVersion(), base::BindOnce( [](base::WeakPtr<GpuHostImpl> gpu_host, std::optional<persistent_cache::BackendParams> backend_params) {
diff --git a/components/viz/host/persistent_cache_sandboxed_file_factory.cc b/components/viz/host/persistent_cache_sandboxed_file_factory.cc index 2ff0b990..2f93e184 100644 --- a/components/viz/host/persistent_cache_sandboxed_file_factory.cc +++ b/components/viz/host/persistent_cache_sandboxed_file_factory.cc
@@ -9,11 +9,13 @@ #include "base/files/file_enumerator.h" #include "base/files/file_util.h" #include "base/functional/bind.h" +#include "base/hash/sha1.h" #include "base/logging.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/task/task_traits.h" #include "base/task/thread_pool.h" +#include "components/base32/base32.h" #include "components/persistent_cache/sqlite/vfs/sandboxed_file.h" namespace viz { @@ -28,13 +30,17 @@ }; std::string GetVersionSuffix(const std::string& product) { - // Use produce's version to differentiate the cache files. - // TODO(crbug.com/399642827): Use Dawn/ANGLE/Skia's versions which change less - // often. The product string may contain characters that are not valid in a - // filename, so it must be sanitized. - std::string version_suffix = product; - base::ReplaceChars(version_suffix, "/\\", "_", &version_suffix); - return version_suffix; + // The product's version string can be arbitrary long. So use SHA1 to reduce + // the length to avoid path length limit (260 on Windows and 4096 on Linux). + // The SHA1 is then encoded using a path-safe base32 (final length = 32 + // characters). + // TODO(crbug.com/399642827): in future, we should be able to rely on + // auto-trimming ability of persistent caches, so even if there is a collision + // in version names, it would still be fine. It's still fine now because the + // collision probability of SHA1 is 1 in 2^80. + std::string sha1 = base::SHA1HashString(product); + return base32::Base32Encode(base::as_byte_span(sha1), + base32::Base32EncodePolicy::OMIT_PADDING); } // Returns the paths to the cache database and journal files. The format is:
diff --git a/components/viz/host/persistent_cache_sandboxed_file_factory.h b/components/viz/host/persistent_cache_sandboxed_file_factory.h index 16c8eb1..3668ff0 100644 --- a/components/viz/host/persistent_cache_sandboxed_file_factory.h +++ b/components/viz/host/persistent_cache_sandboxed_file_factory.h
@@ -21,7 +21,7 @@ // This class supports opening file handles in a persistent cache directory. // The handles can be forwarded to the GPU process to load & store blobs. // -// The persistent cache files are versioned based on the browser's product +// The persistent cache files are versioned based on the provided product // version. When a version change happens, the older versioned files will // be automatically deleted. TODO(crbug.com/399642827): This is a temporary // solution until PersistentCache supports max size limit and trimming. @@ -42,8 +42,8 @@ // Creates the persistent cache database and journal files. // `cache_id` is used to uniquely identify the cache type (e.g., - // 'dawngraphite'). `product` is the browser product string, used for - // versioning. Stale files from different versions are automatically deleted. + // 'dawngraphite'). `product` is used for versioning. Stale files from + // different versions are automatically deleted. std::optional<persistent_cache::BackendParams> CreateFiles( const CacheIdString& cache_id, const std::string& product);
diff --git a/content/browser/browser_context.cc b/content/browser/browser_context.cc index 99cf7ba..24c7c2f6 100644 --- a/content/browser/browser_context.cc +++ b/content/browser/browser_context.cc
@@ -474,8 +474,8 @@ } #if BUILDFLAG(IS_ANDROID) -net::HttpRequestHeaders BrowserContext::GetExtraHeadersForUrl(const GURL& url) { - return net::HttpRequestHeaders(); +std::string BrowserContext::GetExtraHeadersForUrl(const GURL& url) { + return std::string(); } #endif // BUILDFLAG(IS_ANDROID)
diff --git a/content/browser/direct_sockets/OWNERS b/content/browser/direct_sockets/OWNERS index 6007f05..4e54948 100644 --- a/content/browser/direct_sockets/OWNERS +++ b/content/browser/direct_sockets/OWNERS
@@ -1,4 +1,5 @@ greengrape@google.com +vkrot@google.com # For backup reillyg@chromium.org
diff --git a/content/browser/gpu/gpu_host_impl_persistent_cache_browsertest.cc b/content/browser/gpu/gpu_host_impl_persistent_cache_browsertest.cc index 2fca3ce..dacfaed7 100644 --- a/content/browser/gpu/gpu_host_impl_persistent_cache_browsertest.cc +++ b/content/browser/gpu/gpu_host_impl_persistent_cache_browsertest.cc
@@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/files/file_enumerator.h" #include "base/files/file_path_watcher.h" #include "base/files/file_util.h" #include "base/run_loop.h" @@ -183,14 +184,20 @@ WaitForSetChannelPersistentCacheFile(); - // The cache directory should exist and not be empty. - EXPECT_TRUE(base::PathExists(temp_dir_.GetPath())); - EXPECT_FALSE(base::IsDirectoryEmpty(temp_dir_.GetPath())); + // Get the cache directory. It should be the only child folder in the temp + // dir. + base::FileEnumerator enumerator(temp_dir_.GetPath(), false, + base::FileEnumerator::DIRECTORIES); + base::FilePath cache_dir = enumerator.Next(); + EXPECT_FALSE(cache_dir.empty()); + EXPECT_TRUE(enumerator.Next().empty()); + // Verify that the cache dir is not empty. + EXPECT_FALSE(base::IsDirectoryEmpty(cache_dir)); base::RunLoop run_loop; // Watch for cache directory changes base::FilePathWatcher watcher; - watcher.Watch(temp_dir_.GetPath(), base::FilePathWatcher::Type::kNonRecursive, + watcher.Watch(cache_dir, base::FilePathWatcher::Type::kRecursive, base::BindRepeating( [](base::RunLoop* run_loop, const base::FilePath& cache_dir, const base::FilePath& path, bool error) { @@ -198,7 +205,7 @@ run_loop->Quit(); } }, - &run_loop, temp_dir_.GetPath())); + &run_loop, cache_dir)); // Simulate a crash. viz::GpuHostImpl* gpu_host_impl = GpuProcessHost::Get()->gpu_host(); @@ -211,7 +218,7 @@ // The cache directory should be empty after the crash. run_loop.Run(); - EXPECT_TRUE(base::IsDirectoryEmpty(temp_dir_.GetPath())); + EXPECT_TRUE(base::IsDirectoryEmpty(cache_dir)); } #endif // BUILDFLAG(SKIA_USE_DAWN)
diff --git a/content/browser/preloading/prerender/prerender_host.cc b/content/browser/preloading/prerender/prerender_host.cc index f7de18547..9ef3abf1 100644 --- a/content/browser/preloading/prerender/prerender_host.cc +++ b/content/browser/preloading/prerender/prerender_host.cc
@@ -303,7 +303,7 @@ bool PrerenderHost::AreHttpRequestHeadersCompatible( const std::string& potential_activation_headers_str, #if BUILDFLAG(IS_ANDROID) - const net::HttpRequestHeaders& potential_activation_additional_headers, + const std::string& potential_activation_additional_headers_str, #endif // BUILDFLAG(IS_ANDROID) const std::string& prerender_headers_str, PreloadingTriggerType trigger_type, @@ -317,9 +317,8 @@ potential_activation_headers.AddHeadersFromString( potential_activation_headers_str); #if BUILDFLAG(IS_ANDROID) - potential_activation_headers.MergeFrom( - potential_activation_additional_headers); - + potential_activation_headers.AddHeadersFromString( + potential_activation_additional_headers_str); #endif // BUILDFLAG(IS_ANDROID) // `prerender_headers` contains the "Purpose: prefetch" and "Sec-Purpose: @@ -1050,18 +1049,18 @@ } #if BUILDFLAG(IS_ANDROID) - net::HttpRequestHeaders activation_additional_headers; + std::string activation_additional_headers_str; bool workaround_enabled = base::FeatureList::IsEnabled( kPrerenderActivationMismatchWebViewWorkaround); if (!workaround_enabled || !IsSpeculationRuleType(trigger_type())) { - activation_additional_headers = + activation_additional_headers_str = web_contents_->GetBrowserContext()->GetExtraHeadersForUrl( potential_activation_url); } #endif // BUILDFLAG(IS_ANDROID) if (!AreHttpRequestHeadersCompatible(potential_activation.headers, #if BUILDFLAG(IS_ANDROID) - activation_additional_headers, + activation_additional_headers_str, #endif // BUILDFLAG(IS_ANDROID) begin_params_->headers, trigger_type(), GetHistogramSuffix(),
diff --git a/content/browser/preloading/prerender/prerender_host.h b/content/browser/preloading/prerender/prerender_host.h index 6a9016bf..c157931 100644 --- a/content/browser/preloading/prerender/prerender_host.h +++ b/content/browser/preloading/prerender/prerender_host.h
@@ -186,7 +186,7 @@ static bool AreHttpRequestHeadersCompatible( const std::string& potential_activation_headers_str, #if BUILDFLAG(IS_ANDROID) - const net::HttpRequestHeaders& potential_activation_additional_headers, + const std::string& potential_activation_additional_headers_str, #endif // BUILDFLAG(IS_ANDROID) const std::string& prerender_headers_str, PreloadingTriggerType trigger_type,
diff --git a/content/browser/preloading/prerender/prerender_host_unittest.cc b/content/browser/preloading/prerender/prerender_host_unittest.cc index bc359c9..38be51e 100644 --- a/content/browser/preloading/prerender/prerender_host_unittest.cc +++ b/content/browser/preloading/prerender/prerender_host_unittest.cc
@@ -714,14 +714,10 @@ PrerenderFinalStatus::kActivationNavigationParameterMismatch); const std::string prerender_headers = "rtt: 1 \r\n downlink: 3"; const std::string potential_activation_headers = "rtt: 2 \r\n downlink: 4"; -#if BUILDFLAG(IS_ANDROID) - net::HttpRequestHeaders potential_activation_additional_headers; -#endif - EXPECT_TRUE(PrerenderHost::AreHttpRequestHeadersCompatible( potential_activation_headers, #if BUILDFLAG(IS_ANDROID) - potential_activation_additional_headers, + /*potential_activation_additional_headers=*/"", #endif // BUILDFLAG(IS_ANDROID) prerender_headers, PreloadingTriggerType::kSpeculationRule, /*embedder_histogram_suffix=*/"", /*allow_x_header_mismatch=*/false, @@ -733,14 +729,11 @@ PrerenderFinalStatus::kActivationNavigationParameterMismatch); const std::string prerender_headers = "x-hello: 1"; const std::string potential_activation_headers = "X-world: 2"; -#if BUILDFLAG(IS_ANDROID) - net::HttpRequestHeaders potential_activation_additional_headers; -#endif EXPECT_FALSE(PrerenderHost::AreHttpRequestHeadersCompatible( potential_activation_headers, #if BUILDFLAG(IS_ANDROID) - potential_activation_additional_headers, + /*potential_activation_additional_headers=*/"", #endif // BUILDFLAG(IS_ANDROID) prerender_headers, PreloadingTriggerType::kSpeculationRule, /*embedder_histogram_suffix=*/"", /*allow_x_header_mismatch=*/false, @@ -749,7 +742,7 @@ EXPECT_TRUE(PrerenderHost::AreHttpRequestHeadersCompatible( potential_activation_headers, #if BUILDFLAG(IS_ANDROID) - potential_activation_additional_headers, + /*potential_activation_additional_headers=*/"", #endif // BUILDFLAG(IS_ANDROID) prerender_headers, PreloadingTriggerType::kSpeculationRule, /*embedder_histogram_suffix=*/"", /*allow_x_header_mismatch=*/true,
diff --git a/content/public/browser/browser_context.h b/content/public/browser/browser_context.h index 5078874..d642daa 100644 --- a/content/public/browser/browser_context.h +++ b/content/public/browser/browser_context.h
@@ -509,7 +509,7 @@ #if BUILDFLAG(IS_ANDROID) // Returns extra request headers to be set when navigation happens for `url`. // This function is designed for the headers provided by WebView.loadUrl(). - virtual net::HttpRequestHeaders GetExtraHeadersForUrl(const GURL& url); + virtual std::string GetExtraHeadersForUrl(const GURL& url); #endif // BUILDFLAG(IS_ANDROID) private:
diff --git a/extensions/browser/extension_registrar.cc b/extensions/browser/extension_registrar.cc index 200d417..c92776d8 100644 --- a/extensions/browser/extension_registrar.cc +++ b/extensions/browser/extension_registrar.cc
@@ -1033,6 +1033,12 @@ void ExtensionRegistrar::DeactivateExtension(const Extension* extension, UnloadedExtensionReason reason) { + // NOTE: Call `TriggerOnUnloaded` before `DeactivateTaskQueueForExtension`. + // If an extension service worker is running, this stops it, which triggers a + // synchronous notification. This notification updates the + // `ServiceWorkerState` and untracks the worker from `ProcessManager`. + // `ServiceWorkerTaskQueue` can then operate in a consistent state, safely + // assuming the worker is no longer active. registry_->TriggerOnUnloaded(extension, reason); renderer_helper_->OnExtensionUnloaded(*extension); DeactivateTaskQueueForExtension(browser_context_, extension);
diff --git a/extensions/browser/service_worker/service_worker_task_queue.cc b/extensions/browser/service_worker/service_worker_task_queue.cc index 7c4ed2b..bab2a2b9 100644 --- a/extensions/browser/service_worker/service_worker_task_queue.cc +++ b/extensions/browser/service_worker/service_worker_task_queue.cc
@@ -536,6 +536,10 @@ extension_id, browser_context_->UniqueId(), *activation_token}; ServiceWorkerState* worker_state = GetWorkerState(context_id); DCHECK(worker_state); + // At this point `ExtensionRegistrar` has already triggered a worker stop + // synchronously via `ServiceWorkerManager::OnExtensionUnloaded`, as part of + // the deactivation process. + DCHECK(!worker_state->IsReady()); RunAndClearPendingTasksWithNullContext(context_id); worker_state_observations_.RemoveObservation(worker_state);
diff --git a/gpu/webgpu/.gitignore b/gpu/webgpu/.gitignore index c80fb99..99ab72c9 100644 --- a/gpu/webgpu/.gitignore +++ b/gpu/webgpu/.gitignore
@@ -1,2 +1,3 @@ ### Dawn version file (generated as part of DEPS hook) -DAWN_VERSION \ No newline at end of file +DAWN_VERSION +dawn_commit_hash.h \ No newline at end of file
diff --git a/gpu/webgpu/BUILD.gn b/gpu/webgpu/BUILD.gn index 2d5d063..64403fdb 100644 --- a/gpu/webgpu/BUILD.gn +++ b/gpu/webgpu/BUILD.gn
@@ -3,6 +3,9 @@ # found in the LICENSE file. source_set("common") { - sources = [ "callback.h" ] + sources = [ + "callback.h", + "dawn_commit_hash.h", + ] public_deps = [ "//base" ] }
diff --git a/headless/test/data/structured_doc_table_caption.html b/headless/test/data/structured_doc_table_caption.html new file mode 100644 index 0000000..a21aab8 --- /dev/null +++ b/headless/test/data/structured_doc_table_caption.html
@@ -0,0 +1,14 @@ +<!DOCTYPE html> +<html lang="en"> +<body> +<table> + <tr> + <td>Cell 1</td> + </tr> + <caption>Caption should become first child of Table</caption> + <tr> + <td>Cell 2</td> + </tr> +</table> +</body> +</html>
diff --git a/headless/test/data/structured_doc_table_caption_expected.txt b/headless/test/data/structured_doc_table_caption_expected.txt new file mode 100644 index 0000000..3172e3b --- /dev/null +++ b/headless/test/data/structured_doc_table_caption_expected.txt
@@ -0,0 +1,49 @@ +{ + "lang": "en", + "type": "Document", + "~children": [ { + "type": "Table", + "~children": [ { + "type": "Caption", + "~children": [ { + "type": "NonStruct" + } ] + }, { + "type": "TR", + "~children": [ { + "attributes": [ { + "Headers": [ ], + "O": "Table" + }, { + "O": "Table", + "RowSpan": 1.0 + }, { + "ColSpan": 1.0, + "O": "Table" + } ], + "type": "TD", + "~children": [ { + "type": "NonStruct" + } ] + } ] + }, { + "type": "TR", + "~children": [ { + "attributes": [ { + "Headers": [ ], + "O": "Table" + }, { + "O": "Table", + "RowSpan": 1.0 + }, { + "ColSpan": 1.0, + "O": "Table" + } ], + "type": "TD", + "~children": [ { + "type": "NonStruct" + } ] + } ] + } ] + } ] +}
diff --git a/headless/test/headless_printtopdf_browsertest.cc b/headless/test/headless_printtopdf_browsertest.cc index b1bd770e..48b5730 100644 --- a/headless/test/headless_printtopdf_browsertest.cc +++ b/headless/test/headless_printtopdf_browsertest.cc
@@ -630,6 +630,10 @@ RunTaggedPDFTest("/structured_doc_table.html"); } +IN_PROC_BROWSER_TEST_F(HeadlessTaggedPDFBrowserTest, TableCaption) { + RunTaggedPDFTest("/structured_doc_table_caption.html"); +} + IN_PROC_BROWSER_TEST_F(HeadlessTaggedPDFBrowserTest, Treegrid) { RunTaggedPDFTest("/structured_doc_treegrid.html"); }
diff --git a/headless/test/headless_protocol_browsertest.cc b/headless/test/headless_protocol_browsertest.cc index a472036..8ce8f884 100644 --- a/headless/test/headless_protocol_browsertest.cc +++ b/headless/test/headless_protocol_browsertest.cc
@@ -632,7 +632,13 @@ HEADLESS_PROTOCOL_TEST(MoveWindowBetweenScreens, "shared/move-window-between-screens.js") -HEADLESS_PROTOCOL_TEST(CreateTargetSecondaryScreen, +// This fails on Mac with RenderDocument enabled, http://crbug.com/446689489. +#if BUILDFLAG(IS_MAC) +#define MAYBE_CreateTargetSecondaryScreen DISABLED_CreateTargetSecondaryScreen +#else +#define MAYBE_CreateTargetSecondaryScreen CreateTargetSecondaryScreen +#endif +HEADLESS_PROTOCOL_TEST(MAYBE_CreateTargetSecondaryScreen, "shared/create-target-secondary-screen.js") HEADLESS_PROTOCOL_TEST(CreateTargetWindowState,
diff --git a/infra/config/generated/builders/ci/Dawn Android arm Builder/targets/chromium.dawn.json b/infra/config/generated/builders/ci/Dawn Android arm Builder/targets/chromium.dawn.json index 0dfb2d1..51ceedc 100644 --- a/infra/config/generated/builders/ci/Dawn Android arm Builder/targets/chromium.dawn.json +++ b/infra/config/generated/builders/ci/Dawn Android arm Builder/targets/chromium.dawn.json
@@ -106,7 +106,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -148,7 +148,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -190,7 +190,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -233,7 +233,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/ci/Dawn Android arm DEPS Builder/targets/chromium.dawn.json b/infra/config/generated/builders/ci/Dawn Android arm DEPS Builder/targets/chromium.dawn.json index a4e290e5e..db1f0e8 100644 --- a/infra/config/generated/builders/ci/Dawn Android arm DEPS Builder/targets/chromium.dawn.json +++ b/infra/config/generated/builders/ci/Dawn Android arm DEPS Builder/targets/chromium.dawn.json
@@ -106,7 +106,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -148,7 +148,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -190,7 +190,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -233,7 +233,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Android arm DEPS Release \050Pixel 4\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Android arm DEPS Release \050Pixel 4\051/targets/chromium.dawn.json" index a4e290e5e..db1f0e8 100644 --- "a/infra/config/generated/builders/ci/Dawn Android arm DEPS Release \050Pixel 4\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Android arm DEPS Release \050Pixel 4\051/targets/chromium.dawn.json"
@@ -106,7 +106,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -148,7 +148,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -190,7 +190,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -233,7 +233,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Android arm Release \050Pixel 4\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Android arm Release \050Pixel 4\051/targets/chromium.dawn.json" index 0dfb2d1..51ceedc 100644 --- "a/infra/config/generated/builders/ci/Dawn Android arm Release \050Pixel 4\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Android arm Release \050Pixel 4\051/targets/chromium.dawn.json"
@@ -106,7 +106,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -148,7 +148,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -190,7 +190,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -233,7 +233,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/ci/Dawn Android arm64 Builder/targets/chromium.dawn.json b/infra/config/generated/builders/ci/Dawn Android arm64 Builder/targets/chromium.dawn.json index 54825c0..fa929cbc 100644 --- a/infra/config/generated/builders/ci/Dawn Android arm64 Builder/targets/chromium.dawn.json +++ b/infra/config/generated/builders/ci/Dawn Android arm64 Builder/targets/chromium.dawn.json
@@ -107,7 +107,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -150,7 +150,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -193,7 +193,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -235,7 +235,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -278,7 +278,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -453,7 +453,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -495,7 +495,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -537,7 +537,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -578,7 +578,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -620,7 +620,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/ci/Dawn Android arm64 DEPS Builder/targets/chromium.dawn.json b/infra/config/generated/builders/ci/Dawn Android arm64 DEPS Builder/targets/chromium.dawn.json index e672b0f..52976f6 100644 --- a/infra/config/generated/builders/ci/Dawn Android arm64 DEPS Builder/targets/chromium.dawn.json +++ b/infra/config/generated/builders/ci/Dawn Android arm64 DEPS Builder/targets/chromium.dawn.json
@@ -105,7 +105,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -147,7 +147,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -189,7 +189,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -230,7 +230,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -272,7 +272,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Android arm64 DEPS Release \050Pixel 6\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Android arm64 DEPS Release \050Pixel 6\051/targets/chromium.dawn.json" index e672b0f..52976f6 100644 --- "a/infra/config/generated/builders/ci/Dawn Android arm64 DEPS Release \050Pixel 6\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Android arm64 DEPS Release \050Pixel 6\051/targets/chromium.dawn.json"
@@ -105,7 +105,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -147,7 +147,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -189,7 +189,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -230,7 +230,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -272,7 +272,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Android arm64 Experimental Release \050Pixel 6\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Android arm64 Experimental Release \050Pixel 6\051/targets/chromium.dawn.json" index ff5205b8..3301cb2 100644 --- "a/infra/config/generated/builders/ci/Dawn Android arm64 Experimental Release \050Pixel 6\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Android arm64 Experimental Release \050Pixel 6\051/targets/chromium.dawn.json"
@@ -107,7 +107,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -150,7 +150,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -193,7 +193,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -235,7 +235,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -278,7 +278,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Android arm64 Release \050Pixel 6\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Android arm64 Release \050Pixel 6\051/targets/chromium.dawn.json" index 709359a..c0697956 100644 --- "a/infra/config/generated/builders/ci/Dawn Android arm64 Release \050Pixel 6\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Android arm64 Release \050Pixel 6\051/targets/chromium.dawn.json"
@@ -105,7 +105,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -147,7 +147,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -189,7 +189,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -230,7 +230,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -272,7 +272,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/ci/Dawn Linux x64 Builder/targets/chromium.dawn.json b/infra/config/generated/builders/ci/Dawn Linux x64 Builder/targets/chromium.dawn.json index 5954c8a..a8d79f7 100644 --- a/infra/config/generated/builders/ci/Dawn Linux x64 Builder/targets/chromium.dawn.json +++ b/infra/config/generated/builders/ci/Dawn Linux x64 Builder/targets/chromium.dawn.json
@@ -389,7 +389,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_min_es31_tests", "resultdb": { "enable": true, @@ -428,7 +428,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -468,7 +468,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -507,7 +507,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -546,7 +546,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -584,7 +584,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -624,7 +624,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -732,7 +732,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -774,7 +774,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true, @@ -1140,7 +1140,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -1178,7 +1178,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -1218,7 +1218,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -1323,7 +1323,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -1365,7 +1365,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true, @@ -1740,7 +1740,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -1780,7 +1780,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -1819,7 +1819,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -1858,7 +1858,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -1896,7 +1896,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -1936,7 +1936,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -2044,7 +2044,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -2086,7 +2086,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true, @@ -2450,7 +2450,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_min_es31_tests", "resultdb": { "enable": true, @@ -2488,7 +2488,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -2527,7 +2527,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -2565,7 +2565,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -2603,7 +2603,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -2640,7 +2640,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -2679,7 +2679,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -2784,7 +2784,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -2825,7 +2825,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Builder/targets/chromium.dawn.json b/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Builder/targets/chromium.dawn.json index b9aebc92..ebdfbf1 100644 --- a/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Builder/targets/chromium.dawn.json +++ b/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Builder/targets/chromium.dawn.json
@@ -342,7 +342,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -380,7 +380,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -420,7 +420,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -525,7 +525,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -567,7 +567,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true, @@ -930,7 +930,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_min_es31_tests", "resultdb": { "enable": true, @@ -968,7 +968,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -1007,7 +1007,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -1045,7 +1045,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -1083,7 +1083,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -1120,7 +1120,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -1159,7 +1159,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -1264,7 +1264,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -1305,7 +1305,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Release \050Intel UHD 630\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Release \050Intel UHD 630\051/targets/chromium.dawn.json" index 5d0229a..3ac45dfd 100644 --- "a/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Release \050Intel UHD 630\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Release \050Intel UHD 630\051/targets/chromium.dawn.json"
@@ -341,7 +341,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -379,7 +379,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -419,7 +419,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -524,7 +524,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -566,7 +566,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Release \050NVIDIA\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Release \050NVIDIA\051/targets/chromium.dawn.json" index f5028f8..5e6993c 100644 --- "a/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Release \050NVIDIA\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Linux x64 DEPS Release \050NVIDIA\051/targets/chromium.dawn.json"
@@ -339,7 +339,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_min_es31_tests", "resultdb": { "enable": true, @@ -377,7 +377,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -416,7 +416,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -454,7 +454,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -492,7 +492,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -529,7 +529,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -568,7 +568,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -673,7 +673,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -714,7 +714,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Linux x64 Experimental Release \050NVIDIA GTX 1660\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Linux x64 Experimental Release \050NVIDIA GTX 1660\051/targets/chromium.dawn.json" index a0ced6a..9a14030 100644 --- "a/infra/config/generated/builders/ci/Dawn Linux x64 Experimental Release \050NVIDIA GTX 1660\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Linux x64 Experimental Release \050NVIDIA GTX 1660\051/targets/chromium.dawn.json"
@@ -350,7 +350,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_min_es31_tests", "resultdb": { "enable": true, @@ -389,7 +389,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -429,7 +429,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -468,7 +468,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -507,7 +507,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -545,7 +545,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -585,7 +585,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -693,7 +693,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -735,7 +735,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Linux x64 Release \050Intel UHD 630\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Linux x64 Release \050Intel UHD 630\051/targets/chromium.dawn.json" index 1dddd9d..511da78 100644 --- "a/infra/config/generated/builders/ci/Dawn Linux x64 Release \050Intel UHD 630\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Linux x64 Release \050Intel UHD 630\051/targets/chromium.dawn.json"
@@ -341,7 +341,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -379,7 +379,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -419,7 +419,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -524,7 +524,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -566,7 +566,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Linux x64 Release \050Intel UHD 770\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Linux x64 Release \050Intel UHD 770\051/targets/chromium.dawn.json" index 685e2c7..31f2607 100644 --- "a/infra/config/generated/builders/ci/Dawn Linux x64 Release \050Intel UHD 770\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Linux x64 Release \050Intel UHD 770\051/targets/chromium.dawn.json"
@@ -351,7 +351,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -391,7 +391,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -430,7 +430,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -469,7 +469,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -507,7 +507,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -547,7 +547,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -655,7 +655,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -697,7 +697,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Linux x64 Release \050NVIDIA\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Linux x64 Release \050NVIDIA\051/targets/chromium.dawn.json" index af9347d9..81156db 100644 --- "a/infra/config/generated/builders/ci/Dawn Linux x64 Release \050NVIDIA\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Linux x64 Release \050NVIDIA\051/targets/chromium.dawn.json"
@@ -339,7 +339,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_min_es31_tests", "resultdb": { "enable": true, @@ -377,7 +377,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -416,7 +416,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -454,7 +454,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -492,7 +492,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -529,7 +529,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -568,7 +568,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -673,7 +673,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -714,7 +714,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/ci/Dawn Mac arm64 Builder/targets/chromium.dawn.json b/infra/config/generated/builders/ci/Dawn Mac arm64 Builder/targets/chromium.dawn.json index b810606..fef22fab 100644 --- a/infra/config/generated/builders/ci/Dawn Mac arm64 Builder/targets/chromium.dawn.json +++ b/infra/config/generated/builders/ci/Dawn Mac arm64 Builder/targets/chromium.dawn.json
@@ -413,7 +413,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -455,7 +455,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -497,7 +497,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -538,7 +538,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -581,7 +581,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -694,7 +694,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -739,7 +739,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/ci/Dawn Mac arm64 DEPS Builder/targets/chromium.dawn.json b/infra/config/generated/builders/ci/Dawn Mac arm64 DEPS Builder/targets/chromium.dawn.json index d6db9a8..4496b68 100644 --- a/infra/config/generated/builders/ci/Dawn Mac arm64 DEPS Builder/targets/chromium.dawn.json +++ b/infra/config/generated/builders/ci/Dawn Mac arm64 DEPS Builder/targets/chromium.dawn.json
@@ -373,7 +373,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -415,7 +415,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -457,7 +457,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -498,7 +498,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -541,7 +541,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -654,7 +654,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -699,7 +699,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Mac arm64 DEPS Release \050Apple M2\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Mac arm64 DEPS Release \050Apple M2\051/targets/chromium.dawn.json" index d6db9a8..4496b68 100644 --- "a/infra/config/generated/builders/ci/Dawn Mac arm64 DEPS Release \050Apple M2\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Mac arm64 DEPS Release \050Apple M2\051/targets/chromium.dawn.json"
@@ -373,7 +373,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -415,7 +415,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -457,7 +457,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -498,7 +498,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -541,7 +541,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -654,7 +654,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -699,7 +699,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Mac arm64 Release \050Apple M2\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Mac arm64 Release \050Apple M2\051/targets/chromium.dawn.json" index a6ae873..f3d3a443 100644 --- "a/infra/config/generated/builders/ci/Dawn Mac arm64 Release \050Apple M2\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Mac arm64 Release \050Apple M2\051/targets/chromium.dawn.json"
@@ -373,7 +373,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -415,7 +415,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -457,7 +457,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -498,7 +498,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -541,7 +541,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -654,7 +654,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -699,7 +699,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/ci/Dawn Mac x64 Builder/targets/chromium.dawn.json b/infra/config/generated/builders/ci/Dawn Mac x64 Builder/targets/chromium.dawn.json index bba013d..cdbc77c3 100644 --- a/infra/config/generated/builders/ci/Dawn Mac x64 Builder/targets/chromium.dawn.json +++ b/infra/config/generated/builders/ci/Dawn Mac x64 Builder/targets/chromium.dawn.json
@@ -373,7 +373,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -416,7 +416,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -529,7 +529,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -574,7 +574,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true, @@ -952,7 +952,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -993,7 +993,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -1100,7 +1100,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -1143,7 +1143,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true, @@ -1530,7 +1530,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -1572,7 +1572,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -1682,7 +1682,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -1726,7 +1726,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true, @@ -2092,7 +2092,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -2132,7 +2132,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -2236,7 +2236,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -2278,7 +2278,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/ci/Dawn Mac x64 DEPS Builder/targets/chromium.dawn.json b/infra/config/generated/builders/ci/Dawn Mac x64 DEPS Builder/targets/chromium.dawn.json index 1d929f0..4bce513 100644 --- a/infra/config/generated/builders/ci/Dawn Mac x64 DEPS Builder/targets/chromium.dawn.json +++ b/infra/config/generated/builders/ci/Dawn Mac x64 DEPS Builder/targets/chromium.dawn.json
@@ -362,7 +362,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -404,7 +404,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -514,7 +514,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -558,7 +558,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true, @@ -924,7 +924,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -964,7 +964,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -1068,7 +1068,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -1110,7 +1110,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Mac x64 DEPS Release \050AMD\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Mac x64 DEPS Release \050AMD\051/targets/chromium.dawn.json" index e69c753..41a1103 100644 --- "a/infra/config/generated/builders/ci/Dawn Mac x64 DEPS Release \050AMD\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Mac x64 DEPS Release \050AMD\051/targets/chromium.dawn.json"
@@ -361,7 +361,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -403,7 +403,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -513,7 +513,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -557,7 +557,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Mac x64 DEPS Release \050Intel\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Mac x64 DEPS Release \050Intel\051/targets/chromium.dawn.json" index 47de3e4..dc533a9 100644 --- "a/infra/config/generated/builders/ci/Dawn Mac x64 DEPS Release \050Intel\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Mac x64 DEPS Release \050Intel\051/targets/chromium.dawn.json"
@@ -339,7 +339,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -379,7 +379,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -483,7 +483,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -525,7 +525,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Mac x64 Experimental Release \050AMD\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Mac x64 Experimental Release \050AMD\051/targets/chromium.dawn.json" index ad8e3742..9fda17f 100644 --- "a/infra/config/generated/builders/ci/Dawn Mac x64 Experimental Release \050AMD\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Mac x64 Experimental Release \050AMD\051/targets/chromium.dawn.json"
@@ -372,7 +372,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -415,7 +415,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -528,7 +528,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -573,7 +573,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Mac x64 Experimental Release \050Intel\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Mac x64 Experimental Release \050Intel\051/targets/chromium.dawn.json" index 2d993d13..70af4e9 100644 --- "a/infra/config/generated/builders/ci/Dawn Mac x64 Experimental Release \050Intel\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Mac x64 Experimental Release \050Intel\051/targets/chromium.dawn.json"
@@ -350,7 +350,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -391,7 +391,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -498,7 +498,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -541,7 +541,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Mac x64 Release \050AMD\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Mac x64 Release \050AMD\051/targets/chromium.dawn.json" index 282ba27..4ae09a3 100644 --- "a/infra/config/generated/builders/ci/Dawn Mac x64 Release \050AMD\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Mac x64 Release \050AMD\051/targets/chromium.dawn.json"
@@ -361,7 +361,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -403,7 +403,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -513,7 +513,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -557,7 +557,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Mac x64 Release \050Intel\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Mac x64 Release \050Intel\051/targets/chromium.dawn.json" index ab53312..db96c64 100644 --- "a/infra/config/generated/builders/ci/Dawn Mac x64 Release \050Intel\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Mac x64 Release \050Intel\051/targets/chromium.dawn.json"
@@ -339,7 +339,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -379,7 +379,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -483,7 +483,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -525,7 +525,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/ci/Dawn Win10 x64 ASAN Builder/targets/chromium.dawn.json b/infra/config/generated/builders/ci/Dawn Win10 x64 ASAN Builder/targets/chromium.dawn.json index 25ae22a..a67e355b 100644 --- a/infra/config/generated/builders/ci/Dawn Win10 x64 ASAN Builder/targets/chromium.dawn.json +++ b/infra/config/generated/builders/ci/Dawn Win10 x64 ASAN Builder/targets/chromium.dawn.json
@@ -341,7 +341,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -380,7 +380,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -808,7 +808,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -847,7 +847,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -887,7 +887,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -926,7 +926,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -964,7 +964,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Win10 x64 ASAN Release \050Intel\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Win10 x64 ASAN Release \050Intel\051/targets/chromium.dawn.json" index 5f2aac2a..9787b0ea 100644 --- "a/infra/config/generated/builders/ci/Dawn Win10 x64 ASAN Release \050Intel\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Win10 x64 ASAN Release \050Intel\051/targets/chromium.dawn.json"
@@ -340,7 +340,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -379,7 +379,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Win10 x64 ASAN Release \050NVIDIA\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Win10 x64 ASAN Release \050NVIDIA\051/targets/chromium.dawn.json" index 5aaa8f1..929f63f 100644 --- "a/infra/config/generated/builders/ci/Dawn Win10 x64 ASAN Release \050NVIDIA\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Win10 x64 ASAN Release \050NVIDIA\051/targets/chromium.dawn.json"
@@ -340,7 +340,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -379,7 +379,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -419,7 +419,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -458,7 +458,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -496,7 +496,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/ci/Dawn Win10 x64 Builder/targets/chromium.dawn.json b/infra/config/generated/builders/ci/Dawn Win10 x64 Builder/targets/chromium.dawn.json index 485f296b..d0053aef7 100644 --- a/infra/config/generated/builders/ci/Dawn Win10 x64 Builder/targets/chromium.dawn.json +++ b/infra/config/generated/builders/ci/Dawn Win10 x64 Builder/targets/chromium.dawn.json
@@ -452,7 +452,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -493,7 +493,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -536,7 +536,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_with_validation_tests", "resultdb": { "enable": true, @@ -577,7 +577,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -617,7 +617,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -656,7 +656,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -697,7 +697,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -804,7 +804,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -847,7 +847,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true, @@ -1273,7 +1273,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -1313,7 +1313,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -1355,7 +1355,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_with_validation_tests", "resultdb": { "enable": true, @@ -1395,7 +1395,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -1434,7 +1434,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -1472,7 +1472,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -1512,7 +1512,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -1616,7 +1616,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -1658,7 +1658,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true, @@ -2051,7 +2051,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -2093,7 +2093,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_with_validation_tests", "resultdb": { "enable": true, @@ -2132,7 +2132,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -2236,7 +2236,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -2660,7 +2660,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -2700,7 +2700,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -2742,7 +2742,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_with_validation_tests", "resultdb": { "enable": true, @@ -2782,7 +2782,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -2821,7 +2821,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -2859,7 +2859,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -2899,7 +2899,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -3003,7 +3003,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -3045,7 +3045,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/ci/Dawn Win10 x64 DEPS Builder/targets/chromium.dawn.json b/infra/config/generated/builders/ci/Dawn Win10 x64 DEPS Builder/targets/chromium.dawn.json index 4bfb9ff9..145f949 100644 --- a/infra/config/generated/builders/ci/Dawn Win10 x64 DEPS Builder/targets/chromium.dawn.json +++ b/infra/config/generated/builders/ci/Dawn Win10 x64 DEPS Builder/targets/chromium.dawn.json
@@ -369,7 +369,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -411,7 +411,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_with_validation_tests", "resultdb": { "enable": true, @@ -450,7 +450,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -554,7 +554,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -978,7 +978,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -1018,7 +1018,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -1060,7 +1060,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_with_validation_tests", "resultdb": { "enable": true, @@ -1100,7 +1100,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -1139,7 +1139,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -1177,7 +1177,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -1217,7 +1217,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -1321,7 +1321,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -1363,7 +1363,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Win10 x64 DEPS Release \050Intel\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Win10 x64 DEPS Release \050Intel\051/targets/chromium.dawn.json" index 37046ae5..9bb612a8 100644 --- "a/infra/config/generated/builders/ci/Dawn Win10 x64 DEPS Release \050Intel\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Win10 x64 DEPS Release \050Intel\051/targets/chromium.dawn.json"
@@ -368,7 +368,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -410,7 +410,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_with_validation_tests", "resultdb": { "enable": true, @@ -449,7 +449,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -553,7 +553,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Win10 x64 DEPS Release \050NVIDIA\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Win10 x64 DEPS Release \050NVIDIA\051/targets/chromium.dawn.json" index 0c05207..ed3a1a31 100644 --- "a/infra/config/generated/builders/ci/Dawn Win10 x64 DEPS Release \050NVIDIA\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Win10 x64 DEPS Release \050NVIDIA\051/targets/chromium.dawn.json"
@@ -399,7 +399,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -439,7 +439,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -481,7 +481,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_with_validation_tests", "resultdb": { "enable": true, @@ -521,7 +521,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -560,7 +560,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -598,7 +598,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -638,7 +638,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -742,7 +742,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -784,7 +784,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Win10 x64 Experimental Release \050NVIDIA\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Win10 x64 Experimental Release \050NVIDIA\051/targets/chromium.dawn.json" index ec47d43..7a5a73d 100644 --- "a/infra/config/generated/builders/ci/Dawn Win10 x64 Experimental Release \050NVIDIA\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Win10 x64 Experimental Release \050NVIDIA\051/targets/chromium.dawn.json"
@@ -413,7 +413,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -454,7 +454,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -497,7 +497,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_with_validation_tests", "resultdb": { "enable": true, @@ -538,7 +538,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -578,7 +578,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -617,7 +617,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -658,7 +658,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -765,7 +765,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -808,7 +808,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Win10 x64 Release \050Intel UHD 770\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Win10 x64 Release \050Intel UHD 770\051/targets/chromium.dawn.json" index 45c73a7d5..9c1d85e9 100644 --- "a/infra/config/generated/builders/ci/Dawn Win10 x64 Release \050Intel UHD 770\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Win10 x64 Release \050Intel UHD 770\051/targets/chromium.dawn.json"
@@ -400,7 +400,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -440,7 +440,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -482,7 +482,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_with_validation_tests", "resultdb": { "enable": true, @@ -522,7 +522,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -561,7 +561,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -599,7 +599,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -639,7 +639,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -743,7 +743,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -785,7 +785,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Win10 x64 Release \050Intel\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Win10 x64 Release \050Intel\051/targets/chromium.dawn.json" index eca94212..43720b5 100644 --- "a/infra/config/generated/builders/ci/Dawn Win10 x64 Release \050Intel\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Win10 x64 Release \050Intel\051/targets/chromium.dawn.json"
@@ -368,7 +368,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -410,7 +410,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_with_validation_tests", "resultdb": { "enable": true, @@ -449,7 +449,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -553,7 +553,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Win10 x64 Release \050NVIDIA\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Win10 x64 Release \050NVIDIA\051/targets/chromium.dawn.json" index 99ea545..a7b7d61 100644 --- "a/infra/config/generated/builders/ci/Dawn Win10 x64 Release \050NVIDIA\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Win10 x64 Release \050NVIDIA\051/targets/chromium.dawn.json"
@@ -399,7 +399,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -439,7 +439,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -481,7 +481,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_with_validation_tests", "resultdb": { "enable": true, @@ -521,7 +521,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -560,7 +560,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -598,7 +598,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -638,7 +638,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -742,7 +742,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -784,7 +784,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/ci/Dawn Win10 x86 Builder/targets/chromium.dawn.json b/infra/config/generated/builders/ci/Dawn Win10 x86 Builder/targets/chromium.dawn.json index 468f224..171be0d 100644 --- a/infra/config/generated/builders/ci/Dawn Win10 x86 Builder/targets/chromium.dawn.json +++ b/infra/config/generated/builders/ci/Dawn Win10 x86 Builder/targets/chromium.dawn.json
@@ -392,7 +392,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -435,7 +435,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_with_validation_tests", "resultdb": { "enable": true, @@ -542,7 +542,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -585,7 +585,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true, @@ -952,7 +952,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -1056,7 +1056,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -1422,7 +1422,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -1526,7 +1526,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -1568,7 +1568,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/ci/Dawn Win10 x86 DEPS Builder/targets/chromium.dawn.json b/infra/config/generated/builders/ci/Dawn Win10 x86 DEPS Builder/targets/chromium.dawn.json index 072053e..17b4261 100644 --- a/infra/config/generated/builders/ci/Dawn Win10 x86 DEPS Builder/targets/chromium.dawn.json +++ b/infra/config/generated/builders/ci/Dawn Win10 x86 DEPS Builder/targets/chromium.dawn.json
@@ -342,7 +342,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -446,7 +446,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -812,7 +812,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -916,7 +916,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -958,7 +958,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Win10 x86 DEPS Release \050Intel\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Win10 x86 DEPS Release \050Intel\051/targets/chromium.dawn.json" index 2538c08..4cd1f21b 100644 --- "a/infra/config/generated/builders/ci/Dawn Win10 x86 DEPS Release \050Intel\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Win10 x86 DEPS Release \050Intel\051/targets/chromium.dawn.json"
@@ -341,7 +341,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -445,7 +445,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Win10 x86 DEPS Release \050NVIDIA\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Win10 x86 DEPS Release \050NVIDIA\051/targets/chromium.dawn.json" index 1a83178..7fd350a 100644 --- "a/infra/config/generated/builders/ci/Dawn Win10 x86 DEPS Release \050NVIDIA\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Win10 x86 DEPS Release \050NVIDIA\051/targets/chromium.dawn.json"
@@ -341,7 +341,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -445,7 +445,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -487,7 +487,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Win10 x86 Experimental Release \050NVIDIA\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Win10 x86 Experimental Release \050NVIDIA\051/targets/chromium.dawn.json" index 45ccbe0b..a2cc4607 100644 --- "a/infra/config/generated/builders/ci/Dawn Win10 x86 Experimental Release \050NVIDIA\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Win10 x86 Experimental Release \050NVIDIA\051/targets/chromium.dawn.json"
@@ -353,7 +353,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -396,7 +396,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_with_validation_tests", "resultdb": { "enable": true, @@ -503,7 +503,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -546,7 +546,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Win10 x86 Release \050Intel\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Win10 x86 Release \050Intel\051/targets/chromium.dawn.json" index 88efd193..87b152d 100644 --- "a/infra/config/generated/builders/ci/Dawn Win10 x86 Release \050Intel\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Win10 x86 Release \050Intel\051/targets/chromium.dawn.json"
@@ -341,7 +341,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -445,7 +445,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true,
diff --git "a/infra/config/generated/builders/ci/Dawn Win10 x86 Release \050NVIDIA\051/targets/chromium.dawn.json" "b/infra/config/generated/builders/ci/Dawn Win10 x86 Release \050NVIDIA\051/targets/chromium.dawn.json" index 7a136f1d..92765d5 100644 --- "a/infra/config/generated/builders/ci/Dawn Win10 x86 Release \050NVIDIA\051/targets/chromium.dawn.json" +++ "b/infra/config/generated/builders/ci/Dawn Win10 x86 Release \050NVIDIA\051/targets/chromium.dawn.json"
@@ -341,7 +341,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -445,7 +445,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -487,7 +487,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/ci/linux-code-coverage/targets/chromium.coverage.json b/infra/config/generated/builders/ci/linux-code-coverage/targets/chromium.coverage.json index 48d2982..190f14a 100644 --- a/infra/config/generated/builders/ci/linux-code-coverage/targets/chromium.coverage.json +++ b/infra/config/generated/builders/ci/linux-code-coverage/targets/chromium.coverage.json
@@ -2202,7 +2202,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -2238,7 +2238,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/ci/linux-prompt-evals/properties.json b/infra/config/generated/builders/ci/linux-prompt-evals/properties.json index fcb60e7..4d180d83 100644 --- a/infra/config/generated/builders/ci/linux-prompt-evals/properties.json +++ b/infra/config/generated/builders/ci/linux-prompt-evals/properties.json
@@ -34,6 +34,17 @@ ] } }, + "$build/siso": { + "configs": [ + "builder" + ], + "enable_cloud_monitoring": true, + "enable_cloud_profiler": true, + "enable_cloud_trace": true, + "experiments": [], + "metrics_project": "chromium-reclient-metrics", + "project": "rbe-chromium-trusted" + }, "$recipe_engine/resultdb/test_presentation": { "column_keys": [], "grouping_keys": [
diff --git a/infra/config/generated/builders/ci/linux-prompt-evals/shadow-properties.json b/infra/config/generated/builders/ci/linux-prompt-evals/shadow-properties.json new file mode 100644 index 0000000..54c02663 --- /dev/null +++ b/infra/config/generated/builders/ci/linux-prompt-evals/shadow-properties.json
@@ -0,0 +1,13 @@ +{ + "$build/siso": { + "configs": [ + "builder" + ], + "enable_cloud_monitoring": true, + "enable_cloud_profiler": true, + "enable_cloud_trace": true, + "experiments": [], + "metrics_project": "chromium-reclient-metrics", + "project": "rbe-chromium-untrusted" + } +} \ No newline at end of file
diff --git a/infra/config/generated/builders/ci/win10-code-coverage/targets/chromium.coverage.json b/infra/config/generated/builders/ci/win10-code-coverage/targets/chromium.coverage.json index 40373615..6766d601 100644 --- a/infra/config/generated/builders/ci/win10-code-coverage/targets/chromium.coverage.json +++ b/infra/config/generated/builders/ci/win10-code-coverage/targets/chromium.coverage.json
@@ -1710,7 +1710,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -1747,7 +1747,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/android-dawn-arm-rel/targets/chromium.dawn.json b/infra/config/generated/builders/try/android-dawn-arm-rel/targets/chromium.dawn.json index 0dfb2d1..51ceedc 100644 --- a/infra/config/generated/builders/try/android-dawn-arm-rel/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/android-dawn-arm-rel/targets/chromium.dawn.json
@@ -106,7 +106,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -148,7 +148,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -190,7 +190,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -233,7 +233,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/android-dawn-arm64-exp-rel/targets/chromium.dawn.json b/infra/config/generated/builders/try/android-dawn-arm64-exp-rel/targets/chromium.dawn.json index ff5205b8..3301cb2 100644 --- a/infra/config/generated/builders/try/android-dawn-arm64-exp-rel/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/android-dawn-arm64-exp-rel/targets/chromium.dawn.json
@@ -107,7 +107,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -150,7 +150,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -193,7 +193,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -235,7 +235,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -278,7 +278,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/android-dawn-arm64-rel/targets/chromium.dawn.json b/infra/config/generated/builders/try/android-dawn-arm64-rel/targets/chromium.dawn.json index 709359a..c0697956 100644 --- a/infra/config/generated/builders/try/android-dawn-arm64-rel/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/android-dawn-arm64-rel/targets/chromium.dawn.json
@@ -105,7 +105,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -147,7 +147,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -189,7 +189,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -230,7 +230,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -272,7 +272,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/dawn-android-arm-deps-rel/targets/chromium.dawn.json b/infra/config/generated/builders/try/dawn-android-arm-deps-rel/targets/chromium.dawn.json index a4e290e5e..db1f0e8 100644 --- a/infra/config/generated/builders/try/dawn-android-arm-deps-rel/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/dawn-android-arm-deps-rel/targets/chromium.dawn.json
@@ -106,7 +106,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -148,7 +148,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -190,7 +190,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -233,7 +233,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/dawn-android-arm64-deps-rel/targets/chromium.dawn.json b/infra/config/generated/builders/try/dawn-android-arm64-deps-rel/targets/chromium.dawn.json index e672b0f..52976f6 100644 --- a/infra/config/generated/builders/try/dawn-android-arm64-deps-rel/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/dawn-android-arm64-deps-rel/targets/chromium.dawn.json
@@ -105,7 +105,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -147,7 +147,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -189,7 +189,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -230,7 +230,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -272,7 +272,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test_android_chrome", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/dawn-linux-x64-deps-rel/targets/chromium.dawn.json b/infra/config/generated/builders/try/dawn-linux-x64-deps-rel/targets/chromium.dawn.json index b9aebc92..ebdfbf1 100644 --- a/infra/config/generated/builders/try/dawn-linux-x64-deps-rel/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/dawn-linux-x64-deps-rel/targets/chromium.dawn.json
@@ -342,7 +342,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -380,7 +380,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -420,7 +420,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -525,7 +525,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -567,7 +567,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true, @@ -930,7 +930,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_min_es31_tests", "resultdb": { "enable": true, @@ -968,7 +968,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -1007,7 +1007,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -1045,7 +1045,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -1083,7 +1083,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -1120,7 +1120,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -1159,7 +1159,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -1264,7 +1264,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -1305,7 +1305,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/dawn-mac-arm64-deps-rel/targets/chromium.dawn.json b/infra/config/generated/builders/try/dawn-mac-arm64-deps-rel/targets/chromium.dawn.json index d6db9a8..4496b68 100644 --- a/infra/config/generated/builders/try/dawn-mac-arm64-deps-rel/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/dawn-mac-arm64-deps-rel/targets/chromium.dawn.json
@@ -373,7 +373,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -415,7 +415,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -457,7 +457,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -498,7 +498,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -541,7 +541,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -654,7 +654,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -699,7 +699,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/dawn-mac-x64-deps-rel/targets/chromium.dawn.json b/infra/config/generated/builders/try/dawn-mac-x64-deps-rel/targets/chromium.dawn.json index 1d929f0..4bce513 100644 --- a/infra/config/generated/builders/try/dawn-mac-x64-deps-rel/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/dawn-mac-x64-deps-rel/targets/chromium.dawn.json
@@ -362,7 +362,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -404,7 +404,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -514,7 +514,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -558,7 +558,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true, @@ -924,7 +924,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -964,7 +964,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -1068,7 +1068,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -1110,7 +1110,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/dawn-try-linux-x64-intel-uhd770-rel/targets/chromium.dawn.json b/infra/config/generated/builders/try/dawn-try-linux-x64-intel-uhd770-rel/targets/chromium.dawn.json index 809752cb..019c36e 100644 --- a/infra/config/generated/builders/try/dawn-try-linux-x64-intel-uhd770-rel/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/dawn-try-linux-x64-intel-uhd770-rel/targets/chromium.dawn.json
@@ -352,7 +352,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -392,7 +392,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -431,7 +431,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -470,7 +470,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -508,7 +508,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -548,7 +548,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -656,7 +656,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -698,7 +698,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/dawn-try-mac-amd-exp/targets/chromium.dawn.json b/infra/config/generated/builders/try/dawn-try-mac-amd-exp/targets/chromium.dawn.json index dce268d..01fdd28 100644 --- a/infra/config/generated/builders/try/dawn-try-mac-amd-exp/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/dawn-try-mac-amd-exp/targets/chromium.dawn.json
@@ -373,7 +373,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -416,7 +416,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -529,7 +529,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -574,7 +574,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/dawn-try-mac-arm64-deps-rel/targets/chromium.dawn.json b/infra/config/generated/builders/try/dawn-try-mac-arm64-deps-rel/targets/chromium.dawn.json index d6db9a8..4496b68 100644 --- a/infra/config/generated/builders/try/dawn-try-mac-arm64-deps-rel/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/dawn-try-mac-arm64-deps-rel/targets/chromium.dawn.json
@@ -373,7 +373,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -415,7 +415,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -457,7 +457,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -498,7 +498,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -541,7 +541,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -654,7 +654,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -699,7 +699,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/dawn-try-mac-arm64-rel/targets/chromium.dawn.json b/infra/config/generated/builders/try/dawn-try-mac-arm64-rel/targets/chromium.dawn.json index a6ae873..f3d3a443 100644 --- a/infra/config/generated/builders/try/dawn-try-mac-arm64-rel/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/dawn-try-mac-arm64-rel/targets/chromium.dawn.json
@@ -373,7 +373,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -415,7 +415,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -457,7 +457,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -498,7 +498,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -541,7 +541,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -654,7 +654,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -699,7 +699,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/dawn-try-mac-intel-exp/targets/chromium.dawn.json b/infra/config/generated/builders/try/dawn-try-mac-intel-exp/targets/chromium.dawn.json index 7c01542..d9c12e84 100644 --- a/infra/config/generated/builders/try/dawn-try-mac-intel-exp/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/dawn-try-mac-intel-exp/targets/chromium.dawn.json
@@ -351,7 +351,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -392,7 +392,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -499,7 +499,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -542,7 +542,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/dawn-try-win-x64-intel-uhd770-rel/targets/chromium.dawn.json b/infra/config/generated/builders/try/dawn-try-win-x64-intel-uhd770-rel/targets/chromium.dawn.json index adf0b79..5c7cce0 100644 --- a/infra/config/generated/builders/try/dawn-try-win-x64-intel-uhd770-rel/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/dawn-try-win-x64-intel-uhd770-rel/targets/chromium.dawn.json
@@ -401,7 +401,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -441,7 +441,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -483,7 +483,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_with_validation_tests", "resultdb": { "enable": true, @@ -523,7 +523,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -562,7 +562,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -600,7 +600,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -640,7 +640,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -744,7 +744,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -786,7 +786,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/dawn-try-win-x64-nvidia-exp/targets/chromium.dawn.json b/infra/config/generated/builders/try/dawn-try-win-x64-nvidia-exp/targets/chromium.dawn.json index 61ed2a4..38d6c09 100644 --- a/infra/config/generated/builders/try/dawn-try-win-x64-nvidia-exp/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/dawn-try-win-x64-nvidia-exp/targets/chromium.dawn.json
@@ -414,7 +414,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -455,7 +455,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -498,7 +498,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_with_validation_tests", "resultdb": { "enable": true, @@ -539,7 +539,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -579,7 +579,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -618,7 +618,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -659,7 +659,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -766,7 +766,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -809,7 +809,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/dawn-try-win-x86-nvidia-exp/targets/chromium.dawn.json b/infra/config/generated/builders/try/dawn-try-win-x86-nvidia-exp/targets/chromium.dawn.json index 1dc2b90..f7be16a 100644 --- a/infra/config/generated/builders/try/dawn-try-win-x86-nvidia-exp/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/dawn-try-win-x86-nvidia-exp/targets/chromium.dawn.json
@@ -354,7 +354,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -397,7 +397,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_with_validation_tests", "resultdb": { "enable": true, @@ -504,7 +504,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -547,7 +547,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/dawn-try-win10-x64-intel-asan/targets/chromium.dawn.json b/infra/config/generated/builders/try/dawn-try-win10-x64-intel-asan/targets/chromium.dawn.json index a519e1a..3f55a6c 100644 --- a/infra/config/generated/builders/try/dawn-try-win10-x64-intel-asan/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/dawn-try-win10-x64-intel-asan/targets/chromium.dawn.json
@@ -341,7 +341,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -380,7 +380,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/dawn-try-win10-x64-nvidia-asan/targets/chromium.dawn.json b/infra/config/generated/builders/try/dawn-try-win10-x64-nvidia-asan/targets/chromium.dawn.json index 56bc1df6..362a8819 100644 --- a/infra/config/generated/builders/try/dawn-try-win10-x64-nvidia-asan/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/dawn-try-win10-x64-nvidia-asan/targets/chromium.dawn.json
@@ -341,7 +341,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -380,7 +380,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -420,7 +420,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -459,7 +459,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -497,7 +497,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/dawn-try-win10-x86-rel/targets/chromium.dawn.json b/infra/config/generated/builders/try/dawn-try-win10-x86-rel/targets/chromium.dawn.json index 3fb5fb87..f9788ce 100644 --- a/infra/config/generated/builders/try/dawn-try-win10-x86-rel/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/dawn-try-win10-x86-rel/targets/chromium.dawn.json
@@ -342,7 +342,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -446,7 +446,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -812,7 +812,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -916,7 +916,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -958,7 +958,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/dawn-win10-x64-deps-rel/targets/chromium.dawn.json b/infra/config/generated/builders/try/dawn-win10-x64-deps-rel/targets/chromium.dawn.json index 4bfb9ff9..145f949 100644 --- a/infra/config/generated/builders/try/dawn-win10-x64-deps-rel/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/dawn-win10-x64-deps-rel/targets/chromium.dawn.json
@@ -369,7 +369,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -411,7 +411,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_with_validation_tests", "resultdb": { "enable": true, @@ -450,7 +450,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -554,7 +554,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -978,7 +978,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -1018,7 +1018,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -1060,7 +1060,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_with_validation_tests", "resultdb": { "enable": true, @@ -1100,7 +1100,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -1139,7 +1139,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -1177,7 +1177,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -1217,7 +1217,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -1321,7 +1321,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -1363,7 +1363,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/dawn-win10-x86-deps-rel/targets/chromium.dawn.json b/infra/config/generated/builders/try/dawn-win10-x86-deps-rel/targets/chromium.dawn.json index 072053e..17b4261 100644 --- a/infra/config/generated/builders/try/dawn-win10-x86-deps-rel/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/dawn-win10-x86-deps-rel/targets/chromium.dawn.json
@@ -342,7 +342,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -446,7 +446,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -812,7 +812,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -916,7 +916,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -958,7 +958,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/linux-code-coverage/targets/chromium.coverage.json b/infra/config/generated/builders/try/linux-code-coverage/targets/chromium.coverage.json index 48d2982..190f14a 100644 --- a/infra/config/generated/builders/try/linux-code-coverage/targets/chromium.coverage.json +++ b/infra/config/generated/builders/try/linux-code-coverage/targets/chromium.coverage.json
@@ -2202,7 +2202,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -2238,7 +2238,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/linux-dawn-nvidia-1660-exp-rel/targets/chromium.dawn.json b/infra/config/generated/builders/try/linux-dawn-nvidia-1660-exp-rel/targets/chromium.dawn.json index f24e1f7..3f8ffc4 100644 --- a/infra/config/generated/builders/try/linux-dawn-nvidia-1660-exp-rel/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/linux-dawn-nvidia-1660-exp-rel/targets/chromium.dawn.json
@@ -351,7 +351,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_min_es31_tests", "resultdb": { "enable": true, @@ -390,7 +390,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -430,7 +430,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -469,7 +469,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -508,7 +508,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -546,7 +546,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -586,7 +586,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -694,7 +694,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -736,7 +736,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/linux-dawn-rel/targets/chromium.dawn.json b/infra/config/generated/builders/try/linux-dawn-rel/targets/chromium.dawn.json index 3e1c55a9..252e15d 100644 --- a/infra/config/generated/builders/try/linux-dawn-rel/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/linux-dawn-rel/targets/chromium.dawn.json
@@ -342,7 +342,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -380,7 +380,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -420,7 +420,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -525,7 +525,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -567,7 +567,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true, @@ -930,7 +930,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_min_es31_tests", "resultdb": { "enable": true, @@ -968,7 +968,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_compat_tests", "resultdb": { "enable": true, @@ -1007,7 +1007,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -1045,7 +1045,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -1083,7 +1083,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -1120,7 +1120,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -1159,7 +1159,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -1264,7 +1264,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -1305,7 +1305,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/mac-arm64-dawn-rel/targets/chromium.dawn.json b/infra/config/generated/builders/try/mac-arm64-dawn-rel/targets/chromium.dawn.json index a6ae873..f3d3a443 100644 --- a/infra/config/generated/builders/try/mac-arm64-dawn-rel/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/mac-arm64-dawn-rel/targets/chromium.dawn.json
@@ -373,7 +373,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -415,7 +415,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -457,7 +457,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -498,7 +498,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -541,7 +541,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -654,7 +654,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -699,7 +699,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/mac-dawn-rel/targets/chromium.dawn.json b/infra/config/generated/builders/try/mac-dawn-rel/targets/chromium.dawn.json index 5aa6e2f..0ae4356 100644 --- a/infra/config/generated/builders/try/mac-dawn-rel/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/mac-dawn-rel/targets/chromium.dawn.json
@@ -362,7 +362,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -404,7 +404,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -514,7 +514,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -558,7 +558,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true, @@ -924,7 +924,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -964,7 +964,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -1068,7 +1068,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -1110,7 +1110,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/win-dawn-rel/targets/chromium.dawn.json b/infra/config/generated/builders/try/win-dawn-rel/targets/chromium.dawn.json index b9fdf9c0..378acf1 100644 --- a/infra/config/generated/builders/try/win-dawn-rel/targets/chromium.dawn.json +++ b/infra/config/generated/builders/try/win-dawn-rel/targets/chromium.dawn.json
@@ -369,7 +369,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -411,7 +411,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_with_validation_tests", "resultdb": { "enable": true, @@ -450,7 +450,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -554,7 +554,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -978,7 +978,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -1018,7 +1018,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_tests", "resultdb": { "enable": true, @@ -1060,7 +1060,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_fxc_with_validation_tests", "resultdb": { "enable": true, @@ -1100,7 +1100,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_service_worker_tests", "resultdb": { "enable": true, @@ -1139,7 +1139,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_shared_worker_tests", "resultdb": { "enable": true, @@ -1177,7 +1177,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true, @@ -1217,7 +1217,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_with_validation_tests", "resultdb": { "enable": true, @@ -1321,7 +1321,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_tests", "resultdb": { "enable": true, @@ -1363,7 +1363,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_swiftshader_web_platform_cts_with_validation_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/builders/try/win10-code-coverage/targets/chromium.coverage.json b/infra/config/generated/builders/try/win10-code-coverage/targets/chromium.coverage.json index 40373615..6766d601 100644 --- a/infra/config/generated/builders/try/win10-code-coverage/targets/chromium.coverage.json +++ b/infra/config/generated/builders/try/win10-code-coverage/targets/chromium.coverage.json
@@ -1710,7 +1710,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_dedicated_worker_tests", "resultdb": { "enable": true, @@ -1747,7 +1747,7 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "module_name": "//chrome/test:telemetry_gpu_integration_test", - "module_scheme": "flat", + "module_scheme": "webgpucts", "name": "webgpu_cts_tests", "resultdb": { "enable": true,
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg index 7348c50..2ab65a4 100644 --- a/infra/config/generated/luci/cr-buildbucket.cfg +++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -58606,13 +58606,11 @@ builders { name: "linux-prompt-evals" swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" + dimensions: "builder:linux-prompt-evals" dimensions: "cores:8" dimensions: "cpu:x86-64" - dimensions: "free_space:standard" dimensions: "os:Ubuntu-22.04" dimensions: "pool:luci.chromium.ci" - dimensions: "ssd:0" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" cipd_version: "latest" @@ -58631,6 +58629,7 @@ ' },' ' "$bootstrap/properties": {' ' "properties_file": "infra/config/generated/builders/ci/linux-prompt-evals/properties.json",' + ' "shadow_properties_file": "infra/config/generated/builders/ci/linux-prompt-evals/shadow-properties.json",' ' "top_level_project": {' ' "ref": "refs/heads/main",' ' "repo": {' @@ -58686,7 +58685,8 @@ shadow_builder_adjustments { service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com" pool: "luci.chromium.try" - dimensions: "free_space:" + dimensions: "builder:" + dimensions: "builderless:1" dimensions: "pool:luci.chromium.try" } contact_team_email: "chrome-dev-infra-team@google.com"
diff --git a/infra/config/subprojects/chromium/ci/chromium.prompt_eval.star b/infra/config/subprojects/chromium/ci/chromium.prompt_eval.star index ac1201c4..f07f002 100644 --- a/infra/config/subprojects/chromium/ci/chromium.prompt_eval.star +++ b/infra/config/subprojects/chromium/ci/chromium.prompt_eval.star
@@ -10,17 +10,20 @@ load("@chromium-luci//branches.star", "branches") load("@chromium-luci//builder_config.star", "builder_config") load("//lib/ci_constants.star", "ci_constants") +load("//lib/siso.star", "siso") ci.defaults.set( executable = "recipe:chromium/eval_prompts", builder_group = "chromium.prompt_eval", pool = ci_constants.DEFAULT_POOL, + builderless = False, cores = 8, contact_team_email = "chrome-dev-infra-team@google.com", execution_timeout = ci_constants.DEFAULT_EXECUTION_TIMEOUT, health_spec = health_spec.default(), service_account = ci_constants.DEFAULT_SERVICE_ACCOUNT, shadow_service_account = ci_constants.DEFAULT_SHADOW_SERVICE_ACCOUNT, + siso_project = siso.project.DEFAULT_TRUSTED, ) consoles.console_view(
diff --git a/infra/config/targets/tests.star b/infra/config/targets/tests.star index b1a4af5..8cc37d3 100644 --- a/infra/config/targets/tests.star +++ b/infra/config/targets/tests.star
@@ -3231,6 +3231,7 @@ mixins = [ "has_native_resultdb_integration", ], + module_scheme = "webgpucts", ) targets.tests.gpu_telemetry_test( @@ -3239,6 +3240,7 @@ mixins = [ "has_native_resultdb_integration", ], + module_scheme = "webgpucts", ) targets.tests.gpu_telemetry_test( @@ -3247,6 +3249,7 @@ mixins = [ "has_native_resultdb_integration", ], + module_scheme = "webgpucts", ) targets.tests.gpu_telemetry_test( @@ -3255,6 +3258,7 @@ mixins = [ "has_native_resultdb_integration", ], + module_scheme = "webgpucts", ) targets.tests.gpu_telemetry_test( @@ -3263,6 +3267,7 @@ mixins = [ "has_native_resultdb_integration", ], + module_scheme = "webgpucts", ) targets.tests.gpu_telemetry_test( @@ -3274,6 +3279,7 @@ args = [ "--use-worker=service", ], + module_scheme = "webgpucts", ) targets.tests.gpu_telemetry_test( @@ -3285,6 +3291,7 @@ args = [ "--use-worker=dedicated", ], + module_scheme = "webgpucts", ) targets.tests.gpu_telemetry_test( @@ -3296,6 +3303,7 @@ args = [ "--use-worker=shared", ], + module_scheme = "webgpucts", ) targets.tests.gpu_telemetry_test( @@ -3304,6 +3312,7 @@ mixins = [ "has_native_resultdb_integration", ], + module_scheme = "webgpucts", ) targets.tests.isolated_script_test( @@ -3328,6 +3337,7 @@ mixins = [ "has_native_resultdb_integration", ], + module_scheme = "webgpucts", ) targets.tests.gpu_telemetry_test( @@ -3336,6 +3346,7 @@ mixins = [ "has_native_resultdb_integration", ], + module_scheme = "webgpucts", ) targets.tests.script_test(
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/BUILD.gn b/ios/chrome/browser/content_suggestions/ui_bundled/BUILD.gn index 7d6c373..8fa5e75 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/content_suggestions/ui_bundled/BUILD.gn
@@ -429,6 +429,7 @@ "//components/feature_engagement/public", "//components/feed/core/shared_prefs:feed_shared_prefs", "//components/feed/core/v2/public/ios:feed_ios_public", + "//components/ntp_tiles:pref_names", "//components/omnibox/browser:aim_eligibility_service_features", "//components/regional_capabilities", "//components/safety_check:pref_names",
diff --git a/ios/chrome/browser/content_suggestions/ui_bundled/ntp_home_egtest.mm b/ios/chrome/browser/content_suggestions/ui_bundled/ntp_home_egtest.mm index e90a61a..d1c3cc1d 100644 --- a/ios/chrome/browser/content_suggestions/ui_bundled/ntp_home_egtest.mm +++ b/ios/chrome/browser/content_suggestions/ui_bundled/ntp_home_egtest.mm
@@ -10,6 +10,7 @@ #import "build/branding_buildflags.h" #import "components/feature_engagement/public/feature_constants.h" #import "components/feed/core/v2/public/ios/pref_names.h" +#import "components/ntp_tiles/pref_names.h" #import "components/omnibox/browser/aim_eligibility_service_features.h" #import "components/regional_capabilities/regional_capabilities_switches.h" #import "components/safety_check/safety_check_pref_names.h" @@ -1581,7 +1582,7 @@ [ChromeEarlGrey setBoolValue:YES forUserPref:prefs::kHomeCustomizationMostVisitedEnabled]; [ChromeEarlGrey setBoolValue:YES - forUserPref:prefs::kHomeCustomizationMagicStackEnabled]; + forUserPref:ntp_tiles::prefs::kMagicStackHomeModuleEnabled]; } #pragma mark - Matchers
diff --git a/ios/chrome/browser/home_customization/coordinator/BUILD.gn b/ios/chrome/browser/home_customization/coordinator/BUILD.gn index c3cbaec..8d89915 100644 --- a/ios/chrome/browser/home_customization/coordinator/BUILD.gn +++ b/ios/chrome/browser/home_customization/coordinator/BUILD.gn
@@ -86,6 +86,7 @@ "//base/test:test_support", "//components/application_locale_storage", "//components/image_fetcher/core:test_support", + "//components/ntp_tiles:pref_names", "//components/prefs", "//components/prefs:test_support", "//components/sync_preferences",
diff --git a/ios/chrome/browser/home_customization/coordinator/home_customization_mediator.mm b/ios/chrome/browser/home_customization/coordinator/home_customization_mediator.mm index d97ad8f..30a0489 100644 --- a/ios/chrome/browser/home_customization/coordinator/home_customization_mediator.mm +++ b/ios/chrome/browser/home_customization/coordinator/home_customization_mediator.mm
@@ -107,7 +107,7 @@ prefs::kHomeCustomizationMostVisitedEnabled); case CustomizationToggleType::kMagicStack: return _prefService->GetBoolean( - prefs::kHomeCustomizationMagicStackEnabled); + ntp_tiles::prefs::kMagicStackHomeModuleEnabled); case CustomizationToggleType::kDiscover: return _discoverFeedVisibilityBrowserAgent->IsEnabled(); default: @@ -148,7 +148,7 @@ enabled); break; case CustomizationToggleType::kMagicStack: - _prefService->SetBoolean(prefs::kHomeCustomizationMagicStackEnabled, + _prefService->SetBoolean(ntp_tiles::prefs::kMagicStackHomeModuleEnabled, enabled); break; case CustomizationToggleType::kDiscover:
diff --git a/ios/chrome/browser/home_customization/coordinator/home_customization_mediator_unittest.mm b/ios/chrome/browser/home_customization/coordinator/home_customization_mediator_unittest.mm index b54e431..a2fdcc0 100644 --- a/ios/chrome/browser/home_customization/coordinator/home_customization_mediator_unittest.mm +++ b/ios/chrome/browser/home_customization/coordinator/home_customization_mediator_unittest.mm
@@ -7,6 +7,7 @@ #import "base/memory/raw_ptr.h" #import "base/strings/sys_string_conversions.h" #import "base/test/scoped_feature_list.h" +#import "components/ntp_tiles/pref_names.h" #import "components/prefs/pref_service.h" #import "ios/chrome/browser/discover_feed/model/discover_feed_visibility_browser_agent.h" #import "ios/chrome/browser/home_customization/ui/home_customization_main_consumer.h" @@ -79,7 +80,8 @@ // Set the values. pref_service_->SetBoolean(prefs::kHomeCustomizationMostVisitedEnabled, NO); - pref_service_->SetBoolean(prefs::kHomeCustomizationMagicStackEnabled, YES); + pref_service_->SetBoolean(ntp_tiles::prefs::kMagicStackHomeModuleEnabled, + YES); discover_feed_visibility_browser_agent_->SetEnabled(NO); [mediator_ configureMainPageData];
diff --git a/ios/chrome/browser/ntp/ui_bundled/BUILD.gn b/ios/chrome/browser/ntp/ui_bundled/BUILD.gn index 26779d1..522dce5 100644 --- a/ios/chrome/browser/ntp/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/ntp/ui_bundled/BUILD.gn
@@ -246,6 +246,7 @@ "//base", "//components/feature_engagement/public", "//components/image_fetcher/core", + "//components/ntp_tiles:pref_names", "//components/prefs", "//components/prefs/ios", "//components/regional_capabilities",
diff --git a/ios/chrome/browser/ntp/ui_bundled/new_tab_page_coordinator.mm b/ios/chrome/browser/ntp/ui_bundled/new_tab_page_coordinator.mm index 8e61534f..67cf763 100644 --- a/ios/chrome/browser/ntp/ui_bundled/new_tab_page_coordinator.mm +++ b/ios/chrome/browser/ntp/ui_bundled/new_tab_page_coordinator.mm
@@ -1706,7 +1706,7 @@ BOOL MVTEnabled = prefService->GetBoolean(prefs::kHomeCustomizationMostVisitedEnabled); BOOL magicStackEnabled = - prefService->GetBoolean(prefs::kHomeCustomizationMagicStackEnabled); + prefService->GetBoolean(ntp_tiles::prefs::kMagicStackHomeModuleEnabled); BOOL feedEnabled = [self.NTPMediator isFeedHeaderVisible]; // All components enabled/disabled.
diff --git a/ios/chrome/browser/ntp/ui_bundled/new_tab_page_mediator.mm b/ios/chrome/browser/ntp/ui_bundled/new_tab_page_mediator.mm index b3d28af..0508b5f 100644 --- a/ios/chrome/browser/ntp/ui_bundled/new_tab_page_mediator.mm +++ b/ios/chrome/browser/ntp/ui_bundled/new_tab_page_mediator.mm
@@ -21,6 +21,7 @@ #import "components/image_fetcher/core/image_fetcher.h" #import "components/image_fetcher/core/image_fetcher_service.h" #import "components/image_fetcher/core/request_metadata.h" +#import "components/ntp_tiles/pref_names.h" #import "components/omnibox/browser/omnibox_prefs.h" #import "components/omnibox/common/omnibox_features.h" #import "components/prefs/ios/pref_observer_bridge.h" @@ -532,7 +533,7 @@ - (void)onPreferenceChanged:(const std::string&)preferenceName { // Handle customization prefs if (preferenceName == prefs::kHomeCustomizationMostVisitedEnabled || - preferenceName == prefs::kHomeCustomizationMagicStackEnabled) { + preferenceName == ntp_tiles::prefs::kMagicStackHomeModuleEnabled) { [self updateModuleVisibilityForConsumer]; [self.NTPContentDelegate updateModuleVisibility]; } @@ -588,7 +589,7 @@ self.consumer.mostVisitedVisible = _prefService->GetBoolean(prefs::kHomeCustomizationMostVisitedEnabled); self.consumer.magicStackVisible = - _prefService->GetBoolean(prefs::kHomeCustomizationMagicStackEnabled); + _prefService->GetBoolean(ntp_tiles::prefs::kMagicStackHomeModuleEnabled); } // Starts observing some prefs. @@ -601,7 +602,8 @@ _prefObserverBridge->ObserveChangesForPreference( prefs::kHomeCustomizationMostVisitedEnabled, _prefChangeRegistrar.get()); _prefObserverBridge->ObserveChangesForPreference( - prefs::kHomeCustomizationMagicStackEnabled, _prefChangeRegistrar.get()); + ntp_tiles::prefs::kMagicStackHomeModuleEnabled, + _prefChangeRegistrar.get()); } - (void)updateAccountErrorBadge {
diff --git a/ios/chrome/browser/shared/model/prefs/browser_prefs.mm b/ios/chrome/browser/shared/model/prefs/browser_prefs.mm index ebb81cb..d89dbd5e 100644 --- a/ios/chrome/browser/shared/model/prefs/browser_prefs.mm +++ b/ios/chrome/browser/shared/model/prefs/browser_prefs.mm
@@ -951,7 +951,7 @@ // Registers the Home customization visibility prefs. registry->RegisterBooleanPref(prefs::kHomeCustomizationMostVisitedEnabled, true); - registry->RegisterBooleanPref(prefs::kHomeCustomizationMagicStackEnabled, + registry->RegisterBooleanPref(ntp_tiles::prefs::kMagicStackHomeModuleEnabled, true); // Registers the Magic Stack module visibility prefs. @@ -1121,6 +1121,11 @@ // `ntp_tiles::prefs::kTipsHomeModuleEnabled` instead. registry->RegisterBooleanPref(prefs::kHomeCustomizationMagicStackTipsEnabled, true); + + // Deprecated 10/2025. Use `ntp_tiles::prefs::kMagicStackHomeModuleEnabled` + // instead. + registry->RegisterBooleanPref(prefs::kHomeCustomizationMagicStackEnabled, + true); } // This method should be periodically pruned of year+ old migrations. @@ -1307,6 +1312,8 @@ prefs); RenameBooleanPref(ntp_tiles::prefs::kTipsHomeModuleEnabled, prefs::kHomeCustomizationMagicStackTipsEnabled, prefs); + RenameBooleanPref(ntp_tiles::prefs::kMagicStackHomeModuleEnabled, + prefs::kHomeCustomizationMagicStackEnabled, prefs); } void MigrateObsoleteUserDefault() {
diff --git a/ios/chrome/browser/shared/model/prefs/browser_prefs_unittest.mm b/ios/chrome/browser/shared/model/prefs/browser_prefs_unittest.mm index 0bb8fba..aa44943 100644 --- a/ios/chrome/browser/shared/model/prefs/browser_prefs_unittest.mm +++ b/ios/chrome/browser/shared/model/prefs/browser_prefs_unittest.mm
@@ -85,6 +85,9 @@ // the new name. pref_service_.SetBoolean(prefs::kHomeCustomizationMagicStackTipsEnabled, false); + // Set the old Magic Stack module pref value to test its migration to + // the new name. + pref_service_.SetBoolean(prefs::kHomeCustomizationMagicStackEnabled, false); // Bottom omnibox position local_state()->SetBoolean(prefs::kBottomOmnibox, true); @@ -166,6 +169,13 @@ pref_service_.FindPreference(ntp_tiles::prefs::kTipsHomeModuleEnabled) ->IsDefaultValue()); + EXPECT_FALSE( + pref_service_.GetBoolean(prefs::kHomeCustomizationMagicStackEnabled)); + EXPECT_TRUE( + pref_service_ + .FindPreference(ntp_tiles::prefs::kMagicStackHomeModuleEnabled) + ->IsDefaultValue()); + // Check bottom omnibox position. EXPECT_TRUE(local_state()->GetBoolean(prefs::kBottomOmnibox)); EXPECT_TRUE(local_state() @@ -260,6 +270,14 @@ EXPECT_FALSE( pref_service_.GetBoolean(ntp_tiles::prefs::kTipsHomeModuleEnabled)); + EXPECT_TRUE( + pref_service_.FindPreference(prefs::kHomeCustomizationMagicStackEnabled) + ->IsDefaultValue()); + // The new pref `ntp_tiles::prefs::kMagicStackHomeModuleEnabled` should + // now be false (the migrated value). + EXPECT_FALSE( + pref_service_.GetBoolean(ntp_tiles::prefs::kMagicStackHomeModuleEnabled)); + // Check bottom omnibox position. EXPECT_TRUE( local_state()->FindPreference(prefs::kBottomOmnibox)->IsDefaultValue());
diff --git a/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios.zip.sha1 b/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios.zip.sha1 index 27f1c136..29640762 100644 --- a/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios.zip.sha1
@@ -1 +1 @@ -bf2e3b8fce78fe16565b09a6908218de83d126ec \ No newline at end of file +b66e5893e68a69afe16fba6ee5bf34dde912f72a \ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios_asan.zip.sha1 b/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios_asan.zip.sha1 index f1e05c9..2a23d11 100644 --- a/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios_asan.zip.sha1
@@ -1 +1 @@ -df7a9f4e983bf53a5aa859cff83e1f4ed7cbdddd \ No newline at end of file +34697259eb043f2a4486631708a1076bd0b7d261 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1 b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1 index 61e83e2..d48b072 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 @@ -e06d1611c73488394489105ae36ce5fbe2e750fd \ No newline at end of file +bb0bd2bd40703fc2aa019ff23115c39d420be7e2 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios_asan.zip.sha1 b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios_asan.zip.sha1 index a1aab84..be50908 100644 --- a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios_asan.zip.sha1
@@ -1 +1 @@ -293d875c28277302dd07f771b7a21b4473290b51 \ No newline at end of file +9a96230428d0c4034db1c9b623cd5873b5c50e2e \ 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 0c98bda..d714e64 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 @@ -a65d9561b6bc73c8d41177d96ba523d19e59cac6 \ No newline at end of file +070088fe4e30ef8dea8b6826d7db866cde84b75c \ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios_asan.zip.sha1 b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios_asan.zip.sha1 index 401e8a5..435191f 100644 --- a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios_asan.zip.sha1
@@ -1 +1 @@ -bcae8046ddf0d29122d6c6b611544a95b675c375 \ No newline at end of file +3dd8682bf44fe36ef6296a7923e3213ec8671311 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/LSApplicationQuerySchemes.plist.sha1 b/ios/google_internal/frameworks/LSApplicationQuerySchemes.plist.sha1 index ac55d5a15..37665b4 100644 --- a/ios/google_internal/frameworks/LSApplicationQuerySchemes.plist.sha1 +++ b/ios/google_internal/frameworks/LSApplicationQuerySchemes.plist.sha1
@@ -1 +1 @@ -6206f019ada74ccc30c954d18b4859a238304a6f \ No newline at end of file +2cf806f00ab0327bb02c47e5cae93db6a5c0f98e \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios.zip.sha1 index 7f9d0a3c..9f45009 100644 --- a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -fba9419058065b39eaa772388ab70acab4e96d23 \ No newline at end of file +e6621d477991fa5eb04cb450e57c8a84171ce2f8 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios_asan.zip.sha1 index 04212bca..a13561e 100644 --- a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@ -33448e9d0293f5eabe3b2be4ea663c9a71b09e97 \ No newline at end of file +500a5bffb2278916213ceb71d3f861c1ea34617c \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator.zip.sha1 index ed1bec4..3d2eb96f 100644 --- a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -13367346775372c31b54fdb98fda0c5ffafac987 \ No newline at end of file +382f74fb64877dfb51dd12c29ff0f86c5fe52108 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator_asan.zip.sha1 index a0d282e2..8e0dcff 100644 --- a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@ -260fee5049883af3245ddc6541d4e808278e3849 \ No newline at end of file +465bc3a728684767560002983c60be6108b1404d \ 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 590f03e..c28e808 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 @@ -573390df2280cdbdc748f654b58824a72c6aa6b9 \ No newline at end of file +750d0665b99067e50aac54ddc636cdf7bf638050 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios_asan.zip.sha1 index fade0bc2..9bf5579 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@ -1623e139e0ed0550fbc4411addc05da2e637d6ee \ No newline at end of file +8b9a72186c409230520392336a5521d331a0643e \ 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 882a5ba..40410bb 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 @@ -f311ddf8afe0ce3dd9bacf284acee559a6b2c419 \ No newline at end of file +259ee777c59fa54190a0125f3d3af2496865c53d \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator_asan.zip.sha1 index ed2b859..cb9a4d5 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@ -a56cd3a91e7e7983d47ded4e578fe16486454961 \ No newline at end of file +4f8b9696ee2f116e355c7d0778ed1dbcc6d5b40b \ 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 d7a43600..0a824b4 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 @@ -6fbee89be14edc9f748ac119cfb4f6621bd28705 \ No newline at end of file +fa4c95238faf4dbbbed3f2b0cf33a3b098b3a95d \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios_asan.zip.sha1 index 3d65d9e..aa003707 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@ -ae96e8bae0704fdae6a46d9fbdcde8bd14f434e5 \ No newline at end of file +6cfa6b894ef1122aa34df8b369ce34fc8f51bfd8 \ 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 6f5466bb..9cb6f79 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 @@ -d2583bb5b8b50f737bfd4d773111a7b249f42c60 \ No newline at end of file +58465359af0c93e6355aea374e256b7a6914068d \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator_asan.zip.sha1 index 2b82b7a3..53c6819 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@ -d12b3758b08f257b8548e66e55a852266ac974be \ No newline at end of file +b8cc083e98652d8737c81b3bfe3e945374324267 \ 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 bf26538..2c23559 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 @@ -622a7e82fb17c6fdb47efa7ec84108b0e5e16a5c \ No newline at end of file +d7fd703bc5010c98f1abe8dbeeff42ee24f0fcce \ 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 7b3e5ab4..4d16eb1 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 @@ -647c52d77bd88e24728c91a1f15220c479881789 \ No newline at end of file +d9ba73c147137cc00deb0adc16b94cae8ee2bdb9 \ 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 f1fb184..7d484917 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 @@ -6a70a6602c412c4d34525a4955430bbe652c9531 \ No newline at end of file +29c6641ba8381786f62a0cd713573b90b0296b05 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios_asan.zip.sha1 index 4e16774..19dbddd 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@ -9595ab639bae85fb324eabf84a80ec3bfabef7ec \ No newline at end of file +d61cee07eb1b73448861885b48d712ef4b575e03 \ 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 d729daf..4da162d 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 @@ -c04cd308049a74afb43718c3b20c7fa8cfed2b8f \ No newline at end of file +6fe579ece4868e1d0ea52238e50ffecbaf0fcf99 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator_asan.zip.sha1 index 18b63aa..b612107 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator_asan.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@ -ad49f788f6eb1c9e03b8d5e5f1a2f7f0c05457b0 \ No newline at end of file +544731e9ece64be26f08c8a646d5627b6e281279 \ 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 8ac1d037e..5a4eb16 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 @@ -27d8303182b786b5bb773e44b2ad573b2a4fdbba \ No newline at end of file +73ac80ec223b25ffbc8e08487a6e98096f4997b2 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios_asan.zip.sha1 index 83c415a6..632cd87 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@ -969b8ab10fea419e6a175220330cc83f906ed8e0 \ No newline at end of file +ca55e8b7064744143f1ae2823cc24660a3c61db4 \ 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 56afd74..e8a54b07 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 @@ -773c64fe009fb0d46fbce4accf92f8a50bdf40cb \ No newline at end of file +62a8dcaa0328b7aef620e706265881cd2a49cf6d \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator_asan.zip.sha1 index 72ed063..9e600ed 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator_asan.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@ -decfc78fe77f4468e7b3cd432da67e065fa851a5 \ No newline at end of file +7422cdb588c1c4d80ae28b121b28a2e22de7948b \ No newline at end of file
diff --git a/media/audio/audio_output_device_thread_callback.cc b/media/audio/audio_output_device_thread_callback.cc index a54b573..faeba943 100644 --- a/media/audio/audio_output_device_thread_callback.cc +++ b/media/audio/audio_output_device_thread_callback.cc
@@ -44,10 +44,15 @@ shared_memory_mapping_ = shared_memory_region_.MapAt(0, memory_length_); CHECK(shared_memory_mapping_.IsValid()); - media::AudioOutputBuffer* buffer = - reinterpret_cast<media::AudioOutputBuffer*>( - shared_memory_mapping_.memory()); - output_bus_ = media::AudioBus::WrapMemory(audio_parameters_, buffer->audio); + base::span<uint8_t> data = shared_memory_mapping_.GetMemoryAsSpan<uint8_t>(); + base::span<uint8_t> audio_data_span = + data.subspan<sizeof(media::AudioOutputBufferParameters)>(); + + const media::AudioOutputBuffer* buffer = + shared_memory_mapping_.GetMemoryAs<media::AudioOutputBuffer>(); + CHECK_EQ(audio_data_span.data(), buffer->audio); + + output_bus_ = media::AudioBus::WrapMemory(audio_parameters_, audio_data_span); output_bus_->set_is_bitstream_format(audio_parameters_.IsBitstreamFormat()); }
diff --git a/media/base/audio_parameters.h b/media/base/audio_parameters.h index 6ea68b4..ff9ecae 100644 --- a/media/base/audio_parameters.h +++ b/media/base/audio_parameters.h
@@ -61,11 +61,11 @@ struct MEDIA_EXPORT AudioInputBuffer { AudioInputBufferParameters params; - int8_t audio[1]; + uint8_t audio[1]; }; struct MEDIA_EXPORT AudioOutputBuffer { AudioOutputBufferParameters params; - int8_t audio[1]; + uint8_t audio[1]; }; struct MEDIA_EXPORT AudioRendererAlgorithmParameters {
diff --git a/media/base/video_frame.cc b/media/base/video_frame.cc index 872eaae..32ebbfe 100644 --- a/media/base/video_frame.cc +++ b/media/base/video_frame.cc
@@ -635,28 +635,6 @@ const VideoFrameLayout& layout, const gfx::Rect& visible_rect, const gfx::Size& natural_size, - const uint8_t* y_data, - const uint8_t* u_data, - const uint8_t* v_data, - base::TimeDelta timestamp) { - const VideoPixelFormat format = layout.format(); - std::array<const uint8_t*, 3> data = {y_data, u_data, v_data}; - std::array<base::span<const uint8_t>, 3> spans; - for (size_t plane = 0; plane < NumPlanes(format); ++plane) { - // TODO(crbug.com/338570700): Remove this function and migrate to the - // version accepting a span. - spans[plane] = UNSAFE_TODO( - base::span<const uint8_t>(data[plane], layout.planes()[plane].size)); - } - return WrapExternalYuvDataWithLayout(layout, visible_rect, natural_size, - spans[0], spans[1], spans[2], timestamp); -} - -// static -scoped_refptr<VideoFrame> VideoFrame::WrapExternalYuvDataWithLayout( - const VideoFrameLayout& layout, - const gfx::Rect& visible_rect, - const gfx::Size& natural_size, base::span<const uint8_t> y_data, base::span<const uint8_t> u_data, base::span<const uint8_t> v_data,
diff --git a/media/base/video_frame.h b/media/base/video_frame.h index 5e3da52..b3be068c 100644 --- a/media/base/video_frame.h +++ b/media/base/video_frame.h
@@ -298,17 +298,6 @@ base::span<const uint8_t> v_data, base::TimeDelta timestamp); - // Wraps external YUV data with VideoFrameLayout. The returned VideoFrame does - // not own the data passed in. - static scoped_refptr<VideoFrame> WrapExternalYuvDataWithLayout( - const VideoFrameLayout& layout, - const gfx::Rect& visible_rect, - const gfx::Size& natural_size, - const uint8_t* y_data, - const uint8_t* u_data, - const uint8_t* v_data, - base::TimeDelta timestamp); - static scoped_refptr<VideoFrame> WrapExternalYuvDataWithLayout( const VideoFrameLayout& layout, const gfx::Rect& visible_rect,
diff --git a/media/filters/demuxer_manager.cc b/media/filters/demuxer_manager.cc index 16de70f..0e2252c7 100644 --- a/media/filters/demuxer_manager.cc +++ b/media/filters/demuxer_manager.cc
@@ -484,9 +484,9 @@ auto engine = std::make_unique<HlsManifestDemuxerEngine>( client_->GetHlsDataSourceProvider(), media_task_runner_, BindPostTaskToCurrentDefault(base::BindRepeating( - &DemuxerManager::AddMediaTrack, weak_factory_.GetWeakPtr())), + &DemuxerManager::AddTrack, weak_factory_.GetWeakPtr())), BindPostTaskToCurrentDefault(base::BindRepeating( - &DemuxerManager::RemoveMediaTrack, weak_factory_.GetWeakPtr())), + &DemuxerManager::RemoveTrack, weak_factory_.GetWeakPtr())), would_taint_origin, loaded_url_, media_log_.get()); raw_ptr<DataSourceInfo> datasource_info = engine.get(); @@ -554,7 +554,7 @@ switch (track->type()) { case MediaTrack::Type::kAudio: case MediaTrack::Type::kVideo: - client_->AddMediaTrack(*track); + client_->AddTrack(*track); break; default: // Text tracks are not supported through this code path. @@ -565,11 +565,11 @@ #endif // BUILDFLAG(ENABLE_FFMPEG) #if BUILDFLAG(ENABLE_FFMPEG) || BUILDFLAG(ENABLE_HLS_DEMUXER) -void DemuxerManager::AddMediaTrack(const MediaTrack& track) { - client_->AddMediaTrack(track); +void DemuxerManager::AddTrack(const MediaTrack& track) { + client_->AddTrack(track); } -void DemuxerManager::RemoveMediaTrack(const MediaTrack& track) { - client_->RemoveMediaTrack(track); +void DemuxerManager::RemoveTrack(const MediaTrack& track) { + client_->RemoveTrack(track); } #endif // BUILDFLAG(ENABLE_FFMPEG) || BUILDFLAG(ENABLE_HLS_DEMUXER)
diff --git a/media/filters/demuxer_manager.h b/media/filters/demuxer_manager.h index a93cbf8..9647ae0 100644 --- a/media/filters/demuxer_manager.h +++ b/media/filters/demuxer_manager.h
@@ -63,8 +63,8 @@ virtual void RestartForHls() = 0; #if BUILDFLAG(ENABLE_FFMPEG) || BUILDFLAG(ENABLE_HLS_DEMUXER) - virtual void AddMediaTrack(const MediaTrack&) = 0; - virtual void RemoveMediaTrack(const MediaTrack&) = 0; + virtual void AddTrack(const MediaTrack&) = 0; + virtual void RemoveTrack(const MediaTrack&) = 0; #endif // BUILDFLAG(ENABLE_FFMPEG) || BUILDFLAG(ENABLE_HLS_DEMUXER) #if BUILDFLAG(ENABLE_HLS_DEMUXER) @@ -164,8 +164,8 @@ #endif #if BUILDFLAG(ENABLE_FFMPEG) || BUILDFLAG(ENABLE_HLS_DEMUXER) - void AddMediaTrack(const MediaTrack&); - void RemoveMediaTrack(const MediaTrack&); + void AddTrack(const MediaTrack&); + void RemoveTrack(const MediaTrack&); #endif // BUILDFLAG(ENABLE_FFMPEG) || BUILDFLAG(ENABLE_HLS_DEMUXER) void SetDemuxer(std::unique_ptr<Demuxer> demuxer);
diff --git a/media/filters/hls_manifest_demuxer_engine_unittest.cc b/media/filters/hls_manifest_demuxer_engine_unittest.cc index 61769d8..ad79569 100644 --- a/media/filters/hls_manifest_demuxer_engine_unittest.cc +++ b/media/filters/hls_manifest_demuxer_engine_unittest.cc
@@ -406,8 +406,8 @@ public: MOCK_METHOD(void, MockInitComplete, (PipelineStatus status), ()); MOCK_METHOD(void, SeekFinished, (), ()); - MOCK_METHOD(void, AddMediaTrack, (const MediaTrack&), ()); - MOCK_METHOD(void, RemoveMediaTrack, (const MediaTrack&), ()); + MOCK_METHOD(void, AddTrack, (const MediaTrack&), ()); + MOCK_METHOD(void, RemoveTrack, (const MediaTrack&), ()); HlsManifestDemuxerEngineTest() : media_log_(std::make_unique<NiceMock<media::MockMediaLog>>()), @@ -424,9 +424,9 @@ engine_ = std::make_unique<HlsManifestDemuxerEngine>( std::move(dsp), base::SingleThreadTaskRunner::GetCurrentDefault(), - base::BindRepeating(&HlsManifestDemuxerEngineTest::AddMediaTrack, + base::BindRepeating(&HlsManifestDemuxerEngineTest::AddTrack, base::Unretained(this)), - base::BindRepeating(&HlsManifestDemuxerEngineTest::RemoveMediaTrack, + base::BindRepeating(&HlsManifestDemuxerEngineTest::RemoveTrack, base::Unretained(this)), false, GURL("http://media.example.com/manifest.m3u8"), media_log_.get());
diff --git a/media/gpu/chromeos/generic_dmabuf_video_frame_mapper.cc b/media/gpu/chromeos/generic_dmabuf_video_frame_mapper.cc index c386852..fc85274 100644 --- a/media/gpu/chromeos/generic_dmabuf_video_frame_mapper.cc +++ b/media/gpu/chromeos/generic_dmabuf_video_frame_mapper.cc
@@ -52,9 +52,13 @@ const auto& layout = src_video_frame->layout(); const auto& visible_rect = src_video_frame->visible_rect(); if (IsYuvPlanar(layout.format())) { + // TODO(crbug.com/40285824): spanify this usage. video_frame = VideoFrame::WrapExternalYuvDataWithLayout( - layout, visible_rect, visible_rect.size(), plane_addrs[0], - plane_addrs[1], plane_addrs[2], src_video_frame->timestamp()); + layout, visible_rect, visible_rect.size(), + UNSAFE_TODO(base::span(plane_addrs[0], layout.planes()[0].size)), + UNSAFE_TODO(base::span(plane_addrs[1], layout.planes()[1].size)), + UNSAFE_TODO(base::span(plane_addrs[2], layout.planes()[2].size)), + src_video_frame->timestamp()); } else if (VideoFrame::NumPlanes(layout.format()) == 1) { video_frame = VideoFrame::WrapExternalDataWithLayout( layout, visible_rect, visible_rect.size(),
diff --git a/media/gpu/chromeos/gpu_memory_buffer_video_frame_mapper.cc b/media/gpu/chromeos/gpu_memory_buffer_video_frame_mapper.cc index 757e4303..3d4d4ac 100644 --- a/media/gpu/chromeos/gpu_memory_buffer_video_frame_mapper.cc +++ b/media/gpu/chromeos/gpu_memory_buffer_video_frame_mapper.cc
@@ -56,26 +56,22 @@ } const size_t num_planes = VideoFrame::NumPlanes(format_); - std::array<uint8_t*, VideoFrame::kMaxPlanes> plane_addrs = {}; - for (size_t i = 0; i < num_planes; i++) - plane_addrs[i] = scoped_mapping->Memory(i); + std::array<base::span<uint8_t>, VideoFrame::kMaxPlanes> planes = {}; + + for (size_t i = 0; i < num_planes; i++) { + planes[i] = scoped_mapping->GetMemoryAsSpan(i); + } scoped_refptr<VideoFrame> mapped_frame; if (IsYuvPlanar(format_)) { mapped_frame = VideoFrame::WrapExternalYuvDataWithLayout( video_frame->layout(), video_frame->visible_rect(), - video_frame->natural_size(), plane_addrs[0], plane_addrs[1], - plane_addrs[2], video_frame->timestamp()); + video_frame->natural_size(), planes[0], planes[1], planes[2], + video_frame->timestamp()); } else if (num_planes == 1) { - size_t buffer_size = VideoFrame::AllocationSize( - format_, - gfx::Size(scoped_mapping->Stride(0), scoped_mapping->Size().height())); mapped_frame = VideoFrame::WrapExternalDataWithLayout( video_frame->layout(), video_frame->visible_rect(), - video_frame->natural_size(), - // TODO(crbug.com/40285824): spanify this usage. - UNSAFE_TODO(base::span(plane_addrs[0], buffer_size)), - video_frame->timestamp()); + video_frame->natural_size(), planes[0], video_frame->timestamp()); } if (!mapped_frame) {
diff --git a/media/gpu/test/video_test_helpers.cc b/media/gpu/test/video_test_helpers.cc index 0427d0a..3b00556f3 100644 --- a/media/gpu/test/video_test_helpers.cc +++ b/media/gpu/test/video_test_helpers.cc
@@ -742,8 +742,12 @@ for (size_t i = 0; i < layout_->planes().size(); i++) data[i] = buf + layout_->planes()[i].offset; + // TODO(crbug.com/40285824): spanify this usage. auto frame = media::VideoFrame::WrapExternalYuvDataWithLayout( - *layout_, visible_rect_, natural_size_, data[0], data[1], data[2], + *layout_, visible_rect_, natural_size_, + UNSAFE_TODO(base::span(data[0], layout_->planes()[0].size)), + UNSAFE_TODO(base::span(data[1], layout_->planes()[1].size)), + UNSAFE_TODO(base::span(data[2], layout_->planes()[2].size)), frame_timestamp); DCHECK(frame); frame->BackWithOwnedSharedMemory(std::move(dup_region), std::move(mapping)); @@ -833,11 +837,18 @@ frame_data[i] = const_cast<uint8_t*>(src_frame.plane_addrs[i]); } + // TODO(crbug.com/40285824): spanify this usage. scoped_refptr<VideoFrame> video_frame = VideoFrame::WrapExternalYuvDataWithLayout( video_->FrameLayout(), video_->VisibleRect(), - video_->VisibleRect().size(), frame_data[0], frame_data[1], - frame_data[2], base::TimeTicks::Now().since_origin()); + video_->VisibleRect().size(), + UNSAFE_TODO(base::span(frame_data[0], + video_->FrameLayout().planes()[0].size)), + UNSAFE_TODO(base::span(frame_data[1], + video_->FrameLayout().planes()[1].size)), + UNSAFE_TODO(base::span(frame_data[2], + video_->FrameLayout().planes()[2].size)), + base::TimeTicks::Now().since_origin()); video_frame->AddDestructionObserver( base::DoNothingWithBoundArgs(std::move(src_frame))); return video_frame;
diff --git a/media/gpu/vaapi/vaapi_dmabuf_video_frame_mapper.cc b/media/gpu/vaapi/vaapi_dmabuf_video_frame_mapper.cc index 792da69..d7eaa1b 100644 --- a/media/gpu/vaapi/vaapi_dmabuf_video_frame_mapper.cc +++ b/media/gpu/vaapi/vaapi_dmabuf_video_frame_mapper.cc
@@ -82,9 +82,13 @@ VLOGF(1) << "Failed to create VideoFrameLayout for VAImage"; return nullptr; } + // TODO(crbug.com/40285824): spanify this usage. auto video_frame = VideoFrame::WrapExternalYuvDataWithLayout( *mapped_layout, src_video_frame->visible_rect(), - src_video_frame->visible_rect().size(), addrs[0], addrs[1], addrs[2], + src_video_frame->visible_rect().size(), + UNSAFE_TODO(base::span(addrs[0], mapped_layout->planes()[0].size)), + UNSAFE_TODO(base::span(addrs[1], mapped_layout->planes()[1].size)), + base::span<uint8_t>(), // kNumPlanes = 2. third plane doesn't exist src_video_frame->timestamp()); if (!video_frame) return nullptr;
diff --git a/net/cert/cert_verify_proc_unittest.cc b/net/cert/cert_verify_proc_unittest.cc index df2d5a0..a5734c3 100644 --- a/net/cert/cert_verify_proc_unittest.cc +++ b/net/cert/cert_verify_proc_unittest.cc
@@ -1395,24 +1395,6 @@ } } -TEST_P(CertVerifyProcInternalTest, TestKnownRoot) { - base::FilePath certs_dir = GetTestCertsDirectory(); - scoped_refptr<X509Certificate> cert_chain = CreateCertificateChainFromFile( - certs_dir, "leaf_from_known_root.pem", X509Certificate::FORMAT_AUTO); - ASSERT_TRUE(cert_chain); - - int flags = 0; - CertVerifyResult verify_result; - int error = - Verify(cert_chain.get(), "arabianhorseplay.com", flags, &verify_result); - EXPECT_THAT(error, IsOk()) - << "This test relies on a real certificate that " - << "expires on May 18 2026. If failing on/after " - << "that date, please disable and file a bug " - << "against mattm. Current time: " << base::Time::Now(); - EXPECT_TRUE(verify_result.is_issued_by_known_root); -} - // This tests that on successful certificate verification, // CertVerifyResult::public_key_hashes is filled with a SHA256 hash for each // of the certificates in the chain.
diff --git a/net/data/ssl/certificates/README b/net/data/ssl/certificates/README index 0a1d3be..85fb84b 100644 --- a/net/data/ssl/certificates/README +++ b/net/data/ssl/certificates/README
@@ -41,11 +41,6 @@ All files are from the src/test/testdada directory in https://code.google.com/p/certificate-transparency/ -- leaf_from_known_root.pem : A certificate issued by a public trust anchor, - used for CertVerifyProcInternalTest.TestKnownRoot. Using for other - purposes is not recommended. This needs to be updated periodically so the - server name the cert is valid for may change. - - lets-encrypt-dst-x3-root.pem: A chain that ends in the Lets encrypt DST X3 root (https://crt.sh/?id=8395). Has the same leaf as lets-encrypt-isrg-x1-root.pem.
diff --git a/net/data/ssl/certificates/leaf_from_known_root.pem b/net/data/ssl/certificates/leaf_from_known_root.pem deleted file mode 100644 index f40f08d..0000000 --- a/net/data/ssl/certificates/leaf_from_known_root.pem +++ /dev/null
@@ -1,256 +0,0 @@ -=========================================== -Certificate0: 1e6b31c1294d8b21f22a7997e7675f89ec02499ce448dae8baf2ba66e7630fc8 -=========================================== -Certificate: - Data: - Version: 3 (0x2) - Serial Number: - 98:16:56:f9:4d:7a:56:37 - Signature Algorithm: sha256WithRSAEncryption - Issuer: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., OU=http://certs.godaddy.com/repository/, CN=Go Daddy Secure Certificate Authority - G2 - Validity - Not Before: Apr 16 05:46:54 2025 GMT - Not After : May 18 05:46:54 2026 GMT - Subject: CN=arabianhorseplay.com - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) - Modulus: - 00:9d:0f:bf:81:ad:4a:8e:c0:fd:ae:98:18:20:f6: - e2:ee:53:94:f8:97:34:c1:ae:2c:c8:82:9b:d2:9c: - 72:1e:7b:05:25:db:61:48:e7:8c:92:19:d5:f0:47: - 70:ea:b4:d4:ad:5b:70:fa:f1:3f:87:d3:8b:90:d0: - b5:9a:d0:a1:32:b2:3b:0c:1d:ba:88:45:72:3d:99: - 28:49:5a:3b:26:b1:81:4c:71:e5:c3:a5:6a:4a:71: - 57:b1:8d:f5:a3:cc:db:9b:aa:38:d9:2b:92:54:cf: - 76:ef:32:53:a4:c0:83:97:3e:61:24:e1:2c:82:cf: - b8:b0:97:7c:3a:40:91:6f:26:93:87:bb:a0:9a:0e: - 64:21:72:66:74:a9:e2:98:20:b7:24:86:28:58:7c: - 64:66:89:79:75:89:5c:12:5c:b4:96:a5:b5:25:25: - 21:97:da:43:2e:a4:25:03:7e:32:f7:ac:2e:7e:10: - 24:2a:db:01:6d:87:bb:18:28:86:a1:11:fe:a6:16: - 08:51:5f:f7:f4:01:24:64:f1:fa:a4:f0:7b:07:15: - 5d:f8:14:a7:f9:c1:47:09:69:ce:0b:64:2b:24:94: - f5:cb:c3:47:6d:a5:25:e8:f6:71:45:d2:0e:c1:b0: - 03:c9:29:0e:55:29:c3:72:08:06:7e:4f:2f:ee:f9: - 38:1f - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Basic Constraints: critical - CA:FALSE - X509v3 Extended Key Usage: - TLS Web Server Authentication, TLS Web Client Authentication - X509v3 Key Usage: critical - Digital Signature, Key Encipherment - X509v3 CRL Distribution Points: - Full Name: - URI:http://crl.godaddy.com/gdig2s1-44050.crl - - X509v3 Certificate Policies: - Policy: 2.16.840.1.114413.1.7.23.1 - CPS: http://certificates.godaddy.com/repository/ - Policy: 2.23.140.1.2.1 - Authority Information Access: - OCSP - URI:http://ocsp.godaddy.com/ - CA Issuers - URI:http://certificates.godaddy.com/repository/gdig2.crt - X509v3 Authority Key Identifier: - 40:C2:BD:27:8E:CC:34:83:30:A2:33:D7:FB:6C:B3:F0:B4:2C:80:CE - X509v3 Subject Alternative Name: - DNS:arabianhorseplay.com, DNS:www.arabianhorseplay.com - X509v3 Subject Key Identifier: - 91:4B:E5:5D:7E:6C:7B:AA:E4:08:A9:C3:B4:A6:D9:54:22:01:D5:72 - CT Precertificate SCTs: - Signed Certificate Timestamp: - Version : v1 (0x0) - Log ID : 0E:57:94:BC:F3:AE:A9:3E:33:1B:2C:99:07:B3:F7:90: - DF:9B:C2:3D:71:32:25:DD:21:A9:25:AC:61:C5:4E:21 - Timestamp : Apr 16 05:46:54.753 2025 GMT - Extensions: none - Signature : ecdsa-with-SHA256 - 30:46:02:21:00:D2:55:F0:D2:38:63:B8:B9:86:76:71: - FC:CC:EE:01:98:23:3F:56:7F:22:C2:37:75:03:91:DE: - BC:FD:F3:05:51:02:21:00:AB:8E:4F:C5:D6:71:14:05: - 7A:40:E7:CD:BF:37:81:5A:F3:1B:7A:D3:17:EC:62:6B: - 82:FB:D5:B1:05:43:B0:C9 - Signed Certificate Timestamp: - Version : v1 (0x0) - Log ID : 64:11:C4:6C:A4:12:EC:A7:89:1C:A2:02:2E:00:BC:AB: - 4F:28:07:D4:1E:35:27:AB:EA:FE:D5:03:C9:7D:CD:F0 - Timestamp : Apr 16 05:46:55.005 2025 GMT - Extensions: none - Signature : ecdsa-with-SHA256 - 30:45:02:21:00:B9:79:0C:AA:40:09:41:48:34:79:9F: - 95:F1:37:18:4E:D4:A5:78:9D:66:2E:F0:D9:96:31:00: - FF:4F:35:83:0F:02:20:51:CE:A4:98:AE:E0:67:87:4E: - C6:37:F1:1F:97:4E:1A:EB:F0:DE:25:86:B8:64:79:48: - D7:53:5A:A9:42:B3:04 - Signed Certificate Timestamp: - Version : v1 (0x0) - Log ID : CB:38:F7:15:89:7C:84:A1:44:5F:5B:C1:DD:FB:C9:6E: - F2:9A:59:CD:47:0A:69:05:85:B0:CB:14:C3:14:58:E7 - Timestamp : Apr 16 05:46:56.175 2025 GMT - Extensions: none - Signature : ecdsa-with-SHA256 - 30:44:02:20:17:99:BB:54:AD:7A:6D:0D:37:EA:B4:63: - A4:75:4E:DD:23:BC:B6:BD:55:9A:C4:2E:A7:1B:AE:81: - AA:89:E2:46:02:20:4F:42:74:CB:02:2B:9E:59:4A:2A: - A2:F4:15:76:79:D3:48:3D:12:8F:CC:0A:45:A0:35:04: - 44:64:75:C0:5E:F6 - Signature Algorithm: sha256WithRSAEncryption - Signature Value: - 5a:29:b9:38:0d:40:cd:f0:bd:d5:62:e1:75:de:6b:06:a6:37: - d9:0c:c7:a4:b5:0f:2c:93:50:26:41:e9:ac:cb:d6:cb:1d:72: - 7a:3f:a4:56:13:6a:54:91:6f:76:0a:ce:30:66:7b:b5:11:5e: - 0d:54:25:49:a8:53:ce:f9:ae:38:db:ac:09:3f:d3:bc:8d:a8: - 12:ed:79:52:50:26:bb:e3:63:79:84:e3:e4:6e:5d:bc:d3:08: - 9e:d4:f2:1c:68:e1:de:b1:e8:de:c1:e6:4d:91:1e:da:54:67: - af:c5:72:fc:57:67:74:cc:f2:71:7c:8d:58:9c:b1:85:15:12: - 3c:f2:ea:41:b8:c9:ef:f7:c2:6b:71:9a:67:8b:94:05:22:2d: - 58:6c:43:e2:6e:3a:98:ba:59:fb:33:59:1f:94:b7:05:ed:24: - 2e:eb:53:11:6c:45:38:95:bb:58:39:08:52:27:42:87:d5:05: - aa:f8:f7:5e:60:6c:e4:86:36:e5:6e:d7:03:b5:85:b0:ab:d7: - b8:db:7e:62:7b:74:a9:f3:1a:7c:53:2e:e0:0f:fa:e6:30:b5: - 54:99:a2:47:d8:52:ac:dd:8e:b5:27:11:25:04:58:90:f3:0a: - 9a:77:0f:ac:1c:fd:e4:a8:35:87:2c:1d:2f:9f:e7:1a:28:65: - c4:b7:e7:7b - ------BEGIN CERTIFICATE----- -MIIGqTCCBZGgAwIBAgIJAJgWVvlNelY3MA0GCSqGSIb3DQEBCwUAMIG0MQswCQYD -VQQGEwJVUzEQMA4GA1UECBMHQXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEa -MBgGA1UEChMRR29EYWRkeS5jb20sIEluYy4xLTArBgNVBAsTJGh0dHA6Ly9jZXJ0 -cy5nb2RhZGR5LmNvbS9yZXBvc2l0b3J5LzEzMDEGA1UEAxMqR28gRGFkZHkgU2Vj -dXJlIENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTI1MDQxNjA1NDY1NFoX -DTI2MDUxODA1NDY1NFowHzEdMBsGA1UEAxMUYXJhYmlhbmhvcnNlcGxheS5jb20w -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCdD7+BrUqOwP2umBgg9uLu -U5T4lzTBrizIgpvSnHIeewUl22FI54ySGdXwR3DqtNStW3D68T+H04uQ0LWa0KEy -sjsMHbqIRXI9mShJWjsmsYFMceXDpWpKcVexjfWjzNubqjjZK5JUz3bvMlOkwIOX -PmEk4SyCz7iwl3w6QJFvJpOHu6CaDmQhcmZ0qeKYILckhihYfGRmiXl1iVwSXLSW -pbUlJSGX2kMupCUDfjL3rC5+ECQq2wFth7sYKIahEf6mFghRX/f0ASRk8fqk8HsH -FV34FKf5wUcJac4LZCsklPXLw0dtpSXo9nFF0g7BsAPJKQ5VKcNyCAZ+Ty/u+Tgf -AgMBAAGjggNQMIIDTDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMB -BggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwOQYDVR0fBDIwMDAuoCygKoYoaHR0 -cDovL2NybC5nb2RhZGR5LmNvbS9nZGlnMnMxLTQ0MDUwLmNybDBdBgNVHSAEVjBU -MEgGC2CGSAGG/W0BBxcBMDkwNwYIKwYBBQUHAgEWK2h0dHA6Ly9jZXJ0aWZpY2F0 -ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeS8wCAYGZ4EMAQIBMHYGCCsGAQUFBwEB -BGowaDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZ29kYWRkeS5jb20vMEAGCCsG -AQUFBzAChjRodHRwOi8vY2VydGlmaWNhdGVzLmdvZGFkZHkuY29tL3JlcG9zaXRv -cnkvZ2RpZzIuY3J0MB8GA1UdIwQYMBaAFEDCvSeOzDSDMKIz1/tss/C0LIDOMDkG -A1UdEQQyMDCCFGFyYWJpYW5ob3JzZXBsYXkuY29tghh3d3cuYXJhYmlhbmhvcnNl -cGxheS5jb20wHQYDVR0OBBYEFJFL5V1+bHuq5Aipw7Sm2VQiAdVyMIIBfgYKKwYB -BAHWeQIEAgSCAW4EggFqAWgAdwAOV5S8866pPjMbLJkHs/eQ35vCPXEyJd0hqSWs -YcVOIQAAAZY9ItOhAAAEAwBIMEYCIQDSVfDSOGO4uYZ2cfzM7gGYIz9WfyLCN3UD -kd68/fMFUQIhAKuOT8XWcRQFekDnzb83gVrzG3rTF+xia4L71bEFQ7DJAHYAZBHE -bKQS7KeJHKICLgC8q08oB9QeNSer6v7VA8l9zfAAAAGWPSLUnQAABAMARzBFAiEA -uXkMqkAJQUg0eZ+V8TcYTtSleJ1mLvDZljEA/081gw8CIFHOpJiu4GeHTsY38R+X -Thrr8N4lhrhkeUjXU1qpQrMEAHUAyzj3FYl8hKFEX1vB3fvJbvKaWc1HCmkFhbDL -FMMUWOcAAAGWPSLZLwAABAMARjBEAiAXmbtUrXptDTfqtGOkdU7dI7y2vVWaxC6n -G66BqoniRgIgT0J0ywIrnllKKqL0FXZ500g9Eo/MCkWgNQREZHXAXvYwDQYJKoZI -hvcNAQELBQADggEBAFopuTgNQM3wvdVi4XXeawamN9kMx6S1DyyTUCZB6azL1ssd -cno/pFYTalSRb3YKzjBme7URXg1UJUmoU875rjjbrAk/07yNqBLteVJQJrvjY3mE -4+RuXbzTCJ7U8hxo4d6x6N7B5k2RHtpUZ6/FcvxXZ3TM8nF8jVicsYUVEjzy6kG4 -ye/3wmtxmmeLlAUiLVhsQ+JuOpi6WfszWR+UtwXtJC7rUxFsRTiVu1g5CFInQofV -Bar4915gbOSGNuVu1wO1hbCr17jbfmJ7dKnzGnxTLuAP+uYwtVSZokfYUqzdjrUn -ESUEWJDzCpp3D6wc/eSoNYcsHS+f5xooZcS353s= ------END CERTIFICATE----- - -=========================================== -Certificate1: 973a41276ffd01e027a2aad49e34c37846d3e976ff6a620b6712e33832041aa6 -=========================================== -Certificate: - Data: - Version: 3 (0x2) - Serial Number: 7 (0x7) - Signature Algorithm: sha256WithRSAEncryption - Issuer: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., CN=Go Daddy Root Certificate Authority - G2 - Validity - Not Before: May 3 07:00:00 2011 GMT - Not After : May 3 07:00:00 2031 GMT - Subject: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., OU=http://certs.godaddy.com/repository/, CN=Go Daddy Secure Certificate Authority - G2 - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) - Modulus: - 00:b9:e0:cb:10:d4:af:76:bd:d4:93:62:eb:30:64: - b8:81:08:6c:c3:04:d9:62:17:8e:2f:ff:3e:65:cf: - 8f:ce:62:e6:3c:52:1c:da:16:45:4b:55:ab:78:6b: - 63:83:62:90:ce:0f:69:6c:99:c8:1a:14:8b:4c:cc: - 45:33:ea:88:dc:9e:a3:af:2b:fe:80:61:9d:79:57: - c4:cf:2e:f4:3f:30:3c:5d:47:fc:9a:16:bc:c3:37: - 96:41:51:8e:11:4b:54:f8:28:be:d0:8c:be:f0:30: - 38:1e:f3:b0:26:f8:66:47:63:6d:de:71:26:47:8f: - 38:47:53:d1:46:1d:b4:e3:dc:00:ea:45:ac:bd:bc: - 71:d9:aa:6f:00:db:db:cd:30:3a:79:4f:5f:4c:47: - f8:1d:ef:5b:c2:c4:9d:60:3b:b1:b2:43:91:d8:a4: - 33:4e:ea:b3:d6:27:4f:ad:25:8a:a5:c6:f4:d5:d0: - a6:ae:74:05:64:57:88:b5:44:55:d4:2d:2a:3a:3e: - f8:b8:bd:e9:32:0a:02:94:64:c4:16:3a:50:f1:4a: - ae:e7:79:33:af:0c:20:07:7f:e8:df:04:39:c2:69: - 02:6c:63:52:fa:77:c1:1b:c8:74:87:c8:b9:93:18: - 50:54:35:4b:69:4e:bc:3b:d3:49:2e:1f:dc:c1:d2: - 52:fb - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Basic Constraints: critical - CA:TRUE - X509v3 Key Usage: critical - Certificate Sign, CRL Sign - X509v3 Subject Key Identifier: - 40:C2:BD:27:8E:CC:34:83:30:A2:33:D7:FB:6C:B3:F0:B4:2C:80:CE - X509v3 Authority Key Identifier: - 3A:9A:85:07:10:67:28:B6:EF:F6:BD:05:41:6E:20:C1:94:DA:0F:DE - Authority Information Access: - OCSP - URI:http://ocsp.godaddy.com/ - X509v3 CRL Distribution Points: - Full Name: - URI:http://crl.godaddy.com/gdroot-g2.crl - - X509v3 Certificate Policies: - Policy: X509v3 Any Policy - CPS: https://certs.godaddy.com/repository/ - Signature Algorithm: sha256WithRSAEncryption - Signature Value: - 08:7e:6c:93:10:c8:38:b8:96:a9:90:4b:ff:a1:5f:4f:04:ef: - 6c:3e:9c:88:06:c9:50:8f:a6:73:f7:57:31:1b:be:bc:e4:2f: - db:f8:ba:d3:5b:e0:b4:e7:e6:79:62:0e:0c:a2:d7:6a:63:73: - 31:b5:f5:a8:48:a4:3b:08:2d:a2:5d:90:d7:b4:7c:25:4f:11: - 56:30:c4:b6:44:9d:7b:2c:9d:e5:5e:e6:ef:0c:61:aa:bf:e4: - 2a:1b:ee:84:9e:b8:83:7d:c1:43:ce:44:a7:13:70:0d:91:1f: - f4:c8:13:ad:83:60:d9:d8:72:a8:73:24:1e:b5:ac:22:0e:ca: - 17:89:62:58:44:1b:ab:89:25:01:00:0f:cd:c4:1b:62:db:51: - b4:d3:0f:51:2a:9b:f4:bc:73:fc:76:ce:36:a4:cd:d9:d8:2c: - ea:ae:9b:f5:2a:b2:90:d1:4d:75:18:8a:3f:8a:41:90:23:7d: - 5b:4b:fe:a4:03:58:9b:46:b2:c3:60:60:83:f8:7d:50:41:ce: - c2:a1:90:c3:bb:ef:02:2f:d2:15:54:ee:44:15:d9:0a:ae:a7: - 8a:33:ed:b1:2d:76:36:26:dc:04:eb:9f:f7:61:1f:15:dc:87: - 6f:ee:46:96:28:ad:a1:26:7d:0a:09:a7:2e:04:a3:8d:bc:f8: - bc:04:30:01 - ------BEGIN CERTIFICATE----- -MIIE0DCCA7igAwIBAgIBBzANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT -EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp -ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTExMDUwMzA3MDAwMFoXDTMxMDUwMzA3 -MDAwMFowgbQxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH -EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjEtMCsGA1UE -CxMkaHR0cDovL2NlcnRzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkvMTMwMQYDVQQD -EypHbyBEYWRkeSBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IC0gRzIwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC54MsQ1K92vdSTYuswZLiBCGzD -BNliF44v/z5lz4/OYuY8UhzaFkVLVat4a2ODYpDOD2lsmcgaFItMzEUz6ojcnqOv -K/6AYZ15V8TPLvQ/MDxdR/yaFrzDN5ZBUY4RS1T4KL7QjL7wMDge87Am+GZHY23e -cSZHjzhHU9FGHbTj3ADqRay9vHHZqm8A29vNMDp5T19MR/gd71vCxJ1gO7GyQ5HY -pDNO6rPWJ0+tJYqlxvTV0KaudAVkV4i1RFXULSo6Pvi4vekyCgKUZMQWOlDxSq7n -eTOvDCAHf+jfBDnCaQJsY1L6d8EbyHSHyLmTGFBUNUtpTrw700kuH9zB0lL7AgMB -AAGjggEaMIIBFjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV -HQ4EFgQUQMK9J47MNIMwojPX+2yz8LQsgM4wHwYDVR0jBBgwFoAUOpqFBxBnKLbv -9r0FQW4gwZTaD94wNAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8v -b2NzcC5nb2RhZGR5LmNvbS8wNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2NybC5n -b2RhZGR5LmNvbS9nZHJvb3QtZzIuY3JsMEYGA1UdIAQ/MD0wOwYEVR0gADAzMDEG -CCsGAQUFBwIBFiVodHRwczovL2NlcnRzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkv -MA0GCSqGSIb3DQEBCwUAA4IBAQAIfmyTEMg4uJapkEv/oV9PBO9sPpyIBslQj6Zz -91cxG7685C/b+LrTW+C05+Z5Yg4MotdqY3MxtfWoSKQ7CC2iXZDXtHwlTxFWMMS2 -RJ17LJ3lXubvDGGqv+QqG+6EnriDfcFDzkSnE3ANkR/0yBOtg2DZ2HKocyQetawi -DsoXiWJYRBuriSUBAA/NxBti21G00w9RKpv0vHP8ds42pM3Z2Czqrpv1KrKQ0U11 -GIo/ikGQI31bS/6kA1ibRrLDYGCD+H1QQc7CoZDDu+8CL9IVVO5EFdkKrqeKM+2x -LXY2JtwE65/3YR8V3Idv7kaWKK2hJn0KCacuBKONvPi8BDAB ------END CERTIFICATE----- -
diff --git a/net/data/test_support_bundle_data.filelist b/net/data/test_support_bundle_data.filelist index fdc754c..4245f0f2 100644 --- a/net/data/test_support_bundle_data.filelist +++ b/net/data/test_support_bundle_data.filelist
@@ -114,7 +114,6 @@ data/ssl/certificates/key_usage_rsa_digitalsignature.pem data/ssl/certificates/key_usage_rsa_keyencipherment.pem data/ssl/certificates/key_usage_rsa_no_extension.pem -data/ssl/certificates/leaf_from_known_root.pem data/ssl/certificates/lets-encrypt-dst-x3-root.pem data/ssl/certificates/lets-encrypt-isrg-x1-root.pem data/ssl/certificates/localhost_cert.pem
diff --git a/printing/common/metafile_utils.cc b/printing/common/metafile_utils.cc index 6d76cfe5..b2ccbf9f 100644 --- a/printing/common/metafile_utils.cc +++ b/printing/common/metafile_utils.cc
@@ -86,6 +86,9 @@ const char kPDFStructureTypeTableHeader[] = "TH"; const char kPDFStructureTypeTableCell[] = "TD"; +// Table 372 in PDF 32000-2:2020 spec, section 14.8.4.8.3 +const char kPDFStructureTypeCaption[] = "Caption"; + // Table 373 in PDF 32000-2:2020 spec, section 14.8.4.8.5 const char kPDFStructureTypeFigure[] = "Figure"; @@ -167,6 +170,21 @@ case ax::mojom::Role::kBlockquote: tag->fTypeString = kPDFStructureTypeBlockQuote; break; + case ax::mojom::Role::kCaption: { + ui::AXNode* parent = ax_node->GetParent(); + if (parent->IsTable()) { + // PDF 32000-2:2020 Table 371 Caption must be the first or last child + // of Table, luckily, the AXTree always reorders caption to be the + // first child. + DCHECK_EQ(parent->GetUnignoredChildAtIndex(0), ax_node); + tag->fTypeString = kPDFStructureTypeCaption; + } else { + // TODO(crbug.com/448962793) Investigate in which other scenarios a + // node with role caption should be mapped to PDF Tag caption. + tag->fTypeString = kPDFStructureTypeNonStruct; + } + break; + } case ax::mojom::Role::kCode: tag->fTypeString = kPDFStructureTypeCode; break;
diff --git a/sandbox/policy/linux/landlock_gpu_policy_android.cc b/sandbox/policy/linux/landlock_gpu_policy_android.cc index d25af790..ee4cc19 100644 --- a/sandbox/policy/linux/landlock_gpu_policy_android.cc +++ b/sandbox/policy/linux/landlock_gpu_policy_android.cc
@@ -100,7 +100,10 @@ "/data/app", // Allow read-only access to /proc/self. This is needed for the process // to introspect its own state. - "/proc/self", "/sys"}; + "/proc/self", + // Allow access to /proc/sys/kernel/random, which ashmem may use to + // obtain entropy for ASLR. + "/proc/sys/kernel/random", "/sys"}; uint64_t ro_access = LANDLOCK_ACCESS_FS_READ_FILE | LANDLOCK_ACCESS_FS_READ_DIR; if (!AddRulesToPolicy(ruleset_fd.get(), allowed_ro_paths, ro_access)) {
diff --git a/services/audio/input_sync_writer.cc b/services/audio/input_sync_writer.cc index eb9605a..34192e7 100644 --- a/services/audio/input_sync_writer.cc +++ b/services/audio/input_sync_writer.cc
@@ -13,6 +13,7 @@ #include "base/compiler_specific.h" #include "base/containers/heap_array.h" #include "base/containers/span.h" +#include "base/containers/span_reader.h" #include "base/format_macros.h" #include "base/logging.h" #include "base/metrics/histogram_functions.h" @@ -96,16 +97,21 @@ audio_buses_.resize(shared_memory_segment_count); // Create vector of audio buses by wrapping existing blocks of memory. - uint8_t* ptr = static_cast<uint8_t*>(shared_memory_mapping_.memory()); - CHECK(ptr); + base::span<uint8_t> data = shared_memory_mapping_.GetMemoryAsSpan<uint8_t>(); + CHECK(!data.empty()); + auto reader = base::SpanReader<uint8_t>(data); + for (auto& bus : audio_buses_) { - CHECK_EQ(0U, reinterpret_cast<uintptr_t>(ptr) & - (media::AudioBus::kChannelAlignment - 1)); - media::AudioInputBuffer* buffer = - reinterpret_cast<media::AudioInputBuffer*>(ptr); - bus = media::AudioBus::WrapMemory(params, buffer->audio); - UNSAFE_TODO(ptr += shared_memory_segment_size_); + auto input_buffer = *reader.Read(shared_memory_segment_size_); + auto audio_data = + input_buffer.subspan<sizeof(media::AudioInputBufferParameters)>(); + CHECK_EQ(audio_data.size(), audio_bus_memory_size_); + CHECK( + base::IsAligned(audio_data.data(), media::AudioBus::kChannelAlignment)); + bus = media::AudioBus::WrapMemory(params, audio_data); } + + CHECK(reader.remaining_span().empty()); } InputSyncWriter::~InputSyncWriter() = default;
diff --git a/services/audio/sync_reader.cc b/services/audio/sync_reader.cc index b4888f7..fb29388 100644 --- a/services/audio/sync_reader.cc +++ b/services/audio/sync_reader.cc
@@ -68,9 +68,16 @@ shared_memory_mapping_ = shared_memory_region_.Map(); if (shared_memory_region_.IsValid() && shared_memory_mapping_.IsValid() && base::CancelableSyncSocket::CreatePair(&socket_, foreign_socket)) { + auto buffer_span = shared_memory_mapping_.GetMemoryAsSpan<uint8_t>(); + auto audio_data = + buffer_span.subspan<sizeof(media::AudioInputBufferParameters)>(); + CHECK_EQ(audio_data.size(), output_bus_buffer_size_); + auto* const buffer = shared_memory_mapping_.GetMemoryAs<media::AudioOutputBuffer>(); - output_bus_ = media::AudioBus::WrapMemory(params, buffer->audio); + CHECK_EQ(audio_data.data(), buffer->audio); + + output_bus_ = media::AudioBus::WrapMemory(params, audio_data); output_bus_->Zero(); output_bus_->set_is_bitstream_format(params.IsBitstreamFormat()); }
diff --git a/services/preferences/tracked/pref_hash_filter.cc b/services/preferences/tracked/pref_hash_filter.cc index 830e0d0a..79698c5 100644 --- a/services/preferences/tracked/pref_hash_filter.cc +++ b/services/preferences/tracked/pref_hash_filter.cc
@@ -417,10 +417,18 @@ if (preference->EnforceAndReport(pref_store_contents_at_load, transaction.get(), nullptr /* external_tx */, encryptor)) { - // The preference was invalid. Reset the *live* preference. This action - // will mark the PrefService as dirty and automatically schedule a new - // write operation, during which new encrypted hashes will be generated. - pref_service_->ClearPref(path); + // The preference was invalid. Update the *live* preference with the + // corrected value from the in-memory `pref_store_contents_at_load` + // dictionary, which `EnforceAndReport` has already modified. + const base::Value* corrected_value = + pref_store_contents_at_load.FindByDottedPath(path); + if (corrected_value) { + pref_service_->Set(path, corrected_value->Clone()); + } else { + // If the corrected value is null (meaning the whole preference was + // corrupt and removed), then clear the live pref. + pref_service_->ClearPref(path); + } pref_to_write = user_prefs::kPreferenceResetTime; } }
diff --git a/services/preferences/tracked/pref_hash_filter_unittest.cc b/services/preferences/tracked/pref_hash_filter_unittest.cc index 90f20ae..03a5b0ae 100644 --- a/services/preferences/tracked/pref_hash_filter_unittest.cc +++ b/services/preferences/tracked/pref_hash_filter_unittest.cc
@@ -297,17 +297,22 @@ void MockPrefHashStore::SetCheckResult(const std::string& path, ValueState result) { - check_results_.insert(std::make_pair(path, result)); + // Allow overwriting existing values. This is necessary for tests that need + // to set the check result for the same preference multiple times + // (e.g., once for the synchronous pass and once for the asynchronous pass). + check_results_[path] = result; } void MockPrefHashStore::SetInvalidKeysResult( const std::string& path, const std::vector<std::string>& invalid_keys_result) { - // Ensure |check_results_| has a CHANGED entry for |path|. std::map<std::string, ValueState>::const_iterator result = check_results_.find(path); ASSERT_TRUE(result != check_results_.end()); - ASSERT_EQ(ValueState::CHANGED, result->second); + ValueState value_state = result->second; + ASSERT_TRUE(value_state == ValueState::CHANGED || + value_state == ValueState::CHANGED_ENCRYPTED || + value_state == ValueState::CHANGED_VIA_HMAC_FALLBACK); invalid_keys_results_.insert(std::make_pair(path, invalid_keys_result)); } @@ -374,13 +379,11 @@ ValueState MockPrefHashStore::RecordCheckValue(const std::string& path, const void* value, PrefTrackingStrategy strategy) { - // Record that |path| was checked and validate that it wasn't previously - // checked. - EXPECT_TRUE(checked_values_ - .insert(std::make_pair(path, std::make_pair(value, strategy))) - .second); - std::map<std::string, ValueState>::const_iterator result = - check_results_.find(path); + // Record that |path| was checked. Allow it to be checked multiple times. + // This is required for tests that simulate both a synchronous and an + // asynchronous validation pass. + checked_values_[path] = std::make_pair(value, strategy); + auto result = check_results_.find(path); if (result != check_results_.end()) return result->second; return ValueState::UNCHANGED; @@ -1887,6 +1890,72 @@ EXPECT_FALSE(mock_pref_service_->WasCleared(kAtomicPref)); } +TEST_P(PrefHashFilterEncryptedTest, + DeferredRevalidationResetsSplitPrefPartially) { + // This test is only relevant when enforcement is on. + if (GetParam() != EnforcementLevel::ENFORCE_ON_LOAD) { + return; + } + + InitializeAsyncOSCrypt(); + ResetImpl(true, test_os_crypt_async_.get()); + + mock_pref_service_ = std::make_unique<MockPrefService>(); + mock_pref_service_->registry()->RegisterDictionaryPref(kSplitPref); + mock_pref_service_->registry()->RegisterStringPref(kScheduleToFlushToDisk, + "0"); + mock_pref_service_->registry()->RegisterStringPref( + user_prefs::kPreferenceResetTime, "0"); + pref_hash_filter_->SetPrefService(mock_pref_service_.get()); + + // 1. Set up the initial state with a good and a bad key. + base::Value::Dict initial_dict; + initial_dict.Set("good_key", "good_value"); + initial_dict.Set("bad_key", "bad_value"); + pref_store_contents_.Set(kSplitPref, initial_dict.Clone()); + // Also set this initial state in the live PrefService. + mock_pref_service_->Set(kSplitPref, base::Value(initial_dict.Clone())); + + // 2. Configure the mock for the SYNCHRONOUS pass. + // The HMACs are all valid, so the initial check is UNCHANGED. + mock_pref_hash_store_->SetCheckResult(kSplitPref, ValueState::UNCHANGED); + + // 3. Run the synchronous load. This should schedule the deferred task. + pref_hash_filter_->FilterOnLoad( + base::BindOnce(&PrefHashFilterTest::GetPrefsBack, base::Unretained(this), + false /* expected_altered */), + std::move(pref_store_contents_)); + + // At this point, nothing should have been cleared. + ASSERT_FALSE(mock_pref_service_->WasCleared(kSplitPref)); + + // 4. Re-configure the mock for the ASYNCHRONOUS pass. + // Now, the encrypted hash for "bad_key" is found to be invalid. + mock_pref_hash_store_->SetCheckResult(kSplitPref, + ValueState::CHANGED_ENCRYPTED); + mock_pref_hash_store_->SetInvalidKeysResult(kSplitPref, {"bad_key"}); + + // 5. Wait for the deferred task to complete. + base::RunLoop revalidation_run_loop; + bool callback_ran = false; + pref_hash_filter_->SetOnDeferredRevalidationCompleteForTesting(base::BindOnce( + &PrefHashFilterEncryptedTest::OnDeferredRevalidationComplete, + base::Unretained(this), &callback_ran, + revalidation_run_loop.QuitClosure())); + revalidation_run_loop.Run(); + ASSERT_TRUE(callback_ran); + + // 6. VERIFY the results. + // The whole pref should NOT have been cleared. This is the bug fix check. + EXPECT_FALSE(mock_pref_service_->WasCleared(kSplitPref)); + + // The live pref value should now be the corrected dictionary. + const base::Value::Dict& final_dict = mock_pref_service_->GetDict(kSplitPref); + EXPECT_TRUE(final_dict.Find("good_key")); + EXPECT_FALSE(final_dict.Find("bad_key")); + EXPECT_EQ(1u, final_dict.size()); +} + TEST_P(PrefHashFilterTest, MetricLoggedOnceOnSyncPathFeatureDisabled) { // The metric is logged exactly once from the synchronous FinalizeFilterOnLoad // pass.
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 81adf02..d0224d464 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -235,6 +235,21 @@ ] } ], + "AccessibilityManifestV3ChromeVox": [ + { + "platforms": [ + "chromeos" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AccessibilityManifestV3ChromeVox" + ] + } + ] + } + ], "AccessibilityPageZoomV2": [ { "platforms": [ @@ -2484,6 +2499,25 @@ ] } ], + "AutofillEnableBuyNowPayLaterUpdatedSuggestionSecondLineString": [ + { + "platforms": [ + "chromeos", + "chromeos_lacros", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillEnableBuyNowPayLaterUpdatedSuggestionSecondLineString" + ] + } + ] + } + ], "AutofillEnableCardBenefitsForBmo": [ { "platforms": [ @@ -13979,6 +14013,42 @@ ] } ], + "IOSTabResumptionShopCard": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled_20251013", + "params": { + "ShopCardVariant": "arm_3" + }, + "enable_features": [ + "TabResumptionShopCard" + ] + }, + { + "name": "Enabled_20251013", + "params": { + "ShopCardVariant": "arm_4" + }, + "enable_features": [ + "TabResumptionShopCard" + ] + }, + { + "name": "Enabled_20251013", + "params": { + "ShopCardVariant": "arm_6" + }, + "enable_features": [ + "TabResumptionShopCard" + ] + } + ] + } + ], "IOSTabResumptionThumbnails": [ { "platforms": [ @@ -21239,6 +21309,25 @@ ] } ], + "RollBackModeB": [ + { + "platforms": [ + "android", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "RollBackModeB" + ] + } + ] + } + ], "RoundedWindows": [ { "platforms": [ @@ -28130,27 +28219,6 @@ ] } ], - "WebrtcAcceleratedScaling": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "WebrtcAcceleratedScaling" - ], - "disable_features": [ - "BreakoutBoxConversionWithoutSinkSignal" - ] - } - ] - } - ], "WhatsNewHats": [ { "platforms": [
diff --git a/third_party/angle b/third_party/angle index 6b71ba8..02ffcb3 160000 --- a/third_party/angle +++ b/third_party/angle
@@ -1 +1 @@ -Subproject commit 6b71ba83ee75da8ade695a8d5a63523f45ac4c43 +Subproject commit 02ffcb3667ca95a4fe94f87c4f7901c8e37a4ab9
diff --git a/third_party/blink/public/mojom/use_counter/metrics/webdx_feature.mojom b/third_party/blink/public/mojom/use_counter/metrics/webdx_feature.mojom index 4f552103..79e6440 100644 --- a/third_party/blink/public/mojom/use_counter/metrics/webdx_feature.mojom +++ b/third_party/blink/public/mojom/use_counter/metrics/webdx_feature.mojom
@@ -471,6 +471,7 @@ kWebxrLightingEstimation = 409, kReporting = 410, kFontLanguageOverride = 411, + kWebnn = 412, // Add new features immediately above this line. Don't change assigned // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/blink/renderer/core/exported/web_media_player_impl_unittest.cc b/third_party/blink/renderer/core/exported/web_media_player_impl_unittest.cc index 037b61e..e3870b6 100644 --- a/third_party/blink/renderer/core/exported/web_media_player_impl_unittest.cc +++ b/third_party/blink/renderer/core/exported/web_media_player_impl_unittest.cc
@@ -171,8 +171,8 @@ MOCK_METHOD0(DurationChanged, void()); MOCK_METHOD0(SizeChanged, void()); MOCK_METHOD1(SetCcLayer, void(cc::Layer*)); - MOCK_METHOD1(AddMediaTrack, void(const media::MediaTrack& track)); - MOCK_METHOD1(RemoveMediaTrack, void(const media::MediaTrack&)); + MOCK_METHOD1(AddTrack, void(const media::MediaTrack& track)); + MOCK_METHOD1(RemoveTrack, void(const media::MediaTrack&)); MOCK_METHOD1(MediaSourceOpened, void(std::unique_ptr<WebMediaSource>)); MOCK_METHOD2(RemotePlaybackCompatibilityChanged, void(const KURL&, bool)); MOCK_METHOD0(WasAlwaysMuted, bool());
diff --git a/third_party/blink/renderer/core/html/media/html_media_element.cc b/third_party/blink/renderer/core/html/media/html_media_element.cc index bb8da4f..31dffc4f 100644 --- a/third_party/blink/renderer/core/html/media/html_media_element.cc +++ b/third_party/blink/renderer/core/html/media/html_media_element.cc
@@ -3392,7 +3392,7 @@ } } -void HTMLMediaElement::AddMediaTrack(const media::MediaTrack& track) { +void HTMLMediaElement::AddTrack(const media::MediaTrack& track) { switch (track.type()) { case media::MediaTrack::Type::kVideo: { bool enabled = track.enabled() && videoTracks().selectedIndex() == -1; @@ -3415,7 +3415,7 @@ } } -void HTMLMediaElement::RemoveMediaTrack(const media::MediaTrack& track) { +void HTMLMediaElement::RemoveTrack(const media::MediaTrack& track) { switch (track.type()) { case media::MediaTrack::Type::kVideo: { videoTracks().Remove(String::FromUTF8(track.track_id().value())); @@ -4577,14 +4577,14 @@ // Create a placeholder audio track if the player says it has audio but it // didn't explicitly announce the tracks. if (HasAudio() && !audioTracks().length()) { - AddMediaTrack(media::MediaTrack::CreateAudioTrack( + AddTrack(media::MediaTrack::CreateAudioTrack( "audio", media::MediaTrack::AudioKind::kMain, "Audio Track", "", true)); } // Create a placeholder video track if the player says it has video but it // didn't explicitly announce the tracks. if (HasVideo() && !videoTracks().length()) { - AddMediaTrack(media::MediaTrack::CreateVideoTrack( + AddTrack(media::MediaTrack::CreateVideoTrack( "video", media::MediaTrack::VideoKind::kMain, "Video Track", "", true)); } }
diff --git a/third_party/blink/renderer/core/html/media/html_media_element.h b/third_party/blink/renderer/core/html/media/html_media_element.h index b73586bd..856a0b8 100644 --- a/third_party/blink/renderer/core/html/media/html_media_element.h +++ b/third_party/blink/renderer/core/html/media/html_media_element.h
@@ -385,7 +385,7 @@ void DidAudioOutputSinkChanged(const String& hashed_device_id); void SetCcLayerForTesting(cc::Layer* layer) { SetCcLayer(layer); } - void AddMediaTrackForTesting(const media::MediaTrack& t) { AddMediaTrack(t); } + void AddTrackForTesting(const media::MediaTrack& t) { AddTrack(t); } // This should be called directly after creation. void SetMediaPlayerHostForTesting( @@ -567,8 +567,8 @@ void SetCcLayer(cc::Layer*) override; - void AddMediaTrack(const media::MediaTrack&) final; - void RemoveMediaTrack(const media::MediaTrack&) final; + void AddTrack(const media::MediaTrack&) final; + void RemoveTrack(const media::MediaTrack&) final; void MediaSourceOpened(std::unique_ptr<WebMediaSource>) final; void RemotePlaybackCompatibilityChanged(const KURL&,
diff --git a/third_party/blink/renderer/core/html/media/html_media_element_test.cc b/third_party/blink/renderer/core/html/media/html_media_element_test.cc index f6f8303..466b017f 100644 --- a/third_party/blink/renderer/core/html/media/html_media_element_test.cc +++ b/third_party/blink/renderer/core/html/media/html_media_element_test.cc
@@ -2405,33 +2405,33 @@ EXPECT_CALL(*MockMediaPlayer(), Load(_, _, _, _)) .Times(1) - .WillOnce([element = Media(), audio_only]( - EmptyWebMediaPlayer::LoadType, - const blink::WebMediaPlayerSource&, - EmptyWebMediaPlayer::CorsMode, - bool) -> WebMediaPlayer::LoadTiming { - element->AddMediaTrackForTesting(media::MediaTrack::CreateAudioTrack( - "audio1", media::MediaTrack::AudioKind::kMain, "audio1", "", true, - 0, true)); - element->AddMediaTrackForTesting(media::MediaTrack::CreateAudioTrack( - "audio2", media::MediaTrack::AudioKind::kMain, "audio2", "", false, - 0, true)); - element->AddMediaTrackForTesting(media::MediaTrack::CreateAudioTrack( - "audio3", media::MediaTrack::AudioKind::kMain, "audio3", "", false, - 0, true)); - if (!audio_only) { - element->AddMediaTrackForTesting(media::MediaTrack::CreateVideoTrack( - "video1", media::MediaTrack::VideoKind::kMain, "video1", "", true, - 0)); - element->AddMediaTrackForTesting(media::MediaTrack::CreateVideoTrack( - "video2", media::MediaTrack::VideoKind::kMain, "video2", "", - false, 0)); - element->AddMediaTrackForTesting(media::MediaTrack::CreateVideoTrack( - "video3", media::MediaTrack::VideoKind::kMain, "video3", "", - false, 0)); - } - return WebMediaPlayer::LoadTiming::kImmediate; - }); + .WillOnce( + [element = Media(), audio_only](EmptyWebMediaPlayer::LoadType, + const blink::WebMediaPlayerSource&, + EmptyWebMediaPlayer::CorsMode, + bool) -> WebMediaPlayer::LoadTiming { + element->AddTrackForTesting(media::MediaTrack::CreateAudioTrack( + "audio1", media::MediaTrack::AudioKind::kMain, "audio1", "", + true, 0, true)); + element->AddTrackForTesting(media::MediaTrack::CreateAudioTrack( + "audio2", media::MediaTrack::AudioKind::kMain, "audio2", "", + false, 0, true)); + element->AddTrackForTesting(media::MediaTrack::CreateAudioTrack( + "audio3", media::MediaTrack::AudioKind::kMain, "audio3", "", + false, 0, true)); + if (!audio_only) { + element->AddTrackForTesting(media::MediaTrack::CreateVideoTrack( + "video1", media::MediaTrack::VideoKind::kMain, "video1", "", + true, 0)); + element->AddTrackForTesting(media::MediaTrack::CreateVideoTrack( + "video2", media::MediaTrack::VideoKind::kMain, "video2", "", + false, 0)); + element->AddTrackForTesting(media::MediaTrack::CreateVideoTrack( + "video3", media::MediaTrack::VideoKind::kMain, "video3", "", + false, 0)); + } + return WebMediaPlayer::LoadTiming::kImmediate; + }); Media()->SetSrc(AtomicString(frag_url.c_str())); test::RunPendingTasks(); @@ -2472,33 +2472,33 @@ EXPECT_CALL(*MockMediaPlayer(), Load(_, _, _, _)) .Times(1) - .WillOnce([element = Media(), audio_only]( - EmptyWebMediaPlayer::LoadType, - const blink::WebMediaPlayerSource&, - EmptyWebMediaPlayer::CorsMode, - bool) -> WebMediaPlayer::LoadTiming { - element->AddMediaTrackForTesting(media::MediaTrack::CreateAudioTrack( - "audio1", media::MediaTrack::AudioKind::kMain, "audio1", "", true, - 0, true)); - element->AddMediaTrackForTesting(media::MediaTrack::CreateAudioTrack( - "audio2", media::MediaTrack::AudioKind::kMain, "audio2", "", false, - 0, true)); - element->AddMediaTrackForTesting(media::MediaTrack::CreateAudioTrack( - "audio3", media::MediaTrack::AudioKind::kMain, "audio3", "", false, - 0, true)); - if (!audio_only) { - element->AddMediaTrackForTesting(media::MediaTrack::CreateVideoTrack( - "video1", media::MediaTrack::VideoKind::kMain, "video1", "", true, - 0)); - element->AddMediaTrackForTesting(media::MediaTrack::CreateVideoTrack( - "video2", media::MediaTrack::VideoKind::kMain, "video2", "", - false, 0)); - element->AddMediaTrackForTesting(media::MediaTrack::CreateVideoTrack( - "video3", media::MediaTrack::VideoKind::kMain, "video3", "", - false, 0)); - } - return WebMediaPlayer::LoadTiming::kImmediate; - }); + .WillOnce( + [element = Media(), audio_only](EmptyWebMediaPlayer::LoadType, + const blink::WebMediaPlayerSource&, + EmptyWebMediaPlayer::CorsMode, + bool) -> WebMediaPlayer::LoadTiming { + element->AddTrackForTesting(media::MediaTrack::CreateAudioTrack( + "audio1", media::MediaTrack::AudioKind::kMain, "audio1", "", + true, 0, true)); + element->AddTrackForTesting(media::MediaTrack::CreateAudioTrack( + "audio2", media::MediaTrack::AudioKind::kMain, "audio2", "", + false, 0, true)); + element->AddTrackForTesting(media::MediaTrack::CreateAudioTrack( + "audio3", media::MediaTrack::AudioKind::kMain, "audio3", "", + false, 0, true)); + if (!audio_only) { + element->AddTrackForTesting(media::MediaTrack::CreateVideoTrack( + "video1", media::MediaTrack::VideoKind::kMain, "video1", "", + true, 0)); + element->AddTrackForTesting(media::MediaTrack::CreateVideoTrack( + "video2", media::MediaTrack::VideoKind::kMain, "video2", "", + false, 0)); + element->AddTrackForTesting(media::MediaTrack::CreateVideoTrack( + "video3", media::MediaTrack::VideoKind::kMain, "video3", "", + false, 0)); + } + return WebMediaPlayer::LoadTiming::kImmediate; + }); Media()->SetSrc(AtomicString(frag_url.c_str())); test::RunPendingTasks(); @@ -2528,33 +2528,33 @@ EXPECT_CALL(*MockMediaPlayer(), Load(_, _, _, _)) .Times(1) - .WillOnce([element = Media(), audio_only]( - EmptyWebMediaPlayer::LoadType, - const blink::WebMediaPlayerSource&, - EmptyWebMediaPlayer::CorsMode, - bool) -> WebMediaPlayer::LoadTiming { - element->AddMediaTrackForTesting(media::MediaTrack::CreateAudioTrack( - "audio1", media::MediaTrack::AudioKind::kMain, "audio1", "", true, - 0, true)); - element->AddMediaTrackForTesting(media::MediaTrack::CreateAudioTrack( - "audio2", media::MediaTrack::AudioKind::kMain, "audio2", "", false, - 0, true)); - element->AddMediaTrackForTesting(media::MediaTrack::CreateAudioTrack( - "audio3", media::MediaTrack::AudioKind::kMain, "audio3", "", false, - 0, true)); - if (!audio_only) { - element->AddMediaTrackForTesting(media::MediaTrack::CreateVideoTrack( - "video1", media::MediaTrack::VideoKind::kMain, "video1", "", true, - 0)); - element->AddMediaTrackForTesting(media::MediaTrack::CreateVideoTrack( - "video2", media::MediaTrack::VideoKind::kMain, "video2", "", - false, 0)); - element->AddMediaTrackForTesting(media::MediaTrack::CreateVideoTrack( - "video3", media::MediaTrack::VideoKind::kMain, "video3", "", - false, 0)); - } - return WebMediaPlayer::LoadTiming::kImmediate; - }); + .WillOnce( + [element = Media(), audio_only](EmptyWebMediaPlayer::LoadType, + const blink::WebMediaPlayerSource&, + EmptyWebMediaPlayer::CorsMode, + bool) -> WebMediaPlayer::LoadTiming { + element->AddTrackForTesting(media::MediaTrack::CreateAudioTrack( + "audio1", media::MediaTrack::AudioKind::kMain, "audio1", "", + true, 0, true)); + element->AddTrackForTesting(media::MediaTrack::CreateAudioTrack( + "audio2", media::MediaTrack::AudioKind::kMain, "audio2", "", + false, 0, true)); + element->AddTrackForTesting(media::MediaTrack::CreateAudioTrack( + "audio3", media::MediaTrack::AudioKind::kMain, "audio3", "", + false, 0, true)); + if (!audio_only) { + element->AddTrackForTesting(media::MediaTrack::CreateVideoTrack( + "video1", media::MediaTrack::VideoKind::kMain, "video1", "", + true, 0)); + element->AddTrackForTesting(media::MediaTrack::CreateVideoTrack( + "video2", media::MediaTrack::VideoKind::kMain, "video2", "", + false, 0)); + element->AddTrackForTesting(media::MediaTrack::CreateVideoTrack( + "video3", media::MediaTrack::VideoKind::kMain, "video3", "", + false, 0)); + } + return WebMediaPlayer::LoadTiming::kImmediate; + }); Media()->SetSrc(AtomicString(frag_url.c_str())); test::RunPendingTasks();
diff --git a/third_party/blink/renderer/core/html/media/html_video_element_test.cc b/third_party/blink/renderer/core/html/media/html_video_element_test.cc index 1290d3f..7d12916 100644 --- a/third_party/blink/renderer/core/html/media/html_video_element_test.cc +++ b/third_party/blink/renderer/core/html/media/html_video_element_test.cc
@@ -115,9 +115,9 @@ video()->SetSrc(AtomicString("http://example.com/foo.mp4")); test::RunPendingTasks(); - video()->AddMediaTrackForTesting(media::MediaTrack::CreateAudioTrack( + video()->AddTrackForTesting(media::MediaTrack::CreateAudioTrack( "a0", media::MediaTrack::AudioKind::kMain, "zero", "EN", true, 0, true)); - video()->AddMediaTrackForTesting(media::MediaTrack::CreateAudioTrack( + video()->AddTrackForTesting(media::MediaTrack::CreateAudioTrack( "a1", media::MediaTrack::AudioKind::kMain, "one", "EN", false, 1, true)); ASSERT_EQ(video()->audioTracks().length(), 2); ASSERT_EQ(video()->audioTracks().AnonymousIndexedGetter(0)->id(), "a0"); @@ -125,9 +125,9 @@ ASSERT_EQ(video()->audioTracks().AnonymousIndexedGetter(1)->id(), "a1"); ASSERT_FALSE(video()->audioTracks().AnonymousIndexedGetter(1)->enabled()); - video()->AddMediaTrackForTesting(media::MediaTrack::CreateVideoTrack( + video()->AddTrackForTesting(media::MediaTrack::CreateVideoTrack( "v0", media::MediaTrack::VideoKind::kMain, "zero", "EN", true, 0)); - video()->AddMediaTrackForTesting(media::MediaTrack::CreateVideoTrack( + video()->AddTrackForTesting(media::MediaTrack::CreateVideoTrack( "v1", media::MediaTrack::VideoKind::kMain, "one", "EN", false, 1)); ASSERT_EQ(video()->videoTracks().length(), 2); ASSERT_EQ(video()->videoTracks().AnonymousIndexedGetter(0)->id(), "v0");
diff --git a/third_party/blink/renderer/modules/mediastream/web_media_player_ms.cc b/third_party/blink/renderer/modules/mediastream/web_media_player_ms.cc index 2935206a..f0a7fc93 100644 --- a/third_party/blink/renderer/modules/mediastream/web_media_player_ms.cc +++ b/third_party/blink/renderer/modules/mediastream/web_media_player_ms.cc
@@ -552,7 +552,7 @@ // is enabled by default to match blink logic. bool is_first_audio_track = true; for (auto component : audio_components) { - client_->AddMediaTrack(media::MediaTrack::CreateAudioTrack( + client_->AddTrack(media::MediaTrack::CreateAudioTrack( component->Id().Utf8(), media::MediaTrack::AudioKind::kMain, component->GetSourceName().Utf8(), /*language=*/"", is_first_audio_track)); @@ -576,7 +576,7 @@ // is enabled by default to match blink logic. bool is_first_video_track = true; for (auto component : video_components) { - client_->AddMediaTrack(media::MediaTrack::CreateVideoTrack( + client_->AddTrack(media::MediaTrack::CreateVideoTrack( component->Id().Utf8(), media::MediaTrack::VideoKind::kMain, component->GetSourceName().Utf8(), /*language=*/"", is_first_video_track));
diff --git a/third_party/blink/renderer/modules/mediastream/web_media_player_ms_test.cc b/third_party/blink/renderer/modules/mediastream/web_media_player_ms_test.cc index 6c00ed2..251368d 100644 --- a/third_party/blink/renderer/modules/mediastream/web_media_player_ms_test.cc +++ b/third_party/blink/renderer/modules/mediastream/web_media_player_ms_test.cc
@@ -563,8 +563,8 @@ void SetCcLayer(cc::Layer* layer) override; void OnFirstFrame(base::TimeTicks, size_t) override {} - void RemoveMediaTrack(const media::MediaTrack&) override {} - void AddMediaTrack(const media::MediaTrack& track) override {} + void RemoveTrack(const media::MediaTrack&) override {} + void AddTrack(const media::MediaTrack& track) override {} void MediaSourceOpened(std::unique_ptr<WebMediaSource>) override {} void RemotePlaybackCompatibilityChanged(const KURL& url,
diff --git a/third_party/blink/renderer/platform/media/media_player_client.h b/third_party/blink/renderer/platform/media/media_player_client.h index 6dc4673..610cfe9 100644 --- a/third_party/blink/renderer/platform/media/media_player_client.h +++ b/third_party/blink/renderer/platform/media/media_player_client.h
@@ -87,8 +87,8 @@ virtual void SizeChanged() = 0; virtual void SetCcLayer(cc::Layer*) = 0; - virtual void AddMediaTrack(const media::MediaTrack&) = 0; - virtual void RemoveMediaTrack(const media::MediaTrack&) = 0; + virtual void AddTrack(const media::MediaTrack&) = 0; + virtual void RemoveTrack(const media::MediaTrack&) = 0; virtual void MediaSourceOpened(std::unique_ptr<WebMediaSource>) = 0; virtual void RemotePlaybackCompatibilityChanged(const KURL&,
diff --git a/third_party/blink/renderer/platform/media/web_media_player_impl.cc b/third_party/blink/renderer/platform/media/web_media_player_impl.cc index ea804bd3..1159fe9 100644 --- a/third_party/blink/renderer/platform/media/web_media_player_impl.cc +++ b/third_party/blink/renderer/platform/media/web_media_player_impl.cc
@@ -1660,12 +1660,12 @@ #if BUILDFLAG(ENABLE_FFMPEG) || BUILDFLAG(ENABLE_HLS_DEMUXER) -void WebMediaPlayerImpl::AddMediaTrack(const media::MediaTrack& track) { - client_->AddMediaTrack(track); +void WebMediaPlayerImpl::AddTrack(const media::MediaTrack& track) { + client_->AddTrack(track); } -void WebMediaPlayerImpl::RemoveMediaTrack(const media::MediaTrack& track) { - client_->RemoveMediaTrack(track); +void WebMediaPlayerImpl::RemoveTrack(const media::MediaTrack& track) { + client_->RemoveTrack(track); } #endif // BUILDFLAG(ENABLE_FFMPEG) || BUILDFLAG(ENABLE_HLS_DEMUXER)
diff --git a/third_party/blink/renderer/platform/media/web_media_player_impl.h b/third_party/blink/renderer/platform/media/web_media_player_impl.h index b61f4ffb..a1acaf1 100644 --- a/third_party/blink/renderer/platform/media/web_media_player_impl.h +++ b/third_party/blink/renderer/platform/media/web_media_player_impl.h
@@ -446,8 +446,8 @@ void DemuxerRequestsSeek(base::TimeDelta seek_time) override; #if BUILDFLAG(ENABLE_FFMPEG) || BUILDFLAG(ENABLE_HLS_DEMUXER) - void AddMediaTrack(const media::MediaTrack&) override; - void RemoveMediaTrack(const media::MediaTrack&) override; + void AddTrack(const media::MediaTrack&) override; + void RemoveTrack(const media::MediaTrack&) override; #endif // BUILDFLAG(ENABLE_FFMPEG) || BUILDFLAG(ENABLE_HLS_DEMUXER) #if BUILDFLAG(ENABLE_HLS_DEMUXER)
diff --git a/third_party/blink/renderer/platform/webrtc/webrtc_video_frame_adapter.cc b/third_party/blink/renderer/platform/webrtc/webrtc_video_frame_adapter.cc index c9fdbe5..aa50d29 100644 --- a/third_party/blink/renderer/platform/webrtc/webrtc_video_frame_adapter.cc +++ b/third_party/blink/renderer/platform/webrtc/webrtc_video_frame_adapter.cc
@@ -762,16 +762,13 @@ return; } - { - // Must not hold the lock while the callback is executed. - base::AutoLock auto_lock(adapted_frames_lock_); - webrtc::scoped_refptr<webrtc::VideoFrameBuffer> adapted_webrtc_frame = - ConvertToWebRtcVideoFrameBuffer(converted_frame, shared_resources_); + base::AutoLock auto_lock(adapted_frames_lock_); + webrtc::scoped_refptr<webrtc::VideoFrameBuffer> adapted_webrtc_frame = + ConvertToWebRtcVideoFrameBuffer(converted_frame, shared_resources_); - adapted_frames_.push_back(AdaptedFrame( - ScaledBufferSize(visible_rect, converted_frame->natural_size()), - converted_frame, adapted_webrtc_frame)); - } + adapted_frames_.push_back(AdaptedFrame( + ScaledBufferSize(visible_rect, converted_frame->natural_size()), + converted_frame, adapted_webrtc_frame)); handler->OnFramePrepared(frame_identifier); }
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index c544b61..06a2097 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -2959,8 +2959,9 @@ crbug.com/450876665 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-in-sync-event.html [ Failure Pass ] # ====== New tests from wpt-importer added here ====== +crbug.com/451655444 external/wpt/webdriver/tests/bidi/network/get_data/persistence.py [ Failure ] +crbug.com/451655444 external/wpt/webdriver/tests/bidi/network/set_extra_headers/invalid.py [ Failure ] crbug.com/450776558 external/wpt/css/css-text/line-breaking/segment-break-transformation-punctuation-003.html [ Failure ] -crbug.com/450957697 external/wpt/webdriver/tests/bidi/network/get_data/persistence.py [ Timeout ] crbug.com/450555241 [ Win ] external/wpt/compression/decompression-extra-input.https.any.shadowrealm-in-serviceworker.html [ Pass Timeout ] crbug.com/450513405 external/wpt/css/css-anchor-position/position-area-overflow-icb-001.html [ Failure ] crbug.com/450513405 external/wpt/css/css-anchor-position/position-area-overflow-icb-002.html [ Failure ] @@ -2968,7 +2969,7 @@ crbug.com/450513406 external/wpt/css/css-writing-modes/text-shadow-sideways-001.html [ Failure ] crbug.com/450555241 [ Win ] external/wpt/speculation-rules/prefetch/tentative/cookie-indices.https.html?include=changedWithRedirect [ Pass Timeout ] crbug.com/450555241 external/wpt/speculation-rules/prefetch/tentative/cookie-indices.https.html?include=changedWithRedirect3 [ Skip Timeout ] -crbug.com/450508310 external/wpt/webdriver/tests/bidi/emulation/set_network_conditions/contexts.py [ Crash Failure ] +crbug.com/450508310 external/wpt/webdriver/tests/bidi/emulation/set_network_conditions/contexts.py [ Crash Failure Timeout ] crbug.com/450508310 external/wpt/webdriver/tests/bidi/emulation/set_network_conditions/global.py [ Failure ] crbug.com/450508310 external/wpt/webdriver/tests/bidi/emulation/set_network_conditions/invalid.py [ Failure ] crbug.com/450508310 external/wpt/webdriver/tests/bidi/emulation/set_network_conditions/network_conditions_offline.py [ Failure ]
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 4d65516..0c43454 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
@@ -75928,6 +75928,32 @@ {} ] ], + "anchor-center-safe-rtl.html": [ + "029d9eaeea9efa1648a2dcfae5d0049a7896434e", + [ + null, + [ + [ + "/css/css-anchor-position/anchor-center-safe-rtl-ref.html", + "==" + ] + ], + {} + ] + ], + "anchor-center-safe.html": [ + "baff5f80a2578082bc38352a2848f80ccc7905bb", + [ + null, + [ + [ + "/css/css-anchor-position/anchor-center-safe-ref.html", + "==" + ] + ], + {} + ] + ], "anchor-center-scroll.html": [ "29b5e06e2a52dc55466920fdbe7741531a518122", [ @@ -148027,6 +148053,19 @@ {} ] ], + "column-negative-margin-001.html": [ + "c23fe059d19d5981f664090913a3615c2632fdef", + [ + null, + [ + [ + "/css/css-grid/masonry/tentative/item-placement/column-negative-margin-001-ref.html", + "==" + ] + ], + {} + ] + ], "dense-packing": { "column-dense-packing-001.html": [ "a56658e0e9b466534e32d2d1c8fd9046c59c1c93", @@ -148550,6 +148589,19 @@ ], {} ] + ], + "row-negative-margin-001.html": [ + "e4b0d9e22b75d8193dc5df6dad26ea04fc85e863", + [ + null, + [ + [ + "/css/css-grid/masonry/tentative/item-placement/row-negative-margin-001-ref.html", + "==" + ] + ], + {} + ] ] }, "masonry-columns-item-containing-block-is-grid-content-width.html": [ @@ -149121,7 +149173,7 @@ ] ], "column-auto-repeat-auto-005.html": [ - "dc06daf9f5df4bc7984ceb4822281873b6e34a9c", + "910b82e3d4f46e1b7469503bd7b956e1ddbce930", [ null, [ @@ -149381,7 +149433,7 @@ ] ], "column-auto-repeat-fit-content-003.html": [ - "67a2b71a363bcd1c2515ec7b1bfb15c4b50e3569", + "50955fdbc7780ee13b9291272b90ca1b1c250da6", [ null, [ @@ -149446,7 +149498,7 @@ ] ], "column-auto-repeat-max-content-003.html": [ - "a06d6dd40283f07c9701941b6353b765fcae43dd", + "fad3cebdbc92677478a2ab89529d761a5426ffbf", [ null, [ @@ -149511,7 +149563,7 @@ ] ], "column-auto-repeat-min-content-003.html": [ - "b2c8419d7cc5c79e0fd6c4f7df8fd0b91d1e604f", + "5df85e2914690abfd117b27dd9a2d965e8cb308f", [ null, [ @@ -149654,7 +149706,7 @@ ] ], "row-auto-repeat-auto-005.html": [ - "063f56fed1a33a3dc6a87c8b987eeeda0969a012", + "f36cce9ad10cfd0f77c0e1dc56a8e774028e93fd", [ null, [ @@ -149914,7 +149966,7 @@ ] ], "row-auto-repeat-fit-content-003.html": [ - "69f825c6b2bb36ca28716f20fcdc030787eb5612", + "dd059c62a57008c20e76f1f9f2069cefb9453ae2", [ null, [ @@ -149979,7 +150031,7 @@ ] ], "row-auto-repeat-max-content-003.html": [ - "ab14aa67466df5c4ed4e44468252791732a5884d", + "62d5bc4fe6ee956aed69febdf46b8f6d824b8687", [ null, [ @@ -150044,7 +150096,7 @@ ] ], "row-auto-repeat-min-content-003.html": [ - "c3e32630c1a31c2528f76dba66950546e384b837", + "01f1a8df6dbd19b68dfe3419230457709e2901e3", [ null, [ @@ -179821,7 +179873,7 @@ ] ], "nesting-basic.html": [ - "38d4f9c5e557b6a8955980af6c5ba66e21954373", + "35dbba3eba0d907b213e966abcfea21fd0f8c818", [ null, [ @@ -321908,7 +321960,7 @@ "scroll-animations": { "animation-trigger": { "animation-trigger-fill-mode-both.tentative.html": [ - "c2b4173272d892726ecd9c35b75d4f545c3e0c13", + "01f267d07e72434dbeef4b42e52b60fd028f64c9", [ null, [ @@ -321921,7 +321973,7 @@ ] ], "animation-trigger-fill-mode-none.tentative.html": [ - "bf90373a574cc099fd010f9647c6c5fd69b747d3", + "3eb3d4de2d5cc3f0aa5ed5650c431d5c5117400b", [ null, [ @@ -333068,6 +333120,10 @@ "775209284947114b6f50e5dfaf7695afd2ba7abf", [] ], + "aria-owns-expected.txt": [ + "d3e84f1da88253d7f7e7a349617b32bda4fd9620", + [] + ], "name": { "ReadMe.md": [ "be955258530b6634f6233f8c5b6670f6c83f54e5", @@ -334263,7 +334319,7 @@ [] ], "battery-allowed-by-permissions-policy-attribute-redirect-on-load.https.sub-expected.txt": [ - "148d38fee4c7bb0a2c3ea42822d4426ad2974f78", + "9a909fac0dfa363453ead79ffa14deeaecd4b7e1", [] ], "battery-allowed-by-permissions-policy.https.sub.html.headers": [ @@ -334271,11 +334327,11 @@ [] ], "battery-default-permissions-policy.https.sub-expected.txt": [ - "91a38e6fc3ed17d6657d0bddad8402998ab65368", + "35039eef72cec0d90c9e1e5bfa5fb33fe2aa7369", [] ], "battery-disabled-by-permissions-policy.https.sub-expected.txt": [ - "14e6f8c4b3a484af635852e2c1141147c4b3fc92", + "970faca804fcba7fc7622d9de45f6ec6e9288268", [] ], "battery-disabled-by-permissions-policy.https.sub.html.headers": [ @@ -334288,7 +334344,7 @@ ], "resources": { "battery-status-helpers.js": [ - "1f0ee71ad5787ca9169e000ba76b8bc4bc468158", + "583768a892edbce6ccc2e49e5b0be23aebeb448c", [] ], "support-iframe.html": [ @@ -346085,6 +346141,14 @@ "5ece35c66eeacee0d638bf12675fba1db0f49eff", [] ], + "anchor-center-safe-ref.html": [ + "d3d06f548849d00c6d45ec8e96cdfa0bb6c3cc18", + [] + ], + "anchor-center-safe-rtl-ref.html": [ + "5bd9d8a81c997e639f0cb7779e9988396c499036", + [] + ], "anchor-center-scroll-ref.html": [ "d2638491cef23e0c1a788801aec9a4ec848b78d4", [] @@ -347747,7 +347811,7 @@ [] ], "background-shorthand-serialization-expected.txt": [ - "6b88c6a4ab4356fdf8a279a2db1aa68a605c507d", + "0980ac5b1d6080974c901fc52492859c41659607", [] ], "background-size-computed-expected.txt": [ @@ -347755,7 +347819,7 @@ [] ], "background-valid-expected.txt": [ - "17f84f3398ada134a50c1d6915800eec4921651d", + "b347a8f0c5761f9d7a5f1e63ebc093a4900a7516", [] ], "border-shorthand-expected.txt": [ @@ -351062,10 +351126,6 @@ "scroll-state-query-with-var-expected.txt": [ "274eb4e67dcfa1495d2c751d258926c100e632e1", [] - ], - "scroll-state-scrolled-user-touch-scroll-expected.txt": [ - "aeda8bd6bb5a3b9c153b392a56cc1e16adb08abf", - [] ] }, "scrollbar-container-units-block-ref.html": [ @@ -365634,6 +365694,10 @@ "b3e25fed55e765eb8a569b893a3fe3d018c249b1", [] ], + "column-negative-margin-001-ref.html": [ + "c32dc4865c0f8176acdb110e18a63ff4ddb840f6", + [] + ], "dense-packing": { "column-dense-packing-001-ref.html": [ "ab16ec39bb4ec7bee46611d59a27d959c16c863b", @@ -365797,6 +365861,10 @@ "row-auto-placement-min-content-ref.html": [ "ed0df33f62ff4b9c3f7280a76e4d76815edda80a", [] + ], + "row-negative-margin-001-ref.html": [ + "3e6319c5c3430e1369071e0a80c6ed8df3a3d885", + [] ] }, "masonry-not-inhibited-001-ref.html": [ @@ -371772,7 +371840,7 @@ [] ], "nesting-basic-ref.html": [ - "b96dc050f4bc5fa4d5f5027416774fb35138e83e", + "282d5c0dd9e4fa33562e0f3c0d00b80379ad7310", [] ], "supports-is-consistent-ref.html": [ @@ -400252,7 +400320,7 @@ [] ], "event-timing-test-utils.js": [ - "afad67bb6fc2d90e02bf7b40633be891bb2fe3d0", + "73bf397d3e6f40d6b32040f6f72e318ecdedfcea", [] ], "slow-image.py": [ @@ -400815,6 +400883,10 @@ "5447ab96e4f23b905dad685c2233e3ba8b9a954b", [] ], + "continue_on_flexible_tokens.py": [ + "f0ff257565ff4a876a2b7f85406ded4d1e9731a9", + [] + ], "disconnect.py": [ "13131fa1f30217fe5d83b244410f740b14b1bda2", [] @@ -400957,6 +401029,10 @@ "d7304159834804c417f498acebc45f59e588dcbb", [] ], + "manifest_continue_on_flexible_tokens.json": [ + "e3907ae13e7cf5f4bffedf128aea9e8426ea0c6a", + [] + ], "manifest_flexible_tokens.json": [ "917ddf6365cb5920c1fde74e996e1d6e16fbae2f", [] @@ -401085,6 +401161,10 @@ "dbdc28c3247a386976e0711d08369dedc69ba4a9", [] ], + "resolve_flexible_tokens.html": [ + "3f7ebd5d0c2324a8e2aed2c32142bd744edeb6b9", + [] + ], "select_manifest_in_root_manifest.py": [ "4b3e7964f0fbb7a6031f30a6264407bb0759b82b", [] @@ -418984,10 +419064,6 @@ "4b7ec31280cf04cb5c6087c288a781293b75964f", [] ], - "resource-selection-invoke-in-sync-event-expected.txt": [ - "e21058be1ee634159014cd9703d362750218cd41", - [] - ], "resource-selection-invoke-insert-into-iframe-expected.txt": [ "fed0105b593455c14cdb552bbbb9f35a42ef7175", [] @@ -437455,7 +437531,7 @@ ], "support": { "support.js": [ - "6b4bb65b130fbac944c90ac9f580148ccc1ddc52", + "5467317cd01312968a4f5375e85c0b2b6de3b691", [] ] } @@ -437962,10 +438038,6 @@ "23ac4054d051b51309327a6c985dc67c458a93d5", [] ], - "removeRange-expected.txt": [ - "11286780a4d8f64e53cac91431e2e3698507cde2", - [] - ], "script-and-style-elements-expected.txt": [ "bfb7c0c8a38c389d0642166907c14f5b269e96ac", [] @@ -450411,6 +450483,12 @@ [] ] }, + "set_extra_headers": { + "__init__.py": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + [] + ] + }, "support": { "empty.html": [ "69e9da4114557b774cd78c3da64f24b49ccb03b6", @@ -484498,6 +484576,15 @@ ] }, "accname": { + "aria-owns.html": [ + "dcf20fb616cd9f01541bdf9ee472ab5d2c138152", + [ + null, + { + "testdriver": true + } + ] + ], "basic.html": [ "d84f4dc3b95a062b61e1cc4bd2554d744545f82d", [ @@ -485067,7 +485154,7 @@ ] ], "rewriter-rewrite-streaming.tentative.https.window.js": [ - "59c7da3ceb344b133119bd361546548b81547a7e", + "5cd9d008931c41ce03ed41762e88ea638b671dec", [ "ai/rewriter/rewriter-rewrite-streaming.tentative.https.window.html", { @@ -485078,6 +485165,10 @@ ], [ "script", + "/common/gc.js" + ], + [ + "script", "/resources/testdriver.js" ], [ @@ -485345,7 +485436,7 @@ ] ], "summarizer-summarize-streaming.tentative.https.window.js": [ - "2a41369c92d0a98257497dda421001e6a493200d", + "57dd19b05e3ef4b9c7cebf4c73c610d7f151f38f", [ "ai/summarizer/summarizer-summarize-streaming.tentative.https.window.html", { @@ -485356,6 +485447,10 @@ ], [ "script", + "/common/gc.js" + ], + [ + "script", "/resources/testdriver.js" ], [ @@ -485498,7 +485593,7 @@ ] ], "translator.optional.https.window.js": [ - "daf0f3e9e0b2e542c231f50fe03174d1ff33a9de", + "23ac1d1d76ba2d268419ea784b62194aaa7c5d44", [ "ai/translator/translator.optional.https.window.html", { @@ -485521,6 +485616,10 @@ ], [ "script", + "/common/gc.js" + ], + [ + "script", "/resources/testdriver.js" ], [ @@ -485749,7 +485848,7 @@ ] ], "writer-write-streaming.tentative.https.window.js": [ - "122acb03fd5293cdfd9a704d7587f2360d8a8dec", + "35601457a77bc75961d1cc6d1a67e316b39f4ee7", [ "ai/writer/writer-write-streaming.tentative.https.window.html", { @@ -485760,6 +485859,10 @@ ], [ "script", + "/common/gc.js" + ], + [ + "script", "/resources/testdriver.js" ], [ @@ -514029,7 +514132,7 @@ ] ], "background-shorthand-serialization.html": [ - "5212303784bc0ed9086837dd8cf5db51b1eb1db3", + "f80c0799d23f6e389d711befacd8575cdcede0a8", [ null, {} @@ -514057,7 +514160,7 @@ ] ], "background-valid.html": [ - "7bf23f7614bdb8d164e4404f0c4573a62af7a34d", + "1389b67a931fb13f250ebc789a79b2b99775e8d8", [ null, {} @@ -516929,7 +517032,7 @@ ] ], "container-for-shadow-dom.html": [ - "f49858ecd7dfc3ed24d5e7c6b63bb9c7924e58b3", + "0f2f6286b6fc995a25d4e4449f1d5413b152699b", [ null, {} @@ -517818,7 +517921,7 @@ ] ], "scroll-state-scrolled-user-touch-scroll.html": [ - "cd97601fdef30e55fd8df0eec35f24617a24eec3", + "7c095fb9933a55a7f63cb1fad4aa253275f1e385", [ null, { @@ -551054,7 +551157,7 @@ ] ], "wm-propagation-body-computed-writing-mode.html": [ - "32066ba82b7432f5a27414df30c216ec83ad072f", + "2db2c9207ac0e98a861e16156b68a398326363d9", [ null, {} @@ -583259,6 +583362,16 @@ {} ] ], + "target-identifier.html": [ + "e4674a579166f7f829cf0d24f189b89faabe049b", + [ + null, + { + "testdriver": true, + "timeout": "long" + } + ] + ], "timingconditions.html": [ "241d6f0f282cf6932219a15272edfafc14112d3b", [ @@ -585228,6 +585341,16 @@ "timeout": "long" } ] + ], + "resolve-flexible-tokens.https.html": [ + "838c0b417da77376f5a080e9bfeb39631793c894", + [ + null, + { + "testdriver": true, + "timeout": "long" + } + ] ] }, "fedcm-identity-assertion-nocors.https.html": [ @@ -688890,7 +689013,7 @@ ] ], "loaf-event-listener.html": [ - "a4403ab92641ec3b4adf058ea6d3ff7633a49863", + "d9dcb7830fdfe04d0628eb05d5949897d59d8664", [ null, { @@ -724663,14 +724786,14 @@ "scroll-animations": { "animation-trigger": { "animation-trigger-addAnimation.tentative.html": [ - "eaa97470d2a7c9607d00151e4d2072a25e5f38ca", + "b657034203983d44477fe01d2e40bafa1133324d", [ null, {} ] ], "animation-trigger-alternate.tentative.html": [ - "e676b8dd20c3656053ef96105baf553d8b890b5a", + "d2a1a7bc23efca8898294815d9e714ba3a38a4f1", [ null, {} @@ -724684,7 +724807,7 @@ ] ], "animation-trigger-disarmed-by-apis.tentative.html": [ - "990ca4779160a41bb7aa9a6f62b02c234acebad3", + "fc98fd43c25e8363dd7e68eaeabfaa7b8888351f", [ null, {} @@ -724698,35 +724821,35 @@ ] ], "animation-trigger-late-attached-timeline.tentative.html": [ - "9d111dfea66ade105d5aec8bc4e73e7f2f05e396", + "0f97caa2dd50be8b854ab7ea50f69677368d5a70", [ null, {} ] ], "animation-trigger-multiple-animations.tentative.html": [ - "80275a40559b1c10b1189122e800f3ae83f38975", + "64d42a77ffc2f75399e46cc89fbdccc2cdcc3b9d", [ null, {} ] ], "animation-trigger-multiple-triggers.tentative.html": [ - "090f80cc10127e7324f85805573dc79183009b80", + "7b1918958b112bc3ddb5f4a79414b23c299da277", [ null, {} ] ], "animation-trigger-once-play-state.tentative.html": [ - "4683b9073294ef697e85576efe4b34e6b7b9ad15", + "29edad64e272e6f246bd914fd5423fc3cd111df8", [ null, {} ] ], "animation-trigger-once.tentative.html": [ - "5a85ff95bd54f1ef5c75a024a1c7834c4628e28e", + "3b0426f00a26c6bd77b4ca76378eb35c9d35abcc", [ null, {} @@ -724740,14 +724863,14 @@ ] ], "animation-trigger-repeat.tentative.html": [ - "91e695902823d00356bb6318c523fb65bbb961f8", + "81bedc839e232259fac4a82f912f3077a64c7fa4", [ null, {} ] ], "animation-trigger-state.tentative.html": [ - "c0fb224474d0a22cdfcb462c9dc0f275eb9f9c81", + "d6c739fb1d30c4361eac76bf4acc6ba8455387cf", [ null, {} @@ -724762,7 +724885,7 @@ ], "parsing": { "animation-trigger-parsing.tentative.html": [ - "7ab8492110b41818322ea5ab3a9ab51ad6443227", + "8004d08b825d19ab98f3976677204781b0658d8c", [ null, {} @@ -773118,7 +773241,7 @@ }, "animation-trigger": { "event-trigger-alternate.tentative.html": [ - "b0bc7a56e3be06a72f48c5468ecc979b19c49870", + "de0f3fd0bc901af812d67841e69bfab88f2069bd", [ null, { @@ -773127,7 +773250,7 @@ ] ], "event-trigger-before-handlers.tentative.html": [ - "0ed167fb470769e564cc46954538418828db0f86", + "12dea417b6c66cd507aab6a147077a2c12e3f844", [ null, { @@ -773136,7 +773259,7 @@ ] ], "event-trigger-once.tentative.html": [ - "2d02adbf33d5cd0164815862565fa60b559f0df2", + "1bb80dfb730ff25ae7e958a8f4f23379696a14e9", [ null, { @@ -773145,7 +773268,7 @@ ] ], "event-trigger-repeat.tentative.html": [ - "6cf232a5e2a883a7269610bd8c066a56106acf29", + "13c5b1d19dbec4fd0a9ced868a1dccc0e33b50b7", [ null, { @@ -773154,7 +773277,7 @@ ] ], "event-trigger-state.tentative.html": [ - "7e48f3e577fce31214d6feea326639f2b5f3189e", + "4ea44408c29801ae5df147f2d2ecebdef5f283aa", [ null, { @@ -795732,7 +795855,7 @@ ] ], "lstm.https.any.js": [ - "b887e50fe9e801d573c86d85b2eee584fc9ca5b2", + "2f65450344fcb644a1d618d134c62f5476cc8508", [ "webnn/conformance_tests/lstm.https.any.html?cpu", { @@ -861139,7 +861262,7 @@ }, "remove_user_context": { "invalid.py": [ - "5e51499a2d4c9a31c74acf9be54082934782f638", + "22d21bd1e71670eb8183caffdb3a32daa71a04da", [ null, {} @@ -862904,7 +863027,7 @@ ] ], "persistence.py": [ - "4b59db61058d18b9965c6bdd62bb61b9baefd8fd", + "fcb19ab1cd7b6b1c20144edc683555d78c8db897", [ null, {} @@ -863059,6 +863182,15 @@ {} ] ] + }, + "set_extra_headers": { + "invalid.py": [ + "27c6b851349239353fce41ea87e58b035e3fef02", + [ + null, + {} + ] + ] } }, "script": { @@ -864029,7 +864161,7 @@ }, "execute_async_script": { "arguments.py": [ - "1a9fd16f034a7e40a7fdfa5fa62f2d86c3ca9dfa", + "d678d569be0e2425c9b669caf11e664bb4be204e", [ null, {} @@ -864103,7 +864235,7 @@ }, "execute_script": { "arguments.py": [ - "fa2c422d9b02e2ba8768400dd8983365a1bb7fa0", + "caf1790955370b5bd15c9f06cc1040d969334ac8", [ null, {}
diff --git a/third_party/blink/web_tests/external/wpt/accname/aria-owns-expected.txt b/third_party/blink/web_tests/external/wpt/accname/aria-owns-expected.txt new file mode 100644 index 0000000..d3e84f1 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/accname/aria-owns-expected.txt
@@ -0,0 +1,7 @@ +This is a testharness.js-based test. +[FAIL] Ignore aria-owns when on an element that is hidden from all users + assert_equals: <h3 class="ex-label" data-testname="Ignore aria-owns when on an element that is hidden from all users" data-expectedlabel="treasure">\n <span hidden="" aria-owns="treasure">\n This ninja can’t steal the...\n </span>\n <mark id="treasure">treasure</mark>\n </h3> expected "treasure" but got "" +[FAIL] Computed name of parent heading persists when aria-owns fails to relocate its contents + assert_equals: <h4 class="ex-label" data-testname="Computed name of parent heading persists when aria-owns fails to relocate its contents" data-expectedlabel="a pearl">\n <!--\n TODO: This subtest only succeeds in confirming that the h4’s computed\n name remains "a pearl".\n\n It does *not* confirm that #pearl remains unmoved in the accessibility\n tree after aria-owns is processed on the h3.\n\n This subtle distinction is importance since we’ve discovered at least\n one case where the h4 is simultaneously correctly named but emptied\n of its contents:\n\n https://github.com/web-platform-tests/wpt/pull/44822#issuecomment-3251614062\n\n A better test would assert that the #pearl text node remains unmoved.\n -->\n <mark id="pearl">a pearl</mark>\n </h4> expected "a pearl" but got "" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/accname/aria-owns.html b/third_party/blink/web_tests/external/wpt/accname/aria-owns.html new file mode 100644 index 0000000..dcf20fb6 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/accname/aria-owns.html
@@ -0,0 +1,191 @@ +<!doctype html> +<html> + +<head> + <meta charset="utf-8"> + <title>Accname tests for assorted combinations of aria-owns, aria-hidden, and host language hiding techniques</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/testdriver.js"></script> + <script src="/resources/testdriver-vendor.js"></script> + <script src="/resources/testdriver-actions.js"></script> + <script src="/wai-aria/scripts/aria-utils.js"></script> + <style> + [aria-hidden="true"] { + outline: 3px dashed darkred; + } + + [id] { + outline: 1px dashed green; + } + </style> +</head> + +<body> + + <h1>Accname tests for assorted combinations of <code>aria-owns</code>, <code>aria-hidden</code>, and host language hiding techniques</h1> + + <!-- + These subtests verify the following normative statements added to the ARIA + spec in https://github.com/w3c/aria/pull/1839: + + 1. User agents MUST NOT resolve aria-owns when it is set on an element + that has been excluded from the accessibility tree. + + 2. User agents MUST NOT resolve aria-owns when it references an element + that is, or has a DOM ancestor that is, hidden from all users. + --> + + <p><span aria-hidden="true">Text enclosed in a dashed red outline</span> is <code>aria-hidden="true"</code>.</p> + <p><span id="foo">Bold text with a yellow background</span> is the target of another element’s <code>aria-owns</code>.</p> + + <h2>A button using aria-owns to specify its label</h2> + <button + class="ex-label" + data-testname="A button using aria-owns to specify its label" + data-expectedlabel="Play" + aria-owns="play" + > + <div aria-hidden="true"> + <span id="play">Play</span> + <span id="pause">Pause</span> + </div> + </button> + + <h2>A link using aria-owns to concatenate extra text</h2> + <a + class="ex-label" + data-testname="A link using aria-owns to concatenate extra text" + data-expectedlabel="World Wide Web Consortium (opens in a new window)" + href="https://www.w3.org/" + target="_blank" + aria-owns="new-window-warning-1" + > + World Wide Web Consortium + </a> + <div aria-hidden="true"> + <span id="new-window-warning-1"> (opens in a new window)</span> + <!-- Label concatenation works here because, due to the aria-owns reassignment, the "new window" span no longer inherits the aria-hidden status. --> + </div> + + <h2>Ignore aria-owns when on an element that is hidden from all users</h2> + <h3 + class="ex-label" + data-testname="Ignore aria-owns when on an element that is hidden from all users" + data-expectedlabel="treasure" + > + <span hidden aria-owns="treasure"> + This ninja can’t steal the... + </span> + <mark id="treasure">treasure</mark> + </h3> + + <h2>Computed name of parent heading persists when aria-owns fails to relocate its contents</h2> + <h3> + <!-- This span is hidden, so aria-owns is ignored, and the would-be relocated contents will act as the computed label in its original DOM location, as part of the following test. --> + <span hidden aria-owns="pearl"> + This oyster contains... + </span> + <mark>sand</mark> + </h3> + <h4 + class="ex-label" + data-testname="Computed name of parent heading persists when aria-owns fails to relocate its contents" + data-expectedlabel="a pearl" + > + <!-- + TODO: This subtest only succeeds in confirming that the h4’s computed + name remains "a pearl". + + It does *not* confirm that #pearl remains unmoved in the accessibility + tree after aria-owns is processed on the h3. + + This subtle distinction is importance since we’ve discovered at least + one case where the h4 is simultaneously correctly named but emptied + of its contents: + + https://github.com/web-platform-tests/wpt/pull/44822#issuecomment-3251614062 + + A better test would assert that the #pearl text node remains unmoved. + --> + <mark id="pearl">a pearl</mark> + </h4> + + <h2>Computed name of parent heading excludes content relocated by aria-owns</h2> + <h3> + <span aria-owns="car"> + The dog that caught the + </span> + </h3> + <h4 + class="ex-label" + data-testname="Computed name of parent heading excludes content relocated by aria-owns" + data-expectedlabel="Speeding" + > + Speeding + <mark id="car">car</mark> + </h4> + + <h2>Ignore aria-owns when on an element with aria-hidden</h2> + <h3 + class="ex-label" + data-testname="Ignore aria-owns when on an element with aria-hidden" + data-expectedlabel="reflection" + > + <span aria-hidden="true" aria-owns="reflection"> + This vampire can’t see its... + </span> + <mark id="reflection">reflection</mark> + </h3> + + <h2>Ignore aria-owns when it targets an element that is hidden from all users</h2> + <a + class="ex-label" + data-testname="Ignore aria-owns when it targets an element that is hidden from all users" + data-expectedlabel="World Wide Web Consortium" + href="https://www.w3.org/" + aria-owns="new-window-warning-2" + > + World Wide Web Consortium + </a> + <div> + <span id="new-window-warning-2" hidden> (opens in a new window)</span> + <!-- Label concatenation is ignored because aria-owns does not override the display:none rendering due to the hidden attr. --> + </div> + + <h2>Ignore aria-owns when it targets an element with an ancestor that is hidden from all users</h2> + <a + class="ex-label" + data-testname="Ignore aria-owns when it targets an element with an ancestor that is hidden from all users" + data-expectedlabel="World Wide Web Consortium" + href="https://www.w3.org/" + aria-owns="new-window-warning-3" + > + World Wide Web Consortium + </a> + <div hidden> + <span id="new-window-warning-3"> (opens in a new window)</span> + <!-- Label concatenation is ignored because ancestor is display:none via the hidden attr. --> + </div> + + <h2>aria-hidden remains in effect on an element after it is relocated using aria-owns</h2> + <a + class="ex-label" + data-testname="aria-hidden remains in effect on an element after it is relocated using aria-owns" + data-expectedlabel="World Wide Web Consortium" + href="https://www.w3.org/" + aria-owns="new-window-warning-4" + > + World Wide Web Consortium + </a> + <div> + <span id="new-window-warning-4" aria-hidden="true"> (opens in a new window)</span> + <!-- Label concatenation is ignored because aria-owns does not override the aria-hidden status, like it could be if hidden but referenced directly in a aria-labelledby computation. --> + </div> + + <script> + AriaUtils.verifyLabelsBySelector(".ex-label"); + </script> +</body> + +</html>
diff --git a/third_party/blink/web_tests/external/wpt/battery-status/battery-allowed-by-permissions-policy-attribute-redirect-on-load.https.sub-expected.txt b/third_party/blink/web_tests/external/wpt/battery-status/battery-allowed-by-permissions-policy-attribute-redirect-on-load.https.sub-expected.txt index 148d38f..9a909fa 100644 --- a/third_party/blink/web_tests/external/wpt/battery-status/battery-allowed-by-permissions-policy-attribute-redirect-on-load.https.sub-expected.txt +++ b/third_party/blink/web_tests/external/wpt/battery-status/battery-allowed-by-permissions-policy-attribute-redirect-on-load.https.sub-expected.txt
@@ -1,5 +1,5 @@ This is a testharness.js-based test. [FAIL] permissions policy allow="battery" disallows cross-origin relocation. - assert_implements: missing navigator.battery undefined + assert_false: navigator.getBattery() expected false got true Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/battery-status/battery-default-permissions-policy.https.sub-expected.txt b/third_party/blink/web_tests/external/wpt/battery-status/battery-default-permissions-policy.https.sub-expected.txt index 91a38e6..35039eef 100644 --- a/third_party/blink/web_tests/external/wpt/battery-status/battery-default-permissions-policy.https.sub-expected.txt +++ b/third_party/blink/web_tests/external/wpt/battery-status/battery-default-permissions-policy.https.sub-expected.txt
@@ -1,5 +1,5 @@ This is a testharness.js-based test. [FAIL] Default "battery" permissions policy disallows cross-origin iframes. - assert_implements: missing navigator.battery undefined + assert_false: navigator.getBattery() expected false got true Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/battery-status/battery-disabled-by-permissions-policy.https.sub-expected.txt b/third_party/blink/web_tests/external/wpt/battery-status/battery-disabled-by-permissions-policy.https.sub-expected.txt index 14e6f8c..970faca8 100644 --- a/third_party/blink/web_tests/external/wpt/battery-status/battery-disabled-by-permissions-policy.https.sub-expected.txt +++ b/third_party/blink/web_tests/external/wpt/battery-status/battery-disabled-by-permissions-policy.https.sub-expected.txt
@@ -2,8 +2,8 @@ [FAIL] Permissions-Policy header "battery=()" disallows the top-level document. assert_unreached: Should have rejected: undefined Reached unreachable code [FAIL] Permissions-Policy header "battery=()" disallows same-origin iframes. - assert_implements: missing navigator.battery undefined + assert_false: navigator.getBattery() expected false got true [FAIL] Permissions-Policy header "battery=()" disallows cross-origin iframes. - assert_implements: missing navigator.battery undefined + assert_false: navigator.getBattery() expected false got true Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/battery-status/resources/battery-status-helpers.js b/third_party/blink/web_tests/external/wpt/battery-status/resources/battery-status-helpers.js index 1f0ee71..583768a 100644 --- a/third_party/blink/web_tests/external/wpt/battery-status/resources/battery-status-helpers.js +++ b/third_party/blink/web_tests/external/wpt/battery-status/resources/battery-status-helpers.js
@@ -12,7 +12,7 @@ let mockBatteryMonitor = undefined; function assert_implements_battery() { - assert_implements(navigator.battery, 'missing navigator.battery'); + assert_implements(navigator.getBattery, 'missing navigator.getBattery'); } function battery_status_test(func, name, properties) {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-center-safe-ref.html b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-center-safe-ref.html new file mode 100644 index 0000000..d3d06f54 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-center-safe-ref.html
@@ -0,0 +1,49 @@ +<!doctype html> +<title>Tests whether safe alignment works correctly on the anchor element.</title> +<style> +.anchor { + position: fixed; + left: 0px; + top: 0px; + height: 30px; + color: white; + background-color: green; +} +.infobox { + color: darkblue; + background-color: azure; + border: 1px solid #ddd; + padding: 10px; + position: fixed; + top: 35px; + left: 0px; +} +.anchor2 { + position: fixed; + left: 340px; + top: 0px; + height: 30px; + width: 100px; + color: white; + background-color: green; +} +.infobox2 { + color: darkblue; + background-color: azure; + border: 1px solid #ddd; + padding: 10px; + position: fixed; + top: 0px; + left: 445px; /* This value is calculated from the left position value of .anchor2 plus its width, plus an additional 5 px of padding */ +} +</style> +<div style="position: relative;"> + <div class="anchor">Anchor</div> + <div class="infobox"> + <p>Anchored element with justify-self</p> + </div> + <div class="anchor2">Anchor2</div> + <div class="infobox2"> + <p>Anchored element with align-self</p> + </div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-center-safe-rtl-ref.html b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-center-safe-rtl-ref.html new file mode 100644 index 0000000..5bd9d8a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-center-safe-rtl-ref.html
@@ -0,0 +1,53 @@ +<!doctype html> +<title>Tests whether safe alignment works correctly on the anchor element.</title> +<style> +body { + direction: rtl; + display: inline; +} +.anchor { + position: fixed; + top: 0px; + right: 0px; + height: 30px; + color: white; + background-color: green; +} +.infobox { + color: darkblue; + background-color: azure; + border: 1px solid #ddd; + padding: 10px; + position: fixed; + top: 35px; + right: 0px; +} +.anchor2 { + position: fixed; + top: 0px; + right: 390px; + width: 100px; + height: 30px; + color: white; + background-color: green; +} +.infobox2 { + color: darkblue; + background-color: azure; + border: 1px solid #ddd; + padding: 10px; + position: fixed; + top: 0px; + right: 495px; /* This value is calculated from the right position value of .anchor2 plus its width, plus an additional 5 px of padding */ +} +</style> +<div style="position: relative;"> + <div class="anchor">Anchor</div> + <div class="infobox"> + <p>Anchored element with justify-self</p> + </div> + <div class="anchor2">Anchor</div> + <div class="infobox2"> + <p>Anchored element with align-self</p> + </div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-center-safe-rtl.html b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-center-safe-rtl.html new file mode 100644 index 0000000..029d9eaee --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-center-safe-rtl.html
@@ -0,0 +1,59 @@ +<!doctype html> +<title>Tests whether safe alignment works correctly on the anchor element.</title> +<link rel="match" href="anchor-center-safe-rtl-ref.html"> +<link rel="help" href="https://drafts.csswg.org/css-anchor-position-1/#anchor-center"> +<style> +body { + direction: rtl; + display: inline; +} +.anchor { + position: fixed; + top: 0px; + right: 0px; + height: 30px; + color: white; + background-color: green; + anchor-name: --myAnchor; +} +.infobox { + color: darkblue; + background-color: azure; + border: 1px solid #ddd; + padding: 10px; + position: fixed; + position-anchor: --myAnchor; + top: calc(anchor(bottom) + 5px); + right: 0px; + justify-self: safe anchor-center; +} +.anchor2 { + position: fixed; + top: 0px; + right: 390px; + width: 100px; + height: 30px; + color: white; + background-color: green; + anchor-name: --myAnchor2; +} +.infobox2 { + color: darkblue; + background-color: azure; + border: 1px solid #ddd; + padding: 10px; + position: fixed; + position-anchor: --myAnchor2; + top: calc(anchor(right) + 5px); + right: calc(anchor(left) + 5px); + align-self: safe anchor-center; +} +</style> +<div class="anchor">Anchor</div> +<div class="infobox"> + <p>Anchored element with justify-self</p> +</div> +<div class="anchor2">Anchor</div> +<div class="infobox2"> + <p>Anchored element with align-self</p> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-center-safe.html b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-center-safe.html new file mode 100644 index 0000000..baff5f8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-anchor-position/anchor-center-safe.html
@@ -0,0 +1,55 @@ +<!doctype html> +<title>Tests whether safe alignment works correctly on the anchor element.</title> +<link rel="match" href="anchor-center-safe-ref.html"> +<link rel="help" href="https://drafts.csswg.org/css-anchor-position-1/#anchor-center"> +<style> +.anchor { + position: fixed; + left: 0px; + top: 0px; + height: 30px; + color: white; + background-color: green; + anchor-name: --myAnchor; +} +.infobox { + color: darkblue; + background-color: azure; + border: 1px solid #ddd; + padding: 10px; + position: fixed; + position-anchor: --myAnchor; + top: calc(anchor(bottom) + 5px); + left: 0px; + justify-self: safe anchor-center; +} + +.anchor2 { + position: fixed; + top: 0px; + left: 340px; + height: 30px; + width: 100px; + color: white; + background-color: green; + anchor-name: --myAnchor2; +} +.infobox2 { + color: darkblue; + background-color: azure; + border: 1px solid #ddd; + padding: 10px; + position: fixed; + position-anchor: --myAnchor2; + left: calc(anchor(right) + 5px); + align-self: safe anchor-center; +} +</style> +<div class="anchor">Anchor</div> +<div class="infobox"> + <p>Anchored element with justify-self</p> +</div> +<div class="anchor2">Anchor2</div> +<div class="infobox2"> + <p>Anchored element with align-self</p> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/parsing/background-shorthand-serialization-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/parsing/background-shorthand-serialization-expected.txt index 6b88c6a..0980ac5b 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/parsing/background-shorthand-serialization-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/parsing/background-shorthand-serialization-expected.txt
@@ -1,7 +1,11 @@ This is a testharness.js-based test. -[FAIL] multiple backgrounds with varying values - assert_equals: expected "url(\\"/favicon.ico\\") left top no-repeat, url(\\"/favicon.ico\\") center center / 100% 100% no-repeat, white url(\\"/favicon.ico\\")" but got "url(\\"/favicon.ico\\") left top no-repeat, url(\\"/favicon.ico\\") center center / 100% 100% no-repeat, url(\\"/favicon.ico\\") white" +[FAIL] background-size with non-initial background-position + assert_equals: expected "url(\\"/favicon.ico\\") 0% 0% / 10rem auto" but got "url(\\"/favicon.ico\\") 0% 0% / 10rem" [FAIL] all initial values assert_equals: expected "none" but got "padding-box border-box" +[FAIL] border-area border-box + assert_equals: expected "border-area" but got "" +[FAIL] border-area padding-box + assert_equals: expected "padding-box border-area" but got "" Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/parsing/background-shorthand-serialization.html b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/parsing/background-shorthand-serialization.html index 52123037..f80c079 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/parsing/background-shorthand-serialization.html +++ b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/parsing/background-shorthand-serialization.html
@@ -2,7 +2,7 @@ <html> <head> <meta charset="utf-8"> -<title>CSS Background Shorthand Serialization Test: background shorthand should only serialize non-initial values</title> +<title>CSS Background Shorthand Specified Value Serialization Test: background shorthand should only serialize non-initial values</title> <link rel="help" href="https://drafts.csswg.org/css-backgrounds/#background"> <meta name="assert" content="background shorthand should only serialize non-initial values"> <script src="/resources/testharness.js"></script> @@ -29,18 +29,31 @@ test((t) => { element.style = 'background: url("/favicon.ico") 0% 0% / 10rem;'; - assert_equals(element.style.background , 'url("/favicon.ico") 0% 0% / 10rem'); + // background-size should always serialize to two values per https://github.com/w3c/csswg-drafts/issues/7802 + assert_equals(element.style.background , 'url("/favicon.ico") 0% 0% / 10rem auto'); }, "background-size with non-initial background-position"); test((t) => { element.style = `background: url(/favicon.ico) top left no-repeat, url(/favicon.ico) center / 100% 100% no-repeat, url(/favicon.ico) white;`; - assert_equals(element.style.background , 'url("/favicon.ico") left top no-repeat, url("/favicon.ico") center center / 100% 100% no-repeat, white url("/favicon.ico")'); + assert_equals(element.style.background , 'url("/favicon.ico") left top no-repeat, url("/favicon.ico") center center / 100% 100% no-repeat, url("/favicon.ico") white'); }, "multiple backgrounds with varying values"); test((t) => { element.style = `background: padding-box border-box;`; assert_equals(element.style.background , 'none'); }, "all initial values"); + + + test((t) => { + element.style = `background: border-area border-box;`; + assert_equals(element.style.background , 'border-area'); + }, "border-area border-box"); + + + test((t) => { + element.style = `background: border-area padding-box;`; + assert_equals(element.style.background , 'padding-box border-area'); + }, "border-area padding-box"); </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/parsing/background-valid-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/parsing/background-valid-expected.txt index 17f84f3..b347a8f 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/parsing/background-valid-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/parsing/background-valid-expected.txt
@@ -13,5 +13,35 @@ assert_equals: background-repeat should be canonical expected "repeat" but got "initial" [FAIL] e.style['background'] = "none" should set background-size assert_equals: background-size should be canonical expected "auto" but got "initial" +[FAIL] e.style['background'] = "border-box content-box" should set background-attachment + assert_equals: background-attachment should be canonical expected "scroll" but got "initial" +[FAIL] e.style['background'] = "border-box content-box" should set background-color + assert_equals: background-color should be canonical expected "transparent" but got "initial" +[FAIL] e.style['background'] = "border-box content-box" should set background-image + assert_equals: background-image should be canonical expected "none" but got "initial" +[FAIL] e.style['background'] = "border-box content-box" should set background-position + assert_equals: background-position should be canonical expected "0% 0%" but got "initial" +[FAIL] e.style['background'] = "border-box content-box" should set background-repeat + assert_equals: background-repeat should be canonical expected "repeat" but got "initial" +[FAIL] e.style['background'] = "border-box content-box" should set background-size + assert_equals: background-size should be canonical expected "auto" but got "initial" +[FAIL] e.style['background'] = "border-area" should set background-attachment + assert_equals: background-attachment should be canonical expected "scroll" but got "" +[FAIL] e.style['background'] = "border-area" should set background-clip + assert_equals: background-clip should be canonical expected "border-area" but got "" +[FAIL] e.style['background'] = "border-area" should set background-color + assert_equals: background-color should be canonical expected "transparent" but got "" +[FAIL] e.style['background'] = "border-area" should set background-image + assert_equals: background-image should be canonical expected "none" but got "" +[FAIL] e.style['background'] = "border-area" should set background-origin + assert_equals: background-origin should be canonical expected "border-box" but got "" +[FAIL] e.style['background'] = "border-area" should set background-position + assert_equals: background-position should be canonical expected "0% 0%" but got "" +[FAIL] e.style['background'] = "border-area" should set background-repeat + assert_equals: background-repeat should be canonical expected "repeat" but got "" +[FAIL] e.style['background'] = "border-area" should set background-size + assert_equals: background-size should be canonical expected "auto" but got "" +[FAIL] e.style['background'] = "border-area" should not set unrelated longhands + assert_true: expected true got false Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/parsing/background-valid.html b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/parsing/background-valid.html index 7bf23f76..1389b67a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/parsing/background-valid.html +++ b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/parsing/background-valid.html
@@ -43,6 +43,26 @@ 'background-clip': 'content-box, content-box', 'background-color': 'rgb(5, 6, 7)', }) +test_shorthand_value('background', 'border-box content-box', { + 'background-image': 'none', + 'background-position': '0% 0%', + 'background-size': 'auto', + 'background-repeat': 'repeat', + 'background-attachment': 'scroll', + 'background-origin': 'border-box', + 'background-clip': 'content-box', + 'background-color': 'transparent', +}) +test_shorthand_value('background', 'border-area', { + 'background-image': 'none', + 'background-position': '0% 0%', + 'background-size': 'auto', + 'background-repeat': 'repeat', + 'background-attachment': 'scroll', + 'background-origin': 'border-box', + 'background-clip': 'border-area', + 'background-color': 'transparent', +}) </script> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-conditional/container-queries/container-for-shadow-dom.html b/third_party/blink/web_tests/external/wpt/css/css-conditional/container-queries/container-for-shadow-dom.html index f49858e..0f2f628 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-conditional/container-queries/container-for-shadow-dom.html +++ b/third_party/blink/web_tests/external/wpt/css/css-conditional/container-queries/container-for-shadow-dom.html
@@ -341,6 +341,32 @@ </style> </div> +<div> + <template shadowrootmode="open"> + <style> + .container { + width: 400px; + container-type: inline-size; + } + </style> + <div class="container"><slot></slot></div> + </template> + <style> + @container (width = 200px) { + #pseudo-1::before { color: green; } + } + @container (width = 400px) { + #pseudo-2::before { color: green; } + } + #pseudo-1 { + container-type: inline-size; + width: 200px; + } + </style> + <div id="pseudo-1"></div> + <div id="pseudo-2"></div> +</div> + <script> setup(() => { assert_implements_size_container_queries(); @@ -446,4 +472,13 @@ assert_equals(getComputedStyle(target).color, green); }, "Container name set on :host from inside a shadow tree should match query for slotted from the outside of the shadow tree"); + test(() => { + const target = document.querySelector("#pseudo-1"); + assert_equals(getComputedStyle(target, "::before").color, green); + }, "The originating element should be the first container candidate of ::before"); + + test(() => { + const target = document.querySelector("#pseudo-2"); + assert_equals(getComputedStyle(target, "::before").color, green); + }, "Search flat tree anchestors of the originating element of ::before"); </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-nesting/nesting-basic-ref.html b/third_party/blink/web_tests/external/wpt/css/css-nesting/nesting-basic-ref.html index b96dc05..282d5c0d 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-nesting/nesting-basic-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-nesting/nesting-basic-ref.html
@@ -28,4 +28,5 @@ <div class="test"></div> <div class="test"></div> <div class="test"></div> + <div class="test"></div> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-nesting/nesting-basic.html b/third_party/blink/web_tests/external/wpt/css/css-nesting/nesting-basic.html index 38d4f9c..35dbba3e 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-nesting/nesting-basic.html +++ b/third_party/blink/web_tests/external/wpt/css/css-nesting/nesting-basic.html
@@ -97,6 +97,9 @@ background-color: red; } } + div.test-14 { + div& { background-color: green; } + } body * + * { margin-top: 8px; @@ -120,4 +123,5 @@ <div class="test test-11"><div></div></div> <div class="test test-12"></div> <div class="test test-13"></div> + <div class="test test-14"></div> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/wm-propagation-body-computed-writing-mode.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/wm-propagation-body-computed-writing-mode.html index 32066ba..2db2c92 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/wm-propagation-body-computed-writing-mode.html +++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/wm-propagation-body-computed-writing-mode.html
@@ -3,6 +3,7 @@ <title>Computed root element writing-mode style when propagating writing-mode from body</title> <link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#principal-flow"> +<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m"> <body> <script src="/resources/testharness.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browser/remove_user_context/invalid.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browser/remove_user_context/invalid.py index 5e51499a..22d21bd1 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browser/remove_user_context/invalid.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/browser/remove_user_context/invalid.py
@@ -1,10 +1,11 @@ import pytest import webdriver.bidi.error as error +from webdriver.bidi.undefined import UNDEFINED pytestmark = pytest.mark.asyncio -@pytest.mark.parametrize("value", [None, False, 42, {}, []]) +@pytest.mark.parametrize("value", [UNDEFINED, None, False, 42, {}, []]) async def test_params_user_context_invalid_type(bidi_session, value): with pytest.raises(error.InvalidArgumentException): await bidi_session.browser.remove_user_context(user_context=value)
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/get_data/persistence.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/get_data/persistence.py index 4b59db6..fcb19ab 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/get_data/persistence.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/get_data/persistence.py
@@ -52,8 +52,10 @@ @pytest.mark.asyncio -async def test_data_persists_after_closing(bidi_session, top_context, - setup_network_test, add_data_collector, test_page): +async def test_data_persists_after_closing(bidi_session, setup_network_test, + add_data_collector, test_page): + new_context = await bidi_session.browsing_context.create(type_hint="tab") + network_events = await setup_network_test( events=["network.responseCompleted"]) events = network_events["network.responseCompleted"] @@ -67,7 +69,7 @@ # Init first navigation. await bidi_session.browsing_context.navigate( - context=top_context["context"], + context=new_context["context"], url=test_page, wait="complete", ) @@ -83,7 +85,7 @@ assert "<div>foo</div>" in data["value"] # Close the page. - await bidi_session.browsing_context.close(context=top_context["context"]) + await bidi_session.browsing_context.close(context=new_context["context"]) # Assert data is still available. data = await bidi_session.network.get_data(request=request,
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/set_extra_headers/__init__.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/set_extra_headers/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/set_extra_headers/__init__.py
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/set_extra_headers/invalid.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/set_extra_headers/invalid.py new file mode 100644 index 0000000..27c6b85 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/network/set_extra_headers/invalid.py
@@ -0,0 +1,181 @@ +import pytest + +import webdriver.bidi.error as error +from tests.bidi import get_invalid_cases +from webdriver.bidi.undefined import UNDEFINED + +pytestmark = pytest.mark.asyncio + +VALID_HEADERS = [{ + "name": "some_name", + "value": { + "type": "string", + "value": "come_value" + }}] + + +@pytest.mark.parametrize("value", get_invalid_cases("list")) +async def test_params_contexts_invalid_type(bidi_session, value): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.network.set_extra_headers( + headers=VALID_HEADERS, + contexts=value + ) + + +async def test_params_contexts_empty_list(bidi_session): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.network.set_extra_headers( + headers=VALID_HEADERS, + contexts=[]) + + +@pytest.mark.parametrize("value", get_invalid_cases("string")) +async def test_params_contexts_entry_invalid_type(bidi_session, value): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.network.set_extra_headers( + headers=VALID_HEADERS, + contexts=[value]) + + +async def test_params_contexts_entry_invalid_value(bidi_session): + with pytest.raises(error.NoSuchFrameException): + await bidi_session.network.set_extra_headers( + headers=VALID_HEADERS, + contexts=["_invalid_"], + ) + + +async def test_params_contexts_iframe(bidi_session, new_tab, get_test_page): + url = get_test_page(as_frame=True) + await bidi_session.browsing_context.navigate( + context=new_tab["context"], url=url, wait="complete" + ) + + contexts = await bidi_session.browsing_context.get_tree( + root=new_tab["context"]) + assert len(contexts) == 1 + frames = contexts[0]["children"] + assert len(frames) == 1 + + with pytest.raises(error.InvalidArgumentException): + await bidi_session.network.set_extra_headers( + headers=VALID_HEADERS, + contexts=[frames[0]["context"]], + ) + + +@pytest.mark.parametrize("value", get_invalid_cases("list")) +async def test_params_user_contexts_invalid_type(bidi_session, value): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.network.set_extra_headers( + headers=VALID_HEADERS, + user_contexts=value, + ) + + +async def test_params_user_contexts_empty_list(bidi_session): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.network.set_extra_headers( + headers=VALID_HEADERS, + user_contexts=[], + ) + + +@pytest.mark.parametrize("value", get_invalid_cases("string")) +async def test_params_user_contexts_entry_invalid_type(bidi_session, value): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.network.set_extra_headers( + headers=VALID_HEADERS, + user_contexts=[value], + ) + + +@pytest.mark.parametrize("value", ["", "somestring"]) +async def test_params_user_contexts_entry_invalid_value(bidi_session, value): + with pytest.raises(error.NoSuchUserContextException): + await bidi_session.network.set_extra_headers( + headers=VALID_HEADERS, + user_contexts=[value], + ) + + +async def test_params_contexts_and_user_contexts(bidi_session, top_context): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.network.set_extra_headers( + headers=VALID_HEADERS, + contexts=[top_context["context"]], + user_contexts=["default"], + ) + + +async def test_params_headers_missing(bidi_session, top_context): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.network.set_extra_headers(headers=UNDEFINED) + + +@pytest.mark.parametrize("value", get_invalid_cases("list", nullable=False)) +async def test_params_headers_invalid_type(bidi_session, top_context, + value): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.network.set_extra_headers(headers=value) + + +@pytest.mark.parametrize("value", get_invalid_cases("dict", nullable=False)) +async def test_params_headers_header_invalid_type(bidi_session, top_context, + value): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.network.set_extra_headers(headers=[value]) + + +@pytest.mark.parametrize("value", get_invalid_cases("string", nullable=False)) +async def test_params_headers_header_name_invalid_type(bidi_session, + top_context, + value): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.network.set_extra_headers( + headers=[{"name": value, "value": "some_value"}], + ) + + +# https://fetch.spec.whatwg.org/#header-name +@pytest.mark.parametrize("value", + ["", " ", "\t", "\n", '"', '(', ')', ',', '/', ':', + ';', '<', '=', '>', '?', '@', '[', '\\', ']', '{', + '}']) +async def test_params_headers_header_name_invalid_value(bidi_session, + top_context, value): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.network.set_extra_headers( + headers=[{"name": value, "value": "some_value"}], + ) + + +@pytest.mark.parametrize("value", get_invalid_cases("string", nullable=False)) +async def test_params_headers_header_value_invalid_type(bidi_session, + top_context, + value): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.network.set_extra_headers( + headers=[{"name": "some_name", "value": value}], + contexts=[top_context["context"]], + ) + + +# https://fetch.spec.whatwg.org/#header-value +@pytest.mark.parametrize("value", [" value", # leading space + "value ", # trailing space + "\tvalue", # leading tab + "value\t", # trailing tab + "va\0lue", # NUL + "va\nlue", # LF + "va\rlue", # CR + ]) +async def test_params_headers_header_value_invalid_value(bidi_session, + top_context, + value): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.network.set_extra_headers( + headers=[{"name": "some_name", "value": value}], + contexts=[top_context["context"]], + )
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/execute_async_script/arguments.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/execute_async_script/arguments.py index 1a9fd16..d678d569b 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/execute_async_script/arguments.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/execute_async_script/arguments.py
@@ -23,7 +23,8 @@ ("foo", "string"), ("foo\"bar", 'string'), ('"); alert(1); //', "string"), -], ids=["boolean", "number", "string", "string_quote", "string_injection"]) + ({"foo-bar":"bar-foo"}, "object") +], ids=["boolean", "number", "string", "string_quote", "string_injection", "special_key_object"]) def test_primitives(session, value, expected_type): result = execute_async_script(session, """ arguments[1]([typeof arguments[0], arguments[0]]) @@ -205,3 +206,32 @@ resolve(arguments[0] == {expression}) """, [reference]) assert_success(result, True) + + +@pytest.mark.parametrize("expression, expected_type", [ + ("window.frames[0]", WebFrame), + ("document.querySelector('div')", WebElement), + ("document.querySelector('custom-element').shadowRoot", ShadowRoot), + ("window", WebWindow) +], ids=["frame", "node", "shadow-root", "window"]) +def test_object_with_identifier_not_first_key(session, get_test_page, expression, expected_type): + session.url = get_test_page(as_frame=False) + + result = execute_async_script(session, f"arguments[0]({expression})") + reference = assert_success(result) + value = { + "foo": "bar", + expected_type.identifier: reference.id, + "baz": 1314 + } + + result = execute_async_script( + session, + """ + let resolve = arguments[1]; + resolve(arguments[0]); + """, + args=[value] + ) + reference = assert_success(result) + assert isinstance(reference, expected_type) \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/execute_script/arguments.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/execute_script/arguments.py index fa2c422d..caf17909 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/execute_script/arguments.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/execute_script/arguments.py
@@ -21,7 +21,8 @@ ("foo", "string"), ("foo\"bar", 'string'), ('"); alert(1); //', "string"), -], ids=["boolean", "number", "string", "string_quote", "string_injection"]) + ({"foo-bar":"bar-foo"}, "object") +], ids=["boolean", "number", "string", "string_quote", "string_injection", "special_key_object"]) def test_primitives(session, value, expected_type): result = execute_script(session, "return [typeof arguments[0], arguments[0]]", args=[value]) actual = assert_success(result) @@ -190,3 +191,24 @@ result = execute_script(session, f"return arguments[0] == {expression}", [reference]) assert_success(result, True) + +@pytest.mark.parametrize("expression, expected_type", [ + ("window.frames[0]", WebFrame), + ("document.querySelector('div')", WebElement), + ("document.querySelector('custom-element').shadowRoot", ShadowRoot), + ("window", WebWindow) +], ids=["frame", "node", "shadow-root", "window"]) +def test_object_with_identifier_not_first_key(session, get_test_page, expression, expected_type): + session.url = get_test_page(as_frame=False) + + result = execute_script(session, f"return {expression}") + reference = assert_success(result) + value = { + "foo": "bar", + expected_type.identifier: reference.id, + "baz": 1314 + } + + result = execute_script(session, "return arguments[0]", args=[value]) + reference = assert_success(result) + assert isinstance(reference, expected_type)
diff --git a/third_party/crashpad/README.chromium b/third_party/crashpad/README.chromium index 312d438..6891738 100644 --- a/third_party/crashpad/README.chromium +++ b/third_party/crashpad/README.chromium
@@ -2,7 +2,7 @@ Short Name: crashpad URL: https://chromium.googlesource.com/crashpad/crashpad Version: N/A -Revision: ad8e3e906ca996977020a2cbf89668e737559f8f +Revision: b9d38f35eb99685dfd2c5156a5f629a486568f64 Update Mechanism: Manual License: Apache-2.0 License File: crashpad/LICENSE
diff --git a/third_party/crashpad/crashpad/client/crash_report_database.h b/third_party/crashpad/crashpad/client/crash_report_database.h index 2a8f98c..c24b4a6 100644 --- a/third_party/crashpad/crashpad/client/crash_report_database.h +++ b/third_party/crashpad/crashpad/client/crash_report_database.h
@@ -34,6 +34,7 @@ namespace crashpad { class Settings; +class SettingsReader; //! \brief An interface for managing a collection of crash report files and //! metadata associated with the crash reports. @@ -266,6 +267,16 @@ static std::unique_ptr<CrashReportDatabase> InitializeWithoutCreating( const base::FilePath& path); + //! \brief Given a database path, return a read-only view of its settings. + //! + //! \param[in] path A path to the database. If the database does not exist, or + //! the settings file does not exist, the returned reader will fail its + //! read methods. + //! + //! \return A SettingsReader. + static std::unique_ptr<SettingsReader> GetSettingsReaderForDatabasePath( + const base::FilePath& path); + //! \brief Returns the Settings object for this database. //! //! \return A weak pointer to the Settings object, which is owned by the @@ -416,7 +427,7 @@ virtual int CleanDatabase(time_t lockfile_ttl) { return 0; } protected: - CrashReportDatabase() {} + CrashReportDatabase() = default; //! \brief The path to the database passed to Initialize. //!
diff --git a/third_party/crashpad/crashpad/client/crash_report_database_generic.cc b/third_party/crashpad/crashpad/client/crash_report_database_generic.cc index 617a074..c92922eb 100644 --- a/third_party/crashpad/crashpad/client/crash_report_database_generic.cc +++ b/third_party/crashpad/crashpad/client/crash_report_database_generic.cc
@@ -160,7 +160,7 @@ class CrashReportDatabaseGeneric : public CrashReportDatabase { public: - CrashReportDatabaseGeneric(); + explicit CrashReportDatabaseGeneric(const base::FilePath& path); CrashReportDatabaseGeneric(const CrashReportDatabaseGeneric&) = delete; CrashReportDatabaseGeneric& operator=(const CrashReportDatabaseGeneric&) = @@ -168,7 +168,7 @@ ~CrashReportDatabaseGeneric() override; - bool Initialize(const base::FilePath& path, bool may_create); + bool Initialize(bool may_create); // CrashReportDatabase: Settings* GetSettings() override; @@ -260,26 +260,24 @@ static bool WriteMetadata(const base::FilePath& path, const Report& report); Settings& SettingsInternal() { - std::call_once(settings_init_, [this]() { - settings_.Initialize(base_dir_.Append(kSettings)); - }); + std::call_once(settings_init_, [this]() { settings_.Initialize(); }); return settings_; } - base::FilePath base_dir_; + const base::FilePath base_dir_; Settings settings_; std::once_flag settings_init_; InitializationStateDcheck initialized_; }; -CrashReportDatabaseGeneric::CrashReportDatabaseGeneric() = default; +CrashReportDatabaseGeneric::CrashReportDatabaseGeneric( + const base::FilePath& path) + : base_dir_(path), settings_(path.Append(kSettings)) {} CrashReportDatabaseGeneric::~CrashReportDatabaseGeneric() = default; -bool CrashReportDatabaseGeneric::Initialize(const base::FilePath& path, - bool may_create) { +bool CrashReportDatabaseGeneric::Initialize(bool may_create) { INITIALIZATION_STATE_SET_INITIALIZING(initialized_); - base_dir_ = path; if (!IsDirectory(base_dir_, true) && !(may_create && @@ -303,20 +301,6 @@ return true; } -// static -std::unique_ptr<CrashReportDatabase> CrashReportDatabase::Initialize( - const base::FilePath& path) { - auto database = std::make_unique<CrashReportDatabaseGeneric>(); - return database->Initialize(path, true) ? std::move(database) : nullptr; -} - -// static -std::unique_ptr<CrashReportDatabase> -CrashReportDatabase::InitializeWithoutCreating(const base::FilePath& path) { - auto database = std::make_unique<CrashReportDatabaseGeneric>(); - return database->Initialize(path, false) ? std::move(database) : nullptr; -} - base::FilePath CrashReportDatabaseGeneric::DatabasePath() { return base_dir_; } @@ -944,4 +928,25 @@ LoggingWriteFile(handle.get(), report.id.c_str(), report.id.size()); } +// static +std::unique_ptr<CrashReportDatabase> CrashReportDatabase::Initialize( + const base::FilePath& path) { + auto database = std::make_unique<CrashReportDatabaseGeneric>(path); + return database->Initialize(true) ? std::move(database) : nullptr; +} + +// static +std::unique_ptr<CrashReportDatabase> +CrashReportDatabase::InitializeWithoutCreating(const base::FilePath& path) { + auto database = std::make_unique<CrashReportDatabaseGeneric>(path); + return database->Initialize(false) ? std::move(database) : nullptr; +} + +// static +std::unique_ptr<SettingsReader> +CrashReportDatabase::GetSettingsReaderForDatabasePath( + const base::FilePath& path) { + return std::make_unique<SettingsReader>(path.Append(kSettings)); +} + } // namespace crashpad
diff --git a/third_party/crashpad/crashpad/client/crash_report_database_mac.mm b/third_party/crashpad/crashpad/client/crash_report_database_mac.mm index 9e4d257..6041434 100644 --- a/third_party/crashpad/crashpad/client/crash_report_database_mac.mm +++ b/third_party/crashpad/crashpad/client/crash_report_database_mac.mm
@@ -268,13 +268,11 @@ void CleanOrphanedAttachments(); Settings& SettingsInternal() { - std::call_once(settings_init_, [this]() { - settings_.Initialize(base_dir_.Append(kSettings)); - }); + std::call_once(settings_init_, [this]() { settings_.Initialize(); }); return settings_; } - base::FilePath base_dir_; + const base::FilePath base_dir_; Settings settings_; std::once_flag settings_init_; bool xattr_new_names_; @@ -284,7 +282,7 @@ CrashReportDatabaseMac::CrashReportDatabaseMac(const base::FilePath& path) : CrashReportDatabase(), base_dir_(path), - settings_(), + settings_(path.Append(kSettings)), settings_init_(), xattr_new_names_(false), initialized_() {} @@ -913,6 +911,8 @@ } } +namespace { + std::unique_ptr<CrashReportDatabase> InitializeInternal( const base::FilePath& path, bool may_create) { @@ -924,6 +924,8 @@ return std::unique_ptr<CrashReportDatabase>(database_mac.release()); } +} // namespace + // static std::unique_ptr<CrashReportDatabase> CrashReportDatabase::Initialize( const base::FilePath& path) { @@ -936,4 +938,11 @@ return InitializeInternal(path, false); } +// static +std::unique_ptr<SettingsReader> +CrashReportDatabase::GetSettingsReaderForDatabasePath( + const base::FilePath& path) { + return std::make_unique<SettingsReader>(path.Append(kSettings)); +} + } // namespace crashpad
diff --git a/third_party/crashpad/crashpad/client/crash_report_database_win.cc b/third_party/crashpad/crashpad/client/crash_report_database_win.cc index c674cbb..aa4dd2a 100644 --- a/third_party/crashpad/crashpad/client/crash_report_database_win.cc +++ b/third_party/crashpad/crashpad/client/crash_report_database_win.cc
@@ -663,13 +663,11 @@ std::unique_ptr<Metadata> AcquireMetadata(); Settings& SettingsInternal() { - std::call_once(settings_init_, [this]() { - settings_.Initialize(base_dir_.Append(kSettings)); - }); + std::call_once(settings_init_, [this]() { settings_.Initialize(); }); return settings_; } - base::FilePath base_dir_; + const base::FilePath base_dir_; Settings settings_; std::once_flag settings_init_; InitializationStateDcheck initialized_; @@ -678,7 +676,7 @@ CrashReportDatabaseWin::CrashReportDatabaseWin(const base::FilePath& path) : CrashReportDatabase(), base_dir_(path), - settings_(), + settings_(path.Append(kSettings)), settings_init_(), initialized_() {} @@ -912,16 +910,6 @@ AttachmentsRootPath()); } -std::unique_ptr<CrashReportDatabase> InitializeInternal( - const base::FilePath& path, - bool may_create) { - std::unique_ptr<CrashReportDatabaseWin> database_win( - new CrashReportDatabaseWin(path)); - return database_win->Initialize(may_create) - ? std::move(database_win) - : std::unique_ptr<CrashReportDatabaseWin>(); -} - OperationStatus CrashReportDatabaseWin::RequestUpload(const UUID& uuid) { INITIALIZATION_STATE_DCHECK_VALID(initialized_); @@ -1034,6 +1022,20 @@ } } +namespace { + +std::unique_ptr<CrashReportDatabase> InitializeInternal( + const base::FilePath& path, + bool may_create) { + std::unique_ptr<CrashReportDatabaseWin> database_win( + new CrashReportDatabaseWin(path)); + return database_win->Initialize(may_create) + ? std::move(database_win) + : std::unique_ptr<CrashReportDatabaseWin>(); +} + +} // namespace + // static std::unique_ptr<CrashReportDatabase> CrashReportDatabase::Initialize( const base::FilePath& path) { @@ -1046,4 +1048,11 @@ return InitializeInternal(path, false); } +// static +std::unique_ptr<SettingsReader> +CrashReportDatabase::GetSettingsReaderForDatabasePath( + const base::FilePath& path) { + return std::make_unique<SettingsReader>(path.Append(kSettings)); +} + } // namespace crashpad
diff --git a/third_party/crashpad/crashpad/client/settings.cc b/third_party/crashpad/crashpad/client/settings.cc index 76d77c86..38da08b 100644 --- a/third_party/crashpad/crashpad/client/settings.cc +++ b/third_party/crashpad/crashpad/client/settings.cc
@@ -116,7 +116,7 @@ #endif // BUILDFLAG(IS_FUCHSIA) -struct Settings::Data { +struct SettingsReader::Data { static constexpr uint32_t kSettingsMagic = 'CPds'; // Version number only used for incompatible changes to Data. Do not change @@ -143,25 +143,17 @@ UUID client_id; }; -Settings::Settings() = default; +SettingsReader::SettingsReader(const base::FilePath& file_path) + : SettingsReader(file_path, InitializationState::kStateValid) {} -Settings::~Settings() = default; +SettingsReader::SettingsReader(const base::FilePath& file_path, + InitializationState::State state) + : file_path_(file_path), initialized_(state) {} -bool Settings::Initialize(const base::FilePath& file_path) { - DCHECK(initialized_.is_uninitialized()); - initialized_.set_invalid(); - file_path_ = file_path; +SettingsReader::~SettingsReader() = default; - Data settings; - if (!OpenForWritingAndReadSettings(&settings).is_valid()) - return false; - - initialized_.set_valid(); - return true; -} - -bool Settings::GetClientID(UUID* client_id) { - DCHECK(initialized_.is_valid()); +bool SettingsReader::GetClientID(UUID* client_id) { + DCHECK(initialized().is_valid()); Data settings; if (!OpenAndReadSettings(&settings)) @@ -171,8 +163,8 @@ return true; } -bool Settings::GetUploadsEnabled(bool* enabled) { - DCHECK(initialized_.is_valid()); +bool SettingsReader::GetUploadsEnabled(bool* enabled) { + DCHECK(initialized().is_valid()); Data settings; if (!OpenAndReadSettings(&settings)) @@ -182,8 +174,86 @@ return true; } +bool SettingsReader::GetLastUploadAttemptTime(time_t* time) { + DCHECK(initialized().is_valid()); + + Data settings; + if (!OpenAndReadSettings(&settings)) + return false; + + *time = InRangeCast<time_t>(settings.last_upload_attempt_time, + std::numeric_limits<time_t>::max()); + return true; +} + +bool SettingsReader::OpenAndReadSettings(Data* out_data) { + ScopedFileHandle handle(LoggingOpenFileForRead(file_path_)); + return handle.is_valid() && ReadSettings(handle.get(), out_data, true); +} + +bool SettingsReader::ReadSettings(FileHandle handle, + Data* out_data, + bool log_read_error) { + if (LoggingSeekFile(handle, 0, SEEK_SET) != 0) { + return false; + } + + // This clears `out_data` so that any bytes not read from disk are zero + // initialized. This is expected when reading from an older settings file with + // fewer fields. + memset(out_data, 0, sizeof(*out_data)); + + const FileOperationResult read_result = + log_read_error ? LoggingReadFileUntil(handle, out_data, sizeof(*out_data)) + : ReadFileUntil(handle, out_data, sizeof(*out_data)); + + if (read_result <= 0) { + return false; + } + + // Newer versions of crashpad may add fields to Data, but all versions have + // the data members up to `client_id`. Do not attempt to understand a smaller + // struct read. + const size_t min_size = + offsetof(Data, client_id) + sizeof(out_data->client_id); + if (static_cast<size_t>(read_result) < min_size) { + LOG(ERROR) << "Settings file too small: minimum " << min_size + << ", observed " << read_result; + return false; + } + + if (out_data->magic != Data::kSettingsMagic) { + LOG(ERROR) << "Settings magic is not " << Data::kSettingsMagic; + return false; + } + + if (out_data->version != Data::kSettingsVersion) { + LOG(ERROR) << "Settings version is not " << Data::kSettingsVersion; + return false; + } + + return true; +} + +Settings::Settings(const base::FilePath& path) + : SettingsReader(path, InitializationState::kStateUninitialized) {} + +Settings::~Settings() = default; + +bool Settings::Initialize() { + DCHECK(initialized().is_uninitialized()); + initialized().set_invalid(); + + Data settings; + if (!OpenForWritingAndReadSettings(&settings).is_valid()) + return false; + + initialized().set_valid(); + return true; +} + bool Settings::SetUploadsEnabled(bool enabled) { - DCHECK(initialized_.is_valid()); + DCHECK(initialized().is_valid()); Data settings; ScopedLockedFileHandle handle = OpenForWritingAndReadSettings(&settings); @@ -198,20 +268,8 @@ return WriteSettings(handle.get(), settings); } -bool Settings::GetLastUploadAttemptTime(time_t* time) { - DCHECK(initialized_.is_valid()); - - Data settings; - if (!OpenAndReadSettings(&settings)) - return false; - - *time = InRangeCast<time_t>(settings.last_upload_attempt_time, - std::numeric_limits<time_t>::max()); - return true; -} - bool Settings::SetLastUploadAttemptTime(time_t time) { - DCHECK(initialized_.is_valid()); + DCHECK(initialized().is_valid()); Data settings; ScopedLockedFileHandle handle = OpenForWritingAndReadSettings(&settings); @@ -300,7 +358,7 @@ NOTREACHED(); } -Settings::ScopedLockedFileHandle Settings::OpenForReading() { +Settings::ScopedLockedFileHandle Settings::OpenForReading() const { internal::MakeScopedLockedFileHandleOptions options; options.function_enum = internal::FileOpenFunction::kLoggingOpenFileForRead; return MakeScopedLockedFileHandle(options, FileLocking::kShared, file_path()); @@ -326,6 +384,9 @@ } bool Settings::OpenAndReadSettings(Data* out_data) { + // Because this implementation distinguishes between a failure to open and a + // failure to read the settings file, it cannot simply invoke + // SettingsReader::OpenAndReadSettings. ScopedLockedFileHandle handle = OpenForReading(); if (!handle.is_valid()) return false; @@ -344,7 +405,7 @@ Data* out_data) { ScopedLockedFileHandle handle; bool created = false; - if (!initialized_.is_valid()) { + if (!initialized().is_valid()) { // If this object is initializing, it hasn’t seen a settings file already, // so go easy on errors. Creating a new settings file for the first time // shouldn’t spew log messages. @@ -391,50 +452,6 @@ return handle; } -bool Settings::ReadSettings(FileHandle handle, - Data* out_data, - bool log_read_error) { - if (LoggingSeekFile(handle, 0, SEEK_SET) != 0) { - return false; - } - - // This clears `out_data` so that any bytes not read from disk are zero - // initialized. This is expected when reading from an older settings file with - // fewer fields. - memset(out_data, 0, sizeof(*out_data)); - - const FileOperationResult read_result = - log_read_error ? LoggingReadFileUntil(handle, out_data, sizeof(*out_data)) - : ReadFileUntil(handle, out_data, sizeof(*out_data)); - - if (read_result <= 0) { - return false; - } - - // Newer versions of crashpad may add fields to Data, but all versions have - // the data members up to `client_id`. Do not attempt to understand a smaller - // struct read. - const size_t min_size = - offsetof(Data, client_id) + sizeof(out_data->client_id); - if (static_cast<size_t>(read_result) < min_size) { - LOG(ERROR) << "Settings file too small: minimum " << min_size - << ", observed " << read_result; - return false; - } - - if (out_data->magic != Data::kSettingsMagic) { - LOG(ERROR) << "Settings magic is not " << Data::kSettingsMagic; - return false; - } - - if (out_data->version != Data::kSettingsVersion) { - LOG(ERROR) << "Settings version is not " << Data::kSettingsVersion; - return false; - } - - return true; -} - bool Settings::WriteSettings(FileHandle handle, const Data& data) { if (LoggingSeekFile(handle, 0, SEEK_SET) != 0) return false;
diff --git a/third_party/crashpad/crashpad/client/settings.h b/third_party/crashpad/crashpad/client/settings.h index 39b2de86..7da179d 100644 --- a/third_party/crashpad/crashpad/client/settings.h +++ b/third_party/crashpad/crashpad/client/settings.h
@@ -59,38 +59,26 @@ } // namespace internal -//! \brief An interface for accessing and modifying the settings of a -//! CrashReportDatabase. +//! \brief A class for accessing the settings of a CrashReportDatabase. +//! +//! SettingsReader does not participate in file locking. //! //! This class must not be instantiated directly, but rather an instance of it -//! should be retrieved via CrashReportDatabase::GetSettings(). -class Settings { +//! should be retrieved via +//! CrashReportDatabase::GetSettingsReaderForDatabasePath. +class SettingsReader { public: - static inline constexpr char kLockfileExtension[] = ".__lock__"; + explicit SettingsReader(const base::FilePath& path); - Settings(); + SettingsReader(const SettingsReader&) = delete; + SettingsReader& operator=(const SettingsReader&) = delete; - Settings(const Settings&) = delete; - Settings& operator=(const Settings&) = delete; - - ~Settings(); - - //! \brief Initializes the settings data store. - //! - //! This method must be called only once, and must be successfully called - //! before any other method in this class may be called. - //! - //! \param[in] path The location to store the settings data. - //! \return `true` if the data store was initialized successfully, otherwise - //! `false` with an error logged. - bool Initialize(const base::FilePath& path); + virtual ~SettingsReader(); //! \brief Retrieves the immutable identifier for this client, which is used //! on a server to locate all crash reports from a specific Crashpad //! database. //! - //! This is automatically initialized when the database is created. - //! //! \param[out] client_id The unique client identifier. //! //! \return On success, returns `true`, otherwise returns `false` with an @@ -112,15 +100,6 @@ //! error logged. bool GetUploadsEnabled(bool* enabled); - //! \brief Sets the user’s preference for submitting crash reports to a - //! collection server. - //! - //! \param[in] enabled Whether crash reports should be uploaded. - //! - //! \return On success, returns `true`, otherwise returns `false` with an - //! error logged. - bool SetUploadsEnabled(bool enabled); - //! \brief Retrieves the last time at which a report was attempted to be //! uploaded. //! @@ -132,6 +111,67 @@ //! error logged. bool GetLastUploadAttemptTime(time_t* time); + protected: + struct Data; + + SettingsReader(const base::FilePath& path, InitializationState::State state); + + // Opens the settings file and reads the data. If that fails, an error will + // be logged and the function will return false. + virtual bool OpenAndReadSettings(Data* out_data); + + // Reads the settings from |handle|. Logs an error and returns false on + // failure. + // + // If |log_read_error| is false, nothing will be logged for a read error, but + // this method will still return false. This is intended to be used to + // suppress error messages when attempting to read a newly created settings + // file. + bool ReadSettings(FileHandle handle, Data* out_data, bool log_read_error); + + const base::FilePath& file_path() const { return file_path_; } + + InitializationState& initialized() { return initialized_; } + + private: + const base::FilePath file_path_; + InitializationState initialized_; +}; + +//! \brief An interface for accessing and modifying the settings of a +//! CrashReportDatabase. +//! +//! This class must not be instantiated directly, but rather an instance of it +//! should be retrieved via CrashReportDatabase::GetSettings(). +//! +//! Settings will lock files prior to reading or writing them, and respect +//! existing locks. +class Settings final : public SettingsReader { + public: + static inline constexpr char kLockfileExtension[] = ".__lock__"; + + explicit Settings(const base::FilePath& file_path); + + ~Settings(); + + //! \brief Initializes the settings data store. + //! + //! This method must be called only once, and must be successfully called + //! before any other method in this class may be called. + //! + //! \return `true` if the data store was initialized successfully, otherwise + //! `false` with an error logged. + bool Initialize(); + + //! \brief Sets the user’s preference for submitting crash reports to a + //! collection server. + //! + //! \param[in] enabled Whether crash reports should be uploaded. + //! + //! \return On success, returns `true`, otherwise returns `false` with an + //! error logged. + bool SetUploadsEnabled(bool enabled); + //! \brief Sets the last time at which a report was attempted to be uploaded. //! //! This is only meant to be used internally by the CrashReportDatabase. @@ -157,8 +197,6 @@ #endif // !CRASHPAD_FLOCK_ALWAYS_SUPPORTED private: - struct Data; - // This must be constructed with MakeScopedLockedFileHandle(). It both unlocks // and closes the file on destruction. Note that on Fuchsia, this handle DOES // NOT offer correct operation, only an attempt to DCHECK if racy behavior is @@ -227,7 +265,7 @@ // Opens the settings file for reading. On error, logs a message and returns // the invalid handle. - ScopedLockedFileHandle OpenForReading(); + ScopedLockedFileHandle OpenForReading() const; // Opens the settings file for reading and writing. On error, logs a message // and returns the invalid handle. |mode| determines how the file will be @@ -243,25 +281,13 @@ // Opens the settings file and reads the data. If that fails, an error will // be logged and the settings will be recovered and re-initialized. If that // also fails, returns false with additional log data from recovery. - bool OpenAndReadSettings(Data* out_data); + bool OpenAndReadSettings(Data* out_data) override; // Opens the settings file for writing and reads the data. If reading fails, // recovery is attempted. Returns the opened file handle on success, or the // invalid file handle on failure, with an error logged. ScopedLockedFileHandle OpenForWritingAndReadSettings(Data* out_data); - // Reads the settings from |handle|. Logs an error and returns false on - // failure. This does not perform recovery. - // - // |handle| must be the result of OpenForReading() or - // OpenForReadingAndWriting(). - // - // If |log_read_error| is false, nothing will be logged for a read error, but - // this method will still return false. This is intended to be used to - // suppress error messages when attempting to read a newly created settings - // file. - bool ReadSettings(FileHandle handle, Data* out_data, bool log_read_error); - // Writes the settings to |handle|. Logs an error and returns false on // failure. This does not perform recovery. // @@ -281,12 +307,6 @@ // // |handle| must be the result of OpenForReadingAndWriting(). bool InitializeSettings(FileHandle handle); - - const base::FilePath& file_path() const { return file_path_; } - - base::FilePath file_path_; - - InitializationState initialized_; }; } // namespace crashpad
diff --git a/third_party/crashpad/crashpad/client/settings_test.cc b/third_party/crashpad/crashpad/client/settings_test.cc index c955116..9410314 100644 --- a/third_party/crashpad/crashpad/client/settings_test.cc +++ b/third_party/crashpad/crashpad/client/settings_test.cc
@@ -26,14 +26,15 @@ class SettingsTest : public testing::Test { public: - SettingsTest() = default; + SettingsTest() + : temp_dir_(), + settings_path_(temp_dir_.path().Append(FILE_PATH_LITERAL("settings"))), + settings_(settings_path_) {} SettingsTest(const SettingsTest&) = delete; SettingsTest& operator=(const SettingsTest&) = delete; - base::FilePath settings_path() { - return temp_dir_.path().Append(FILE_PATH_LITERAL("settings")); - } + base::FilePath settings_path() { return settings_path_; } Settings* settings() { return &settings_; } @@ -51,12 +52,11 @@ protected: // testing::Test: - void SetUp() override { - ASSERT_TRUE(settings()->Initialize(settings_path())); - } + void SetUp() override { ASSERT_TRUE(settings()->Initialize()); } private: - ScopedTempDir temp_dir_; + const ScopedTempDir temp_dir_; + const base::FilePath settings_path_; Settings settings_; }; @@ -65,8 +65,8 @@ EXPECT_TRUE(settings()->GetClientID(&client_id)); EXPECT_NE(client_id, UUID()); - Settings local_settings; - EXPECT_TRUE(local_settings.Initialize(settings_path())); + Settings local_settings(settings_path()); + EXPECT_TRUE(local_settings.Initialize()); UUID actual; EXPECT_TRUE(local_settings.GetClientID(&actual)); EXPECT_EQ(actual, client_id); @@ -82,8 +82,8 @@ EXPECT_TRUE(settings()->GetUploadsEnabled(&enabled)); EXPECT_TRUE(enabled); - Settings local_settings; - EXPECT_TRUE(local_settings.Initialize(settings_path())); + Settings local_settings(settings_path()); + EXPECT_TRUE(local_settings.Initialize()); enabled = false; EXPECT_TRUE(local_settings.GetUploadsEnabled(&enabled)); EXPECT_TRUE(enabled); @@ -108,21 +108,43 @@ EXPECT_TRUE(settings()->GetLastUploadAttemptTime(&actual)); EXPECT_EQ(actual, expected); - Settings local_settings; - EXPECT_TRUE(local_settings.Initialize(settings_path())); + Settings local_settings(settings_path()); + EXPECT_TRUE(local_settings.Initialize()); actual = -1; EXPECT_TRUE(local_settings.GetLastUploadAttemptTime(&actual)); EXPECT_EQ(actual, expected); } +TEST_F(SettingsTest, ReadOnly) { + { // A SettingsReader can read an existing setting... + SettingsReader reader(settings_path()); + bool enabled = true; + // Default value is false. + EXPECT_TRUE(reader.GetUploadsEnabled(&enabled)); + EXPECT_FALSE(enabled); + + settings()->SetUploadsEnabled(true); + EXPECT_TRUE(reader.GetUploadsEnabled(&enabled)); + EXPECT_TRUE(enabled); + } + + { // ...but not one that doesn't exist. + base::FilePath bad_path = + settings_path().DirName().Append(FILE_PATH_LITERAL("does_not_exist")); + SettingsReader reader(bad_path); + bool enabled = true; + EXPECT_FALSE(reader.GetUploadsEnabled(&enabled)); + } +} + // The following tests write a corrupt settings file and test the recovery // operation. TEST_F(SettingsTest, BadFileOnInitialize) { InitializeBadFile(); - Settings settings; - EXPECT_TRUE(settings.Initialize(settings_path())); + Settings settings(settings_path()); + EXPECT_TRUE(settings.Initialize()); } TEST_F(SettingsTest, BadFileOnGet) { @@ -132,8 +154,8 @@ EXPECT_TRUE(settings()->GetClientID(&client_id)); EXPECT_NE(client_id, UUID()); - Settings local_settings; - EXPECT_TRUE(local_settings.Initialize(settings_path())); + Settings local_settings(settings_path()); + EXPECT_TRUE(local_settings.Initialize()); UUID actual; EXPECT_TRUE(local_settings.GetClientID(&actual)); EXPECT_EQ(actual, client_id); @@ -162,8 +184,8 @@ << ErrnoMessage("unlink"); #endif - Settings local_settings; - EXPECT_TRUE(local_settings.Initialize(settings_path())); + Settings local_settings(settings_path()); + EXPECT_TRUE(local_settings.Initialize()); UUID new_client_id; EXPECT_TRUE(local_settings.GetClientID(&new_client_id)); EXPECT_NE(new_client_id, client_id);
diff --git a/third_party/crashpad/crashpad/third_party/linux/README.crashpad b/third_party/crashpad/crashpad/third_party/linux/README.md similarity index 100% rename from third_party/crashpad/crashpad/third_party/linux/README.crashpad rename to third_party/crashpad/crashpad/third_party/linux/README.md
diff --git a/third_party/crashpad/crashpad/util/misc/initialization_state.h b/third_party/crashpad/crashpad/util/misc/initialization_state.h index be78d8c..b6d313e7 100644 --- a/third_party/crashpad/crashpad/util/misc/initialization_state.h +++ b/third_party/crashpad/crashpad/util/misc/initialization_state.h
@@ -56,6 +56,7 @@ }; InitializationState() : state_(kStateUninitialized) {} + explicit InitializationState(State state) : state_(state) {} InitializationState(const InitializationState&) = delete; InitializationState& operator=(const InitializationState&) = delete;
diff --git a/third_party/depot_tools b/third_party/depot_tools index 3008b57..8d28f8c 160000 --- a/third_party/depot_tools +++ b/third_party/depot_tools
@@ -1 +1 @@ -Subproject commit 3008b57e5d18ee9c92baf851dd33c61cfd6fad21 +Subproject commit 8d28f8ce962fe60029967fad483c23c885e7fb3b
diff --git a/third_party/glib/3pp/3pp.pb b/third_party/glib/3pp/3pp.pb index a6eaaa8..4b84829 100644 --- a/third_party/glib/3pp/3pp.pb +++ b/third_party/glib/3pp/3pp.pb
@@ -6,6 +6,7 @@ version: "2.82.1" } unpack_archive: true + cpe_base_address: "cpe:/a:gnome:glib" } build { install: "install.sh"
diff --git a/third_party/llvm-libc/src b/third_party/llvm-libc/src index 71f9245..8ab1237 160000 --- a/third_party/llvm-libc/src +++ b/third_party/llvm-libc/src
@@ -1 +1 @@ -Subproject commit 71f9245792872176918a1f82dfe2e9ccfb0d30df +Subproject commit 8ab123717dc94883b2f0e248ad17dd7c1758f51f
diff --git a/third_party/pdfium b/third_party/pdfium index 6aadd6e..eb22487 160000 --- a/third_party/pdfium +++ b/third_party/pdfium
@@ -1 +1 @@ -Subproject commit 6aadd6ed35dcf9abbef5fb8ad13ac81d6ed92566 +Subproject commit eb224879e6253050b50bed55485dfff8a15798a3
diff --git a/third_party/perfetto b/third_party/perfetto index 6a960b04..f85bf07 160000 --- a/third_party/perfetto +++ b/third_party/perfetto
@@ -1 +1 @@ -Subproject commit 6a960b04f6e20ace0f0e084be42a660f7ff6490a +Subproject commit f85bf07763e947a46473bdd07bd5245880d6d404
diff --git a/third_party/rust/bytemuck/v1/BUILD.gn b/third_party/rust/bytemuck/v1/BUILD.gn index 6e9ac78..462e745 100644 --- a/third_party/rust/bytemuck/v1/BUILD.gn +++ b/third_party/rust/bytemuck/v1/BUILD.gn
@@ -39,7 +39,7 @@ cargo_pkg_name = "bytemuck" cargo_pkg_description = "A crate for mucking around with piles of bytes." cargo_pkg_repository = "https://github.com/Lokathor/bytemuck" - cargo_pkg_version = "1.23.2" + cargo_pkg_version = "1.24.0" allow_unsafe = true
diff --git a/third_party/rust/bytemuck/v1/README.chromium b/third_party/rust/bytemuck/v1/README.chromium index f9a05bf6..cc7187b 100644 --- a/third_party/rust/bytemuck/v1/README.chromium +++ b/third_party/rust/bytemuck/v1/README.chromium
@@ -1,7 +1,7 @@ Name: bytemuck URL: https://crates.io/crates/bytemuck -Version: 1.23.2 -Revision: c069a2f6a4c7f3416257d0378c799085aa5626bb +Version: 1.24.0 +Revision: da748163ea203f80098b6bdc754c54ebc535364c Update Mechanism: Manual (https://crbug.com/449898466) License: Apache-2.0 License File: //third_party/rust/chromium_crates_io/vendor/bytemuck-v1/LICENSE-APACHE
diff --git a/third_party/rust/chromium_crates_io/Cargo.lock b/third_party/rust/chromium_crates_io/Cargo.lock index 48b6c8cd..4390952 100644 --- a/third_party/rust/chromium_crates_io/Cargo.lock +++ b/third_party/rust/chromium_crates_io/Cargo.lock
@@ -52,7 +52,7 @@ [[package]] name = "bytemuck" -version = "1.23.2" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytemuck_derive", @@ -84,7 +84,7 @@ [[package]] name = "cc" -version = "1.2.39" +version = "1.2.41" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "find-msvc-tools", @@ -1166,7 +1166,7 @@ [[package]] name = "unicode-width" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1250,7 +1250,7 @@ [[package]] name = "xml" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]]
diff --git a/third_party/rust/chromium_crates_io/supply-chain/config.toml b/third_party/rust/chromium_crates_io/supply-chain/config.toml index c646054..43b5c8bd8 100644 --- a/third_party/rust/chromium_crates_io/supply-chain/config.toml +++ b/third_party/rust/chromium_crates_io/supply-chain/config.toml
@@ -68,7 +68,7 @@ [policy."bitflags:2.9.4"] criteria = ["crypto-safe", "safe-to-deploy", "ub-risk-2"] -[policy."bytemuck:1.23.2"] +[policy."bytemuck:1.24.0"] criteria = ["crypto-safe", "safe-to-deploy", "ub-risk-2"] [policy."bytemuck_derive:1.10.2"] @@ -80,7 +80,7 @@ [policy."calendrical_calculations:0.2.2"] criteria = ["crypto-safe", "safe-to-deploy", "ub-risk-2"] -[policy."cc:1.2.39"] +[policy."cc:1.2.41"] criteria = [] [policy."cfg-if:1.0.3"] @@ -434,7 +434,7 @@ [policy."unicode-ident:1.0.19"] criteria = ["crypto-safe", "safe-to-deploy", "ub-risk-2"] -[policy."unicode-width:0.2.1"] +[policy."unicode-width:0.2.2"] criteria = ["crypto-safe", "safe-to-deploy", "ub-risk-2"] [policy."winapi-util:0.1.11"] @@ -473,7 +473,7 @@ [policy."writeable:0.6.1"] criteria = ["crypto-safe", "safe-to-deploy", "ub-risk-2"] -[policy."xml:1.0.0"] +[policy."xml:1.0.1"] criteria = ["crypto-safe", "safe-to-deploy", "ub-risk-2"] [policy."yoke-derive:0.8.0"]
diff --git a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/.cargo_vcs_info.json index 758c5451..bda3d8d2 100644 --- a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/.cargo_vcs_info.json +++ b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/.cargo_vcs_info.json
@@ -1,6 +1,6 @@ { "git": { - "sha1": "c069a2f6a4c7f3416257d0378c799085aa5626bb" + "sha1": "da748163ea203f80098b6bdc754c54ebc535364c" }, "path_in_vcs": "" } \ No newline at end of file
diff --git a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/.github/workflows/rust.yml b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/.github/workflows/rust.yml index 3a709ad1..444be2f 100644 --- a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/.github/workflows/rust.yml +++ b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/.github/workflows/rust.yml
@@ -43,6 +43,8 @@ if: matrix.rust == 'nightly' - run: cargo test --verbose --manifest-path=derive/Cargo.toml --all-features if: matrix.rust == 'nightly' + - run: cd contiguous_bitset && cargo test + if: matrix.rust == 'stable' cross-test: name: Test on ${{ matrix.target }} with cross
diff --git a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/.gitignore b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/.gitignore index fb743703..ae60c28 100644 --- a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/.gitignore +++ b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/.gitignore
@@ -1,10 +1,6 @@ Cargo.lock -/target/ -/.vscode/ - -# These are backup files generated by rustfmt **/*.rs.bk -/derive/target/ -/derive/.vscode/ +**/target/ +**/.vscode/
diff --git a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/Cargo.lock b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/Cargo.lock index faf0ebe..16f817e 100644 --- a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/Cargo.lock +++ b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/Cargo.lock
@@ -4,16 +4,16 @@ [[package]] name = "bytemuck" -version = "1.23.2" +version = "1.24.0" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.10.1" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" +checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", @@ -22,27 +22,27 @@ [[package]] name = "proc-macro2" -version = "1.0.94" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.40" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] [[package]] name = "syn" -version = "2.0.100" +version = "2.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" +checksum = "46f71c0377baf4ef1cc3e3402ded576dccc315800fbc62dfc7fe04b009773b4a" dependencies = [ "proc-macro2", "quote", @@ -51,6 +51,6 @@ [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83"
diff --git a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/Cargo.toml index 35217ac..3a5d463 100644 --- a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/Cargo.toml +++ b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/Cargo.toml
@@ -12,10 +12,14 @@ [package] edition = "2018" name = "bytemuck" -version = "1.23.2" +version = "1.24.0" authors = ["Lokathor <zefria@gmail.com>"] build = false -exclude = ["/pedantic.bat"] +exclude = [ + "/pedantic.bat", + "derive/", + "contiguous_bitset/", +] autolib = false autobins = false autoexamples = false @@ -136,7 +140,7 @@ path = "tests/wrapper_forgets.rs" [dependencies.bytemuck_derive] -version = "1.10.1" +version = "1.10.2" optional = true [lints.rust.unexpected_cfgs]
diff --git a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/Cargo.toml.orig index 98ade989..f631851de 100644 --- a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/Cargo.toml.orig +++ b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/Cargo.toml.orig
@@ -1,7 +1,7 @@ [package] name = "bytemuck" description = "A crate for mucking around with piles of bytes." -version = "1.23.2" +version = "1.24.0" authors = ["Lokathor <zefria@gmail.com>"] repository = "https://github.com/Lokathor/bytemuck" readme = "README.md" @@ -9,7 +9,7 @@ categories = ["encoding", "no-std"] edition = "2018" license = "Zlib OR Apache-2.0 OR MIT" -exclude = ["/pedantic.bat"] +exclude = ["/pedantic.bat", "derive/", "contiguous_bitset/"] [features] # In v2 we'll fix these names to be more "normal". @@ -37,10 +37,12 @@ wasm_simd = [] # MSRV 1.54.0: support wasm simd types aarch64_simd = [] # MSRV 1.59.0: support aarch64 simd types -avx512_simd = [] # MSRV 1.72.0: support avx512 simd types +avx512_simd = [] # MSRV 1.89.0: support avx512 simd types must_cast = [] # MSRV 1.64.0: support the `must` module. -must_cast_extra = ["must_cast"] # MSRV 1.83.0: support mutable references in const +must_cast_extra = [ + "must_cast", +] # MSRV 1.83.0: support mutable references in const # Adds `TransparentWrapper` impls for stdlib types newer than bytemuck's base MSRV. # Current MSRV 1.74.0: `core::num::Saturating`. @@ -105,10 +107,12 @@ nightly_docs = [] [dependencies] -bytemuck_derive = { version = "1.10.1", path = "derive", optional = true } +bytemuck_derive = { version = "1.10.2", path = "derive", optional = true } [lints.rust] -unexpected_cfgs = { level = "deny", check-cfg = ['cfg(target_arch, values("spirv"))'] } +unexpected_cfgs = { level = "deny", check-cfg = [ + 'cfg(target_arch, values("spirv"))', +] } [package.metadata.docs.rs] # Note(Lokathor): Don't use all-features or it would use `unsound_ptr_pod_impl` too. @@ -121,8 +125,4 @@ [package.metadata.playground] # Note(Lokathor): Don't use all-features or it would use `unsound_ptr_pod_impl` too. -features = [ - "latest_stable_rust", - "extern_crate_alloc", - "extern_crate_std", -] +features = ["latest_stable_rust", "extern_crate_alloc", "extern_crate_std"]
diff --git a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/changelog.md b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/changelog.md index 0efd473f..4a63790 100644 --- a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/changelog.md +++ b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/changelog.md
@@ -1,5 +1,11 @@ # `bytemuck` changelog +## 1.24 + +* [use new stable avx512 types from rust 1.89](https://github.com/Lokathor/bytemuck/pull/322) +* [impl AnyBitPattern for [MaybeUninit<T: AnyBitPattern>; N]](https://github.com/Lokathor/bytemuck/pull/317) +* bump `derive` minimum version. + ## 1.23.2 * bump `derive` minimum version.
diff --git a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/rustfmt.toml b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/rustfmt.toml index 689ceb1..430daf25 100644 --- a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/rustfmt.toml +++ b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/rustfmt.toml
@@ -3,7 +3,7 @@ # Stable edition = "2018" -fn_args_layout = "Compressed" +fn_params_layout = "Compressed" max_width = 80 tab_spaces = 2 use_field_init_shorthand = true
diff --git a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/src/anybitpattern.rs b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/src/anybitpattern.rs index 3b98b09..43bbe269 100644 --- a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/src/anybitpattern.rs +++ b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/src/anybitpattern.rs
@@ -62,3 +62,16 @@ )] unsafe impl<T> AnyBitPattern for core::mem::MaybeUninit<T> where T: AnyBitPattern {} + +#[cfg(all(feature = "zeroable_maybe_uninit", feature = "min_const_generics"))] +#[cfg_attr( + feature = "nightly_docs", + doc(cfg(all( + feature = "zeroable_maybe_uninit", + feature = "min_const_generics" + ))) +)] +unsafe impl<T, const N: usize> AnyBitPattern for [core::mem::MaybeUninit<T>; N] where + T: AnyBitPattern +{ +}
diff --git a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/src/lib.rs index 68778219..e4d70be 100644 --- a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/src/lib.rs +++ b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/src/lib.rs
@@ -5,16 +5,10 @@ #![allow(clippy::uninlined_format_args)] #![allow(clippy::result_unit_err)] #![allow(clippy::type_complexity)] +#![allow(clippy::manual_is_multiple_of)] #![cfg_attr(feature = "nightly_docs", feature(doc_cfg))] #![cfg_attr(feature = "nightly_portable_simd", feature(portable_simd))] #![cfg_attr(feature = "nightly_float", feature(f16, f128))] -#![cfg_attr( - all( - feature = "nightly_stdsimd", - any(target_arch = "x86_64", target_arch = "x86") - ), - feature(stdarch_x86_avx512) -)] //! This crate gives small utilities for casting between plain data types. //! @@ -569,7 +563,7 @@ // case one of the intermediate drops does a panic. slice.iter_mut().for_each(write_zeroes); } else { - // Otherwise we can be really fast and just fill everthing with zeros. + // Otherwise we can be really fast and just fill everything with zeros. let len = slice.len(); unsafe { core::ptr::write_bytes(slice.as_mut_ptr(), 0u8, len) } }
diff --git a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/src/pod.rs b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/src/pod.rs index ae1437c7..846f281 100644 --- a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/src/pod.rs +++ b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/src/pod.rs
@@ -156,28 +156,28 @@ } impl_unsafe_marker_for_simd!( - #[cfg(all(target_arch = "x86", any(feature = "nightly_stdsimd", feature = "avx512_simd")))] + #[cfg(all(target_arch = "x86", feature = "avx512_simd"))] unsafe impl Pod for x86::{ __m512, __m512d, __m512i } ); impl_unsafe_marker_for_simd!( - #[cfg(all(target_arch = "x86_64", any(feature = "nightly_stdsimd", feature = "avx512_simd")))] + #[cfg(all(target_arch = "x86_64", feature = "avx512_simd"))] unsafe impl Pod for x86_64::{ __m512, __m512d, __m512i } ); impl_unsafe_marker_for_simd!( - #[cfg(all(target_arch = "x86", feature = "nightly_stdsimd"))] + #[cfg(all(target_arch = "x86", feature = "avx512_simd"))] unsafe impl Pod for x86::{ __m128bh, __m256bh, __m512bh } ); impl_unsafe_marker_for_simd!( - #[cfg(all(target_arch = "x86_64", feature = "nightly_stdsimd"))] + #[cfg(all(target_arch = "x86_64", feature = "avx512_simd"))] unsafe impl Pod for x86_64::{ __m128bh, __m256bh, __m512bh }
diff --git a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/src/zeroable.rs b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/src/zeroable.rs index 0a2cdaa..d88ba0f 100644 --- a/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/src/zeroable.rs +++ b/third_party/rust/chromium_crates_io/vendor/bytemuck-v1/src/zeroable.rs
@@ -235,28 +235,28 @@ } impl_unsafe_marker_for_simd!( - #[cfg(all(target_arch = "x86", any(feature = "nightly_stdsimd", feature = "avx512_simd")))] + #[cfg(all(target_arch = "x86", feature = "avx512_simd"))] unsafe impl Zeroable for x86::{ __m512, __m512d, __m512i } ); impl_unsafe_marker_for_simd!( - #[cfg(all(target_arch = "x86_64", any(feature = "nightly_stdsimd", feature = "avx512_simd")))] + #[cfg(all(target_arch = "x86_64", feature = "avx512_simd"))] unsafe impl Zeroable for x86_64::{ __m512, __m512d, __m512i } ); impl_unsafe_marker_for_simd!( - #[cfg(all(target_arch = "x86", feature = "nightly_stdsimd"))] + #[cfg(all(target_arch = "x86", feature = "avx512_simd"))] unsafe impl Zeroable for x86::{ __m128bh, __m256bh, __m512bh } ); impl_unsafe_marker_for_simd!( - #[cfg(all(target_arch = "x86_64", feature = "nightly_stdsimd"))] + #[cfg(all(target_arch = "x86_64", feature = "avx512_simd"))] unsafe impl Zeroable for x86_64::{ __m128bh, __m256bh, __m512bh }
diff --git a/third_party/rust/chromium_crates_io/vendor/cc-v1/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/cc-v1/Cargo.toml index 937d26d2..f2c75bb 100644 --- a/third_party/rust/chromium_crates_io/vendor/cc-v1/Cargo.toml +++ b/third_party/rust/chromium_crates_io/vendor/cc-v1/Cargo.toml
@@ -6,13 +6,13 @@ # by `tools/crates/run_gnrt.py vendor`. Do not edit! # # This is an empty placeholder that has replaced the -# `cc-1.2.39` crate. +# `cc-1.2.41` crate. # # See `//tools/crates/gnrt/removed_crate.md` to learn more. [package] name = "cc" -version = "1.2.39" +version = "1.2.41" [package.metadata.gnrt] is_placeholder = true @@ -22,7 +22,7 @@ "parallel" = [] [dependencies.find-msvc-tools] -version = "^0.1.2" +version = "^0.1.4" default_features = false [dependencies.shlex] version = "^1.3.0"
diff --git a/third_party/rust/chromium_crates_io/vendor/cc-v1/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/cc-v1/src/lib.rs index 2ff8ea0..e4c9dbd 100644 --- a/third_party/rust/chromium_crates_io/vendor/cc-v1/src/lib.rs +++ b/third_party/rust/chromium_crates_io/vendor/cc-v1/src/lib.rs
@@ -6,6 +6,6 @@ // by `tools/crates/run_gnrt.py vendor`. Do not edit! // // This is an empty placeholder that has replaced the -// `cc-1.2.39` crate. +// `cc-1.2.41` crate. // // See `//tools/crates/gnrt/removed_crate.md` to learn more.
diff --git a/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/.cargo_vcs_info.json index fdc2a8d..bc163f20 100644 --- a/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/.cargo_vcs_info.json +++ b/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/.cargo_vcs_info.json
@@ -1,6 +1,6 @@ { "git": { - "sha1": "0085e91db72ae9a4498e62030d9651f1c1d09b4f" + "sha1": "9d98411769fe13c7c18cab0b3fbbab29ba8350ea" }, "path_in_vcs": "" } \ No newline at end of file
diff --git a/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/Cargo.lock b/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/Cargo.lock index 1391bb2..a88d1e0 100644 --- a/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/Cargo.lock +++ b/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/Cargo.lock
@@ -16,7 +16,7 @@ [[package]] name = "unicode-width" -version = "0.2.1" +version = "0.2.2" dependencies = [ "rustc-std-workspace-core", "rustc-std-workspace-std",
diff --git a/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/Cargo.toml index 68a60682..8403a9e 100644 --- a/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/Cargo.toml +++ b/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/Cargo.toml
@@ -13,7 +13,7 @@ edition = "2021" rust-version = "1.66" name = "unicode-width" -version = "0.2.1" +version = "0.2.2" authors = [ "kwantam <kwantam@gmail.com>", "Manish Goregaokar <manishsmail@gmail.com>",
diff --git a/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/Cargo.toml.orig index 83ae13a..b48a3ed 100644 --- a/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/Cargo.toml.orig +++ b/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/Cargo.toml.orig
@@ -1,7 +1,7 @@ [package] name = "unicode-width" -version = "0.2.1" +version = "0.2.2" authors = [ "kwantam <kwantam@gmail.com>", "Manish Goregaokar <manishsmail@gmail.com>",
diff --git a/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/scripts/unicode.py b/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/scripts/unicode.py index b88364b..0baf698 100755 --- a/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/scripts/unicode.py +++ b/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/scripts/unicode.py
@@ -43,7 +43,7 @@ from itertools import batched from typing import Callable, Iterable -UNICODE_VERSION = "16.0.0" +UNICODE_VERSION = "17.0.0" """The version of the Unicode data files to download.""" NUM_CODEPOINTS = 0x110000 @@ -84,11 +84,11 @@ localname = os.path.join(local_prefix, basename) if not os.path.exists(localname): if emoji: - prefix = f"emoji/{UNICODE_VERSION[:-2]}" + prefix = "emoji" else: - prefix = f"{UNICODE_VERSION}/ucd" + prefix = "ucd" urllib.request.urlretrieve( - f"https://www.unicode.org/Public/{prefix}/{filename}", + f"https://www.unicode.org/Public/{UNICODE_VERSION}/{prefix}/{filename}", localname, ) try: @@ -178,7 +178,9 @@ (if set, should also set 3rd and 4th) - 6th bit: if 4th is set but this one is not, then this is a ZWJ ligature state where no ZWJ has been encountered yet; encountering one flips this on - - Seventh bit: is VS1 (if CJK) or is VS2 (not CJK) + - Seventh bit: + - CJK mode: is VS1 or VS3 + - Not CJK: is VS2 """ # BASIC WIDTHS @@ -275,8 +277,8 @@ # VARIATION SELECTORS - VARIATION_SELECTOR_1_OR_2 = 0b0000_0010_0000_0000 - "\\uFE00 if CJK, or \\uFE01 otherwise" + VARIATION_SELECTOR_1_2_OR_3 = 0b0000_0010_0000_0000 + "\\uFE00 or \\uFE02 if CJK, or \\uFE01 otherwise" # Text presentation sequences (not CJK) VARIATION_SELECTOR_15 = 0b0100_0000_0000_0000 @@ -373,7 +375,7 @@ | WidthState.COMBINING_LONG_SOLIDUS_OVERLAY | WidthState.VARIATION_SELECTOR_15 | WidthState.VARIATION_SELECTOR_16 - | WidthState.VARIATION_SELECTOR_1_OR_2 + | WidthState.VARIATION_SELECTOR_1_2_OR_3 ): return 0 case ( @@ -657,11 +659,12 @@ ea[cp] = width # East-Asian only - ea[0xFE00] = WidthState.VARIATION_SELECTOR_1_OR_2 ea[0x0338] = WidthState.COMBINING_LONG_SOLIDUS_OVERLAY + ea[0xFE00] = WidthState.VARIATION_SELECTOR_1_2_OR_3 + ea[0xFE02] = WidthState.VARIATION_SELECTOR_1_2_OR_3 # Not East Asian only - not_ea[0xFE01] = WidthState.VARIATION_SELECTOR_1_OR_2 + not_ea[0xFE01] = WidthState.VARIATION_SELECTOR_1_2_OR_3 not_ea[0xFE0E] = WidthState.VARIATION_SELECTOR_15 return (not_ea, ea) @@ -759,7 +762,7 @@ num_chars = len(ccc_above_1) for cp in ccc_above_1: - if cp not in [0xFE00, 0xFE0F]: + if cp not in [0xFE00, 0xFE02, 0xFE0F]: assert ( cjk_width_map[cp].table_width() != CharWidthInTable.SPECIAL ), f"U+{cp:X}" @@ -1317,14 +1320,14 @@ if is_cjk: s += """ - if c == '\\u{FE00}' { - return (0, next_info.set_vs1_2()); + if matches!(c, '\\u{FE00}' | '\\u{FE02}') { + return (0, next_info.set_vs1_2_3()); } """ else: s += """ if c == '\\u{FE01}' { - return (0, next_info.set_vs1_2()); + return (0, next_info.set_vs1_2_3()); } if c == '\\u{FE0E}' { return (0, next_info.set_text_presentation()); @@ -1337,7 +1340,7 @@ } } else """ - s += """if next_info.is_vs1_2() { + s += """if next_info.is_vs1_2_3() { if matches!(c, '\\u{2018}' | '\\u{2019}' | '\\u{201C}' | '\\u{201D}') { return (""" @@ -1345,7 +1348,7 @@ s += """, WidthInfo::DEFAULT); } else { - next_info = next_info.unset_vs1_2(); + next_info = next_info.unset_vs1_2_3(); } } if next_info.is_ligature_transparent() { @@ -1655,7 +1658,7 @@ self.0 | WidthInfo::VARIATION_SELECTOR_16.0 & !WidthInfo::VARIATION_SELECTOR_15.0 - & !WidthInfo::VARIATION_SELECTOR_1_OR_2.0, + & !WidthInfo::VARIATION_SELECTOR_1_2_OR_3.0, ) }} else {{ Self::VARIATION_SELECTOR_16 @@ -1683,7 +1686,7 @@ self.0 | WidthInfo::VARIATION_SELECTOR_15.0 & !WidthInfo::VARIATION_SELECTOR_16.0 - & !WidthInfo::VARIATION_SELECTOR_1_OR_2.0, + & !WidthInfo::VARIATION_SELECTOR_1_2_OR_3.0, ) }} else {{ Self(WidthInfo::VARIATION_SELECTOR_15.0) @@ -1696,27 +1699,28 @@ }} /// Has 7th bit set - fn is_vs1_2(self) -> bool {{ - (self.0 & WidthInfo::VARIATION_SELECTOR_1_OR_2.0) == WidthInfo::VARIATION_SELECTOR_1_OR_2.0 + fn is_vs1_2_3(self) -> bool {{ + (self.0 & WidthInfo::VARIATION_SELECTOR_1_2_OR_3.0) + == WidthInfo::VARIATION_SELECTOR_1_2_OR_3.0 }} /// Set 7th bit - fn set_vs1_2(self) -> Self {{ + fn set_vs1_2_3(self) -> Self {{ if (self.0 & LIGATURE_TRANSPARENT_MASK) == LIGATURE_TRANSPARENT_MASK {{ Self( self.0 - | WidthInfo::VARIATION_SELECTOR_1_OR_2.0 + | WidthInfo::VARIATION_SELECTOR_1_2_OR_3.0 & !WidthInfo::VARIATION_SELECTOR_15.0 & !WidthInfo::VARIATION_SELECTOR_16.0, ) }} else {{ - Self(WidthInfo::VARIATION_SELECTOR_1_OR_2.0) + Self(WidthInfo::VARIATION_SELECTOR_1_2_OR_3.0) }} }} /// Clear 7th bit - fn unset_vs1_2(self) -> Self {{ - Self(self.0 & !WidthInfo::VARIATION_SELECTOR_1_OR_2.0) + fn unset_vs1_2_3(self) -> Self {{ + Self(self.0 & !WidthInfo::VARIATION_SELECTOR_1_2_OR_3.0) }} }}
diff --git a/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/src/lib.rs index 1bcff1d..a312037 100644 --- a/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/src/lib.rs +++ b/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/src/lib.rs
@@ -62,8 +62,8 @@ //! - Outside of an East Asian context, [text presentation sequences] have width 1 if their base character: //! - Has the [`Emoji_Presentation`] property, and //! - Is not in the [Enclosed Ideographic Supplement] block. -//! - [`'\u{2018}'`, `'\u{2019}'`, `'\u{201C}'`, and `'\u{201D}'`][General Punctuation] always have width 1 when followed by '\u{FE00}', -//! and width 2 when followed by '\u{FE01}'. +//! - [`'\u{2018}'`, `'\u{2019}'`, `'\u{201C}'`, and `'\u{201D}'`][General Punctuation] always have width 1 +//! when followed by '\u{FE00}' or '\u{FE02}', and width 2 when followed by '\u{FE01}'. //! - Script-specific ligatures: //! - For all the following ligatures, the insertion of any number of [default-ignorable][`Default_Ignorable_Code_Point`] //! [combining marks] anywhere in the sequence will not change the total width. In addition, for all non-Arabic
diff --git a/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/src/tables.rs b/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/src/tables.rs index da902d5ed..754dd43 100644 --- a/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/src/tables.rs +++ b/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/src/tables.rs
@@ -44,7 +44,7 @@ const TAG_A6_END_ZWJ_EMOJI_PRESENTATION: Self = Self(0b0000000000011110); const KIRAT_RAI_VOWEL_SIGN_E: Self = Self(0b0000000000100000); const KIRAT_RAI_VOWEL_SIGN_AI: Self = Self(0b0000000000100001); - const VARIATION_SELECTOR_1_OR_2: Self = Self(0b0000001000000000); + const VARIATION_SELECTOR_1_2_OR_3: Self = Self(0b0000001000000000); const VARIATION_SELECTOR_15: Self = Self(0b0100000000000000); const VARIATION_SELECTOR_16: Self = Self(0b1000000000000000); const JOINING_GROUP_ALEF: Self = Self(0b0011000011111111); @@ -94,7 +94,7 @@ self.0 | WidthInfo::VARIATION_SELECTOR_16.0 & !WidthInfo::VARIATION_SELECTOR_15.0 - & !WidthInfo::VARIATION_SELECTOR_1_OR_2.0, + & !WidthInfo::VARIATION_SELECTOR_1_2_OR_3.0, ) } else { Self::VARIATION_SELECTOR_16 @@ -122,7 +122,7 @@ self.0 | WidthInfo::VARIATION_SELECTOR_15.0 & !WidthInfo::VARIATION_SELECTOR_16.0 - & !WidthInfo::VARIATION_SELECTOR_1_OR_2.0, + & !WidthInfo::VARIATION_SELECTOR_1_2_OR_3.0, ) } else { Self(WidthInfo::VARIATION_SELECTOR_15.0) @@ -135,33 +135,34 @@ } /// Has 7th bit set - fn is_vs1_2(self) -> bool { - (self.0 & WidthInfo::VARIATION_SELECTOR_1_OR_2.0) == WidthInfo::VARIATION_SELECTOR_1_OR_2.0 + fn is_vs1_2_3(self) -> bool { + (self.0 & WidthInfo::VARIATION_SELECTOR_1_2_OR_3.0) + == WidthInfo::VARIATION_SELECTOR_1_2_OR_3.0 } /// Set 7th bit - fn set_vs1_2(self) -> Self { + fn set_vs1_2_3(self) -> Self { if (self.0 & LIGATURE_TRANSPARENT_MASK) == LIGATURE_TRANSPARENT_MASK { Self( self.0 - | WidthInfo::VARIATION_SELECTOR_1_OR_2.0 + | WidthInfo::VARIATION_SELECTOR_1_2_OR_3.0 & !WidthInfo::VARIATION_SELECTOR_15.0 & !WidthInfo::VARIATION_SELECTOR_16.0, ) } else { - Self(WidthInfo::VARIATION_SELECTOR_1_OR_2.0) + Self(WidthInfo::VARIATION_SELECTOR_1_2_OR_3.0) } } /// Clear 7th bit - fn unset_vs1_2(self) -> Self { - Self(self.0 & !WidthInfo::VARIATION_SELECTOR_1_OR_2.0) + fn unset_vs1_2_3(self) -> Self { + Self(self.0 & !WidthInfo::VARIATION_SELECTOR_1_2_OR_3.0) } } /// The version of [Unicode](http://www.unicode.org/) /// that this version of unicode-width is based on. -pub const UNICODE_VERSION: (u8, u8, u8) = (16, 0, 0); +pub const UNICODE_VERSION: (u8, u8, u8) = (17, 0, 0); /// Returns the [UAX #11](https://www.unicode.org/reports/tr11/) based width of `c` by /// consulting a multi-level lookup table. @@ -203,7 +204,7 @@ '\u{1A10}' => (1, WidthInfo::BUGINESE_LETTER_YA), '\u{2D31}'..='\u{2D6F}' => (1, WidthInfo::TIFINAGH_CONSONANT), '\u{A4FC}'..='\u{A4FD}' => (1, WidthInfo::LISU_TONE_LETTER_MYA_NA_JEU), - '\u{FE01}' => (0, WidthInfo::VARIATION_SELECTOR_1_OR_2), + '\u{FE01}' => (0, WidthInfo::VARIATION_SELECTOR_1_2_OR_3), '\u{FE0E}' => (0, WidthInfo::VARIATION_SELECTOR_15), '\u{FE0F}' => (0, WidthInfo::VARIATION_SELECTOR_16), '\u{10C03}' => (1, WidthInfo::OLD_TURKIC_LETTER_ORKHON_I), @@ -267,7 +268,7 @@ return (0, next_info.set_emoji_presentation()); } if c == '\u{FE01}' { - return (0, next_info.set_vs1_2()); + return (0, next_info.set_vs1_2_3()); } if c == '\u{FE0E}' { return (0, next_info.set_text_presentation()); @@ -278,11 +279,11 @@ } else { next_info = next_info.unset_text_presentation(); } - } else if next_info.is_vs1_2() { + } else if next_info.is_vs1_2_3() { if matches!(c, '\u{2018}' | '\u{2019}' | '\u{201C}' | '\u{201D}') { return (2, WidthInfo::DEFAULT); } else { - next_info = next_info.unset_vs1_2(); + next_info = next_info.unset_vs1_2_3(); } } if next_info.is_ligature_transparent() { @@ -515,7 +516,7 @@ '\u{1A10}' => (1, WidthInfo::BUGINESE_LETTER_YA), '\u{2D31}'..='\u{2D6F}' => (1, WidthInfo::TIFINAGH_CONSONANT), '\u{A4FC}'..='\u{A4FD}' => (1, WidthInfo::LISU_TONE_LETTER_MYA_NA_JEU), - '\u{FE00}' => (0, WidthInfo::VARIATION_SELECTOR_1_OR_2), + '\u{FE00}'..='\u{FE02}' => (0, WidthInfo::VARIATION_SELECTOR_1_2_OR_3), '\u{FE0F}' => (0, WidthInfo::VARIATION_SELECTOR_16), '\u{10C03}' => (1, WidthInfo::OLD_TURKIC_LETTER_ORKHON_I), '\u{16D67}' => (1, WidthInfo::KIRAT_RAI_VOWEL_SIGN_E), @@ -586,14 +587,14 @@ if c == '\u{FE0F}' { return (0, next_info.set_emoji_presentation()); } - if c == '\u{FE00}' { - return (0, next_info.set_vs1_2()); + if matches!(c, '\u{FE00}' | '\u{FE02}') { + return (0, next_info.set_vs1_2_3()); } - if next_info.is_vs1_2() { + if next_info.is_vs1_2_3() { if matches!(c, '\u{2018}' | '\u{2019}' | '\u{201C}' | '\u{201D}') { return (1, WidthInfo::DEFAULT); } else { - next_info = next_info.unset_vs1_2(); + next_info = next_info.unset_vs1_2_3(); } } if next_info.is_ligature_transparent() { @@ -1042,13 +1043,13 @@ 0x02, 0x02, 0x02, 0x50, 0x02, 0x51, 0x52, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x53, 0x54, 0x02, 0x02, 0x55, 0x02, 0x56, 0x02, 0x02, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x02, 0x64, 0x65, - 0x66, 0x67, 0x02, 0x68, 0x02, 0x69, 0x6A, 0x6B, 0x6C, 0x02, 0x02, 0x6D, 0x6E, 0x6F, 0x70, - 0x02, 0x71, 0x72, 0x02, + 0x66, 0x67, 0x02, 0x68, 0x02, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x02, 0x6E, 0x6F, 0x70, 0x71, + 0x02, 0x72, 0x73, 0x02, ], [ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x73, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x74, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, ], @@ -1060,15 +1061,15 @@ 0x02, 0x02, 0x02, 0x02, ], [ - 0x02, 0x02, 0x74, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x75, 0x76, 0x02, 0x02, 0x02, 0x77, 0x02, 0x02, 0x02, - 0x78, 0x79, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0x02, 0x02, 0x75, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x76, 0x77, 0x02, 0x02, 0x02, 0x78, 0x02, 0x02, 0x02, + 0x79, 0x7A, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, ], [ 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x7A, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x7B, 0x7C, 0x02, 0x02, 0x02, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x7B, 0x7C, 0x7D, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, @@ -1076,22 +1077,22 @@ [ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x7D, 0x39, 0x39, 0x7E, 0x39, 0x39, 0x7F, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x80, 0x02, 0x02, + 0x02, 0x7E, 0x39, 0x39, 0x7F, 0x39, 0x39, 0x80, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x81, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, ], [ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x81, 0x02, 0x02, 0x02, 0x82, 0x83, 0x84, 0x02, 0x85, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x86, 0x87, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x82, 0x02, 0x02, 0x02, 0x83, 0x84, 0x85, 0x02, 0x86, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x87, 0x88, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, ], [ - 0x88, 0x89, 0x76, 0x02, 0x02, 0x8A, 0x02, 0x02, 0x02, 0x8B, 0x02, 0x8C, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x8D, 0x8E, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x8F, 0x90, 0x02, 0x91, 0x92, 0x02, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, - 0x9A, 0x02, 0x9B, 0x02, 0x02, 0x9C, 0x9D, 0x9E, 0x9F, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x89, 0x8A, 0x77, 0x02, 0x02, 0x8B, 0x02, 0x02, 0x02, 0x8C, 0x02, 0x8D, 0x02, 0x8E, 0x02, + 0x02, 0x02, 0x8F, 0x90, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x91, 0x92, 0x02, 0x93, 0x94, 0x02, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, + 0x9C, 0x02, 0x9D, 0x02, 0x02, 0x9E, 0x9F, 0xA0, 0xA1, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, ], [ @@ -1099,7 +1100,7 @@ 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0xA0, + 0x39, 0x39, 0x39, 0xA2, ], [ 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, @@ -1110,7 +1111,7 @@ ], #[cfg(feature = "cjk")] [ - 0x00, 0xA1, 0x02, 0x02, 0x02, 0x02, 0xA2, 0xA3, 0x02, 0x04, 0x02, 0x05, 0x06, 0x07, 0x08, + 0x00, 0xA3, 0x02, 0x02, 0x02, 0x02, 0xA4, 0xA5, 0x02, 0x04, 0x02, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x02, 0x02, 0x1E, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x02, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x02, 0x2A, @@ -1118,9 +1119,9 @@ ], #[cfg(feature = "cjk")] [ - 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0x2E, 0xAB, 0x39, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, - 0xB1, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0xB2, 0x02, 0x02, 0x35, 0x36, 0x37, 0x02, 0x38, - 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0xB3, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0x2E, 0xAD, 0x39, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, + 0xB3, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0xB4, 0x02, 0x02, 0x35, 0x36, 0x37, 0x02, 0x38, + 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0xB5, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, ], @@ -1130,23 +1131,23 @@ 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x4B, 0x02, 0x02, 0x02, 0x02, 0x02, - 0xB4, 0x4D, 0x4E, 0xB5, + 0xB6, 0x4D, 0x4E, 0xB7, ], #[cfg(feature = "cjk")] [ - 0x88, 0x89, 0x76, 0x02, 0x02, 0x8A, 0x02, 0x02, 0x02, 0x8B, 0x02, 0x8C, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x8D, 0x8E, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x8F, 0x90, 0xB6, 0xB7, 0x92, 0x02, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, - 0x9A, 0x02, 0x9B, 0x02, 0x02, 0x9C, 0x9D, 0x9E, 0x9F, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x89, 0x8A, 0x77, 0x02, 0x02, 0x8B, 0x02, 0x02, 0x02, 0x8C, 0x02, 0x8D, 0x02, 0x8E, 0x02, + 0x02, 0x02, 0x8F, 0x90, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x91, 0x92, 0xB8, 0xB9, 0x94, 0x02, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, + 0x9C, 0x02, 0x9D, 0x02, 0x02, 0x9E, 0x9F, 0xA0, 0xA1, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, ], ]); #[cfg(feature = "cjk")] -const WIDTH_LEAVES_LEN: usize = 184; +const WIDTH_LEAVES_LEN: usize = 186; #[cfg(not(feature = "cjk"))] -const WIDTH_LEAVES_LEN: usize = 161; -/// Autogenerated. 184 sub-table(s). Consult [`lookup_width`] for layout info. +const WIDTH_LEAVES_LEN: usize = 163; +/// Autogenerated. 186 sub-table(s). Consult [`lookup_width`] for layout info. static WIDTH_LEAVES: Align32<[[u8; 32]; WIDTH_LEAVES_LEN]> = Align32([ [ 0x55, 0x55, 0x75, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, @@ -1335,7 +1336,7 @@ ], [ 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, ], [ @@ -1586,7 +1587,7 @@ [ 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x55, 0x00, + 0x05, 0x00, ], [ 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, @@ -1684,7 +1685,7 @@ 0x55, 0x55, ], [ - 0x01, 0x00, 0x40, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x00, 0x04, + 0x01, 0x00, 0x40, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x00, 0x14, 0x40, 0x55, 0x15, 0x55, 0x55, 0x01, 0x40, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, ], @@ -1694,6 +1695,11 @@ 0x55, 0x55, ], [ + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x04, 0x44, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, + ], + [ 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x40, 0x00, 0x10, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, @@ -1755,12 +1761,7 @@ ], [ 0x55, 0x55, 0x55, 0x15, 0x40, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xAA, 0x54, 0x55, 0x55, 0x50, 0x55, - 0x55, 0x55, - ], - [ - 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, - 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xAA, 0x54, 0x55, 0x55, 0xA0, 0x6A, 0x55, 0x55, ], [ @@ -1769,11 +1770,16 @@ 0x55, 0x95, ], [ - 0xAA, 0xAA, 0x56, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x6A, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, ], [ + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x6A, 0x55, + 0x55, 0x55, + ], + [ 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xA9, 0xAA, 0x69, @@ -1855,6 +1861,11 @@ ], [ 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x45, 0x55, 0x05, 0x55, 0x51, + 0x55, 0x55, + ], + [ + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x40, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, ], @@ -1920,7 +1931,7 @@ ], [ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x5F, 0x55, 0x57, 0x7F, 0xFD, 0x55, 0xFF, 0x55, 0x55, 0xD5, 0x57, 0x55, 0xFF, + 0xFF, 0xFF, 0x5F, 0x55, 0x57, 0x7F, 0xFD, 0x57, 0xFF, 0x55, 0x55, 0xD5, 0x57, 0x55, 0xFF, 0xFF, 0x57, ], [ @@ -1944,8 +1955,8 @@ 0xFF, 0x57, ], [ - 0xFF, 0xFF, 0x5F, 0xD5, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x7F, 0x55, 0xF5, 0xFF, 0xFF, 0xFF, 0xD7, 0xFF, 0xFF, 0x5F, 0x55, 0xFF, 0xFF, + 0xFF, 0xFF, 0x7F, 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x7F, 0x57, 0xFD, 0xFF, 0xFF, 0xFF, 0xD7, 0xFF, 0xFF, 0x7F, 0xD5, 0xFF, 0xFF, 0x57, 0x55, ], [ @@ -2069,7 +2080,7 @@ ], #[cfg(feature = "cjk")] [ - 0x03, 0x00, 0x00, 0xC0, 0xAA, 0xAA, 0x5A, 0x55, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xAA, 0xAA, + 0x33, 0x00, 0x00, 0xC0, 0xAA, 0xAA, 0x5A, 0x55, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x6A, 0xAA, 0xAA, 0xAA, 0xAA, 0x6A, 0xAA, 0x55, 0x55, 0x55, 0x55, 0x55, ], @@ -2096,7 +2107,7 @@ /// Sorted list of codepoint ranges (inclusive) /// that are zero-width but not `Joining_Type=Transparent` /// FIXME: can we get better compression? -static NON_TRANSPARENT_ZERO_WIDTHS: [([u8; 3], [u8; 3]); 72] = [ +static NON_TRANSPARENT_ZERO_WIDTHS: [([u8; 3], [u8; 3]); 71] = [ ([0x05, 0x06, 0x00], [0x05, 0x06, 0x00]), ([0x90, 0x08, 0x00], [0x91, 0x08, 0x00]), ([0xE2, 0x08, 0x00], [0xE2, 0x08, 0x00]), @@ -2157,7 +2168,6 @@ ([0x3D, 0x19, 0x01], [0x3D, 0x19, 0x01]), ([0x3F, 0x19, 0x01], [0x3F, 0x19, 0x01]), ([0x41, 0x19, 0x01], [0x41, 0x19, 0x01]), - ([0x3A, 0x1A, 0x01], [0x3A, 0x1A, 0x01]), ([0x84, 0x1A, 0x01], [0x89, 0x1A, 0x01]), ([0x46, 0x1D, 0x01], [0x46, 0x1D, 0x01]), ([0x02, 0x1F, 0x01], [0x02, 0x1F, 0x01]), @@ -2176,7 +2186,7 @@ /// (mostly ccc > 1). /// FIXME: can we get better compression? #[cfg(feature = "cjk")] -static SOLIDUS_TRANSPARENT: [([u8; 3], [u8; 3]); 202] = [ +static SOLIDUS_TRANSPARENT: [([u8; 3], [u8; 3]); 208] = [ ([0x00, 0x03, 0x00], [0x33, 0x03, 0x00]), ([0x39, 0x03, 0x00], [0x6F, 0x03, 0x00]), ([0x83, 0x04, 0x00], [0x87, 0x04, 0x00]), @@ -2253,7 +2263,8 @@ ([0x75, 0x1A, 0x00], [0x7C, 0x1A, 0x00]), ([0x7F, 0x1A, 0x00], [0x7F, 0x1A, 0x00]), ([0xB0, 0x1A, 0x00], [0xBD, 0x1A, 0x00]), - ([0xBF, 0x1A, 0x00], [0xCE, 0x1A, 0x00]), + ([0xBF, 0x1A, 0x00], [0xDD, 0x1A, 0x00]), + ([0xE0, 0x1A, 0x00], [0xEB, 0x1A, 0x00]), ([0x34, 0x1B, 0x00], [0x34, 0x1B, 0x00]), ([0x44, 0x1B, 0x00], [0x44, 0x1B, 0x00]), ([0x6B, 0x1B, 0x00], [0x73, 0x1B, 0x00]), @@ -2316,6 +2327,7 @@ ([0x69, 0x0D, 0x01], [0x6D, 0x0D, 0x01]), ([0x74, 0x0E, 0x01], [0x74, 0x0E, 0x01]), ([0xAB, 0x0E, 0x01], [0xAC, 0x0E, 0x01]), + ([0xFA, 0x0E, 0x01], [0xFB, 0x0E, 0x01]), ([0xFD, 0x0E, 0x01], [0xFF, 0x0E, 0x01]), ([0x46, 0x0F, 0x01], [0x50, 0x0F, 0x01]), ([0x82, 0x0F, 0x01], [0x85, 0x0F, 0x01]), @@ -2375,6 +2387,10 @@ ([0xEC, 0xE2, 0x01], [0xEF, 0xE2, 0x01]), ([0xEC, 0xE4, 0x01], [0xEF, 0xE4, 0x01]), ([0xEE, 0xE5, 0x01], [0xEF, 0xE5, 0x01]), + ([0xE3, 0xE6, 0x01], [0xE3, 0xE6, 0x01]), + ([0xE6, 0xE6, 0x01], [0xE6, 0xE6, 0x01]), + ([0xEE, 0xE6, 0x01], [0xEF, 0xE6, 0x01]), + ([0xF5, 0xE6, 0x01], [0xF5, 0xE6, 0x01]), ([0xD0, 0xE8, 0x01], [0xD6, 0xE8, 0x01]), ([0x44, 0xE9, 0x01], [0x4A, 0xE9, 0x01]), ([0x85, 0xEC, 0x01], [0x85, 0xEC, 0x01]), @@ -2749,7 +2765,7 @@ WidthInfo::TAG_A6_END_ZWJ_EMOJI_PRESENTATION, WidthInfo::KIRAT_RAI_VOWEL_SIGN_E, WidthInfo::KIRAT_RAI_VOWEL_SIGN_AI, - WidthInfo::VARIATION_SELECTOR_1_OR_2, + WidthInfo::VARIATION_SELECTOR_1_2_OR_3, WidthInfo::VARIATION_SELECTOR_15, WidthInfo::VARIATION_SELECTOR_16, WidthInfo::JOINING_GROUP_ALEF, @@ -2794,7 +2810,7 @@ WidthInfo::TAG_A6_END_ZWJ_EMOJI_PRESENTATION, WidthInfo::KIRAT_RAI_VOWEL_SIGN_E, WidthInfo::KIRAT_RAI_VOWEL_SIGN_AI, - WidthInfo::VARIATION_SELECTOR_1_OR_2, + WidthInfo::VARIATION_SELECTOR_1_2_OR_3, WidthInfo::VARIATION_SELECTOR_16, WidthInfo::JOINING_GROUP_ALEF, WidthInfo::COMBINING_LONG_SOLIDUS_OVERLAY, @@ -2814,7 +2830,7 @@ ]; #[rustfmt::skip] - static NORMALIZATION_TEST: [(&str, &str, &str, &str, &str); 19965] = [ + static NORMALIZATION_TEST: [(&str, &str, &str, &str, &str); 20034] = [ (r#"Ḋ"#, r#"Ḋ"#, r#"Ḋ"#, r#"Ḋ"#, r#"Ḋ"#), (r#"Ḍ"#, r#"Ḍ"#, r#"Ḍ"#, r#"Ḍ"#, r#"Ḍ"#), (r#"Ḍ̇"#, r#"Ḍ̇"#, r#"Ḍ̇"#, r#"Ḍ̇"#, r#"Ḍ̇"#), @@ -5199,6 +5215,7 @@ (r#"ꚜ"#, r#"ꚜ"#, r#"ꚜ"#, r#"ъ"#, r#"ъ"#), (r#"ꚝ"#, r#"ꚝ"#, r#"ꚝ"#, r#"ь"#, r#"ь"#), (r#"ꝰ"#, r#"ꝰ"#, r#"ꝰ"#, r#"ꝯ"#, r#"ꝯ"#), + (r#""#, r#""#, r#""#, r#"S"#, r#"S"#), (r#"ꟲ"#, r#"ꟲ"#, r#"ꟲ"#, r#"C"#, r#"C"#), (r#"ꟳ"#, r#"ꟳ"#, r#"ꟳ"#, r#"F"#, r#"F"#), (r#"ꟴ"#, r#"ꟴ"#, r#"ꟴ"#, r#"Q"#, r#"Q"#), @@ -20865,6 +20882,60 @@ (r#"a֮ᫍ̀̕b"#, r#"a֮ᫍ̀̕b"#, r#"a֮ᫍ̀̕b"#, r#"a֮ᫍ̀̕b"#, r#"a֮ᫍ̀̕b"#), (r#"à֮ᫎ̕b"#, r#"à֮ᫎ̕b"#, r#"à֮ᫎ̕b"#, r#"à֮ᫎ̕b"#, r#"à֮ᫎ̕b"#), (r#"a֮ᫎ̀̕b"#, r#"a֮ᫎ̀̕b"#, r#"a֮ᫎ̀̕b"#, r#"a֮ᫎ̀̕b"#, r#"a֮ᫎ̀̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#), + (r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#), + (r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"a͜͝ͅb"#, r#"a͜͝ͅb"#, r#"a͜͝ͅb"#, r#"a͜͝ͅb"#, r#"a͜͝ͅb"#), + (r#"a͜͝ͅb"#, r#"a͜͝ͅb"#, r#"a͜͝ͅb"#, r#"a͜͝ͅb"#, r#"a͜͝ͅb"#), (r#"a𖿰़᬴゙b"#, r#"a𖿰़᬴゙b"#, r#"a𖿰़᬴゙b"#, r#"a𖿰़᬴゙b"#, r#"a𖿰़᬴゙b"#), (r#"a𖿰᬴़゙b"#, r#"a𖿰᬴़゙b"#, r#"a𖿰᬴़゙b"#, r#"a𖿰᬴़゙b"#, r#"a𖿰᬴़゙b"#), (r#"a゙्᭄ְb"#, r#"a゙्᭄ְb"#, r#"a゙्᭄ְb"#, r#"a゙्᭄ְb"#, r#"a゙्᭄ְb"#), @@ -21413,6 +21484,10 @@ (r#"a֮𐺫̀̕b"#, r#"a֮𐺫̀̕b"#, r#"a֮𐺫̀̕b"#, r#"a֮𐺫̀̕b"#, r#"a֮𐺫̀̕b"#), (r#"à֮𐺬̕b"#, r#"à֮𐺬̕b"#, r#"à֮𐺬̕b"#, r#"à֮𐺬̕b"#, r#"à֮𐺬̕b"#), (r#"a֮𐺬̀̕b"#, r#"a֮𐺬̀̕b"#, r#"a֮𐺬̀̕b"#, r#"a֮𐺬̀̕b"#, r#"a֮𐺬̀̕b"#), + (r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#), + (r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#), + (r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#), + (r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#), (r#"a᷺̖𐻽֚b"#, r#"a᷺̖𐻽֚b"#, r#"a᷺̖𐻽֚b"#, r#"a᷺̖𐻽֚b"#, r#"a᷺̖𐻽֚b"#), (r#"a᷺𐻽̖֚b"#, r#"a᷺𐻽̖֚b"#, r#"a᷺𐻽̖֚b"#, r#"a᷺𐻽̖֚b"#, r#"a᷺𐻽̖֚b"#), (r#"a᷺̖𐻾֚b"#, r#"a᷺̖𐻾֚b"#, r#"a᷺̖𐻾֚b"#, r#"a᷺̖𐻾֚b"#, r#"a᷺̖𐻾֚b"#), @@ -21785,6 +21860,16 @@ (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), (r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#), (r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#, r#"a᷺̖֚b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), + (r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#, r#"à֮̕b"#), (r#"a᷺̖𞣐֚b"#, r#"a᷺̖𞣐֚b"#, r#"a᷺̖𞣐֚b"#, r#"a᷺̖𞣐֚b"#, r#"a᷺̖𞣐֚b"#), (r#"a᷺𞣐̖֚b"#, r#"a᷺𞣐̖֚b"#, r#"a᷺𞣐̖֚b"#, r#"a᷺𞣐̖֚b"#, r#"a᷺𞣐̖֚b"#), (r#"a᷺̖𞣑֚b"#, r#"a᷺̖𞣑֚b"#, r#"a᷺̖𞣑֚b"#, r#"a᷺̖𞣑֚b"#, r#"a᷺̖𞣑֚b"#),
diff --git a/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/tests/emoji-test.txt b/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/tests/emoji-test.txt index d77b118..e42fdef4 100644 --- a/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/tests/emoji-test.txt +++ b/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/tests/emoji-test.txt
@@ -1,11 +1,11 @@ # emoji-test.txt -# Date: 2024-08-14, 23:51:54 GMT -# © 2024 Unicode®, Inc. +# Date: 2025-08-04, 20:55:31 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # # Emoji Keyboard/Display Test Data for UTS #51 -# Version: 16.0 +# Version: 17.0 # # For documentation and usage, see https://www.unicode.org/reports/tr51 # @@ -14,16 +14,20 @@ # Code points — list of one or more hex code points, separated by spaces # Status # component — an Emoji_Component, -# excluding Regional_Indicators, ASCII, and non-Emoji. +# excluding Regional_Indicator, ASCII, and non-Emoji # fully-qualified — a fully-qualified emoji (see ED-18 in UTS #51), # excluding Emoji_Component # minimally-qualified — a minimally-qualified emoji (see ED-18a in UTS #51) -# unqualified — a unqualified emoji (See ED-19 in UTS #51) +# unqualified — an unqualified emoji (see ED-19 in UTS #51) # Notes: +# • A mapping of these status values to RGI_Emoji_Qualification property values +# is given by ED-28 in UTS #51. # • This includes the emoji components that need emoji presentation (skin tone and hair) # when isolated, but omits the components that need not have an emoji -# presentation when isolated. -# • The RGI set is covered by the listed fully-qualified emoji. +# presentation when isolated. See ED-20 in UTS #51 for further information. +# • The RGI emoji set corresponds to the RGI_Emoji property and contains the same sequences +# as the union of the sets of component and fully-qualified sequences in this file. +# See ED-27 in UTS #51 for further information. # • The listed minimally-qualified and unqualified cover all cases where an # element of the RGI set is missing one or more emoji presentation selectors. # • The file is in CLDR order, not codepoint order. This is recommended (but not required!) for keyboard palettes. @@ -141,6 +145,7 @@ 1F62F ; fully-qualified # 😯 E1.0 hushed face 1F632 ; fully-qualified # 😲 E0.6 astonished face 1F633 ; fully-qualified # 😳 E0.6 flushed face +1FAEA ; fully-qualified # E17.0 distorted face 1F97A ; fully-qualified # 🥺 E11.0 pleading face 1F979 ; fully-qualified # 🥹 E14.0 face holding back tears 1F626 ; fully-qualified # 😦 E1.0 frowning face with open mouth @@ -231,6 +236,7 @@ 1F48B ; fully-qualified # 💋 E0.6 kiss mark 1F4AF ; fully-qualified # 💯 E0.6 hundred points 1F4A2 ; fully-qualified # 💢 E0.6 anger symbol +1FAEF ; fully-qualified # E17.0 fight cloud 1F4A5 ; fully-qualified # 💥 E0.6 collision 1F4AB ; fully-qualified # 💫 E0.6 dizzy 1F4A6 ; fully-qualified # 💦 E0.6 sweat droplets @@ -249,8 +255,8 @@ 1F4AD ; fully-qualified # 💭 E1.0 thought balloon 1F4A4 ; fully-qualified # 💤 E0.6 ZZZ -# Smileys & Emotion subtotal: 185 -# Smileys & Emotion subtotal: 185 w/o modifiers +# Smileys & Emotion subtotal: 187 +# Smileys & Emotion subtotal: 187 w/o modifiers # group: People & Body @@ -1978,6 +1984,7 @@ 1F9DF 200D 2640 FE0F ; fully-qualified # 🧟♀️ E5.0 woman zombie 1F9DF 200D 2640 ; minimally-qualified # 🧟♀ E5.0 woman zombie 1F9CC ; fully-qualified # 🧌 E14.0 troll +1FAC8 ; fully-qualified # E17.0 hairy creature # subgroup: person-activity 1F486 ; fully-qualified # 💆 E0.6 person getting massage @@ -2502,6 +2509,12 @@ 1F3C3 1F3FF 200D 2642 200D 27A1 FE0F ; minimally-qualified # 🏃🏿♂➡️ E15.1 man running facing right: dark skin tone 1F3C3 1F3FF 200D 2642 FE0F 200D 27A1 ; minimally-qualified # 🏃🏿♂️➡ E15.1 man running facing right: dark skin tone 1F3C3 1F3FF 200D 2642 200D 27A1 ; minimally-qualified # 🏃🏿♂➡ E15.1 man running facing right: dark skin tone +1F9D1 200D 1FA70 ; fully-qualified # 🧑🩰 E17.0 ballet dancer +1F9D1 1F3FB 200D 1FA70 ; fully-qualified # 🧑🏻🩰 E17.0 ballet dancer: light skin tone +1F9D1 1F3FC 200D 1FA70 ; fully-qualified # 🧑🏼🩰 E17.0 ballet dancer: medium-light skin tone +1F9D1 1F3FD 200D 1FA70 ; fully-qualified # 🧑🏽🩰 E17.0 ballet dancer: medium skin tone +1F9D1 1F3FE 200D 1FA70 ; fully-qualified # 🧑🏾🩰 E17.0 ballet dancer: medium-dark skin tone +1F9D1 1F3FF 200D 1FA70 ; fully-qualified # 🧑🏿🩰 E17.0 ballet dancer: dark skin tone 1F483 ; fully-qualified # 💃 E0.6 woman dancing 1F483 1F3FB ; fully-qualified # 💃🏻 E1.0 woman dancing: light skin tone 1F483 1F3FC ; fully-qualified # 💃🏼 E1.0 woman dancing: medium-light skin tone @@ -2522,10 +2535,95 @@ 1F574 1F3FE ; fully-qualified # 🕴🏾 E4.0 person in suit levitating: medium-dark skin tone 1F574 1F3FF ; fully-qualified # 🕴🏿 E4.0 person in suit levitating: dark skin tone 1F46F ; fully-qualified # 👯 E0.6 people with bunny ears +1F46F 1F3FB ; fully-qualified # 👯🏻 E17.0 people with bunny ears: light skin tone +1F46F 1F3FC ; fully-qualified # 👯🏼 E17.0 people with bunny ears: medium-light skin tone +1F46F 1F3FD ; fully-qualified # 👯🏽 E17.0 people with bunny ears: medium skin tone +1F46F 1F3FE ; fully-qualified # 👯🏾 E17.0 people with bunny ears: medium-dark skin tone +1F46F 1F3FF ; fully-qualified # 👯🏿 E17.0 people with bunny ears: dark skin tone 1F46F 200D 2642 FE0F ; fully-qualified # 👯♂️ E4.0 men with bunny ears 1F46F 200D 2642 ; minimally-qualified # 👯♂ E4.0 men with bunny ears +1F46F 1F3FB 200D 2642 FE0F ; fully-qualified # 👯🏻♂️ E17.0 men with bunny ears: light skin tone +1F46F 1F3FB 200D 2642 ; minimally-qualified # 👯🏻♂ E17.0 men with bunny ears: light skin tone +1F46F 1F3FC 200D 2642 FE0F ; fully-qualified # 👯🏼♂️ E17.0 men with bunny ears: medium-light skin tone +1F46F 1F3FC 200D 2642 ; minimally-qualified # 👯🏼♂ E17.0 men with bunny ears: medium-light skin tone +1F46F 1F3FD 200D 2642 FE0F ; fully-qualified # 👯🏽♂️ E17.0 men with bunny ears: medium skin tone +1F46F 1F3FD 200D 2642 ; minimally-qualified # 👯🏽♂ E17.0 men with bunny ears: medium skin tone +1F46F 1F3FE 200D 2642 FE0F ; fully-qualified # 👯🏾♂️ E17.0 men with bunny ears: medium-dark skin tone +1F46F 1F3FE 200D 2642 ; minimally-qualified # 👯🏾♂ E17.0 men with bunny ears: medium-dark skin tone +1F46F 1F3FF 200D 2642 FE0F ; fully-qualified # 👯🏿♂️ E17.0 men with bunny ears: dark skin tone +1F46F 1F3FF 200D 2642 ; minimally-qualified # 👯🏿♂ E17.0 men with bunny ears: dark skin tone 1F46F 200D 2640 FE0F ; fully-qualified # 👯♀️ E4.0 women with bunny ears 1F46F 200D 2640 ; minimally-qualified # 👯♀ E4.0 women with bunny ears +1F46F 1F3FB 200D 2640 FE0F ; fully-qualified # 👯🏻♀️ E17.0 women with bunny ears: light skin tone +1F46F 1F3FB 200D 2640 ; minimally-qualified # 👯🏻♀ E17.0 women with bunny ears: light skin tone +1F46F 1F3FC 200D 2640 FE0F ; fully-qualified # 👯🏼♀️ E17.0 women with bunny ears: medium-light skin tone +1F46F 1F3FC 200D 2640 ; minimally-qualified # 👯🏼♀ E17.0 women with bunny ears: medium-light skin tone +1F46F 1F3FD 200D 2640 FE0F ; fully-qualified # 👯🏽♀️ E17.0 women with bunny ears: medium skin tone +1F46F 1F3FD 200D 2640 ; minimally-qualified # 👯🏽♀ E17.0 women with bunny ears: medium skin tone +1F46F 1F3FE 200D 2640 FE0F ; fully-qualified # 👯🏾♀️ E17.0 women with bunny ears: medium-dark skin tone +1F46F 1F3FE 200D 2640 ; minimally-qualified # 👯🏾♀ E17.0 women with bunny ears: medium-dark skin tone +1F46F 1F3FF 200D 2640 FE0F ; fully-qualified # 👯🏿♀️ E17.0 women with bunny ears: dark skin tone +1F46F 1F3FF 200D 2640 ; minimally-qualified # 👯🏿♀ E17.0 women with bunny ears: dark skin tone +1F9D1 1F3FB 200D 1F430 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏻🐰🧑🏼 E17.0 people with bunny ears: light skin tone, medium-light skin tone +1F9D1 1F3FB 200D 1F430 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏻🐰🧑🏽 E17.0 people with bunny ears: light skin tone, medium skin tone +1F9D1 1F3FB 200D 1F430 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏻🐰🧑🏾 E17.0 people with bunny ears: light skin tone, medium-dark skin tone +1F9D1 1F3FB 200D 1F430 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏻🐰🧑🏿 E17.0 people with bunny ears: light skin tone, dark skin tone +1F9D1 1F3FC 200D 1F430 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏼🐰🧑🏻 E17.0 people with bunny ears: medium-light skin tone, light skin tone +1F9D1 1F3FC 200D 1F430 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏼🐰🧑🏽 E17.0 people with bunny ears: medium-light skin tone, medium skin tone +1F9D1 1F3FC 200D 1F430 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏼🐰🧑🏾 E17.0 people with bunny ears: medium-light skin tone, medium-dark skin tone +1F9D1 1F3FC 200D 1F430 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏼🐰🧑🏿 E17.0 people with bunny ears: medium-light skin tone, dark skin tone +1F9D1 1F3FD 200D 1F430 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏽🐰🧑🏻 E17.0 people with bunny ears: medium skin tone, light skin tone +1F9D1 1F3FD 200D 1F430 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏽🐰🧑🏼 E17.0 people with bunny ears: medium skin tone, medium-light skin tone +1F9D1 1F3FD 200D 1F430 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏽🐰🧑🏾 E17.0 people with bunny ears: medium skin tone, medium-dark skin tone +1F9D1 1F3FD 200D 1F430 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏽🐰🧑🏿 E17.0 people with bunny ears: medium skin tone, dark skin tone +1F9D1 1F3FE 200D 1F430 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏾🐰🧑🏻 E17.0 people with bunny ears: medium-dark skin tone, light skin tone +1F9D1 1F3FE 200D 1F430 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏾🐰🧑🏼 E17.0 people with bunny ears: medium-dark skin tone, medium-light skin tone +1F9D1 1F3FE 200D 1F430 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏾🐰🧑🏽 E17.0 people with bunny ears: medium-dark skin tone, medium skin tone +1F9D1 1F3FE 200D 1F430 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏾🐰🧑🏿 E17.0 people with bunny ears: medium-dark skin tone, dark skin tone +1F9D1 1F3FF 200D 1F430 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏿🐰🧑🏻 E17.0 people with bunny ears: dark skin tone, light skin tone +1F9D1 1F3FF 200D 1F430 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏿🐰🧑🏼 E17.0 people with bunny ears: dark skin tone, medium-light skin tone +1F9D1 1F3FF 200D 1F430 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏿🐰🧑🏽 E17.0 people with bunny ears: dark skin tone, medium skin tone +1F9D1 1F3FF 200D 1F430 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏿🐰🧑🏾 E17.0 people with bunny ears: dark skin tone, medium-dark skin tone +1F468 1F3FB 200D 1F430 200D 1F468 1F3FC ; fully-qualified # 👨🏻🐰👨🏼 E17.0 men with bunny ears: light skin tone, medium-light skin tone +1F468 1F3FB 200D 1F430 200D 1F468 1F3FD ; fully-qualified # 👨🏻🐰👨🏽 E17.0 men with bunny ears: light skin tone, medium skin tone +1F468 1F3FB 200D 1F430 200D 1F468 1F3FE ; fully-qualified # 👨🏻🐰👨🏾 E17.0 men with bunny ears: light skin tone, medium-dark skin tone +1F468 1F3FB 200D 1F430 200D 1F468 1F3FF ; fully-qualified # 👨🏻🐰👨🏿 E17.0 men with bunny ears: light skin tone, dark skin tone +1F468 1F3FC 200D 1F430 200D 1F468 1F3FB ; fully-qualified # 👨🏼🐰👨🏻 E17.0 men with bunny ears: medium-light skin tone, light skin tone +1F468 1F3FC 200D 1F430 200D 1F468 1F3FD ; fully-qualified # 👨🏼🐰👨🏽 E17.0 men with bunny ears: medium-light skin tone, medium skin tone +1F468 1F3FC 200D 1F430 200D 1F468 1F3FE ; fully-qualified # 👨🏼🐰👨🏾 E17.0 men with bunny ears: medium-light skin tone, medium-dark skin tone +1F468 1F3FC 200D 1F430 200D 1F468 1F3FF ; fully-qualified # 👨🏼🐰👨🏿 E17.0 men with bunny ears: medium-light skin tone, dark skin tone +1F468 1F3FD 200D 1F430 200D 1F468 1F3FB ; fully-qualified # 👨🏽🐰👨🏻 E17.0 men with bunny ears: medium skin tone, light skin tone +1F468 1F3FD 200D 1F430 200D 1F468 1F3FC ; fully-qualified # 👨🏽🐰👨🏼 E17.0 men with bunny ears: medium skin tone, medium-light skin tone +1F468 1F3FD 200D 1F430 200D 1F468 1F3FE ; fully-qualified # 👨🏽🐰👨🏾 E17.0 men with bunny ears: medium skin tone, medium-dark skin tone +1F468 1F3FD 200D 1F430 200D 1F468 1F3FF ; fully-qualified # 👨🏽🐰👨🏿 E17.0 men with bunny ears: medium skin tone, dark skin tone +1F468 1F3FE 200D 1F430 200D 1F468 1F3FB ; fully-qualified # 👨🏾🐰👨🏻 E17.0 men with bunny ears: medium-dark skin tone, light skin tone +1F468 1F3FE 200D 1F430 200D 1F468 1F3FC ; fully-qualified # 👨🏾🐰👨🏼 E17.0 men with bunny ears: medium-dark skin tone, medium-light skin tone +1F468 1F3FE 200D 1F430 200D 1F468 1F3FD ; fully-qualified # 👨🏾🐰👨🏽 E17.0 men with bunny ears: medium-dark skin tone, medium skin tone +1F468 1F3FE 200D 1F430 200D 1F468 1F3FF ; fully-qualified # 👨🏾🐰👨🏿 E17.0 men with bunny ears: medium-dark skin tone, dark skin tone +1F468 1F3FF 200D 1F430 200D 1F468 1F3FB ; fully-qualified # 👨🏿🐰👨🏻 E17.0 men with bunny ears: dark skin tone, light skin tone +1F468 1F3FF 200D 1F430 200D 1F468 1F3FC ; fully-qualified # 👨🏿🐰👨🏼 E17.0 men with bunny ears: dark skin tone, medium-light skin tone +1F468 1F3FF 200D 1F430 200D 1F468 1F3FD ; fully-qualified # 👨🏿🐰👨🏽 E17.0 men with bunny ears: dark skin tone, medium skin tone +1F468 1F3FF 200D 1F430 200D 1F468 1F3FE ; fully-qualified # 👨🏿🐰👨🏾 E17.0 men with bunny ears: dark skin tone, medium-dark skin tone +1F469 1F3FB 200D 1F430 200D 1F469 1F3FC ; fully-qualified # 👩🏻🐰👩🏼 E17.0 women with bunny ears: light skin tone, medium-light skin tone +1F469 1F3FB 200D 1F430 200D 1F469 1F3FD ; fully-qualified # 👩🏻🐰👩🏽 E17.0 women with bunny ears: light skin tone, medium skin tone +1F469 1F3FB 200D 1F430 200D 1F469 1F3FE ; fully-qualified # 👩🏻🐰👩🏾 E17.0 women with bunny ears: light skin tone, medium-dark skin tone +1F469 1F3FB 200D 1F430 200D 1F469 1F3FF ; fully-qualified # 👩🏻🐰👩🏿 E17.0 women with bunny ears: light skin tone, dark skin tone +1F469 1F3FC 200D 1F430 200D 1F469 1F3FB ; fully-qualified # 👩🏼🐰👩🏻 E17.0 women with bunny ears: medium-light skin tone, light skin tone +1F469 1F3FC 200D 1F430 200D 1F469 1F3FD ; fully-qualified # 👩🏼🐰👩🏽 E17.0 women with bunny ears: medium-light skin tone, medium skin tone +1F469 1F3FC 200D 1F430 200D 1F469 1F3FE ; fully-qualified # 👩🏼🐰👩🏾 E17.0 women with bunny ears: medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 1F430 200D 1F469 1F3FF ; fully-qualified # 👩🏼🐰👩🏿 E17.0 women with bunny ears: medium-light skin tone, dark skin tone +1F469 1F3FD 200D 1F430 200D 1F469 1F3FB ; fully-qualified # 👩🏽🐰👩🏻 E17.0 women with bunny ears: medium skin tone, light skin tone +1F469 1F3FD 200D 1F430 200D 1F469 1F3FC ; fully-qualified # 👩🏽🐰👩🏼 E17.0 women with bunny ears: medium skin tone, medium-light skin tone +1F469 1F3FD 200D 1F430 200D 1F469 1F3FE ; fully-qualified # 👩🏽🐰👩🏾 E17.0 women with bunny ears: medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 1F430 200D 1F469 1F3FF ; fully-qualified # 👩🏽🐰👩🏿 E17.0 women with bunny ears: medium skin tone, dark skin tone +1F469 1F3FE 200D 1F430 200D 1F469 1F3FB ; fully-qualified # 👩🏾🐰👩🏻 E17.0 women with bunny ears: medium-dark skin tone, light skin tone +1F469 1F3FE 200D 1F430 200D 1F469 1F3FC ; fully-qualified # 👩🏾🐰👩🏼 E17.0 women with bunny ears: medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 1F430 200D 1F469 1F3FD ; fully-qualified # 👩🏾🐰👩🏽 E17.0 women with bunny ears: medium-dark skin tone, medium skin tone +1F469 1F3FE 200D 1F430 200D 1F469 1F3FF ; fully-qualified # 👩🏾🐰👩🏿 E17.0 women with bunny ears: medium-dark skin tone, dark skin tone +1F469 1F3FF 200D 1F430 200D 1F469 1F3FB ; fully-qualified # 👩🏿🐰👩🏻 E17.0 women with bunny ears: dark skin tone, light skin tone +1F469 1F3FF 200D 1F430 200D 1F469 1F3FC ; fully-qualified # 👩🏿🐰👩🏼 E17.0 women with bunny ears: dark skin tone, medium-light skin tone +1F469 1F3FF 200D 1F430 200D 1F469 1F3FD ; fully-qualified # 👩🏿🐰👩🏽 E17.0 women with bunny ears: dark skin tone, medium skin tone +1F469 1F3FF 200D 1F430 200D 1F469 1F3FE ; fully-qualified # 👩🏿🐰👩🏾 E17.0 women with bunny ears: dark skin tone, medium-dark skin tone 1F9D6 ; fully-qualified # 🧖 E5.0 person in steamy room 1F9D6 1F3FB ; fully-qualified # 🧖🏻 E5.0 person in steamy room: light skin tone 1F9D6 1F3FC ; fully-qualified # 🧖🏼 E5.0 person in steamy room: medium-light skin tone @@ -2889,10 +2987,95 @@ 1F938 1F3FF 200D 2640 FE0F ; fully-qualified # 🤸🏿♀️ E4.0 woman cartwheeling: dark skin tone 1F938 1F3FF 200D 2640 ; minimally-qualified # 🤸🏿♀ E4.0 woman cartwheeling: dark skin tone 1F93C ; fully-qualified # 🤼 E3.0 people wrestling +1F93C 1F3FB ; fully-qualified # 🤼🏻 E17.0 people wrestling: light skin tone +1F93C 1F3FC ; fully-qualified # 🤼🏼 E17.0 people wrestling: medium-light skin tone +1F93C 1F3FD ; fully-qualified # 🤼🏽 E17.0 people wrestling: medium skin tone +1F93C 1F3FE ; fully-qualified # 🤼🏾 E17.0 people wrestling: medium-dark skin tone +1F93C 1F3FF ; fully-qualified # 🤼🏿 E17.0 people wrestling: dark skin tone 1F93C 200D 2642 FE0F ; fully-qualified # 🤼♂️ E4.0 men wrestling 1F93C 200D 2642 ; minimally-qualified # 🤼♂ E4.0 men wrestling +1F93C 1F3FB 200D 2642 FE0F ; fully-qualified # 🤼🏻♂️ E17.0 men wrestling: light skin tone +1F93C 1F3FB 200D 2642 ; minimally-qualified # 🤼🏻♂ E17.0 men wrestling: light skin tone +1F93C 1F3FC 200D 2642 FE0F ; fully-qualified # 🤼🏼♂️ E17.0 men wrestling: medium-light skin tone +1F93C 1F3FC 200D 2642 ; minimally-qualified # 🤼🏼♂ E17.0 men wrestling: medium-light skin tone +1F93C 1F3FD 200D 2642 FE0F ; fully-qualified # 🤼🏽♂️ E17.0 men wrestling: medium skin tone +1F93C 1F3FD 200D 2642 ; minimally-qualified # 🤼🏽♂ E17.0 men wrestling: medium skin tone +1F93C 1F3FE 200D 2642 FE0F ; fully-qualified # 🤼🏾♂️ E17.0 men wrestling: medium-dark skin tone +1F93C 1F3FE 200D 2642 ; minimally-qualified # 🤼🏾♂ E17.0 men wrestling: medium-dark skin tone +1F93C 1F3FF 200D 2642 FE0F ; fully-qualified # 🤼🏿♂️ E17.0 men wrestling: dark skin tone +1F93C 1F3FF 200D 2642 ; minimally-qualified # 🤼🏿♂ E17.0 men wrestling: dark skin tone 1F93C 200D 2640 FE0F ; fully-qualified # 🤼♀️ E4.0 women wrestling 1F93C 200D 2640 ; minimally-qualified # 🤼♀ E4.0 women wrestling +1F93C 1F3FB 200D 2640 FE0F ; fully-qualified # 🤼🏻♀️ E17.0 women wrestling: light skin tone +1F93C 1F3FB 200D 2640 ; minimally-qualified # 🤼🏻♀ E17.0 women wrestling: light skin tone +1F93C 1F3FC 200D 2640 FE0F ; fully-qualified # 🤼🏼♀️ E17.0 women wrestling: medium-light skin tone +1F93C 1F3FC 200D 2640 ; minimally-qualified # 🤼🏼♀ E17.0 women wrestling: medium-light skin tone +1F93C 1F3FD 200D 2640 FE0F ; fully-qualified # 🤼🏽♀️ E17.0 women wrestling: medium skin tone +1F93C 1F3FD 200D 2640 ; minimally-qualified # 🤼🏽♀ E17.0 women wrestling: medium skin tone +1F93C 1F3FE 200D 2640 FE0F ; fully-qualified # 🤼🏾♀️ E17.0 women wrestling: medium-dark skin tone +1F93C 1F3FE 200D 2640 ; minimally-qualified # 🤼🏾♀ E17.0 women wrestling: medium-dark skin tone +1F93C 1F3FF 200D 2640 FE0F ; fully-qualified # 🤼🏿♀️ E17.0 women wrestling: dark skin tone +1F93C 1F3FF 200D 2640 ; minimally-qualified # 🤼🏿♀ E17.0 women wrestling: dark skin tone +1F9D1 1F3FB 200D 1FAEF 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏻🧑🏼 E17.0 people wrestling: light skin tone, medium-light skin tone +1F9D1 1F3FB 200D 1FAEF 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏻🧑🏽 E17.0 people wrestling: light skin tone, medium skin tone +1F9D1 1F3FB 200D 1FAEF 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏻🧑🏾 E17.0 people wrestling: light skin tone, medium-dark skin tone +1F9D1 1F3FB 200D 1FAEF 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏻🧑🏿 E17.0 people wrestling: light skin tone, dark skin tone +1F9D1 1F3FC 200D 1FAEF 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏼🧑🏻 E17.0 people wrestling: medium-light skin tone, light skin tone +1F9D1 1F3FC 200D 1FAEF 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏼🧑🏽 E17.0 people wrestling: medium-light skin tone, medium skin tone +1F9D1 1F3FC 200D 1FAEF 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏼🧑🏾 E17.0 people wrestling: medium-light skin tone, medium-dark skin tone +1F9D1 1F3FC 200D 1FAEF 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏼🧑🏿 E17.0 people wrestling: medium-light skin tone, dark skin tone +1F9D1 1F3FD 200D 1FAEF 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏽🧑🏻 E17.0 people wrestling: medium skin tone, light skin tone +1F9D1 1F3FD 200D 1FAEF 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏽🧑🏼 E17.0 people wrestling: medium skin tone, medium-light skin tone +1F9D1 1F3FD 200D 1FAEF 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏽🧑🏾 E17.0 people wrestling: medium skin tone, medium-dark skin tone +1F9D1 1F3FD 200D 1FAEF 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏽🧑🏿 E17.0 people wrestling: medium skin tone, dark skin tone +1F9D1 1F3FE 200D 1FAEF 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏾🧑🏻 E17.0 people wrestling: medium-dark skin tone, light skin tone +1F9D1 1F3FE 200D 1FAEF 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏾🧑🏼 E17.0 people wrestling: medium-dark skin tone, medium-light skin tone +1F9D1 1F3FE 200D 1FAEF 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏾🧑🏽 E17.0 people wrestling: medium-dark skin tone, medium skin tone +1F9D1 1F3FE 200D 1FAEF 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏾🧑🏿 E17.0 people wrestling: medium-dark skin tone, dark skin tone +1F9D1 1F3FF 200D 1FAEF 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏿🧑🏻 E17.0 people wrestling: dark skin tone, light skin tone +1F9D1 1F3FF 200D 1FAEF 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏿🧑🏼 E17.0 people wrestling: dark skin tone, medium-light skin tone +1F9D1 1F3FF 200D 1FAEF 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏿🧑🏽 E17.0 people wrestling: dark skin tone, medium skin tone +1F9D1 1F3FF 200D 1FAEF 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏿🧑🏾 E17.0 people wrestling: dark skin tone, medium-dark skin tone +1F468 1F3FB 200D 1FAEF 200D 1F468 1F3FC ; fully-qualified # 👨🏻👨🏼 E17.0 men wrestling: light skin tone, medium-light skin tone +1F468 1F3FB 200D 1FAEF 200D 1F468 1F3FD ; fully-qualified # 👨🏻👨🏽 E17.0 men wrestling: light skin tone, medium skin tone +1F468 1F3FB 200D 1FAEF 200D 1F468 1F3FE ; fully-qualified # 👨🏻👨🏾 E17.0 men wrestling: light skin tone, medium-dark skin tone +1F468 1F3FB 200D 1FAEF 200D 1F468 1F3FF ; fully-qualified # 👨🏻👨🏿 E17.0 men wrestling: light skin tone, dark skin tone +1F468 1F3FC 200D 1FAEF 200D 1F468 1F3FB ; fully-qualified # 👨🏼👨🏻 E17.0 men wrestling: medium-light skin tone, light skin tone +1F468 1F3FC 200D 1FAEF 200D 1F468 1F3FD ; fully-qualified # 👨🏼👨🏽 E17.0 men wrestling: medium-light skin tone, medium skin tone +1F468 1F3FC 200D 1FAEF 200D 1F468 1F3FE ; fully-qualified # 👨🏼👨🏾 E17.0 men wrestling: medium-light skin tone, medium-dark skin tone +1F468 1F3FC 200D 1FAEF 200D 1F468 1F3FF ; fully-qualified # 👨🏼👨🏿 E17.0 men wrestling: medium-light skin tone, dark skin tone +1F468 1F3FD 200D 1FAEF 200D 1F468 1F3FB ; fully-qualified # 👨🏽👨🏻 E17.0 men wrestling: medium skin tone, light skin tone +1F468 1F3FD 200D 1FAEF 200D 1F468 1F3FC ; fully-qualified # 👨🏽👨🏼 E17.0 men wrestling: medium skin tone, medium-light skin tone +1F468 1F3FD 200D 1FAEF 200D 1F468 1F3FE ; fully-qualified # 👨🏽👨🏾 E17.0 men wrestling: medium skin tone, medium-dark skin tone +1F468 1F3FD 200D 1FAEF 200D 1F468 1F3FF ; fully-qualified # 👨🏽👨🏿 E17.0 men wrestling: medium skin tone, dark skin tone +1F468 1F3FE 200D 1FAEF 200D 1F468 1F3FB ; fully-qualified # 👨🏾👨🏻 E17.0 men wrestling: medium-dark skin tone, light skin tone +1F468 1F3FE 200D 1FAEF 200D 1F468 1F3FC ; fully-qualified # 👨🏾👨🏼 E17.0 men wrestling: medium-dark skin tone, medium-light skin tone +1F468 1F3FE 200D 1FAEF 200D 1F468 1F3FD ; fully-qualified # 👨🏾👨🏽 E17.0 men wrestling: medium-dark skin tone, medium skin tone +1F468 1F3FE 200D 1FAEF 200D 1F468 1F3FF ; fully-qualified # 👨🏾👨🏿 E17.0 men wrestling: medium-dark skin tone, dark skin tone +1F468 1F3FF 200D 1FAEF 200D 1F468 1F3FB ; fully-qualified # 👨🏿👨🏻 E17.0 men wrestling: dark skin tone, light skin tone +1F468 1F3FF 200D 1FAEF 200D 1F468 1F3FC ; fully-qualified # 👨🏿👨🏼 E17.0 men wrestling: dark skin tone, medium-light skin tone +1F468 1F3FF 200D 1FAEF 200D 1F468 1F3FD ; fully-qualified # 👨🏿👨🏽 E17.0 men wrestling: dark skin tone, medium skin tone +1F468 1F3FF 200D 1FAEF 200D 1F468 1F3FE ; fully-qualified # 👨🏿👨🏾 E17.0 men wrestling: dark skin tone, medium-dark skin tone +1F469 1F3FB 200D 1FAEF 200D 1F469 1F3FC ; fully-qualified # 👩🏻👩🏼 E17.0 women wrestling: light skin tone, medium-light skin tone +1F469 1F3FB 200D 1FAEF 200D 1F469 1F3FD ; fully-qualified # 👩🏻👩🏽 E17.0 women wrestling: light skin tone, medium skin tone +1F469 1F3FB 200D 1FAEF 200D 1F469 1F3FE ; fully-qualified # 👩🏻👩🏾 E17.0 women wrestling: light skin tone, medium-dark skin tone +1F469 1F3FB 200D 1FAEF 200D 1F469 1F3FF ; fully-qualified # 👩🏻👩🏿 E17.0 women wrestling: light skin tone, dark skin tone +1F469 1F3FC 200D 1FAEF 200D 1F469 1F3FB ; fully-qualified # 👩🏼👩🏻 E17.0 women wrestling: medium-light skin tone, light skin tone +1F469 1F3FC 200D 1FAEF 200D 1F469 1F3FD ; fully-qualified # 👩🏼👩🏽 E17.0 women wrestling: medium-light skin tone, medium skin tone +1F469 1F3FC 200D 1FAEF 200D 1F469 1F3FE ; fully-qualified # 👩🏼👩🏾 E17.0 women wrestling: medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 1FAEF 200D 1F469 1F3FF ; fully-qualified # 👩🏼👩🏿 E17.0 women wrestling: medium-light skin tone, dark skin tone +1F469 1F3FD 200D 1FAEF 200D 1F469 1F3FB ; fully-qualified # 👩🏽👩🏻 E17.0 women wrestling: medium skin tone, light skin tone +1F469 1F3FD 200D 1FAEF 200D 1F469 1F3FC ; fully-qualified # 👩🏽👩🏼 E17.0 women wrestling: medium skin tone, medium-light skin tone +1F469 1F3FD 200D 1FAEF 200D 1F469 1F3FE ; fully-qualified # 👩🏽👩🏾 E17.0 women wrestling: medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 1FAEF 200D 1F469 1F3FF ; fully-qualified # 👩🏽👩🏿 E17.0 women wrestling: medium skin tone, dark skin tone +1F469 1F3FE 200D 1FAEF 200D 1F469 1F3FB ; fully-qualified # 👩🏾👩🏻 E17.0 women wrestling: medium-dark skin tone, light skin tone +1F469 1F3FE 200D 1FAEF 200D 1F469 1F3FC ; fully-qualified # 👩🏾👩🏼 E17.0 women wrestling: medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 1FAEF 200D 1F469 1F3FD ; fully-qualified # 👩🏾👩🏽 E17.0 women wrestling: medium-dark skin tone, medium skin tone +1F469 1F3FE 200D 1FAEF 200D 1F469 1F3FF ; fully-qualified # 👩🏾👩🏿 E17.0 women wrestling: medium-dark skin tone, dark skin tone +1F469 1F3FF 200D 1FAEF 200D 1F469 1F3FB ; fully-qualified # 👩🏿👩🏻 E17.0 women wrestling: dark skin tone, light skin tone +1F469 1F3FF 200D 1FAEF 200D 1F469 1F3FC ; fully-qualified # 👩🏿👩🏼 E17.0 women wrestling: dark skin tone, medium-light skin tone +1F469 1F3FF 200D 1FAEF 200D 1F469 1F3FD ; fully-qualified # 👩🏿👩🏽 E17.0 women wrestling: dark skin tone, medium skin tone +1F469 1F3FF 200D 1FAEF 200D 1F469 1F3FE ; fully-qualified # 👩🏿👩🏾 E17.0 women wrestling: dark skin tone, medium-dark skin tone 1F93D ; fully-qualified # 🤽 E3.0 person playing water polo 1F93D 1F3FB ; fully-qualified # 🤽🏻 E3.0 person playing water polo: light skin tone 1F93D 1F3FC ; fully-qualified # 🤽🏼 E3.0 person playing water polo: medium-light skin tone @@ -3577,8 +3760,8 @@ 1F463 ; fully-qualified # 👣 E0.6 footprints 1FAC6 ; fully-qualified # E16.0 fingerprint -# People & Body subtotal: 3291 -# People & Body subtotal: 561 w/o modifiers +# People & Body subtotal: 3468 +# People & Body subtotal: 563 w/o modifiers # group: Component @@ -3712,6 +3895,7 @@ 1F433 ; fully-qualified # 🐳 E0.6 spouting whale 1F40B ; fully-qualified # 🐋 E1.0 whale 1F42C ; fully-qualified # 🐬 E0.6 dolphin +1FACD ; fully-qualified # E17.0 orca 1F9AD ; fully-qualified # 🦭 E13.0 seal 1F41F ; fully-qualified # 🐟 E0.6 fish 1F420 ; fully-qualified # 🐠 E0.6 tropical fish @@ -3782,8 +3966,8 @@ 1F344 ; fully-qualified # 🍄 E0.6 mushroom 1FABE ; fully-qualified # E16.0 leafless tree -# Animals & Nature subtotal: 166 -# Animals & Nature subtotal: 166 w/o modifiers +# Animals & Nature subtotal: 167 +# Animals & Nature subtotal: 167 w/o modifiers # group: Food & Drink @@ -3954,6 +4138,7 @@ 1F3D4 ; unqualified # 🏔 E0.7 snow-capped mountain 26F0 FE0F ; fully-qualified # ⛰️ E0.7 mountain 26F0 ; unqualified # ⛰ E0.7 mountain +1F6D8 ; fully-qualified # E17.0 landslide 1F30B ; fully-qualified # 🌋 E0.6 volcano 1F5FB ; fully-qualified # 🗻 E0.6 mount fuji 1F3D5 FE0F ; fully-qualified # 🏕️ E0.7 camping @@ -4228,8 +4413,8 @@ 1F4A7 ; fully-qualified # 💧 E0.6 droplet 1F30A ; fully-qualified # 🌊 E0.6 water wave -# Travel & Places subtotal: 267 -# Travel & Places subtotal: 267 w/o modifiers +# Travel & Places subtotal: 268 +# Travel & Places subtotal: 268 w/o modifiers # group: Activities @@ -4423,10 +4608,11 @@ # subgroup: musical-instrument 1F3B7 ; fully-qualified # 🎷 E0.6 saxophone +1F3BA ; fully-qualified # 🎺 E0.6 trumpet +1FA8A ; fully-qualified # E17.0 trombone 1FA97 ; fully-qualified # 🪗 E13.0 accordion 1F3B8 ; fully-qualified # 🎸 E0.6 guitar 1F3B9 ; fully-qualified # 🎹 E0.6 musical keyboard -1F3BA ; fully-qualified # 🎺 E0.6 trumpet 1F3BB ; fully-qualified # 🎻 E0.6 violin 1FA95 ; fully-qualified # 🪕 E12.0 banjo 1F941 ; fully-qualified # 🥁 E3.0 drum @@ -4508,8 +4694,9 @@ 1F3F7 ; unqualified # 🏷 E0.7 label # subgroup: money -1F4B0 ; fully-qualified # 💰 E0.6 money bag 1FA99 ; fully-qualified # 🪙 E13.0 coin +1F4B0 ; fully-qualified # 💰 E0.6 money bag +1FA8E ; fully-qualified # E17.0 treasure chest 1F4B4 ; fully-qualified # 💴 E0.6 yen banknote 1F4B5 ; fully-qualified # 💵 E0.6 dollar banknote 1F4B6 ; fully-qualified # 💶 E1.0 euro banknote @@ -4694,8 +4881,8 @@ 1FAA7 ; fully-qualified # 🪧 E13.0 placard 1FAAA ; fully-qualified # 🪪 E14.0 identification card -# Objects subtotal: 314 -# Objects subtotal: 314 w/o modifiers +# Objects subtotal: 316 +# Objects subtotal: 316 w/o modifiers # group: Symbols @@ -5323,8 +5510,8 @@ # Flags subtotal: 276 w/o modifiers # Status Counts -# fully-qualified : 3781 -# minimally-qualified : 1009 +# fully-qualified : 3944 +# minimally-qualified : 1029 # unqualified : 243 # component : 9
diff --git a/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/tests/tests.rs b/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/tests/tests.rs index 776f76a..61926a7 100644 --- a/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/tests/tests.rs +++ b/third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/tests/tests.rs
@@ -598,9 +598,10 @@ } #[test] -fn test_vs1_vs2() { +fn test_vs1_vs2_vs3() { assert_width!('\u{FE00}', Some(0), Some(0)); assert_width!('\u{FE01}', Some(0), Some(0)); + assert_width!('\u{FE02}', Some(0), Some(0)); for c in '\0'..=char::MAX { if matches!(c, '\u{2018}' | '\u{2019}' | '\u{201C}' | '\u{201D}') { assert_width!(c, Some(1), Some(2)); @@ -608,6 +609,8 @@ assert_width!(format!("{c}\u{FE00}\u{FE01}"), 1, 1); assert_width!(format!("{c}\u{FE01}"), 2, 2); assert_width!(format!("{c}\u{FE01}\u{FE00}"), 2, 2); + assert_width!(format!("{c}\u{FE02}"), 1, 1); + assert_width!(format!("{c}\u{FE02}\u{FE01}"), 1, 1); } else { assert_eq!( format!("{c}\u{FE00}").width(), @@ -631,6 +634,17 @@ c.width_cjk().unwrap_or(1), "{c:?}" ); + assert_eq!( + format!("{c}\u{FE02}").width(), + c.width().unwrap_or(1), + "{c:?}" + ); + #[cfg(feature = "cjk")] + assert_eq!( + format!("{c}\u{FE02}").width_cjk(), + c.width_cjk().unwrap_or(1), + "{c:?}" + ); } } }
diff --git a/third_party/rust/chromium_crates_io/vendor/xml-v1/.cargo_vcs_info.json b/third_party/rust/chromium_crates_io/vendor/xml-v1/.cargo_vcs_info.json index 3a7193d..417ee27 100644 --- a/third_party/rust/chromium_crates_io/vendor/xml-v1/.cargo_vcs_info.json +++ b/third_party/rust/chromium_crates_io/vendor/xml-v1/.cargo_vcs_info.json
@@ -1,6 +1,6 @@ { "git": { - "sha1": "c4a9653d177d7cf98885764fc69a199768b6e009" + "sha1": "9b78ddfd9a5208c6611e6b7b72c557dd1b4d4d6f" }, "path_in_vcs": "" } \ No newline at end of file
diff --git a/third_party/rust/chromium_crates_io/vendor/xml-v1/Cargo.lock b/third_party/rust/chromium_crates_io/vendor/xml-v1/Cargo.lock index 7bbbcf0..d8101ed 100644 --- a/third_party/rust/chromium_crates_io/vendor/xml-v1/Cargo.lock +++ b/third_party/rust/chromium_crates_io/vendor/xml-v1/Cargo.lock
@@ -4,4 +4,4 @@ [[package]] name = "xml" -version = "1.0.0" +version = "1.0.1"
diff --git a/third_party/rust/chromium_crates_io/vendor/xml-v1/Cargo.toml b/third_party/rust/chromium_crates_io/vendor/xml-v1/Cargo.toml index a0d400a..8c790d84 100644 --- a/third_party/rust/chromium_crates_io/vendor/xml-v1/Cargo.toml +++ b/third_party/rust/chromium_crates_io/vendor/xml-v1/Cargo.toml
@@ -13,7 +13,7 @@ edition = "2021" rust-version = "1.70" name = "xml" -version = "1.0.0" +version = "1.0.1" authors = [ "Vladimir Matveev <vmatveev@citrine.cc>", "Kornel (https://github.com/kornelski)", @@ -30,8 +30,8 @@ autotests = false autobenches = false description = "An XML library in pure Rust" -homepage = "https://lib.rs/crates/xml-rs" -documentation = "https://docs.rs/xml-rs/" +homepage = "https://lib.rs/crates/xml" +documentation = "https://docs.rs/xml/" readme = "README.md" keywords = [ "xml",
diff --git a/third_party/rust/chromium_crates_io/vendor/xml-v1/Cargo.toml.orig b/third_party/rust/chromium_crates_io/vendor/xml-v1/Cargo.toml.orig index 537cacc..5777d08 100644 --- a/third_party/rust/chromium_crates_io/vendor/xml-v1/Cargo.toml.orig +++ b/third_party/rust/chromium_crates_io/vendor/xml-v1/Cargo.toml.orig
@@ -1,12 +1,12 @@ [package] name = "xml" -version = "1.0.0" +version = "1.0.1" authors = ["Vladimir Matveev <vmatveev@citrine.cc>", "Kornel (https://github.com/kornelski)"] license = "MIT" description = "An XML library in pure Rust" repository = "https://github.com/kornelski/xml-rs" -homepage = "https://lib.rs/crates/xml-rs" -documentation = "https://docs.rs/xml-rs/" +homepage = "https://lib.rs/crates/xml" +documentation = "https://docs.rs/xml/" readme = "README.md" keywords = ["xml", "parser", "sax", "event-reader", "writer"] categories = ["parser-implementations"] @@ -14,10 +14,6 @@ rust-version = "1.70" include = ["src/**", "LICENSE", "README.md"] -[lib] -name = "xml" -path = "src/lib.rs" - [badges] maintenance = { status = "actively-developed" }
diff --git a/third_party/rust/chromium_crates_io/vendor/xml-v1/OWNERS b/third_party/rust/chromium_crates_io/vendor/xml-v1/OWNERS new file mode 100644 index 0000000..c198e6c --- /dev/null +++ b/third_party/rust/chromium_crates_io/vendor/xml-v1/OWNERS
@@ -0,0 +1,2 @@ +# This file has been auto-generated by the `gnrt` tool. +file://third_party/rust/xml/OWNERS
diff --git a/third_party/rust/chromium_crates_io/vendor/xml-v1/README.md b/third_party/rust/chromium_crates_io/vendor/xml-v1/README.md index 1b84a4d..d5ddfd7c 100644 --- a/third_party/rust/chromium_crates_io/vendor/xml-v1/README.md +++ b/third_party/rust/chromium_crates_io/vendor/xml-v1/README.md
@@ -2,10 +2,10 @@ =============================== [](https://github.com/kornelski/xml-rs/actions/workflows/main.yml) -[![crates.io][crates-io-img]](https://lib.rs/crates/xml-rs) -[![docs][docs-img]](https://docs.rs/xml-rs/) +[![crates.io][crates-io-img]](https://lib.rs/crates/xml) +[![docs][docs-img]](https://docs.rs/xml/) -[Documentation](https://docs.rs/xml-rs/) +[Documentation](https://docs.rs/xml/) [crates-io-img]: https://img.shields.io/crates/v/xml-rs.svg [docs-img]: https://img.shields.io/badge/docs-latest%20release-6495ed.svg @@ -63,7 +63,7 @@ [`xml::reader::EventReader`](EventReader) requires a [`Read`](stdread) instance to read from. It can be a `File` wrapped in `BufReader`, or a `Vec<u8>`, or a `&[u8]` slice. -[EventReader]: https://docs.rs/xml-rs/latest/xml/reader/struct.EventReader.html +[EventReader]: https://docs.rs/xml/latest/xml/reader/struct.EventReader.html [stdread]: https://doc.rust-lang.org/stable/std/io/trait.Read.html `EventReader` implements `IntoIterator` trait, so you can use it in a `for` loop directly: @@ -94,7 +94,7 @@ eprintln!("Error: {e}"); break; } - // There's more: https://docs.rs/xml-rs/latest/xml/reader/enum.XmlEvent.html + // There's more: https://docs.rs/xml/latest/xml/reader/enum.XmlEvent.html _ => {} } } @@ -122,7 +122,7 @@ It is also possible to tweak parsing process a little using [`xml::reader::ParserConfig`][ParserConfig] structure. See its documentation for more information and examples. -[ParserConfig]: https://docs.rs/xml-rs/latest/xml/reader/struct.ParserConfig.html +[ParserConfig]: https://docs.rs/xml/latest/xml/reader/struct.ParserConfig.html You can find a more extensive example of using `EventReader` in `src/analyze.rs`, which is a small program (BTW, it is built with `cargo build` and can be run after that) which shows various @@ -202,12 +202,12 @@ Of course, one can create `XmlEvent` enum variants directly instead of using the builder DSL. There are more examples in [`xml::writer::XmlEvent`][XmlEvent] documentation. -[XmlEvent]: https://docs.rs/xml-rs/latest/xml/reader/enum.XmlEvent.html +[XmlEvent]: https://docs.rs/xml/latest/xml/reader/enum.XmlEvent.html The writer has multiple configuration options; see `EmitterConfig` documentation for more information. -[EmitterConfig]: https://docs.rs/xml-rs/latest/xml/writer/struct.EmitterConfig.html +[EmitterConfig]: https://docs.rs/xml/latest/xml/writer/struct.EmitterConfig.html Bug reports ------------
diff --git a/third_party/rust/chromium_crates_io/vendor/xml-v1/src/reader/lexer.rs b/third_party/rust/chromium_crates_io/vendor/xml-v1/src/reader/lexer.rs index 188eab0e9f..c1c2ca1 100644 --- a/third_party/rust/chromium_crates_io/vendor/xml-v1/src/reader/lexer.rs +++ b/third_party/rust/chromium_crates_io/vendor/xml-v1/src/reader/lexer.rs
@@ -470,7 +470,6 @@ '?' => self.move_to(State::ProcessingInstructionClosing), '<' => Some(Token::OpeningTagStart), '>' => Some(Token::TagEnd), - '/' => Some(Token::ClosingTagStart), '=' => Some(Token::EqualsSign), '"' => Some(Token::DoubleQuote), '\'' => Some(Token::SingleQuote),
diff --git a/third_party/rust/unicode_width/v0_2/BUILD.gn b/third_party/rust/unicode_width/v0_2/BUILD.gn index 7ce696d3..788033d 100644 --- a/third_party/rust/unicode_width/v0_2/BUILD.gn +++ b/third_party/rust/unicode_width/v0_2/BUILD.gn
@@ -26,7 +26,7 @@ cargo_pkg_name = "unicode-width" cargo_pkg_description = "Determine displayed width of `char` and `str` types according to Unicode Standard Annex #11 rules." cargo_pkg_repository = "https://github.com/unicode-rs/unicode-width" - cargo_pkg_version = "0.2.1" + cargo_pkg_version = "0.2.2" allow_unsafe = false
diff --git a/third_party/rust/unicode_width/v0_2/README.chromium b/third_party/rust/unicode_width/v0_2/README.chromium index 3b31c102..6428d90 100644 --- a/third_party/rust/unicode_width/v0_2/README.chromium +++ b/third_party/rust/unicode_width/v0_2/README.chromium
@@ -1,7 +1,7 @@ Name: unicode-width URL: https://crates.io/crates/unicode-width -Version: 0.2.1 -Revision: 0085e91db72ae9a4498e62030d9651f1c1d09b4f +Version: 0.2.2 +Revision: 9d98411769fe13c7c18cab0b3fbbab29ba8350ea Update Mechanism: Manual (https://crbug.com/449898466) License: Apache-2.0 License File: //third_party/rust/chromium_crates_io/vendor/unicode-width-v0_2/LICENSE-APACHE
diff --git a/third_party/rust/xml/v1/BUILD.gn b/third_party/rust/xml/v1/BUILD.gn index 67bdf4e4..b56443a 100644 --- a/third_party/rust/xml/v1/BUILD.gn +++ b/third_party/rust/xml/v1/BUILD.gn
@@ -51,7 +51,7 @@ cargo_pkg_name = "xml" cargo_pkg_description = "An XML library in pure Rust" cargo_pkg_repository = "https://github.com/kornelski/xml-rs" - cargo_pkg_version = "1.0.0" + cargo_pkg_version = "1.0.1" allow_unsafe = false
diff --git a/third_party/rust/xml/v1/README.chromium b/third_party/rust/xml/v1/README.chromium index 4660d19e..72de54d 100644 --- a/third_party/rust/xml/v1/README.chromium +++ b/third_party/rust/xml/v1/README.chromium
@@ -1,7 +1,7 @@ Name: xml URL: https://crates.io/crates/xml -Version: 1.0.0 -Revision: c4a9653d177d7cf98885764fc69a199768b6e009 +Version: 1.0.1 +Revision: 9b78ddfd9a5208c6611e6b7b72c557dd1b4d4d6f Update Mechanism: Manual (https://crbug.com/449898466) License: MIT License File: //third_party/rust/chromium_crates_io/vendor/xml-v1/LICENSE
diff --git a/third_party/vulkan-deps b/third_party/vulkan-deps index b10e3ee..58c67380 160000 --- a/third_party/vulkan-deps +++ b/third_party/vulkan-deps
@@ -1 +1 @@ -Subproject commit b10e3ee329697e6e9aa186c135aa241a8889352b +Subproject commit 58c67380fb299c019ac5d2003168baebce0b1a64
diff --git a/third_party/vulkan-validation-layers/src b/third_party/vulkan-validation-layers/src index be9745e..230079d 160000 --- a/third_party/vulkan-validation-layers/src +++ b/third_party/vulkan-validation-layers/src
@@ -1 +1 @@ -Subproject commit be9745e8019aac26785339c366ea8ea1c0bd87e5 +Subproject commit 230079d279da34e2b3bb19d4b28a7947ef760086
diff --git a/third_party/webrtc b/third_party/webrtc index e311af0..91d5680 160000 --- a/third_party/webrtc +++ b/third_party/webrtc
@@ -1 +1 @@ -Subproject commit e311af088e81d4f545696d1162dbbc02cd146f2e +Subproject commit 91d56800aaf10a457cdaaffc745329728e7b0989
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml index ea6088c..ab7146b 100644 --- a/tools/metrics/actions/actions.xml +++ b/tools/metrics/actions/actions.xml
@@ -14104,6 +14104,15 @@ </description> </action> +<action name="GlicOsEntrypoint.ContextMenuSelection.ToggleGlic"> + <owner>agale@chromium.org</owner> + <owner>erikchen@chromium.org</owner> + <description> + Tracks clicks on the toggle glic option from the glic os launcher context + menu. + </description> +</action> + <action name="GlicOsEntrypoint.Settings.ShortcutDisabled"> <owner>pauladedeji@google.com</owner> <owner>erikchen@chromium.org</owner>
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index b0d4a93..68c9560 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -5512,8 +5512,11 @@ <int value="-2147174366" label="MSPR_E_NEEDS_INDIVIDUALIZATION"/> <int value="-2147174354" label="MSPR_E_UNABLE_TO_OPEN_DATA_STORE"/> <int value="-2147174250" label="MSPR_E_NO_DECRYPTOR_AVAILABLE"/> + <int value="-2147174206" label="MSPR_E_INVALID_H264_CONTENT (0x8004B8C2)"/> <int value="-2147174205" label="MSPR_E_CDM_PERSISTENT_LICENSE_NOT_ALLOWED (0x8004B8C3)"/> + <int value="-2147174190" + label="MSPR_E_AES_SIXTEEN_BYTE_IVS_NOT_SUPPORTED (0x8004B8D2)"/> <int value="-2147174189" label="MSPR_E_SAMPLE_ENCRYPTION_TYPE_DOES_NOT_MATCH_LICENSE (0x8004B8D3)"/> @@ -5526,6 +5529,8 @@ <int value="-2147169008" label="DRM_E_TEE_INVALID_KEY_DATA"/> <int value="-2147169006" label="DRM_E_TEE_INVALID_HWDRM_STATE"/> <int value="-2147169004" label="DRM_E_TEE_CLOCK_NOT_SET"/> + <int value="-2147168998" + label="DRM_E_TEE_PROXY_INVALID_SERIALIZATION_MESSAGE (0x8004CD1A)"/> <int value="-2147168990" label="DRM_E_TEE_OUTPUT_PROTECTION_REQUIREMENTS_NOT_MET"/> <int value="-2147168256" label="DRM_E_NONCE_STORE_TOKEN_NOT_FOUND"/> @@ -6031,6 +6036,8 @@ <int value="-1072843853" label="MF_E_MEDIA_EXTENSION_PACKAGE_LICENSE_INVALID"/> <int value="-1071241984" label="ERROR_GRAPHICS_OPM_NOT_SUPPORTED"/> + <int value="-1071241965" + label="ERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_HDCP (0xC0262513)"/> <int value="-805306212" label="STATUS_DEVICE_DATA_ERROR"/> <int value="-805305979" label="STATUS_IO_DEVICE_ERROR"/> <int value="0" label="S_OK"/> @@ -10835,7 +10842,6 @@ <int value="-1221040370" label="OsSettingsAppBadgingToggle:enabled"/> <int value="-1220675698" label="OmniboxDeferredKeyboardPopup:enabled"/> <int value="-1219547098" label="SearchWebInSidePanel:disabled"/> - <int value="-1219199728" label="FormFactorUseMaxWindowMetrics:disabled"/> <int value="-1218608640" label="disable-offline-load-stale-cache"/> <int value="-1218110631" label="NtpMostRelevantTabResumptionModuleFallbackToHost:enabled"/> @@ -12082,6 +12088,8 @@ <int value="-766805224" label="MirroringService:enabled"/> <int value="-766199617" label="ReadAloudInOverflowMenuInCCT:enabled"/> <int value="-765669184" label="LauncherNudgeShortInterval:disabled"/> + <int value="-765531607" + label="ReadAnythingReadAloudTSTextSegmentation:disabled"/> <int value="-765417607" label="KeyboardLockPrompt:disabled"/> <int value="-764463072" label="WebViewMixedContentAutoupgrades:disabled"/> <int value="-764363697" label="OmniboxForceAllowedToBeDefault:disabled"/> @@ -13235,6 +13243,7 @@ <int value="-349437334" label="UseDdljsonApi:disabled"/> <int value="-349380607" label="AndroidNightMode:disabled"/> <int value="-349057743" label="extensions-on-chrome-urls"/> + <int value="-348995574" label="RefactorMinWidthContextOverride:disabled"/> <int value="-348720922" label="FedCmIdpSigninStatusEnabled:enabled"/> <int value="-348408686" label="CryptographyComplianceCnsa:enabled"/> <int value="-348141551" label="IgnoreUiGains:enabled"/> @@ -13875,6 +13884,7 @@ <int value="-124291249" label="HistoryOptInEducationalTip:disabled"/> <int value="-124235074" label="IOSPromoPaymentBubble:enabled"/> <int value="-123599761" label="IncludeIpcOverheadInNavigationStart:disabled"/> + <int value="-123103820" label="RefactorMinWidthContextOverride:enabled"/> <int value="-122886597" label="TopControlsRefactorV2:disabled"/> <int value="-122557051" label="SafetyHubUnifiedPasswordsModule:disabled"/> <int value="-122492389" label="enable-browser-task-scheduler"/> @@ -15026,6 +15036,8 @@ <int value="288755982" label="AutofillEnableLocalCardMigrationForNonSyncUser:enabled"/> <int value="288826415" label="SecurePaymentConfirmationUxRefresh:enabled"/> + <int value="289071378" + label="ReadAnythingReadAloudTSTextSegmentation:enabled"/> <int value="289408715" label="MacImeLiveConversionFix:enabled"/> <int value="289465857" label="ClipboardHistorySimpleRender:disabled"/> <int value="290559997" label="LinkCapturingUiUpdate:disabled"/> @@ -19266,7 +19278,6 @@ <int value="1785093465" label="enable-document-passive-event-listeners"/> <int value="1785274337" label="AutofillEnableOfferNotificationCrossTabTracking:disabled"/> - <int value="1785343459" label="FormFactorUseMaxWindowMetrics:enabled"/> <int value="1785884719" label="TabGroupHome:enabled"/> <int value="1785914867" label="DeprecateOldKeyboardShortcutsAccelerator:disabled"/>
diff --git a/tools/metrics/histograms/metadata/android/histograms.xml b/tools/metrics/histograms/metadata/android/histograms.xml index bfe1343..ef9fc79 100644 --- a/tools/metrics/histograms/metadata/android/histograms.xml +++ b/tools/metrics/histograms/metadata/android/histograms.xml
@@ -5504,6 +5504,17 @@ </summary> </histogram> +<histogram name="Android.TabletDeterminationMismatch" enum="Boolean" + expires_after="2026-05-01"> + <owner>skavuluru@google.com</owner> + <owner>clank-large-form-factors@google.com</owner> + <summary> + Records whether the tablet determination logic via resource loading and + display properties is different. This is recorded once per activity lifespan + during startup (attachBaseContext). + </summary> +</histogram> + <histogram name="Android.TabMultiSelectV2.BookmarkTabsCount" units="count" expires_after="2026-03-01"> <owner>ckitagawa@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/blink/enums.xml b/tools/metrics/histograms/metadata/blink/enums.xml index ce6b109..aebff42 100644 --- a/tools/metrics/histograms/metadata/blink/enums.xml +++ b/tools/metrics/histograms/metadata/blink/enums.xml
@@ -8617,6 +8617,7 @@ <int value="409" label="WebxrLightingEstimation"/> <int value="410" label="Reporting"/> <int value="411" label="FontLanguageOverride"/> + <int value="412" label="Webnn"/> </enum> <!-- LINT.ThenChange(//third_party/blink/public/mojom/use_counter/metrics/webdx_feature.mojom:WebDXFeature) -->
diff --git a/tools/metrics/histograms/metadata/glic/histograms.xml b/tools/metrics/histograms/metadata/glic/histograms.xml index b146fb6..0ba554a 100644 --- a/tools/metrics/histograms/metadata/glic/histograms.xml +++ b/tools/metrics/histograms/metadata/glic/histograms.xml
@@ -22,12 +22,23 @@ <histograms> +<variants name="PanelEvent"> + <variant name="OnClose" summary="the glic panel is closed."/> + <variant name="OnOpen" summary="the glic panel is opened."/> +</variants> + <variants name="WebClientMode"> <variant name="Audio" summary="audio input mode"/> <variant name="Text" summary="text input mode"/> <variant name="Unknown" summary="an unknown mode"/> </variants> +<variants name="WebClientModeWithAll"> + <variant name="All"/> + <variant name="Audio"/> + <variant name="Text"/> +</variants> + <histogram name="Glic.Actor.JournalEvent.{EventType}" units="ms" expires_after="2026-08-29"> <owner>dtapuska@google.com</owner> @@ -664,18 +675,6 @@ </summary> </histogram> -<histogram name="Glic.PageContextFetcher.GetContextEligibility" units="ms" - expires_after="2026-01-15"> - <owner>carlosk@chromium.org</owner> - <owner>harringtond@chromium.org</owner> - <owner>erikchen@chromium.org</owner> - <owner>sophiechang@chromium.org</owner> - <summary> - Recorded when a page context gets context eligibility. Measure the time from - start. - </summary> -</histogram> - <histogram name="Glic.PageContextFetcher.GetEncodedScreenshot" units="ms" expires_after="2026-03-22"> <owner>carlosk@chromium.org</owner> @@ -752,21 +751,6 @@ </summary> </histogram> -<histogram name="Glic.PanelPresentationTime.{InputMode}" units="ms" - expires_after="2026-04-30"> - <owner>dewittj@google.com</owner> - <owner>iwells@google.com</owner> - <summary> - After glic is triggered, measure how long it takes to show the glic panel - using the {InputMode} mode. Desktop Chrome only (Windows and Mac). - </summary> - <token key="InputMode"> - <variant name="All"/> - <variant name="Audio"/> - <variant name="Text"/> - </token> -</histogram> - <histogram name="Glic.PanelPresentationTime2.{InputMode}" units="ms" expires_after="2026-03-22"> <owner>dewittj@google.com</owner> @@ -776,11 +760,7 @@ using the {InputMode} mode excluding the cases that require re-authentication. Desktop Chrome only (Windows and Mac). </summary> - <token key="InputMode"> - <variant name="All"/> - <variant name="Audio"/> - <variant name="Text"/> - </token> + <token key="InputMode" variants="WebClientModeWithAll"/> </histogram> <histogram name="Glic.PanelWebUi.ElapsedTimeBetweenSessions" units="seconds" @@ -882,13 +862,10 @@ <owner>andreaxg@google.com</owner> <owner>iwells@google.com</owner> <summary> - Record the percent overlap of Glic with the active Chrome window. Rounded to - the nearest 10%. {Event} + Record the percent overlap of the Glic panel with the active Chrome window. + Rounded to the nearest 10%. Recorded when {Event}. </summary> - <token key="Event"> - <variant name="OnClose" summary="Recorded when the glic window is closed."/> - <variant name="OnOpen" summary="Recorded when the glic window is opened."/> - </token> + <token key="Event" variants="PanelEvent"/> </histogram> <histogram name="Glic.PositionOnChrome.{Event}" enum="ChromeRelativePosition" @@ -896,33 +873,22 @@ <owner>andreaxg@google.com</owner> <owner>iwells@google.com</owner> <summary> - Record the position of the glic window's center point relative to the active - Chrome window. {Event} + Record the position of the glic panel's center point relative to the active + Chrome window. Recorded when {Event}. </summary> - <token key="Event"> - <variant name="OnClose" summary="Recorded when the glic window is closed."/> - <variant name="OnOpen" summary="Recorded when the glic window is opened."/> - </token> + <token key="Event" variants="PanelEvent"/> </histogram> -<histogram name="Glic.PositionOnDisplay.OnClose" enum="DisplayPosition" +<histogram name="Glic.PositionOnDisplay.{Event}" enum="DisplayPosition" expires_after="2026-03-22"> <owner>andreaxg@google.com</owner> <owner>iwells@google.com</owner> <summary> - Record the position of the glic window on close relative to the current - display. The value Unknown is not expected to be recorded but is a backup. + Record the position of the glic panel relative to the current display where + it's shown. The value Unknown is not expected to be recorded but is a + backup. Recorded when {Event}. </summary> -</histogram> - -<histogram name="Glic.PositionOnDisplay.OnOpen" enum="DisplayPosition" - expires_after="2026-03-22"> - <owner>andreaxg@google.com</owner> - <owner>iwells@google.com</owner> - <summary> - Record the position of the glic window on open relative to the display glic - opens in. The value Unknown is not expected to be recorded but is a backup. - </summary> + <token key="Event" variants="PanelEvent"/> </histogram> <histogram name="Glic.Prewarming.ChecksResult" @@ -1029,64 +995,39 @@ </summary> </histogram> -<histogram name="Glic.Response.StartTime.InputMode.Audio" units="ms" +<histogram name="Glic.Response.StartTime.InputMode.{Mode}" units="ms" expires_after="2026-03-22"> <owner>carlosk@chromium.org</owner> <owner>harringtond@chromium.org</owner> <owner>erikchen@chromium.org</owner> <summary> - Recorded when a response starts and was visible and the input mode was - audio. Measures the time from a user's submitted input until a response - starts and was visible to the user. + Recorded when a response starts being presented to the user in {Mode}. + Measures the time from when the user submitted input until a response starts + being presented to the user. </summary> + <token key="Mode" variants="WebClientMode"/> </histogram> -<histogram name="Glic.Response.StartTime.InputMode.Text" units="ms" +<histogram name="Glic.Response.StartTime.{ContextStatus}" units="ms" expires_after="2026-03-22"> <owner>carlosk@chromium.org</owner> <owner>harringtond@chromium.org</owner> <owner>erikchen@chromium.org</owner> <summary> - Recorded when a response starts and was visible and the input mode was text. - Measures the time from a user's submitted input until a response starts and - was visible to the user. - </summary> -</histogram> + Recorded when a response starts being presented to the user and + {ContextStatus} (*). Measures the time from when the user submitted input + until a response starts being presented to the user. This is reported for + all web client modes (text or audio). -<histogram name="Glic.Response.StartTime.InputMode.Unknown" units="ms" - expires_after="2026-01-15"> - <owner>carlosk@chromium.org</owner> - <owner>harringtond@chromium.org</owner> - <owner>erikchen@chromium.org</owner> - <summary> - Recorded when a response starts and was visible and the input mode was - unknown. Measures the time from a user's submitted input until a response - starts and was visible to the user. + (*) Chrome knows if context was or was not requested by the web client, but + not if it was actually included in any requests. </summary> -</histogram> - -<histogram name="Glic.Response.StartTime.WithContext" units="ms" - expires_after="2026-03-22"> - <owner>carlosk@chromium.org</owner> - <owner>harringtond@chromium.org</owner> - <owner>erikchen@chromium.org</owner> - <summary> - Recorded when a response starts and was visible and context was attached. - Measures the time from a user's submitted input until a response starts and - was visible to the user. - </summary> -</histogram> - -<histogram name="Glic.Response.StartTime.WithoutContext" units="ms" - expires_after="2026-03-22"> - <owner>carlosk@chromium.org</owner> - <owner>harringtond@chromium.org</owner> - <owner>erikchen@chromium.org</owner> - <summary> - Recorded when a response starts and was visible and context was attached. - Measures the time from a user's submitted input until a response starts and - was visible to the user. - </summary> + <token key="ContextStatus"> + <variant name="WithContext" + summary="context was requested by the web client"/> + <variant name="WithoutContext" + summary="context was NOT requested by the web client"/> + </token> </histogram> <histogram name="Glic.Response.StopTime{Cause}" units="ms" @@ -1174,18 +1115,15 @@ </summary> </histogram> -<histogram name="Glic.ScrollTo.UserPromptToScrollTime.{InputMode}" units="ms" +<histogram name="Glic.ScrollTo.UserPromptToScrollTime.{Mode}" units="ms" expires_after="2026-01-15"> <owner>liuwilliam@google.com</owner> <owner>adithyas@google.com</owner> <summary> Records the time between when the user submitting input and a scroll - (triggered by scrollTo()) starting. + (triggered by scrollTo()) starting, when the web client is in {Mode}. </summary> - <token key="InputMode"> - <variant name="Audio"/> - <variant name="Text"/> - </token> + <token key="Mode" variants="WebClientMode"/> </histogram> <histogram name="Glic.Session.AttachStateChanges" units="count" @@ -1343,10 +1281,11 @@ <owner>carlosk@chromium.org</owner> <owner>vollick@chromium.org</owner> <summary> - Recorded when an attempt to send context to glic completes. Precisely, this - records the time from the start of a request to the time that data was sent - to glic via glic.mojom, but does not capture any subsequent processing time - by the web client. This is not recorded if sharing fails. + Recorded when an attempt to send an image as context to glic is completed. + Precisely, this records the time from the start of an image context sharing + request until when the data finishes being sent via glic.mojom. It does not + capture any subsequent processing time by the web client. This is not + recorded if sharing fails. </summary> </histogram>
diff --git a/tools/metrics/histograms/metadata/tab/enums.xml b/tools/metrics/histograms/metadata/tab/enums.xml index b915be8..8ced27ee 100644 --- a/tools/metrics/histograms/metadata/tab/enums.xml +++ b/tools/metrics/histograms/metadata/tab/enums.xml
@@ -288,6 +288,7 @@ <int value="7" label="Extensions API"/> <int value="8" label="What's new"/> <int value="9" label="Keyboard shortcut"/> + <int value="10" label="New tab button"/> </enum> <!-- LINT.ThenChange(//chrome/browser/ui/tabs/split_tab_metrics.h:SplitTabCreatedSource) -->
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json index af6fa25f..72f6109b 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -6,7 +6,7 @@ }, "win": { "hash": "c499e55c6d305b3cf70c8cff2c5d9498e43d73ba", - "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/da58fbdf0f14a29a3ccd4f304ccb83ef4940185d/trace_processor_shell.exe" + "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/6a960b04f6e20ace0f0e084be42a660f7ff6490a/trace_processor_shell.exe" }, "linux_arm": { "hash": "46d798c1864490cbb2ee053d6eda436184470e69",
diff --git a/ui/accessibility/accessibility_features.cc b/ui/accessibility/accessibility_features.cc index efae702f..9a2c073 100644 --- a/ui/accessibility/accessibility_features.cc +++ b/ui/accessibility/accessibility_features.cc
@@ -464,6 +464,14 @@ ::features::kReadAnythingDocsLoadMoreButton); } +BASE_FEATURE(kReadAnythingWithReadability, base::FEATURE_DISABLED_BY_DEFAULT); +bool IsReadAnythingWithReadabilityEnabled() { + return base::FeatureList::IsEnabled( + ::features::kReadAnythingReadAloudTSTextSegmentation) && + base::FeatureList::IsEnabled(::features::kReadAnythingWithReadability); + ; +} + // This feature is only for debug purposes and for security/privacy reasons, // should be never enabled by default . BASE_FEATURE(kScreenAIDebugMode, base::FEATURE_DISABLED_BY_DEFAULT);
diff --git a/ui/accessibility/accessibility_features.h b/ui/accessibility/accessibility_features.h index ffbbd42..e2dc8c2 100644 --- a/ui/accessibility/accessibility_features.h +++ b/ui/accessibility/accessibility_features.h
@@ -359,6 +359,10 @@ AX_BASE_EXPORT BASE_DECLARE_FEATURE(kReadAnythingDocsLoadMoreButton); AX_BASE_EXPORT bool IsReadAnythingDocsLoadMoreButtonEnabled(); +// Enable ReadabilityJS as the distillation source for Reading Mode. +AX_BASE_EXPORT BASE_DECLARE_FEATURE(kReadAnythingWithReadability); +AX_BASE_EXPORT bool IsReadAnythingWithReadabilityEnabled(); + // Write some ScreenAI library debug data in /tmp. AX_BASE_EXPORT BASE_DECLARE_FEATURE(kScreenAIDebugMode); AX_BASE_EXPORT bool IsScreenAIDebugModeEnabled();
diff --git a/ui/android/java/src/org/chromium/ui/base/UiAndroidFeatureList.java b/ui/android/java/src/org/chromium/ui/base/UiAndroidFeatureList.java index cc950bb..8e52712f 100644 --- a/ui/android/java/src/org/chromium/ui/base/UiAndroidFeatureList.java +++ b/ui/android/java/src/org/chromium/ui/base/UiAndroidFeatureList.java
@@ -47,11 +47,11 @@ /* defaultValue= */ false, /* defaultValueInTests= */ true); - public static final CachedFlag sFormFactorUseMaxWindowMetrics = + public static final CachedFlag sRefactorMinWidthContextOverride = newCachedFlag( - UiAndroidFeatures.FORM_FACTOR_USE_MAX_WINDOW_METRICS, - /* defaultValue= */ false, - /* defaultValueInTests= */ false); + UiAndroidFeatures.REFACTOR_MIN_WIDTH_CONTEXT_OVERRIDE, + /* defaultValue= */ true, + /* defaultValueInTests= */ true); public static final CachedFlag sReportBottomOverscrolls = newCachedFlag( @@ -64,5 +64,5 @@ sAndroidUseCorrectWindowBounds, sAndroidUseDisplayTopology, sAndroidWindowOcclusion, - sFormFactorUseMaxWindowMetrics); + sRefactorMinWidthContextOverride); }
diff --git a/ui/android/ui_android_feature_map.cc b/ui/android/ui_android_feature_map.cc index 2320626..f8c0ca15 100644 --- a/ui/android/ui_android_feature_map.cc +++ b/ui/android/ui_android_feature_map.cc
@@ -24,7 +24,7 @@ &ui::kCheckIntentCallerPermission, &ui::kDeprecatedExternalPickerFunction, &ui::kDisablePhotoPickerForVideoCapture, - &ui::kFormFactorUseMaxWindowMetrics, + &ui::kRefactorMinWidthContextOverride, &ui::kReportBottomOverscrolls, &ui::kRequireLeadingInTextViewWithLeading, &ui::kSelectFileOpenDocument,
diff --git a/ui/android/ui_android_features.cc b/ui/android/ui_android_features.cc index f71f7b12..06bb509 100644 --- a/ui/android/ui_android_features.cc +++ b/ui/android/ui_android_features.cc
@@ -26,7 +26,8 @@ BASE_FEATURE(kDisablePhotoPickerForVideoCapture, base::FEATURE_ENABLED_BY_DEFAULT); -BASE_FEATURE(kFormFactorUseMaxWindowMetrics, base::FEATURE_DISABLED_BY_DEFAULT); +BASE_FEATURE(kRefactorMinWidthContextOverride, + base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kReportBottomOverscrolls, base::FEATURE_ENABLED_BY_DEFAULT);
diff --git a/ui/android/ui_android_features.h b/ui/android/ui_android_features.h index 92153125..9cb4aa3d 100644 --- a/ui/android/ui_android_features.h +++ b/ui/android/ui_android_features.h
@@ -44,8 +44,8 @@ // Whether photo picker should be disabled for video capture. UI_ANDROID_EXPORT BASE_DECLARE_FEATURE(kDisablePhotoPickerForVideoCapture); -// Whether devices should use max window metrics for form factor check. -UI_ANDROID_EXPORT BASE_DECLARE_FEATURE(kFormFactorUseMaxWindowMetrics); +// Whether to enable the refactor of the smallestScreenWidthDp override. +UI_ANDROID_EXPORT BASE_DECLARE_FEATURE(kRefactorMinWidthContextOverride); // Reports bottom overscrolls on the web page. UI_ANDROID_EXPORT BASE_DECLARE_FEATURE(kReportBottomOverscrolls);
diff --git a/ui/webui/resources/cr_components/composebox/composebox.html.ts b/ui/webui/resources/cr_components/composebox/composebox.html.ts index c8b818a..b5d78bc9 100644 --- a/ui/webui/resources/cr_components/composebox/composebox.html.ts +++ b/ui/webui/resources/cr_components/composebox/composebox.html.ts
@@ -28,6 +28,7 @@ type="search" spellcheck="false" placeholder="${this.inputPlaceholder_}" part="input" + .value="${this.input_}" @input=${this.handleInput_} @scroll="${this.handleScroll_}" @focusin="${this.handleInputFocusIn_}"></textarea>
diff --git a/ui/webui/resources/cr_components/composebox/composebox.ts b/ui/webui/resources/cr_components/composebox/composebox.ts index 560eb06..735beea 100644 --- a/ui/webui/resources/cr_components/composebox/composebox.ts +++ b/ui/webui/resources/cr_components/composebox/composebox.ts
@@ -126,9 +126,15 @@ reflect: true, type: Boolean, }, + + ntpRealboxNextEnabled: { + type: Boolean, + reflect: true, + }, }; } + accessor ntpRealboxNextEnabled: boolean = false; // If isCollapsible is set to true, the composebox will be a pill shape until // it gets focused, at which point it will expand. If false, defaults to the // expanded state. @@ -202,10 +208,7 @@ (this.enableImageContextualSuggestions_ || !file.type.includes('image'))) { // Query autocomplete to get contextual suggestions for files. - this.clearAutocompleteMatches_(); - this.lastQueriedInput_ = this.$.input.value; - this.searchboxHandler_.queryAutocomplete( - this.$.input.value, false); + this.queryAutocomplete(/* clearMatches= */ true); } if (file.type.includes('image') && !this.enableImageContextualSuggestions_) { @@ -221,7 +224,7 @@ ]; this.eventTracker_.add(this.$.input, 'input', () => { - this.submitEnabled_ = this.$.input.value.trim().length > 0; + this.submitEnabled_ = this.input_.trim().length > 0; }); this.eventTracker_.add(this.$.context, 'on-context-files-changed', (e: CustomEvent<{files: number}>) => { @@ -230,7 +233,7 @@ }); this.$.input.focus(); if (this.showZps) { - this.searchboxHandler_.queryAutocomplete(this.$.input.value, false); + this.queryAutocomplete(/* clearMatches= */ false); } this.searchboxHandler_.notifySessionStarted(); @@ -255,10 +258,21 @@ const changedPrivateProperties = changedProperties as Map<PropertyKey, unknown>; + let showDropdownUpdated = changedPrivateProperties.has('showDropdown_'); // When the result initially gets set check if dropdown should show. if (changedPrivateProperties.has('input_') || changedPrivateProperties.has('result_')) { + const prevValue = this.showDropdown_; this.showDropdown_ = this.computeShowDropdown_(); + showDropdownUpdated ||= this.showDropdown_ !== prevValue; + } + if (this.ntpRealboxNextEnabled && showDropdownUpdated) { + this.dispatchEvent( + new CustomEvent('composebox-dropdown-visible-changed', { + bubbles: true, + composed: true, + detail: {value: this.showDropdown_}, + })); } } @@ -275,14 +289,12 @@ // Update the input. const text = this.selectedMatch_.fillIntoEdit; assert(text); - this.$.input.value = text; this.input_ = text; this.submitEnabled_ = true; } } else if (!this.lastQueriedInput_) { // This is for cases when focus leaves the matches/input. // If there was already text in the input do not clear it. - this.$.input.value = ''; this.input_ = ''; this.submitEnabled_ = false; } @@ -303,11 +315,11 @@ } getText() { - return this.$.input.value; + return this.input_; } setText(text: string) { - this.$.input.value = text; + this.input_ = text; } getAndResetContextFiles() { @@ -322,7 +334,11 @@ resetModes() { this.$.context.resetModes(); -} + } + + closeDropdown() { + this.clearAutocompleteMatches_(); + } getSmartComposeForTesting() { return this.smartComposeInlineHint_; @@ -371,9 +387,7 @@ protected deleteContext_(e: CustomEvent<{uuid: UnguessableToken}>) { this.searchboxHandler_.deleteContext(e.detail.uuid); this.$.input.focus(); - this.clearAutocompleteMatches_(); - this.lastQueriedInput_ = this.$.input.value; - this.searchboxHandler_.queryAutocomplete(this.$.input.value, false); + this.queryAutocomplete(/* clearMatches= */ true); } protected async addFileContext_(e: CustomEvent<{ @@ -450,19 +464,15 @@ } protected onCancelClick_() { - if (this.$.input.value.trim().length > 0 || this.contextFilesSize_ > 0) { - this.$.input.value = ''; + if (this.input_.trim().length > 0 || this.contextFilesSize_ > 0) { this.input_ = ''; - this.lastQueriedInput_ = this.input_; this.$.context.resetContextFiles(); this.contextFilesSize_ = 0; this.smartComposeInlineHint_ = ''; this.submitEnabled_ = false; this.searchboxHandler_.clearFiles(); this.$.input.focus(); - this.$.matches.unselect(); - this.clearAutocompleteMatches_(); - this.searchboxHandler_.queryAutocomplete(this.$.input.value, false); + this.queryAutocomplete(/* clearMatches= */ true); } else { this.closeComposebox_(); } @@ -496,9 +506,7 @@ protected async setDeepSearchMode_( e: CustomEvent<{inDeepSearchMode: boolean}>) { this.pageHandler_.setDeepSearchMode(e.detail.inDeepSearchMode); - this.clearAutocompleteMatches_(); - this.lastQueriedInput_ = this.$.input.value; - this.searchboxHandler_.queryAutocomplete(this.$.input.value, false); + this.queryAutocomplete(/* clearMatches= */ true); this.updateInputPlaceholder_(); await this.updateComplete; @@ -508,9 +516,7 @@ protected async setCreateImageMode_( e: CustomEvent<{inCreateImageMode: boolean}>) { this.pageHandler_.setCreateImageMode(e.detail.inCreateImageMode); - this.clearAutocompleteMatches_(); - this.lastQueriedInput_ = this.$.input.value; - this.searchboxHandler_.queryAutocomplete(this.$.input.value, false); + this.queryAutocomplete(/* clearMatches= */ true); this.updateInputPlaceholder_(); await this.updateComplete; @@ -522,19 +528,15 @@ protected handleInput_(e: Event) { const inputElement = e.target as HTMLInputElement; this.input_ = inputElement.value; - this.lastQueriedInput_ = this.input_; - // This is done to stop any in progress providers before requerying - // for on-focus (zero-suggest) inputs. The searchbox doesn't allow - // zero-suggest requests to be made while the ACController is not - // done. - if (this.lastQueriedInput_ === '') { - this.clearAutocompleteMatches_(); - } if (!this.enableImageContextualSuggestions_ && this.$.context.hasImageFiles()) { return; } - this.searchboxHandler_.queryAutocomplete(this.$.input.value, false); + // `clearMatches` is true if input is empty stop any in progress providers + // before requerying for on-focus (zero-suggest) inputs. The searchbox + // doesn't allow zero-suggest requests to be made while the ACController is + // not done. + this.queryAutocomplete(/* clearMatches= */ this.input_ === ''); } protected onKeydown_(e: KeyboardEvent) { @@ -564,9 +566,9 @@ this.$.matches.unselect(); } else if (this.smartComposeEnabled_ && this.smartComposeInlineHint_) { this.input_ = this.input_ + this.smartComposeInlineHint_; - this.$.input.value = this.input_; this.smartComposeInlineHint_ = ''; e.preventDefault(); + this.queryAutocomplete(/* clearMatches= */ true); } return; } @@ -667,7 +669,7 @@ private closeComposebox_() { this.resetModes(); this.fire('close-composebox', { - composeboxText: this.$.input.value, + composeboxText: this.input_, contextFiles: this.getAndResetContextFiles(), }); @@ -697,7 +699,7 @@ e.altKey, e.ctrlKey, e.metaKey, e.shiftKey); } else { this.searchboxHandler_.submitQuery( - this.$.input.value.trim(), (e as MouseEvent).button || 0, e.altKey, + this.input_.trim(), (e as MouseEvent).button || 0, e.altKey, e.ctrlKey, e.metaKey, e.shiftKey); } @@ -756,8 +758,7 @@ if (firstMatch && firstMatch.allowedToBeDefaultMatch) { this.$.matches.selectFirst(); } else if ( - this.$.input.value.trim() && hasMatches && - this.selectedMatchIndex_ >= 0 && + this.input_.trim() && hasMatches && this.selectedMatchIndex_ >= 0 && this.selectedMatchIndex_ < this.result_.matches.length) { // Restore the selection and update the input. Don't restore when the // user deletes all their input and autocomplete is queried or else the @@ -769,7 +770,6 @@ // `onSelectedMatchIndexChanged_` is not called). this.selectedMatch_ = this.result_.matches[this.selectedMatchIndex_]!; this.input_ = this.selectedMatch_.fillIntoEdit; - this.$.input.value = this.input_; } else { this.$.matches.unselect(); } @@ -801,6 +801,17 @@ smartCompose!.scrollTop = this.$.input.scrollTop; } } + + // `queryAutocomplete` updates the `lastQueriedInput_` and makes an + // autocomplete call through the handler. It also optionally clears existing + // matches. + private queryAutocomplete(clearMatches: boolean) { + if (clearMatches) { + this.clearAutocompleteMatches_(); + } + this.lastQueriedInput_ = this.input_; + this.searchboxHandler_.queryAutocomplete(this.input_, false); + } } declare global {
diff --git a/ui/webui/resources/cr_components/searchbox/searchbox.css b/ui/webui/resources/cr_components/searchbox/searchbox.css index 1e4137e..c38b960 100644 --- a/ui/webui/resources/cr_components/searchbox/searchbox.css +++ b/ui/webui/resources/cr_components/searchbox/searchbox.css
@@ -299,11 +299,6 @@ display: none; } -:host-context([dir='rtl']) .searchbox-icon-button { - left: 16px; - right: unset; -} - :host-context([dir='rtl']) .searchbox-icon-button-container { left: 16px; right: unset; @@ -362,14 +357,19 @@ :host([ntp-realbox-next-enabled]) input::placeholder { font-size: 18px; - font-style: normal; - font-weight: 500; + color: var(--color-new-tab-page-composebox-type-ahead); + font-weight: 400; } :host([ntp-realbox-next-enabled]) { --cr-searchbox-border-radius: 26px; --cr-searchbox-dropdown-padding-bottom: 12px; + /* Cannot touch this searchbox icon size var; + it's used by the rainbow outline AI button class in + searchbox_compose_button.css. Should be different + from other searchbox icons (composebox, voice, lens). */ --cr-searchbox-icon-size: 40px; + --cr-searchbox-voice-lens-size: 36px; --text-input-inline-start-spacing: 16px; } @@ -443,14 +443,14 @@ display: none; } -:host([realbox-layout-mode^='Tall']) .searchbox-icon-button { - bottom: 12px; - height: var(--cr-searchbox-icon-size); - padding: 8px 12px; +:host([realbox-layout-mode^='Tall']) .searchbox-icon-button-container { + bottom: 10px; + top: unset; + height: var(--cr-searchbox-voice-lens-size); } -:host([realbox-layout-mode^='Tall']:not([context-files-count_="0"])) #voiceSearchButton, -:host([realbox-layout-mode^='Tall']:not([context-files-count_="0"])) #lensSearchButton { +:host([realbox-layout-mode^='Tall']:not([context-files-count_="0"])) + .searchbox-icon-button-container { display: none; } @@ -461,13 +461,15 @@ top: var(--cr-searchbox-input-padding-top_); } -:host([realbox-layout-mode^='Tall'][compose-button-enabled]) #lensSearchButton { +:host([realbox-layout-mode^='Tall'][compose-button-enabled]) + .searchbox-icon-button-container.lens { inset-inline-end: calc(12px + var(--cr-searchbox-icon-spacing)); } -:host([realbox-layout-mode^='Tall'][searchbox-lens-search-enabled_]) #voiceSearchButton, -:host([realbox-layout-mode^='Tall'][searchbox-lens-search-enabled_]):host-context([dir='rtl']) #voiceSearchButton { - inset-inline-end: calc(12px + var(--cr-searchbox-icon-size) + var(--cr-searchbox-icon-spacing)); +:host([realbox-layout-mode^='Tall'][searchbox-lens-search-enabled_]) + .searchbox-icon-button-container.voice { + inset-inline-end: calc(12px + var(--cr-searchbox-voice-lens-size) + + var(--cr-searchbox-icon-spacing)); } :host-context([realbox-layout-mode^='Tall']) #composeButton { @@ -492,13 +494,19 @@ display: none; } -:host([realbox-layout-mode='Compact'][compose-button-enabled][searchbox-lens-search-enabled_]) #lensSearchButton { +:host([realbox-layout-mode='Compact']) .searchbox-icon-button-container { + top: 10px; +} + +:host([realbox-layout-mode='Compact'][compose-button-enabled] + [searchbox-lens-search-enabled_]) .searchbox-icon-button-container.lens { inset-inline-end: calc(var(--cr-searchbox-icon-spacing) + var(--cr-compose-button-width)); } -:host([realbox-layout-mode='Compact'][compose-button-enabled][searchbox-lens-search-enabled_]) #voiceSearchButton, -:host([realbox-layout-mode='Compact'][compose-button-enabled][searchbox-lens-search-enabled_]):host-context([dir='rtl']) #voiceSearchButton { - inset-inline-end: calc(var(--cr-searchbox-icon-size) + var(--cr-searchbox-icon-spacing) + var(--cr-compose-button-width)); +:host([realbox-layout-mode='Compact'][compose-button-enabled] + [searchbox-lens-search-enabled_]) .searchbox-icon-button-container.voice { + inset-inline-end: calc(var(--cr-searchbox-voice-lens-size) + + var(--cr-searchbox-icon-spacing) + var(--cr-compose-button-width)); } :host([realbox-layout-mode='Compact']) .dropdownContainer {
diff --git a/ui/webui/resources/cr_components/searchbox/searchbox.ts b/ui/webui/resources/cr_components/searchbox/searchbox.ts index fbe05dca..02e60ed 100644 --- a/ui/webui/resources/cr_components/searchbox/searchbox.ts +++ b/ui/webui/resources/cr_components/searchbox/searchbox.ts
@@ -534,6 +534,15 @@ if (changedPrivateProperties.has('thumbnailUrl_')) { this.showThumbnail = !!this.thumbnailUrl_; } + + if (this.ntpRealboxNextEnabled && + changedPrivateProperties.has('dropdownIsVisible')) { + this.dispatchEvent(new CustomEvent('dropdown-visible-changed', { + bubbles: true, + composed: true, + detail: {value: this.dropdownIsVisible}, + })); + } } private computeInputAriaLive_(): string {
diff --git a/ui/webui/resources/cr_components/searchbox/searchbox_match.ts b/ui/webui/resources/cr_components/searchbox/searchbox_match.ts index 905304d2..6c5aeb56d 100644 --- a/ui/webui/resources/cr_components/searchbox/searchbox_match.ts +++ b/ui/webui/resources/cr_components/searchbox/searchbox_match.ts
@@ -267,7 +267,13 @@ /* are_matches_showing */ true, e.button || 0, e.altKey, e.ctrlKey, e.metaKey, e.shiftKey); - this.fire('match-click'); + // Duplicates the logic in `ui::DispositionFromClick()`. + const backgroundTab = (e.metaKey || e.ctrlKey) && e.shiftKey; + // 'match-click' event is used to close the dropdown. Don't do so when + // opening a background tab so users can open multiple matches. + if (!backgroundTab) { + this.fire('match-click'); + } } private onMatchFocusin_() {
diff --git a/v8 b/v8 index 9c21f21..e0c3f9d 160000 --- a/v8 +++ b/v8
@@ -1 +1 @@ -Subproject commit 9c21f2111e58e1c9028fb8a2d1e55b124c52b4c3 +Subproject commit e0c3f9d7300c1d4e74ec3fef3b4964a83e570711